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" />