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><</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'{"sport":"Tennis","age":
28,"rank":1,"points":15258, "turn":17}')"
start-index="70" stop-index="145">
+ <parameter>
+ <literal-expression
value="{"sport":"Tennis","age":
28,"rank":1,"points":15258, "turn":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 < 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 < @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'{"sport":"Tennis","age":
28,"rank":1,"points":15258, "turn":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>