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>

Reply via email to