private static void AddColumnAliasNodesToReplace(ICollection <TextSegment> segmentsToReplace, OracleQueryBlock queryBlock, StatementGrammarNode currentNode) { var column = queryBlock.Columns.SingleOrDefault(c => c.HasExplicitDefinition && c.IsDirectReference && c.RootNode.Terminals.Any(t => t == currentNode)); if (column == null) { return; } foreach (var terminal in FindUsagesCommand.GetParentQueryBlockColumnUsages(column)) { segmentsToReplace.Add (new TextSegment { IndextStart = terminal.SourcePosition.IndexStart, Length = terminal.SourcePosition.Length, Text = currentNode.PrecedingTerminal.Token.Value }); } segmentsToReplace.Add( new TextSegment { IndextStart = currentNode.SourcePosition.IndexStart, Length = currentNode.SourcePosition.Length, Text = String.Empty }); }
protected override void Execute() { var commandHelper = new AliasCommandHelper(ExecutionContext); foreach (var column in _unquotableColumns) { var unquotedColumnAlias = column.NormalizedName.Trim('"'); if (column.HasExplicitAlias || String.Equals(column.NormalizedName.ToSimpleIdentifier(), unquotedColumnAlias)) { foreach (var terminal in FindUsagesCommand.GetParentQueryBlockColumnUsages(column)) { ExecutionContext.SegmentsToReplace.Add( new TextSegment { IndextStart = terminal.SourcePosition.IndexStart, Length = terminal.SourcePosition.Length, Text = unquotedColumnAlias }); } ExecutionContext.SegmentsToReplace.Add( new TextSegment { IndextStart = column.AliasNode.SourcePosition.IndexStart, Length = column.AliasNode.SourcePosition.Length, Text = unquotedColumnAlias }); } else { commandHelper.AddColumnAlias(column.RootNode, column.Owner, column.NormalizedName, unquotedColumnAlias); } } foreach (var unquotableObject in _unquotableObjects) { if (unquotableObject.AliasNode != null) { var unquotedObjectAlias = unquotableObject.AliasNode.Token.Value.Trim('"'); ExecutionContext.SegmentsToReplace.Add( new TextSegment { IndextStart = unquotableObject.AliasNode.SourcePosition.IndexStart, Length = unquotableObject.AliasNode.SourcePosition.Length, Text = unquotedObjectAlias }); var columnReferences = unquotableObject.Owner == null ? unquotableObject.Container.ColumnReferences : unquotableObject.Owner.AllColumnReferences; var referenceColumnObjectNodes = columnReferences .Where(r => r.ObjectNode != null && r.ValidObjectReference == unquotableObject) .Select(r => r.ObjectNode); foreach (var objectNode in referenceColumnObjectNodes) { ExecutionContext.SegmentsToReplace.Add( new TextSegment { IndextStart = objectNode.SourcePosition.IndexStart, Length = objectNode.SourcePosition.Length, Text = unquotedObjectAlias }); } } else { commandHelper.AddObjectAlias(unquotableObject, unquotableObject.ObjectNode.Token.Value.Trim('"')); } } }