Exemplo n.º 1
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.º 2
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()