This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 1d16fbe2623 Support parsing SQL Server INSERT INTO sql #29187 (#29983)
1d16fbe2623 is described below

commit 1d16fbe262331cc4b3b250e25a8bf1da1b45f7d3
Author: yydeng626 <[email protected]>
AuthorDate: Sun Feb 4 03:35:53 2024 -0600

    Support parsing SQL Server INSERT INTO sql #29187 (#29983)
---
 .../src/main/antlr4/imports/sqlserver/BaseRule.g4  |  2 +-
 .../main/antlr4/imports/sqlserver/DMLStatement.g4  |  8 +-
 .../statement/SQLServerStatementVisitor.java       | 56 ++++++++----
 .../sql/common/segment/generic/OutputSegment.java  |  9 +-
 .../asserts/segment/output/OutputClauseAssert.java | 22 ++---
 .../segment/impl/output/ExpectedOutputClause.java  |  3 +-
 .../segment/impl/output/ExpectedOutputColumn.java  |  8 +-
 .../parser/src/main/resources/case/dml/delete.xml  | 61 +++++++++----
 .../parser/src/main/resources/case/dml/insert.xml  | 99 ++++++++++++++++++----
 .../parser/src/main/resources/case/dml/update.xml  |  2 +-
 .../main/resources/sql/supported/dml/delete.xml    |  1 +
 .../main/resources/sql/supported/dml/insert.xml    |  3 +
 12 files changed, 194 insertions(+), 80 deletions(-)

diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
index 652be6cd033..de8a1fb31a7 100644
--- a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
+++ b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
@@ -153,7 +153,7 @@ sequenceName
     ;
 
 tableName
-    : (databaseName DOT_)? (owner? DOT_)? name
+    : ((databaseName DOT_)? (owner? DOT_))? name
     ;
 
 queueName
diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
index a5a5f091fae..c57d723ec97 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
+++ 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
@@ -195,7 +195,11 @@ outputClause
     ;
 
 outputWithColumns
-    : outputWithColumn (COMMA_ outputWithColumn)*
+    : (outputWithColumn | scalarExpression) (COMMA_ (outputWithColumn | 
scalarExpression))*
+    ;
+
+scalarExpression
+    : expr (AS? alias)?
     ;
 
 outputWithColumn
@@ -207,7 +211,7 @@ outputWithAaterisk
     ;
 
 outputTableName
-    : (AT_ name) | tableName
+    : tableName
     ;
 
 queryHint
diff --git 
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
 
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
index dd02b2841fd..0aebdcc8858 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
+++ 
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
@@ -43,6 +43,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Col
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNamesContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNamesWithSortContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ConstraintNameContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ConversionFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ConvertFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateTableAsSelectClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CteClauseContext;
@@ -68,6 +69,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Ins
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.InsertExecClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.InsertSelectClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.InsertValuesClauseContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.IntoClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.JoinSpecificationContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.JoinedTableContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.JsonArrayFunctionContext;
@@ -86,7 +88,6 @@ import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Opt
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OrderByClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OrderByItemContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OutputClauseContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OutputTableNameContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OutputWithColumnContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OutputWithColumnsContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OwnerContext;
@@ -99,6 +100,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Qua
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.RegularFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.RegularIdentifierContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SampleOptionContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ScalarExpressionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SchemaNameContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ScriptVariableNameContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SelectClauseContext;
@@ -127,8 +129,6 @@ import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Whe
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WindowFunctionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WithClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WithTableHintContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ConversionFunctionContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.IntoClauseContext;
 import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
 import org.apache.shardingsphere.sql.parser.sql.common.enums.JoinType;
 import org.apache.shardingsphere.sql.parser.sql.common.enums.OrderDirection;
@@ -1170,23 +1170,19 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
         OutputSegment result = new OutputSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex());
         if (null != ctx.outputWithColumns()) {
             OutputWithColumnsContext outputWithColumnsContext = 
ctx.outputWithColumns();
-            List<OutputWithColumnContext> outputWithColumnContexts = 
outputWithColumnsContext.outputWithColumn();
-            Collection<ColumnProjectionSegment> outputColumns = new 
LinkedList<>();
-            for (OutputWithColumnContext each : outputWithColumnContexts) {
-                ColumnSegment column = new 
ColumnSegment(each.start.getStartIndex(), each.stop.getStopIndex(), new 
IdentifierValue(each.name().getText()));
-                ColumnProjectionSegment outputColumn = new 
ColumnProjectionSegment(column);
-                if (null != each.alias()) {
-                    outputColumn.setAlias(new 
AliasSegment(each.alias().start.getStartIndex(), 
each.alias().stop.getStopIndex(), new IdentifierValue(each.name().getText())));
-                }
-                outputColumns.add(outputColumn);
+            ProjectionsSegment outputColumns = new 
ProjectionsSegment(outputWithColumnsContext.start.getStartIndex(), 
outputWithColumnsContext.stop.getStopIndex());
+            if (null != outputWithColumnsContext.outputWithColumn()) {
+                
outputColumns.getProjections().addAll(visitOutputWithColumn(outputWithColumnsContext.outputWithColumn()));
             }
-            result.getOutputColumns().addAll(outputColumns);
+            if (null != outputWithColumnsContext.scalarExpression()) {
+                
outputColumns.getProjections().addAll(visitScalarExpression(outputWithColumnsContext.scalarExpression()));
+            }
+            result.setOutputColumns(outputColumns);
         }
         if (null != ctx.outputTableName()) {
-            OutputTableNameContext outputTableNameContext = 
ctx.outputTableName();
-            TableNameSegment tableName = new 
TableNameSegment(outputTableNameContext.start.getStartIndex(),
-                    outputTableNameContext.stop.getStopIndex(), new 
IdentifierValue(outputTableNameContext.getText()));
-            result.setTableName(tableName);
+            if (null != ctx.outputTableName().tableName()) {
+                result.setTable((SimpleTableSegment) 
visit(ctx.outputTableName().tableName()));
+            }
             if (null != ctx.columnNames()) {
                 ColumnNamesContext columnNames = ctx.columnNames();
                 CollectionValue<ColumnSegment> columns = 
(CollectionValue<ColumnSegment>) visit(columnNames);
@@ -1196,6 +1192,32 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
         return result;
     }
     
+    private Collection<ProjectionSegment> visitOutputWithColumn(final 
List<OutputWithColumnContext> outputWithColumnContexts) {
+        Collection<ProjectionSegment> result = new LinkedList<>();
+        for (OutputWithColumnContext each : outputWithColumnContexts) {
+            ColumnSegment column = new 
ColumnSegment(each.start.getStartIndex(), each.stop.getStopIndex(), new 
IdentifierValue(each.name().getText()));
+            ColumnProjectionSegment outputColumn = new 
ColumnProjectionSegment(column);
+            if (null != each.alias()) {
+                outputColumn.setAlias(new 
AliasSegment(each.alias().start.getStartIndex(), 
each.alias().stop.getStopIndex(), new IdentifierValue(each.alias().getText())));
+            }
+            result.add(outputColumn);
+        }
+        return result;
+    }
+    
+    private Collection<ProjectionSegment> visitScalarExpression(final 
List<ScalarExpressionContext> scalarExpressionContexts) {
+        Collection<ProjectionSegment> result = new LinkedList<>();
+        for (ScalarExpressionContext each : scalarExpressionContexts) {
+            ExpressionProjectionSegment outputColumn = new 
ExpressionProjectionSegment(each.start.getStartIndex(), 
each.stop.getStopIndex(),
+                    getOriginalText(each), (ExpressionSegment) 
visit(each.expr()));
+            if (null != each.alias()) {
+                outputColumn.setAlias(new 
AliasSegment(each.alias().start.getStartIndex(), 
each.alias().stop.getStopIndex(), new IdentifierValue(each.alias().getText())));
+            }
+            result.add(outputColumn);
+        }
+        return result;
+    }
+    
     @Override
     public ASTNode visitInsertValuesClause(final InsertValuesClauseContext 
ctx) {
         SQLServerInsertStatement result = new SQLServerInsertStatement();
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/OutputSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/OutputSegment.java
index ee15c699bf0..80ce766e245 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/OutputSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/OutputSegment.java
@@ -22,8 +22,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.Setter;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -40,9 +40,10 @@ public final class OutputSegment implements SQLSegment {
     private final int stopIndex;
     
     @Setter
-    private TableNameSegment tableName;
+    private SimpleTableSegment table;
     
-    private final Collection<ColumnProjectionSegment> outputColumns = new 
LinkedList<>();
+    @Setter
+    private ProjectionsSegment outputColumns;
     
     private final Collection<ColumnSegment> tableColumns = new LinkedList<>();
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/output/OutputClauseAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/output/OutputClauseAssert.java
index 236449d956c..96b32ee6728 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/output/OutputClauseAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/output/OutputClauseAssert.java
@@ -25,6 +25,8 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSeg
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.projection.ProjectionAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.output.ExpectedOutputClause;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.column.ExpectedColumnProjection;
 
@@ -47,10 +49,10 @@ public final class OutputClauseAssert {
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final OutputSegment actual, final ExpectedOutputClause expected) {
         assertNotNull(expected, assertContext.getText("Output clause should 
exist."));
-        if (!actual.getOutputColumns().isEmpty()) {
-            assertOutputColumnsSegment(assertContext, actual, expected);
+        if (null != actual.getOutputColumns()) {
+            ProjectionAssert.assertIs(assertContext, 
actual.getOutputColumns(), expected.getOutputColumns());
         }
-        if (null != actual.getTableName()) {
+        if (null != actual.getTable()) {
             assertOutputTableSegment(assertContext, actual, expected);
         }
         if (!actual.getTableColumns().isEmpty()) {
@@ -59,25 +61,13 @@ public final class OutputClauseAssert {
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
     
-    private static void assertOutputColumnsSegment(final SQLCaseAssertContext 
assertContext, final OutputSegment actual, final ExpectedOutputClause expected) 
{
-        assertThat(assertContext.getText("Output columns size assertion error: 
"),
-                actual.getOutputColumns().size(), 
is(expected.getOutputColumns().getColumnProjections().size()));
-        int count = 0;
-        for (ColumnProjectionSegment each : actual.getOutputColumns()) {
-            assertOutputColumnSegment(assertContext, each, 
expected.getOutputColumns().getColumnProjections().get(count));
-            count++;
-        }
-    }
-    
     private static void assertOutputColumnSegment(final SQLCaseAssertContext 
assertContext, final ColumnProjectionSegment actual, final 
ExpectedColumnProjection expected) {
         IdentifierValueAssert.assertIs(assertContext, 
actual.getColumn().getIdentifier(), expected, "Output column");
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
     
     private static void assertOutputTableSegment(final SQLCaseAssertContext 
assertContext, final OutputSegment actual, final ExpectedOutputClause expected) 
{
-        assertThat(assertContext.getText("Output table name assertion error: 
"),
-                actual.getTableName().getIdentifier().getValue(), 
is(expected.getOutputTable().getName()));
-        SQLSegmentAssert.assertIs(assertContext, actual.getTableName(), 
expected.getOutputTable());
+        TableAssert.assertIs(assertContext, actual.getTable(), 
expected.getOutputTable());
     }
     
     private static void assertOutputTableColumnSegment(final 
SQLCaseAssertContext assertContext, final OutputSegment actual, final 
ExpectedOutputClause expected) {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputClause.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputClause.java
index 9307c83bb1f..6c8af36317f 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputClause.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputClause.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
 import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.ExpectedProjections;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -35,7 +36,7 @@ public final class ExpectedOutputClause extends 
AbstractExpectedSQLSegment {
     private ExpectedSimpleTable outputTable;
     
     @XmlElement(name = "output-columns")
-    private ExpectedOutputColumn outputColumns;
+    private ExpectedProjections outputColumns;
     
     @XmlElement(name = "output-table-columns")
     private ExpectedOutputTableColumn outputTableColumns;
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputColumn.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputColumn.java
index 490c4743149..cc7beae12b5 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputColumn.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/output/ExpectedOutputColumn.java
@@ -20,7 +20,8 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
 import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.column.ExpectedColumnProjection;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.ExpectedProjection;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.projection.impl.expression.ExpectedExpressionProjection;
 
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
@@ -34,5 +35,8 @@ import java.util.List;
 public final class ExpectedOutputColumn extends AbstractExpectedSQLSegment {
     
     @XmlElement(name = "column-projection")
-    private final List<ExpectedColumnProjection> columnProjections = new 
LinkedList<>();
+    private final List<ExpectedProjection> columnProjections = new 
LinkedList<>();
+    
+    @XmlElement(name = "expression-projection")
+    private final List<ExpectedExpressionProjection> expressionProjections = 
new LinkedList<>();
 }
diff --git a/test/it/parser/src/main/resources/case/dml/delete.xml 
b/test/it/parser/src/main/resources/case/dml/delete.xml
index cc76fb9a78c..8a9beef69c3 100644
--- a/test/it/parser/src/main/resources/case/dml/delete.xml
+++ b/test/it/parser/src/main/resources/case/dml/delete.xml
@@ -226,12 +226,8 @@
         <table name="t_order" start-index="12" stop-index="18" />
         <output start-index="20" stop-index="106">
             <output-columns start-index="27" stop-index="59">
-                <column-projection name="order_id" start-index="27" 
stop-index="42">
-                    <owner name="DELETED" start-index="27" stop-index="33" />
-                </column-projection>
-                <column-projection name="user_id" start-index="45" 
stop-index="59">
-                    <owner name="DELETED" start-index="45" stop-index="51" />
-                </column-projection>
+                <column-projection name="order_id" start-index="27" 
stop-index="42" />
+                <column-projection name="user_id" start-index="45" 
stop-index="59" />
             </output-columns>
             <output-table name="@MyTableVar" start-index="66" stop-index="76" 
/>
             <output-table-columns start-index="78" stop-index="106">
@@ -259,12 +255,8 @@
         <table name="t_order" start-index="12" stop-index="18" />
         <output start-index="20" stop-index="76">
             <output-columns start-index="27" stop-index="59">
-                <column-projection name="order_id" start-index="27" 
stop-index="42">
-                    <owner name="DELETED" start-index="27" stop-index="33" />
-                </column-projection>
-                <column-projection name="user_id" start-index="45" 
stop-index="59">
-                    <owner name="DELETED" start-index="45" stop-index="51" />
-                </column-projection>
+                <column-projection name="order_id" start-index="27" 
stop-index="42" />
+                <column-projection name="user_id" start-index="45" 
stop-index="59" />
             </output-columns>
             <output-table name="@MyTableVar" start-index="66" stop-index="76" 
/>
         </output>
@@ -288,12 +280,8 @@
         <table name="t_order" start-index="12" stop-index="18" />
         <output start-index="20" stop-index="59">
             <output-columns start-index="27" stop-index="59">
-                <column-projection name="order_id" start-index="27" 
stop-index="42">
-                    <owner name="DELETED" start-index="27" stop-index="33" />
-                </column-projection>
-                <column-projection name="user_id" start-index="45" 
stop-index="59">
-                    <owner name="DELETED" start-index="45" stop-index="51" />
-                </column-projection>
+                <column-projection name="order_id" start-index="27" 
stop-index="42" />
+                <column-projection name="user_id" start-index="45" 
stop-index="59" />
             </output-columns>
         </output>
         <where start-index="61" stop-index="78" literal-stop-index="81">
@@ -717,4 +705,41 @@
             </expr>
         </where>
     </delete>
+    
+    <delete sql-case-id="delete_with_output_clause_with_compress_function">
+        <table name="player" start-index="12" stop-index="17" />
+        <output start-index="19" stop-index="134">
+            <output-columns start-index="26" stop-index="109">
+                <column-projection name="id" start-index="26" stop-index="35" 
/>
+                <column-projection name="name" start-index="37" 
stop-index="48" />
+                <column-projection name="surname" start-index="51" 
stop-index="65" />
+                <column-projection name="datemodifier" start-index="67" 
stop-index="86" />
+                <expression-projection text="COMPRESS(deleted.info)" 
start-index="88" stop-index="109">
+                    <function function-name="COMPRESS" 
text="COMPRESS(deleted.info)" start-index="88" stop-index="109">
+                        <parameter>
+                            <column name="info" start-index="97" 
stop-index="108">
+                                <owner name="deleted" start-index="97" 
stop-index="103" />
+                            </column>
+                        </parameter>
+                    </function>
+                </expression-projection>
+            </output-columns>
+            <output-table name="inactivePlayers" start-index="116" 
stop-index="134">
+                <owner name="dbo" start-index="116" stop-index="118" />
+            </output-table>
+        </output>
+        <where start-index="136" stop-index="168">
+            <expr>
+                <binary-operation-expression start-index="142" 
stop-index="168">
+                    <left>
+                        <column name="datemodified" start-index="142" 
stop-index="153" />
+                    </left>
+                    <right>
+                        <column name="@startOfYear" start-index="157" 
stop-index="168" />
+                    </right>
+                    <operator>&lt;</operator>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </delete>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/dml/insert.xml 
b/test/it/parser/src/main/resources/case/dml/insert.xml
index 4ec3125315b..0ab3f1d1e9e 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -1989,12 +1989,8 @@
         </columns>
         <output start-index="40" stop-index="128">
             <output-columns start-index="47" stop-index="81">
-                <column-projection name="order_id" start-index="47" 
stop-index="63">
-                    <owner name="INSERTED" start-index="47" stop-index="54" />
-                </column-projection>
-                <column-projection name="user_id" start-index="66" 
stop-index="81">
-                    <owner name="INSERTED" start-index="66" stop-index="73" />
-                </column-projection>
+                <column-projection name="order_id" start-index="47" 
stop-index="63" />
+                <column-projection name="user_id" start-index="66" 
stop-index="81" />
             </output-columns>
             <output-table name="@MyTableVar" start-index="88" stop-index="98" 
/>
             <output-table-columns start-index="100" stop-index="128">
@@ -2024,12 +2020,8 @@
         </columns>
         <output start-index="40" stop-index="98">
             <output-columns start-index="47" stop-index="81">
-                <column-projection name="order_id" start-index="47" 
stop-index="63">
-                    <owner name="INSERTED" start-index="47" stop-index="54" />
-                </column-projection>
-                <column-projection name="user_id" start-index="66" 
stop-index="81">
-                    <owner name="INSERTED" start-index="66" stop-index="73" />
-                </column-projection>
+                <column-projection name="order_id" start-index="47" 
stop-index="63" />
+                <column-projection name="user_id" start-index="66" 
stop-index="81" />
             </output-columns>
             <output-table name="@MyTableVar" start-index="88" stop-index="98" 
/>
         </output>
@@ -2055,12 +2047,8 @@
         </columns>
         <output start-index="40" stop-index="81">
             <output-columns start-index="47" stop-index="81">
-                <column-projection name="order_id" start-index="47" 
stop-index="63">
-                    <owner name="INSERTED" start-index="47" stop-index="54" />
-                </column-projection>
-                <column-projection name="user_id" start-index="66" 
stop-index="81">
-                    <owner name="INSERTED" start-index="66" stop-index="73" />
-                </column-projection>
+                <column-projection name="order_id" start-index="47" 
stop-index="63" />
+                <column-projection name="user_id" start-index="66" 
stop-index="81" />
             </output-columns>
         </output>
         <values>
@@ -3572,4 +3560,79 @@
             </value>
         </values>
     </insert>
+    
+    <insert sql-case-id="insert_into_tmp_with_exec">
+        <table name="#temp" start-index="12" stop-index="16" />
+        <columns start-index="18" stop-index="325">
+            <column name="id" start-index="19" stop-index="20" />
+            <column name="job_name" start-index="23" stop-index="30" />
+            <column name="job_id" start-index="33" stop-index="38" />
+            <column name="dynamic_filter_login" start-index="41" 
stop-index="60" />
+            <column name="dynamic_filter_hostname" start-index="62" 
stop-index="84" />
+            <column name="dynamic_snapshot_location" start-index="87" 
stop-index="111" />
+            <column name="frequency_type" start-index="113" stop-index="126" />
+            <column name="frequency_interval" start-index="129" 
stop-index="146" />
+            <column name="frequency_subday_type" start-index="149" 
stop-index="169" />
+            <column name="frequency_subday_interval" start-index="171" 
stop-index="195" />
+            <column name="frequency_relative_interval" start-index="198" 
stop-index="224" />
+            <column name="frequency_recurrence_factor" start-index="227" 
stop-index="253" />
+            <column name="active_start_date" start-index="256" 
stop-index="272" />
+            <column name="active_end_date" start-index="275" stop-index="289" 
/>
+            <column name="active_start_time" start-index="292" 
stop-index="308" />
+            <column name="active_end_time" start-index="310" stop-index="324" 
/>
+        </columns>
+        <exec name="sp_helpdynamicsnapshot_job" start-index="327" 
stop-index="357" />
+    </insert>
+    
+    <insert sql-case-id="insert_into_player_with_compress_function">
+        <table name="player" start-index="12" stop-index="17" />
+        <columns start-index="19" stop-index="38">
+            <column name="name" start-index="21" stop-index="24" />
+            <column name="surname" start-index="26" stop-index="32" />
+            <column name="info" start-index="34" stop-index="37" />
+        </columns>
+        <values>
+            <value>
+                <assignment-value>
+                    <literal-expression value="Ovidiu" start-index="48" 
stop-index="56" />
+                </assignment-value>
+                <assignment-value>
+                    <literal-expression value="Cracium" start-index="59" 
stop-index="68" />
+                </assignment-value>
+                <assignment-value>
+                    <function function-name="COMPRESS" 
text="COMPRESS(N'{&quot;sport&quot;:&quot;Tennis&quot;,&quot;age&quot;: 
28,&quot;rank&quot;:1,&quot;points&quot;:15258, &quot;turn&quot;:17}')" 
start-index="70" stop-index="145">
+                        <parameter>
+                            <literal-expression 
value="{&quot;sport&quot;:&quot;Tennis&quot;,&quot;age&quot;: 
28,&quot;rank&quot;:1,&quot;points&quot;:15258, &quot;turn&quot;:17}" 
start-index="79" stop-index="144" />
+                        </parameter>
+                    </function>
+                </assignment-value>
+            </value>
+        </values>
+    </insert>
+    
+    <insert sql-case-id="insert_into_player_with_compress_function_2">
+        <table name="player" start-index="12" stop-index="17" />
+        <columns start-index="19" stop-index="37">
+            <column name="name" start-index="20" stop-index="23" />
+            <column name="surname" start-index="25" stop-index="31" />
+            <column name="info" start-index="33" stop-index="36" />
+        </columns>
+        <values>
+            <value>
+                <assignment-value>
+                    <literal-expression value="Michael" start-index="47" 
stop-index="56" />
+                </assignment-value>
+                <assignment-value>
+                    <literal-expression value="Raheem" start-index="58" 
stop-index="66" />
+                </assignment-value>
+                <assignment-value>
+                    <function function-name="COMPRESS" text="COMPRESS(@info)" 
start-index="68" stop-index="82">
+                        <parameter>
+                            <column name="@info" start-index="77" 
stop-index="81" />
+                        </parameter>
+                    </function>
+                </assignment-value>
+            </value>
+        </values>
+    </insert>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/dml/update.xml 
b/test/it/parser/src/main/resources/case/dml/update.xml
index cc6f683b04f..e06e4a0eb7e 100644
--- a/test/it/parser/src/main/resources/case/dml/update.xml
+++ b/test/it/parser/src/main/resources/case/dml/update.xml
@@ -1792,7 +1792,7 @@
         </set>
         <output start-index="74" stop-index="146">
             <output-table name="@MyTableVar" start-index="136" 
stop-index="146" />
-            <output-columns>
+            <output-columns start-index="81" stop-index="129">
                 <column-projection name="DocumentSummary" start-index="81" 
stop-index="103" />
                 <column-projection name="DocumentSummary" start-index="106" 
stop-index="129" />
             </output-columns>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/delete.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/delete.xml
index dea8fb1a5a9..53c767f89fd 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/delete.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/delete.xml
@@ -43,4 +43,5 @@
     <sql-case id="delete_with_table" value="DELETE product_price_history" 
db-types="Oracle" />
     <sql-case id="delete_with_schema" value="DELETE FROM db1.t_order" />
     <sql-case id="delete_with_simple_condition" value="DELETE FROM 
Q1_2000_sales WHERE amount_sold &lt; 0" db-types="Oracle" />
+    <sql-case id="delete_with_output_clause_with_compress_function" 
value="DELETE FROM player OUTPUT deleted.id,deleted.name, 
deleted.surname,deleted.datemodifier,COMPRESS(deleted.info) INTO 
dbo.inactivePlayers WHERE datemodified &lt; @startOfYear" db-types="SQLServer" 
/>
 </sql-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml 
b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
index 51f78a5bb28..39b2f27aecb 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
@@ -135,4 +135,7 @@
     <sql-case id="insert_with_table_t" value="INSERT INTO #t VALUES (99)" 
db-types="SQLServer"/>
     <sql-case id="insert_with_table_test" value="INSERT INTO ##test VALUES (1, 
1)" db-types="SQLServer"/>
     <sql-case id="insert_into_with_select_number" value="INSERT INTO #test 
SELECT 1" db-types="SQLServer"/>
+    <sql-case id="insert_into_player_with_compress_function" value="INSERT 
INTO player ( name,surname,info) VALUES (N'Ovidiu', 
N'Cracium',COMPRESS(N'{&quot;sport&quot;:&quot;Tennis&quot;,&quot;age&quot;: 
28,&quot;rank&quot;:1,&quot;points&quot;:15258, &quot;turn&quot;:17}'))" 
db-types="SQLServer"/>
+    <sql-case id="insert_into_tmp_with_exec" value="INSERT INTO #temp (id, 
job_name, job_id, dynamic_filter_login,dynamic_filter_hostname, 
dynamic_snapshot_location,frequency_type, frequency_interval, 
frequency_subday_type,frequency_subday_interval, frequency_relative_interval, 
frequency_recurrence_factor, active_start_date, active_end_date, 
active_start_time,active_end_time) EXEC sp_helpdynamicsnapshot_job" 
db-types="SQLServer"/>
+    <sql-case id="insert_into_player_with_compress_function_2" value="INSERT 
INTO player (name,surname,info) VALUES (N'Michael',N'Raheem',COMPRESS(@info))" 
db-types="SQLServer"/>
 </sql-cases>


Reply via email to