コード例 #1
0
        public static QsiColumnsDeclarationNode CreateAllColumnsDeclaration()
        {
            var columns = new QsiColumnsDeclarationNode();

            columns.Columns.Add(new QsiAllColumnNode());
            return(columns);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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]));
コード例 #7
0
        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);
            }));
        }
コード例 #8
0
        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);
            }));
        }