This is an automated email from the ASF dual-hosted git repository.
panjuan 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 6deaf9301d0 Add rules for oracle alter type. (#27552)
6deaf9301d0 is described below
commit 6deaf9301d0c4f1b24a42c411a9ab250cf7f0bcf
Author: boyjoy1127 <[email protected]>
AuthorDate: Sat Jul 29 15:15:23 2023 +0800
Add rules for oracle alter type. (#27552)
---
.../src/main/antlr4/imports/oracle/DDLStatement.g4 | 14 ++++++--
.../src/main/antlr4/imports/oracle/Keyword.g4 | 12 +++++++
.../src/main/resources/case/ddl/alter-type.xml | 11 ++++++
.../resources/sql/supported/ddl/alter-type.xml | 40 ++++++++++++++++------
4 files changed, 65 insertions(+), 12 deletions(-)
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 a15674267f5..5f002e85d56 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
@@ -3649,12 +3649,22 @@ subprogramSpec
: (MEMBER | STATIC) (procedureSpec | functionSpec)
;
+constructorSpec
+ : FINAL? INSTANTIABLE? CONSTRUCTOR FUNCTION typeName
+ (LP_ (SELF IN OUT dataType COMMA_)? parameterValue dataType (COMMA_
parameterValue dataType)* RP_)?
+ RETURN SELF AS RESULT ((AS | IS) callSpec)?
+ ;
+
+mapOrderFunctionSpec
+ : (MAP | ORDER) MEMBER functionSpec
+ ;
+
elementSpecification
- : inheritanceClauses? (subprogramSpec)+
+ : inheritanceClauses? (subprogramSpec | constructorSpec |
mapOrderFunctionSpec)+
;
replaceTypeClause
- : REPLACE invokerRightsClause? AS OBJECT LP_ (attributeName dataType
(COMMA_ attributeName dataType)* (COMMA_ elementSpecification)*) RP_
+ : REPLACE invokerRightsClause? AS OBJECT LP_ (attributeName dataType
(COMMA_ (elementSpecification | attributeName dataType))*) RP_
;
alterType
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Keyword.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Keyword.g4
index a73e19ff15f..f51bb79ab10 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Keyword.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Keyword.g4
@@ -119,10 +119,22 @@ FUNCTION
: F U N C T I O N
;
+CONSTRUCTOR
+ : C O N S T R U C T O R
+ ;
+
+RESULT
+ : R E S U L T
+ ;
+
TRIGGER
: T R I G G E R
;
+MAP
+ : M A P
+ ;
+
PROCEDURE
: P R O C E D U R E
;
diff --git a/test/it/parser/src/main/resources/case/ddl/alter-type.xml
b/test/it/parser/src/main/resources/case/ddl/alter-type.xml
index c20e0a09a1b..6f9b45dd40b 100644
--- a/test/it/parser/src/main/resources/case/ddl/alter-type.xml
+++ b/test/it/parser/src/main/resources/case/ddl/alter-type.xml
@@ -23,6 +23,8 @@
<alter-type sql-case-id="alter_type_add_attribute" />
<alter-type sql-case-id="alter_type_add_value" />
<alter-type sql-case-id="alter_type_rename_value" />
+ <alter-type sql-case-id="alter_type_default" />
+ <alter-type sql-case-id="alter_type_schema_name" />
<alter-type sql-case-id="alter_type_compile" />
<alter-type sql-case-id="alter_type_debug" />
<alter-type sql-case-id="alter_type_spec" />
@@ -46,4 +48,13 @@
<alter-type sql-case-id="alter_type_replace_element_final_static_function"
/>
<alter-type
sql-case-id="alter_type_replace_element_instantiable_static_function" />
<alter-type
sql-case-id="alter_type_replace_element_not_instantiable_static_function" />
+ <alter-type
sql-case-id="alter_type_replace_element_constructor_function_single_parameter"
/>
+ <alter-type
sql-case-id="alter_type_replace_element_constructor_function_multi_parameter" />
+ <alter-type
sql-case-id="alter_type_replace_element_constructor_final_function" />
+ <alter-type
sql-case-id="alter_type_replace_element_constructor_instantiable_function" />
+ <alter-type
sql-case-id="alter_type_replace_element_constructor_function_inout" />
+ <alter-type
sql-case-id="alter_type_replace_element_constructor_function_as_call" />
+ <alter-type
sql-case-id="alter_type_replace_element_constructor_function_is_call" />
+ <alter-type sql-case-id="alter_type_replace_element_map_function" />
+ <alter-type sql-case-id="alter_type_replace_element_order_function" />
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/ddl/alter-type.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/alter-type.xml
index 7e57bd1ddff..97901ec267f 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/alter-type.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/alter-type.xml
@@ -23,6 +23,8 @@
<sql-case id="alter_type_add_attribute" value="ALTER TYPE usr1.compfoo1
ADD ATTRIBUTE f3 int;" db-types="openGauss,PostgreSQL" />
<sql-case id="alter_type_add_value" value="ALTER TYPE bugstatus ADD VALUE
IF NOT EXISTS 'regress' BEFORE 'closed';" db-types="openGauss,PostgreSQL" />
<sql-case id="alter_type_rename_value" value="ALTER TYPE bugstatus RENAME
VALUE 'create' TO 'new';" db-types="openGauss,PostgreSQL" />
+ <sql-case id="alter_type_default" value="ALTER TYPE type_name"
db-types="Oracle" />
+ <sql-case id="alter_type_schema_name" value="ALTER TYPE
schema_name.type_name" db-types="Oracle" />
<sql-case id="alter_type_compile" value="ALTER TYPE type_name COMPILE
REUSE SETTINGS" db-types="Oracle" />
<sql-case id="alter_type_debug" value="ALTER TYPE type_name COMPILE DEBUG
REUSE SETTINGS" db-types="Oracle" />
<sql-case id="alter_type_spec" value="ALTER TYPE type_name COMPILE
SPECIFICATION REUSE SETTINGS" db-types="Oracle" />
@@ -37,23 +39,41 @@
<sql-case id="alter_type_compile_hex" value="ALTER TYPE type_name COMPILE
hex_variable = X'11' REUSE SETTINGS" db-types="Oracle" />
<sql-case id="alter_type_replace_attribute" value="ALTER TYPE type_name
REPLACE AS OBJECT (a NUMBER, b NUMBER)" db-types="Oracle" />
<sql-case id="alter_type_replace_element_memeber_function" value="ALTER
TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, MEMBER FUNCTION p(c1 NUMBER) RETURN
NUMBER)" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, MEMBER FUNCTION p(n1 NUMBER) RETURN
NUMBER)" db-types="Oracle" />
<sql-case id="alter_type_replace_element_static_function" value="ALTER
TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC FUNCTION p(c1 BOOL) RETURN
NUMBER)" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC FUNCTION p(b1 BOOL) RETURN
NUMBER)" db-types="Oracle" />
<sql-case id="alter_type_replace_element_member_procedure" value="ALTER
TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, MEMBER PROCEDURE p(c1 BOOL))"
db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, MEMBER PROCEDURE p(b1 BOOL))"
db-types="Oracle" />
<sql-case id="alter_type_replace_element_static_procedure" value="ALTER
TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC PROCEDURE p(c1 BOOL))"
db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC PROCEDURE p(b1 BOOL))"
db-types="Oracle" />
<sql-case id="alter_type_replace_element_static_procedure_as_call"
value="ALTER TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC PROCEDURE p(c1 BOOL) AS
LANGUAGE JAVA NAME 'javaName')" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC PROCEDURE p(b1 BOOL) AS
LANGUAGE JAVA NAME 'resultName')" db-types="Oracle" />
<sql-case id="alter_type_replace_element_static_procedure_is_call"
value="ALTER TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC PROCEDURE p(c1 BOOL) IS
LANGUAGE JAVA NAME 'javaName')" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, STATIC PROCEDURE p(b1 BOOL) IS
LANGUAGE JAVA NAME 'resultName')" db-types="Oracle" />
<sql-case id="alter_type_replace_element_overriding_static_function"
value="ALTER TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, OVERRIDING STATIC FUNCTION p(c1
BOOL) RETURN NUMBER)" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, OVERRIDING STATIC FUNCTION p(b1
BOOL) RETURN NUMBER)" db-types="Oracle" />
<sql-case id="alter_type_replace_element_final_static_function"
value="ALTER TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, FINAL STATIC FUNCTION p(c1 BOOL)
RETURN NUMBER)" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, FINAL STATIC FUNCTION p(b1 BOOL)
RETURN NUMBER)" db-types="Oracle" />
<sql-case id="alter_type_replace_element_instantiable_static_function"
value="ALTER TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, INSTANTIABLE STATIC FUNCTION p(c1
BOOL) RETURN NUMBER)" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, INSTANTIABLE STATIC FUNCTION p(b1
BOOL) RETURN NUMBER)" db-types="Oracle" />
<sql-case id="alter_type_replace_element_not_instantiable_static_function"
value="ALTER TYPE type_name
- REPLACE AS OBJECT (a NUMBER, b NUMBER, NOT INSTANTIABLE STATIC FUNCTION
p(c1 BOOL) RETURN NUMBER)" db-types="Oracle" />
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, NOT INSTANTIABLE STATIC FUNCTION
p(b1 BOOL) RETURN NUMBER)" db-types="Oracle" />
+ <sql-case
id="alter_type_replace_element_constructor_function_single_parameter"
value="ALTER TYPE type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, CONSTRUCTOR FUNCTION p(b1 BOOL)
RETURN SELF AS RESULT)" db-types="Oracle" />
+ <sql-case
id="alter_type_replace_element_constructor_function_multi_parameter"
value="ALTER TYPE type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, CONSTRUCTOR FUNCTION p(b1 BOOL, n1
NUMBER) RETURN SELF AS RESULT)" db-types="Oracle" />
+ <sql-case id="alter_type_replace_element_constructor_final_function"
value="ALTER TYPE type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, FINAL CONSTRUCTOR FUNCTION p(b1
BOOL) RETURN SELF AS RESULT)" db-types="Oracle" />
+ <sql-case
id="alter_type_replace_element_constructor_instantiable_function" value="ALTER
TYPE type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, INSTANTIABLE CONSTRUCTOR FUNCTION
p(b1 BOOL) RETURN SELF AS RESULT)" db-types="Oracle" />
+ <sql-case id="alter_type_replace_element_constructor_function_inout"
value="ALTER TYPE type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, CONSTRUCTOR FUNCTION p(SELF IN OUT
NUMBER, n1 NUMBER) RETURN SELF AS RESULT)" db-types="Oracle" />
+ <sql-case id="alter_type_replace_element_constructor_function_as_call"
value="ALTER TYPE type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, CONSTRUCTOR FUNCTION p(SELF IN OUT
NUMBER, n1 NUMBER) RETURN SELF AS RESULT AS LANGUAGE JAVA NAME 'resultName')"
db-types="Oracle" />
+ <sql-case id="alter_type_replace_element_constructor_function_is_call"
value="ALTER TYPE type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, CONSTRUCTOR FUNCTION p(SELF IN OUT
NUMBER, n1 NUMBER) RETURN SELF AS RESULT IS LANGUAGE JAVA NAME 'resultName')"
db-types="Oracle" />
+ <sql-case id="alter_type_replace_element_map_function" value="ALTER TYPE
type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, MAP MEMBER FUNCTION p(n1 NUMBER)
RETURN NUMBER)" db-types="Oracle" />
+ <sql-case id="alter_type_replace_element_order_function" value="ALTER TYPE
type_name
+ REPLACE AS OBJECT (a NUMBER, b NUMBER, ORDER MEMBER FUNCTION p(n1 NUMBER)
RETURN NUMBER)" db-types="Oracle" />
</sql-cases>