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 e5a061f8893 Change alter table addConstraintSpecification syntax 
(#28177)
e5a061f8893 is described below

commit e5a061f8893b0154e5ee4b40a3aa7f2204532fd3
Author: niu niu <[email protected]>
AuthorDate: Sun Aug 20 07:27:30 2023 +0800

    Change alter table addConstraintSpecification syntax (#28177)
---
 .../src/main/antlr4/imports/oracle/BaseRule.g4     |  2 +-
 .../src/main/antlr4/imports/oracle/DDLStatement.g4 |  2 +-
 .../statement/type/OracleDDLStatementVisitor.java  |  8 +++-
 .../src/main/resources/case/ddl/alter-table.xml    | 48 ++++++++++++++++++++++
 .../resources/sql/supported/ddl/alter-table.xml    |  5 +++
 5 files changed, 61 insertions(+), 4 deletions(-)

diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 1a8384fd8bf..264b6e717b5 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -628,7 +628,7 @@ dataTypeLength
     ;
 
 primaryKey
-    : PRIMARY? KEY
+    : PRIMARY KEY
     ;
 
 exprs
diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 4ba37dcfccd..9874688943d 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -521,7 +521,7 @@ constraintClauses
     ;
 
 addConstraintSpecification
-    : ADD (outOfLineConstraint+ | outOfLineRefConstraint)
+    : ADD (LP_? outOfLineConstraint (COMMA_ outOfLineConstraint)* RP_? | 
outOfLineRefConstraint)
     ;
 
 modifyConstraintClause
diff --git 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index 7ab3f6078f9..ff558c7f537 100644
--- 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -565,8 +565,12 @@ public final class OracleDDLStatementVisitor extends 
OracleStatementVisitor impl
     
     @Override
     public ASTNode visitModifyConstraintClause(final 
ModifyConstraintClauseContext ctx) {
-        return new 
ModifyConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(),
-                (ConstraintSegment) 
visit(ctx.constraintOption().constraintWithName().constraintName()));
+        if (null != ctx.constraintOption().constraintWithName()) {
+            return new 
ModifyConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(),
+                    (ConstraintSegment) 
visit(ctx.constraintOption().constraintWithName().constraintName()));
+        } else {
+            return new 
ModifyConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), null);
+        }
     }
     
     @Override
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 ff488f7d7f2..39f298cc5a2 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
@@ -53,6 +53,54 @@
         </modify-column>
     </alter-table>
     
+    <alter-table sql-case-id="alter_table_modify5">
+        <table name="employee" start-index="12" stop-index="19" />
+        <modify-column>
+            <column-definition start-index="29" stop-index="54">
+                <column name="first_name" />
+            </column-definition>
+        </modify-column>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify6">
+        <table name="employees" start-index="12" stop-index="20" />
+        <modify-column>
+            <column-definition start-index="30" stop-index="44">
+                <column name="emp_ssn" />
+            </column-definition>
+        </modify-column>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify7">
+        <table name="locations" start-index="12" stop-index="20" />
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify8">
+        <table name="employees" start-index="12" stop-index="20" />
+        <modify-column>
+            <column-definition start-index="30" stop-index="66">
+                <column name="salary" />
+            </column-definition>
+        </modify-column>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_add_constraint">
+        <table name="employees" start-index="12" stop-index="20" />
+        <add-constraint constraint-name="emp_emp_id_pk" start-index="27" 
stop-index="76">
+            <primary-key-column name="employee_id" start-index="65" 
stop-index="75" />
+        </add-constraint>
+        <add-constraint constraint-name="emp_dept_fk" start-index="79" 
stop-index="151">
+            <referenced-table start-index="141" stop-index="151" 
name="departments" />
+        </add-constraint>
+        <add-constraint constraint-name="emp_job_fk" start-index="154" 
stop-index="220">
+            <primary-key-column name="employee_id" start-index="165" 
stop-index="174" />
+            <referenced-table start-index="208" stop-index="211" name="jobs" />
+        </add-constraint>
+        <add-constraint constraint-name="emp_manager_fk" start-index="223" 
stop-index="293">
+            <referenced-table start-index="285" stop-index="293" 
name="employees" />
+        </add-constraint>
+    </alter-table>
+    
     <alter-table sql-case-id="alter_table_no_flashback_archive">
         <table name="employee" start-index="12" stop-index="19" />
     </alter-table>
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 96ff4c37530..778ffb0e724 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
@@ -21,6 +21,11 @@
     <sql-case id="alter_table_modify2" value="ALTER TABLE employee MODIFY 
(first_name ENCRYPT SALT)" db-types="Oracle" />
     <sql-case id="alter_table_modify3" value="ALTER TABLE employee MODIFY 
(first_name ENCRYPT)" db-types="Oracle" />
     <sql-case id="alter_table_modify4" value="ALTER TABLE employee MODIFY 
(first_name ENCRYPT NO SALT)" db-types="Oracle" />
+    <sql-case id="alter_table_modify5" value="ALTER TABLE employee MODIFY 
(first_name ENCRYPT 'NOMAC')" db-types="Oracle" />
+    <sql-case id="alter_table_modify6" value="ALTER TABLE employees MODIFY 
(emp_ssn ENCRYPT)" db-types="Oracle" />
+    <sql-case id="alter_table_modify7" value="ALTER TABLE locations MODIFY 
PRIMARY KEY DISABLE CASCADE" db-types="Oracle" />
+    <sql-case id="alter_table_modify8" value="ALTER TABLE employees MODIFY 
(salary ENCRYPT USING 'AES256' 'NOMAC')" db-types="Oracle" />
+    <sql-case id="alter_table_add_constraint" value="ALTER TABLE employees ADD 
(CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id), CONSTRAINT emp_dept_fk 
FOREIGN KEY (department_id) REFERENCES departments, CONSTRAINT emp_job_fk 
FOREIGN KEY (job_id) REFERENCES jobs (job_id), CONSTRAINT emp_manager_fk 
FOREIGN KEY (manager_id) REFERENCES employees)" db-types="Oracle" />
     <sql-case id="alter_table_no_flashback_archive" value="ALTER TABLE 
employee NO FLASHBACK ARCHIVE" db-types="Oracle" />
     <sql-case id="alter_table_move_tablespace_overflow_tablespace" 
value="ALTER TABLE admin_docindex MOVE TABLESPACE admin_tbs2 OVERFLOW 
TABLESPACE admin_tbs3" db-types="Oracle" />
     <sql-case id="alter_table_move_nocompress" value="ALTER TABLE admin_iot5 
MOVE NOCOMPRESS" db-types="Oracle" />

Reply via email to