public static QsiColumnsDeclarationNode CreateAllColumnsDeclaration() { var columns = new QsiColumnsDeclarationNode(); columns.Columns.Add(new QsiAllColumnNode()); return(columns); }
public IQsiDefinitionNode VisitViewStatementBody(ViewStatementBody viewStatementBody) { if (viewStatementBody is not(CreateViewStatement or CreateOrAlterViewStatement)) { throw TreeHelper.NotSupportedTree(viewStatementBody); } var node = new SqlServerViewDefinitionNode { IsAlter = viewStatementBody is CreateOrAlterViewStatement, IsMaterialiazed = viewStatementBody.IsMaterialized, WithCheckOption = viewStatementBody.WithCheckOption, ViewOptions = viewStatementBody.ViewOptions?.Select(option => option.OptionKind.ToString()).ToArray(), Identifier = IdentifierVisitor.CreateQualifiedIdentifier(viewStatementBody.SchemaObjectName) }; if (ListUtility.IsNullOrEmpty(viewStatementBody.Columns)) { node.Columns.SetValue(TreeHelper.CreateAllColumnsDeclaration()); } else { var columnsDeclaration = new QsiColumnsDeclarationNode(); columnsDeclaration.Columns.AddRange(TableVisitor.CreateSequentialColumnNodes(viewStatementBody.Columns)); node.Columns.SetValue(columnsDeclaration); } node.Source.SetValue(TableVisitor.VisitSelectStatement(viewStatementBody.SelectStatement)); SqlServerTree.PutFragmentSpan(node, viewStatementBody); return(node); }
public QsiDerivedTableNode VisitCommonTableExpression(CommonTableExpression commonTableExpression) { return(TreeHelper.Create <QsiDerivedTableNode>(n => { n.Source.SetValue(VisitQueryExpression(commonTableExpression.QueryExpression)); var columnsDeclaration = new QsiColumnsDeclarationNode(); if (commonTableExpression.Columns == null || commonTableExpression.Columns.Count == 0) { columnsDeclaration.Columns.Add(new QsiAllColumnNode()); } else { columnsDeclaration.Columns.AddRange(CreateSequentialColumnNodes(commonTableExpression.Columns)); } n.Columns.SetValue(columnsDeclaration); if (commonTableExpression.ExpressionName != null) { n.Alias.SetValue(CreateAliasNode(commonTableExpression.ExpressionName)); } SqlServerTree.PutFragmentSpan(n, commonTableExpression); })); }
public static QsiColumnsDeclarationNode VisitColumnList(ColumnListContext context, QsiSequentialColumnType?sequence) { var node = new QsiColumnsDeclarationNode(); node.Columns.AddRange(context.list.Select(x => CreateColumnNode(x, sequence))); HanaTree.PutContextSpan(node, context); return(node); }
public static QsiTableNode VisitSelectStatement(SelectStatement statement) { var tableNode = new PDerivedTableNode(); var columnsNode = new QsiColumnsDeclarationNode(); tableNode.Hints = statement.Hint?.Hints; RepeatedField <AliasedNode> selects = statement.Select; if (statement.IsUnion && selects.Select(s => s.Node.Unwrap()).TryCast(out IEnumerable <ColumnParseNode> columns)) { columnsNode.Columns.AddRange(CreateSequentialColumns(columns)); } else { columnsNode.Columns.AddRange(selects.Select(VisitAliasedNode)); } tableNode.Columns.SetValue(columnsNode); if (statement.IsUnion) { tableNode.Source.SetValue(VisitSelectStatements(statement.Selects)); } else if (statement.From != null) { tableNode.Source.SetValue(VisitTableNode(statement.From)); } if (statement.Where != null) { tableNode.Where.SetValue(ExpressionVisitor.VisitWhere(statement.Where)); } if (statement.Limit != null || statement.Offset != null) { tableNode.Limit.SetValue(ExpressionVisitor.VisitLimitOffset(statement.Limit, statement.Offset)); } if (statement.OrderBy.Any()) { tableNode.Order.SetValue(ExpressionVisitor.VisitOrderBy(statement.OrderBy)); } // statement.GroupBy // statement.Having PTree.RawNode[tableNode] = statement; return(tableNode); }
public QsiTableNode VisitCreateViewStatement(CreateViewStatement createViewStatement) { return(TreeHelper.Create <QsiDerivedTableNode>(n => { if (createViewStatement.Columns == null || createViewStatement.Columns.Count == 0) { n.Columns.SetValue(TreeHelper.CreateAllColumnsDeclaration()); } else { var columnsDeclaration = new QsiColumnsDeclarationNode(); columnsDeclaration.Columns.AddRange(CreateSequentialColumnNodes(createViewStatement.Columns)); n.Columns.SetValue(columnsDeclaration); } n.Source.SetValue(VisitSelectStatement(createViewStatement.SelectStatement)); n.Alias.SetValue(CreateAliasNode(createViewStatement.SchemaObjectName[^ 1]));
public QsiTableNode VisitInlineDerivedTable(InlineDerivedTable inlineDerivedTable) { return(TreeHelper.Create <QsiInlineDerivedTableNode>(n => { if (inlineDerivedTable.Alias != null) { n.Alias.SetValue(CreateAliasNode(inlineDerivedTable.Alias)); } if (!ListUtility.IsNullOrEmpty(inlineDerivedTable.Columns)) { var columnsDeclaration = new QsiColumnsDeclarationNode(); columnsDeclaration.Columns.AddRange(CreateSequentialColumnNodes(inlineDerivedTable.Columns)); n.Columns.SetValue(columnsDeclaration); } n.Rows.AddRange(inlineDerivedTable.RowValues.Select(ExpressionVisitor.VisitRowValue)); SqlServerTree.PutFragmentSpan(n, inlineDerivedTable); })); }
public QsiDerivedTableNode VisitQuerySpecification(QuerySpecification querySpecification) { return(TreeHelper.Create <QsiDerivedTableNode>(n => { // Ignored HavingClause, GroupByClause, TopRowFilter, UniqueRowFilter, ForClause, OffsetClause var columnsDeclarationNode = new QsiColumnsDeclarationNode(); columnsDeclarationNode.Columns.AddRange(querySpecification.SelectElements.Select(VisitSelectElement)); n.Columns.SetValue(columnsDeclarationNode); if (querySpecification.WhereClause != null) { n.Where.SetValue(VisitWhereClause(querySpecification.WhereClause)); } if (querySpecification.TopRowFilter != null || querySpecification.OffsetClause != null) { n.Limit.SetValue(VisitLimitOffset(querySpecification.TopRowFilter, querySpecification.OffsetClause)); } if (querySpecification.FromClause != null) { n.Source.SetValue(VisitFromClause(querySpecification.FromClause)); } if (querySpecification.OrderByClause != null) { n.Order.SetValue(VisitOrderByClause(querySpecification.OrderByClause)); } if (querySpecification.GroupByClause != null) { n.Grouping.SetValue(VisitGroupByClause(querySpecification.GroupByClause, querySpecification.HavingClause)); } SqlServerTree.PutFragmentSpan(n, querySpecification); })); }