Esempio n. 1
0
        public static QsiColumnNode VisitWildcardParseNode(WildcardParseNode node)
        {
            var columnNode = new QsiAllColumnNode();

            PTree.RawNode[columnNode] = node;
            return(columnNode);
        }
Esempio n. 2
0
        public static QsiColumnNode VisitTableWildcardParseNode(TableWildcardParseNode node)
        {
            var columnNode = new QsiAllColumnNode();

            if (!string.IsNullOrEmpty(node.Name))
            {
                columnNode.Path = new QsiQualifiedIdentifier(IdentifierVisitor.Visit(node));
            }

            PTree.RawNode[columnNode] = node;

            return(columnNode);
        }
Esempio n. 3
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);
        }
Esempio n. 4
0
        public QsiActionNode VisitInsertSpecificiation(InsertSpecification insertSpecification)
        {
            var node      = new QsiDataInsertActionNode();
            var tableNode = TableVisitor.VisitTableReference(insertSpecification.Target);

            if (tableNode is not QsiTableReferenceNode tableReferenceNode)
            {
                throw new QsiException(QsiError.Syntax);
            }

            node.Target.SetValue(tableReferenceNode);

            if (!ListUtility.IsNullOrEmpty(insertSpecification.Columns))
            {
                node.Columns = insertSpecification.Columns
                               .Select(ExpressionVisitor.VisitColumnReferenceExpression)
                               .Select(c => c.Column.Value switch
                {
                    QsiColumnReferenceNode columnReferenceNode => columnReferenceNode.Name,
                    QsiAllColumnNode allColumnNode => allColumnNode.Path,
                    _ => throw new QsiException(QsiError.Syntax)
                })