Ejemplo n.º 1
0
        public static IQsiTreeNode VisitUpdateStmt(Update_stmtContext context)
        {
            var node     = ImpalaTree.CreateWithSpan <QsiDataUpdateActionNode>(context);
            var wildcard = new QsiAllColumnNode();

            var targetTable = new QsiDerivedTableNode
            {
                Columns =
                {
                    Value       = new QsiColumnsDeclarationNode
                    {
                        Columns =
                        {
                            wildcard
                        }
                    }
                }
            };

            if (context.from is not null)
            {
                if (context.target.children.Count != 1)
                {
                    throw new QsiException(QsiError.SyntaxError, $"'{context.target.GetInputText()}' is not a valid table alias or reference.");
                }

                wildcard.Path            = IdentifierVisitor.VisitDottedPath(context.target);
                targetTable.Source.Value = TableVisitor.VisitFromClause(context.from);
            }
            else
            {
                targetTable.Source.Value = TableVisitor.VisitDottedPath(context.target);
            }

            if (context.where is not null)
            {
                targetTable.Where.Value = ExpressionVisitor.VisitWhereClause(context.where);
            }

            node.Target.Value = targetTable;
            node.SetValues.AddRange(ExpressionVisitor.VisitUpdateSetExprList(context.values));

            return(node);
        }
Ejemplo n.º 2
0
        public static QsiActionNode VisitDeleteStatement(DeleteStatement node)
        {
            var table = TableVisitor.VisitTableNode(node.Table);

            if (node.Where != null || node.OrderBy.Any() || node.Limit != null)
            {
                var derivedTable = new QsiDerivedTableNode();

                derivedTable.Columns.SetValue(TreeHelper.CreateAllColumnsDeclaration());
                derivedTable.Source.SetValue(table);

                if (node.Where != null)
                {
                    derivedTable.Where.SetValue(ExpressionVisitor.VisitWhere(node.Where));
                }

                if (node.OrderBy.Any())
                {
                    derivedTable.Order.SetValue(ExpressionVisitor.VisitOrderBy(node.OrderBy));
                }

                if (node.Limit != null)
                {
                    derivedTable.Limit.SetValue(ExpressionVisitor.VisitLimitOffset(node.Limit, null));
                }

                table = derivedTable;
            }

            var deleteAction = new PDeleteActionNode
            {
                Hints = node.Hint?.Hints
            };

            deleteAction.Target.SetValue(table);

            PTree.RawNode[deleteAction] = node;

            return(deleteAction);
        }
Ejemplo n.º 3
0
        public static QsiActionNode VisitDeleteStatement(DeleteStatementContext context)
        {
            var derivedNode = new QsiDerivedTableNode();

            var withClause        = context.withClause();
            var whereClause       = context.whereClause();
            var tableAliasRefList = context.tableAliasRefList();

            if (withClause != null)
            {
                derivedNode.Directives.SetValue(TableVisitor.VisitWithClause(withClause));
            }

            if (whereClause != null)
            {
                derivedNode.Where.SetValue(ExpressionVisitor.VisitWhereClause(whereClause));
            }

            if (tableAliasRefList != null)
            {
                var tableReferenceList = context.tableReferenceList();

                (QsiQualifiedIdentifier Identifier, bool Wildcard)[] aliases = tableAliasRefList.tableRefWithWildcard()
Ejemplo n.º 4
0
        public static QsiDerivedTableNode VisitWithListElement(WithListElementContext context)
        {
            var node = new QsiDerivedTableNode();

            node.Alias.SetValue(new QsiAliasNode
            {
                Name = context.name.qi
            });

            var columnListClause = context.columnListClause();

            node.Columns.SetValue(
                columnListClause != null ?
                VisitColumnListClause(columnListClause, QsiSequentialColumnType.Default) :
                TreeHelper.CreateAllColumnsDeclaration()
                );

            node.Source.SetValue(VisitSubquery(context.subquery()));

            HanaTree.PutContextSpan(node, context);

            return(node);
        }
Ejemplo n.º 5
0
        public static IQsiDefinitionNode VisitCreateViewStatement(CreateTableStatement statement)
        {
            var node = new PViewDefinitionNode
            {
                Identifier = IdentifierVisitor.Visit(statement.TableName)
            };

            if (statement.ColumnDefs.Any())
            {
                node.DynamicColumns = new QsiColumnsDeclarationNode();
                node.DynamicColumns.Columns.AddRange(statement.ColumnDefs.Select(TableVisitor.VisitDynamicColumn));
            }

            QsiTableNode tableNode = TreeHelper.Create <QsiTableReferenceNode>(n =>
            {
                n.Identifier     = IdentifierVisitor.Visit(statement.BaseTableName);
                PTree.RawNode[n] = statement.BaseTableName;
            });

            if (statement.WhereClause != null)
            {
                var derivedTableNode = new QsiDerivedTableNode();
                derivedTableNode.Columns.Value = TreeHelper.CreateAllColumnsDeclaration();
                derivedTableNode.Where.Value   = ExpressionVisitor.VisitWhere(statement.WhereClause);
                derivedTableNode.Source.Value  = tableNode;

                node.Source.Value = derivedTableNode;
            }
            else
            {
                node.Source.Value = tableNode;
            }

            PTree.RawNode[node] = statement;

            return(node);
        }