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()
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) })