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 6b43f07dcc5 Support parser SQLServer edge constraint clauses (#30313)
6b43f07dcc5 is described below

commit 6b43f07dcc53645b752c8ff57bc8283de7c98ffc
Author: mengzhishang <[email protected]>
AuthorDate: Tue Feb 27 15:48:16 2024 +0800

    Support parser SQLServer edge constraint clauses (#30313)
    
    * Support parser SQLServer edge constraint clauses
    
    * Add empty line at the end of file
    
    * Fix parser SQLServer edge constraint
---
 .../src/main/antlr4/imports/sqlserver/DDLStatement.g4          | 10 +++++++++-
 .../sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4     |  4 ++++
 test/it/parser/src/main/resources/case/ddl/alter-table.xml     |  8 ++++++++
 test/it/parser/src/main/resources/case/ddl/create-table.xml    |  8 ++++++++
 .../src/main/resources/sql/supported/ddl/alter-table.xml       |  2 ++
 .../src/main/resources/sql/supported/ddl/create-table.xml      |  1 +
 6 files changed, 32 insertions(+), 1 deletion(-)

diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
index 9d02be374f2..cd4d9fbee8a 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
+++ 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DDLStatement.g4
@@ -318,7 +318,15 @@ columnSetDefinition
     ;
 
 tableConstraint 
-    : (CONSTRAINT constraintName)? (tablePrimaryConstraint | 
tableForeignKeyConstraint | checkConstraint)
+    : (CONSTRAINT constraintName)? (tablePrimaryConstraint | 
tableForeignKeyConstraint | checkConstraint | edgeConstraint)
+    ;
+
+edgeConstraint
+    : connectionClause (ON DELETE (NO ACTION | CASCADE))?
+    ;
+
+connectionClause
+    : CONNECTION LP_ (nodeAlias TO nodeAlias) (COMMA_ nodeAlias TO 
nodeAlias)*? RP_
     ;
 
 tablePrimaryConstraint
diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4
index 90b39ae64e3..1c203a54091 100644
--- a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4
+++ b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Keyword.g4
@@ -823,3 +823,7 @@ BOTH
 TRAILING
     : T R A I L I N G
     ;
+
+CONNECTION
+    : C O N N E C T I O N
+    ;
diff --git a/test/it/parser/src/main/resources/case/ddl/alter-table.xml 
b/test/it/parser/src/main/resources/case/ddl/alter-table.xml
index 1fd9f5bdae0..7e57f79de1a 100644
--- a/test/it/parser/src/main/resources/case/ddl/alter-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/alter-table.xml
@@ -1788,4 +1788,12 @@
             </index-column>
         </add-constraint>
     </alter-table>
+
+    <alter-table sql-case-id="alter_table_add_edge_constraints">
+        <table name="bought" start-index="12" stop-index="17"/>
+    </alter-table>
+
+    <alter-table sql-case-id="alter_table_drop_edge_constraints">
+        <table name="bought" start-index="12" stop-index="17"/>"
+    </alter-table>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/ddl/create-table.xml 
b/test/it/parser/src/main/resources/case/ddl/create-table.xml
index f6502fca603..007b732482a 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-table.xml
@@ -2383,4 +2383,12 @@
             <owner name="hr" start-index="13" stop-index="14"/>
         </table>
     </create-table>
+
+    <create-table sql-case-id="create_table_with_edge_constraint">
+        <table name="bought" start-index="13" stop-index="18" />
+        <column-definition type="INT" start-index="22" stop-index="38">
+            <column name="PurchaseCount" />
+        </column-definition>
+        <constraint-definition constraint-name="EC_BOUGHT" start-index="41" 
stop-index="113"/>
+    </create-table>
 </sql-parser-test-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
index 9e9e5cdd870..faf218f2d72 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
@@ -246,4 +246,6 @@
     <sql-case id="alter_table_set_interval" value="ALTER TABLE transactions 
SET INTERVAL()" db-types="Oracle" />
     <sql-case id="alter_table_add_primary_key_xmldata" value="ALTER TABLE 
xwarehouses ADD (PRIMARY KEY(XMLDATA.&quot;WarehouseId&quot;))" 
db-types="Oracle" />
     <sql-case id="alter_table_add_unique" value="ALTER TABLE xwarehouses ADD 
(UNIQUE(XMLDATA.&quot;WarehouseId&quot;))" db-types="Oracle" />
+    <sql-case id="alter_table_add_edge_constraints" value="ALTER TABLE bought 
ADD CONSTRAINT EC_BOUGHT1 CONNECTION (Customer TO Product, Supplier TO 
Product);" db-types="SQLServer"/>
+    <sql-case id="alter_table_drop_edge_constraints" value="ALTER TABLE bought 
DROP CONSTRAINT EC_BOUGHT;" db-types="SQLServer"/>
 </sql-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
index 37ab8ee9706..57ada314427 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
@@ -322,4 +322,5 @@
     <sql-case id="create_table_with_result_cache_annotations" value="CREATE 
TABLE foo (a NUMBER, b VARCHAR2(20)) RESULT_CACHE (MODE FORCE);" 
db-types="Oracle"/>
     <sql-case id="create_table_with_as_sub_query" value="CREATE TABLE 
employees_temp AS SELECT * FROM EMPLOYEES;" db-types="Oracle"/>
     <sql-case id="create_table_parallel_with_as_sub_query" value="CREATE TABLE 
hr.admin_emp_dept PARALLEL COMPRESS AS SELECT * FROM hr.employees WHERE 
department_id = 10;" db-types="Oracle"/>
+    <sql-case id="create_table_with_edge_constraint" value="CREATE TABLE 
bought ( PurchaseCount INT ,CONSTRAINT EC_BOUGHT CONNECTION (Customer TO 
Product) ON DELETE NO ACTION ) AS EDGE;" db-types="SQLServer"/>
 </sql-cases>

Reply via email to