You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by lu...@apache.org on 2020/10/23 03:25:22 UTC

[shardingsphere] branch master updated: Add top grammar support for SQLServer delete statement. (#7895)

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

lujingshang 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 d8aac6d  Add top grammar support for SQLServer delete statement. (#7895)
d8aac6d is described below

commit d8aac6d8b5a0dcdea934e39d71fbe9e2e1c795d6
Author: Zonglei Dong <do...@apache.org>
AuthorDate: Fri Oct 23 11:24:54 2020 +0800

    Add top grammar support for SQLServer delete statement. (#7895)
    
    * Add top grammar support for SQLServer delete statement.
    
    * Add sql test case for SQLServer delete top grammar.
---
 .../main/antlr4/imports/sqlserver/DMLStatement.g4  |  2 +-
 .../src/main/resources/case/dml/delete.xml         | 32 ++++++++++++++++++++++
 .../main/resources/sql/supported/dml/delete.xml    |  2 ++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
index 840e26d..960ba98 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
@@ -57,7 +57,7 @@ assignmentValue
     ;
 
 delete
-    : DELETE (singleTableClause | multipleTablesClause) outputClause? whereClause?
+    : DELETE top? (singleTableClause | multipleTablesClause) outputClause? whereClause?
     ;
 
 singleTableClause
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
index c81dfcd..b26ebaf 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
@@ -265,4 +265,36 @@
             </and-predicate>
         </where>
     </delete>
+
+    <delete sql-case-id="delete_with_top" parameters="1000">
+        <table name="t_order" start-index="20" stop-index="26" />
+        <where start-index="28" stop-index="45" literal-stop-index="48">
+            <and-predicate>
+                <predicate start-index="34" stop-index="45" literal-stop-index="48">
+                    <column-left-value name="order_id" start-index="34" stop-index="41" />
+                    <operator type="=" />
+                    <compare-right-value>
+                        <parameter-marker-expression value="0" start-index="45" stop-index="45" />
+                        <literal-expression value="1000" start-index="45" stop-index="48" />
+                    </compare-right-value>
+                </predicate>
+            </and-predicate>
+        </where>
+    </delete>
+
+    <delete sql-case-id="delete_with_top_percent" parameters="1000">
+        <table name="t_order" start-index="28" stop-index="34" />
+        <where start-index="36" stop-index="53" literal-stop-index="56">
+            <and-predicate>
+                <predicate start-index="42" stop-index="53" literal-stop-index="56">
+                    <column-left-value name="order_id" start-index="42" stop-index="49" />
+                    <operator type="=" />
+                    <compare-right-value>
+                        <parameter-marker-expression value="0" start-index="53" stop-index="53" />
+                        <literal-expression value="1000" start-index="53" stop-index="56" />
+                    </compare-right-value>
+                </predicate>
+            </and-predicate>
+        </where>
+    </delete>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml
index e8672ed..0c393f3 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/dml/delete.xml
@@ -28,4 +28,6 @@
     <sql-case id="delete_with_output_clause_without_output_table_columns" value="DELETE FROM t_order OUTPUT DELETED.order_id, DELETED.user_id INTO @MyTableVar WHERE order_id = ?" db-types="SQLServer" />
     <sql-case id="delete_with_output_clause_without_output_table" value="DELETE FROM t_order OUTPUT DELETED.order_id, DELETED.user_id WHERE order_id = ?" db-types="SQLServer" />
     <sql-case id="delete_with_output_clause_column_shorthand" value="DELETE FROM t_order OUTPUT DELETED.* WHERE order_id = ?" db-types="SQLServer" />
+    <sql-case id="delete_with_top" value="DELETE TOP(10) FROM t_order WHERE order_id = ?" db-types="SQLServer" />
+    <sql-case id="delete_with_top_percent" value="DELETE TOP(10) PERCENT FROM t_order WHERE order_id = ?" db-types="SQLServer" />
 </sql-cases>