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."WarehouseId"))"
db-types="Oracle" />
<sql-case id="alter_table_add_unique" value="ALTER TABLE xwarehouses ADD
(UNIQUE(XMLDATA."WarehouseId"))" 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>