private void AddColumnToQueryBlock(OracleQueryBlock queryBlock, string columnName) { foreach (var parentDataObjectReference in AliasCommandHelper.GetParentObjectReferences(queryBlock)) { var parentQueryBlock = parentDataObjectReference.Owner; if (parentQueryBlock.ModelReference?.MeasureExpressionList?.LastTerminalNode != null) { ExecutionContext.SegmentsToReplace.Add( new TextSegment { IndextStart = parentQueryBlock.ModelReference.MeasureExpressionList.LastTerminalNode.Id == Terminals.RightParenthesis ? parentQueryBlock.ModelReference.MeasureExpressionList.LastTerminalNode.SourcePosition.IndexStart : parentQueryBlock.ModelReference.MeasureExpressionList.LastTerminalNode.SourcePosition.IndexEnd + 1, Text = ", " + columnName }); } var isNotReferencedByAsterisk = parentQueryBlock.AsteriskColumns.Count == 0; if (isNotReferencedByAsterisk) { var lastColumn = parentQueryBlock.Columns.LastOrDefault(c => c.HasExplicitDefinition); if (lastColumn != null) { ExecutionContext.SegmentsToReplace.Add( new TextSegment { IndextStart = lastColumn.RootNode.SourcePosition.IndexEnd + 1, Text = ", " + columnName }); } } AddColumnToQueryBlock(parentQueryBlock, columnName); } }
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('"')); } } }