Exemplo n.º 1
0
        public CommonInsertContext(InsertStatementContext context)
        {
            Start                 = context.Start;
            Stop                  = context.Stop;
            TableRef              = context.tableRef();
            UsePartition          = context.usePartition();
            InsertFromConstructor = context.insertFromConstructor();
            UpdateList            = context.updateList();
            InsertQueryExpression = context.insertQueryExpression();
            ValuesReference       = context.valuesReference();
            InsertUpdateList      = context.insertUpdateList();

            if (context.HasToken(IGNORE_SYMBOL))
            {
                ConflictBehavior = QsiDataConflictBehavior.Ignore;
            }
            else if (InsertUpdateList != null)
            {
                ConflictBehavior = QsiDataConflictBehavior.Update;
            }
            else
            {
                ConflictBehavior = QsiDataConflictBehavior.None;
            }
        }
Exemplo n.º 2
0
        public static QsiDataInsertActionNode VisitInsertStatement(InsertStatementContext context)
        {
            var partitionRestriction = context.partitionRestriction();
            var columnListClause     = context.columnListClause();
            var hintClause           = context.hintClause();
            var valueListClause      = context.valueListClause();

            var tableNode = new HanaTableReferenceNode
            {
                Identifier = context.tableName().qqi
            };

            if (partitionRestriction != null)
            {
                tableNode.Partition.SetValue(TreeHelper.Fragment(partitionRestriction.GetInputText()));
            }

            var node = new HanaDataInsertActionNode
            {
                Target = { Value = tableNode }
            };

            if (columnListClause != null)
            {
                node.Columns = columnListClause.list
                               .Select(x => new QsiQualifiedIdentifier(x[^ 1]))
Exemplo n.º 3
0
        public static InsertQueryInfo VisitInsertStatement(InsertStatementContext context)
        {
            var queryInfo = new InsertQueryInfo
            {
                IgnoreDuplicate = context.IGNORE() != null,
                TableName       = VisitTableName(context.tableName()),
                Columns         = context.columns?.uid().Select(uid => GetSinglePartName(uid.GetText(), "Column")).ToArray() ?? Array.Empty <string>()
            };

            VisitInsertStatementValue(context.insertStatementValue(), queryInfo);

            return(queryInfo);
        }
Exemplo n.º 4
0
        public InsertStatement ParseInsertStatement(InsertStatementContext node)
        {
            InsertStatement statement = new InsertStatement();

            foreach (var child in node.children)
            {
                if (child is TableNameContext tableName)
                {
                    statement.TableName = this.ParseTableName(tableName);
                }
                else if (child is UidListContext columns)
                {
                    foreach (var col in columns.children)
                    {
                        if (col is UidContext colId)
                        {
                            TokenInfo tokenInfo = new TokenInfo(colId)
                            {
                                Type = TokenType.ColumnName
                            };

                            statement.Columns.Add(this.ParseColumnName(colId));
                        }
                    }
                }
                else if (child is InsertStatementValueContext values)
                {
                    foreach (var v in values.children)
                    {
                        if (v is ExpressionsWithDefaultsContext exp)
                        {
                            foreach (var expChild in exp.children)
                            {
                                if (expChild is ExpressionOrDefaultContext value)
                                {
                                    TokenInfo valueInfo = new TokenInfo(value);

                                    statement.Values.Add(valueInfo);
                                }
                            }
                        }
                    }
                }
            }

            return(statement);
        }
Exemplo n.º 5
0
        public static QsiActionNode VisitInsertStatement(InsertStatementContext context)
        {
            var node = new CqlDataInsertActionNode();
            UsingClauseContext usingClause;
            bool ifNotExists;

            node.Target.SetValue(TableVisitor.VisitColumnFamilyName(context.cf));

            if (context.st1 != null)
            {
                node.Columns = context.st1.cidentList().list
                               .Select(i => new QsiQualifiedIdentifier(i))
                               .ToArray();

                var rowNode = new QsiRowValueExpressionNode();
                rowNode.ColumnValues.AddRange(context.st1._values.Select(ExpressionVisitor.VisitTerm));
                // TODO: CqlTree.PutContextSpan(rowNode, context.st1...);

                node.Values.Add(rowNode);

                ifNotExists = context.st1.ifNotExists;
                usingClause = context.st1.usingClause();
            }
            else
            {
                var jsonValue = context.st2.jsonValue().s.raw;
                (QsiQualifiedIdentifier[] columns, var row) = JsonToRowValue(jsonValue);

                node.Columns = columns;
                node.Values.Add(row);
                node.DefaultValue = context.st2.defaultValue;

                ifNotExists = context.st2.ifNotExists;
                usingClause = context.st2.usingClause();
            }

            node.ConflictBehavior = ifNotExists ? QsiDataConflictBehavior.None : QsiDataConflictBehavior.Update;

            if (usingClause != null)
            {
                node.Usings.SetValue(ExpressionVisitor.VisitUsingClause(context.st2.usingClause()));
            }

            CqlTree.PutContextSpan(node, context);

            return(node);
        }
Exemplo n.º 6
0
        public static QsiActionNode VisitInsertStatement(InsertStatementContext context)
        {
            var node = new QsiDataInsertActionNode
            {
                ConflictBehavior = context.IGNORE() != null ? QsiDataConflictBehavior.Ignore : QsiDataConflictBehavior.None
            };

            if (context.tableName() == null)
            {
                throw new QsiException(QsiError.Syntax);
            }

            node.Target.SetValue(TableVisitor.VisitTableName(context.tableName()));

            switch (context.insertStatementValue())
            {
            case SubqueryInsertStatementContext _:
            {
                throw TreeHelper.NotSupportedFeature("subquery insert");
            }

            case ExpressionInsertStatementContext expressionContext:
            {
                if (context.columns != null)
                {
                    node.Columns = context.columns.uid()
                                   .Select(i => new QsiQualifiedIdentifier(IdentifierVisitor.VisitUid(i)))
                                   .ToArray();
                }

                IEnumerable <QsiRowValueExpressionNode> rows = expressionContext
                                                               .expressionsWithDefaults()
                                                               .Select(ExpressionVisitor.VisitExpressionsWithDefaults);

                node.Values.AddRange(rows);
                break;
            }

            case JsonInsertStatementContext jsonContext:
            {
                (JObject, JsonObjectContext x)[] objects = jsonContext.jsonObject()