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 5738adab5b6 Add rules for oracle alter type. (#27451)
5738adab5b6 is described below

commit 5738adab5b683be906d70deb34c2fb2eea673132
Author: boyjoy1127 <[email protected]>
AuthorDate: Sat Jul 29 10:22:58 2023 +0800

    Add rules for oracle alter type. (#27451)
---
 .../src/main/antlr4/imports/oracle/DDLStatement.g4 | 30 +++++++++++++++++++++-
 .../main/antlr4/imports/oracle/OracleKeyword.g4    |  4 +++
 .../src/main/resources/case/ddl/alter-type.xml     | 11 ++++++++
 .../resources/sql/supported/ddl/alter-type.xml     | 21 +++++++++++++++
 4 files changed, 65 insertions(+), 1 deletion(-)

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 59b8c16965f..36993e45f4f 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
@@ -3621,6 +3621,34 @@ compileTypeClause
     : COMPILE DEBUG? (SPECIFICATION|BODY)? compilerParametersClause? REUSE 
SETTINGS
     ;
 
+inheritanceClauses
+    : (NOT? (OVERRIDING | FINAL | INSTANTIABLE))+
+    ;
+
+procedureSpec
+    : PROCEDURE procedureName LP_ (parameterValue typeName (COMMA_ 
parameterValue typeName)*) RP_ ((IS | AS) callSpec)?
+    ;
+
+returnClause
+    : RETURN dataType ((IS | AS) callSpec)?
+    ;
+
+functionSpec
+    : FUNCTION name LP_ (parameterValue dataType (COMMA_ parameterValue 
dataType)*) RP_ returnClause
+    ;
+
+subprogramSpec
+    : (MEMBER | STATIC) (procedureSpec | functionSpec)
+    ;
+
+elementSpecification
+    : inheritanceClauses? (subprogramSpec)+
+    ;
+
+replaceTypeClause
+    : REPLACE invokerRightsClause? AS OBJECT LP_ (attributeName dataType 
(COMMA_ attributeName dataType)* (COMMA_ elementSpecification)*) RP_
+    ;
+
 alterType
-    : ALTER TYPE typeName compileTypeClause
+    : ALTER TYPE typeName (compileTypeClause|replaceTypeClause)?
     ;
diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
index 9f4cd40d5b4..79234af873e 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
@@ -6024,6 +6024,10 @@ STATEMENT_QUEUING
     :S T A T E M E N T UL_ Q U E U I N G
     ;
 
+OVERRIDING
+    : O V E R R I D I N G
+    ;
+
 STATIC
     :S T A T I C
     ;
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 b59491a50c9..c20e0a09a1b 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
@@ -35,4 +35,15 @@
     <alter-type sql-case-id="alter_type_compile_float" />
     <alter-type sql-case-id="alter_type_compile_minus_float" />
     <alter-type sql-case-id="alter_type_compile_hex" />
+    <alter-type sql-case-id="alter_type_replace_attribute" />
+    <alter-type sql-case-id="alter_type_replace_element_memeber_function" />
+    <alter-type sql-case-id="alter_type_replace_element_static_function" />
+    <alter-type sql-case-id="alter_type_replace_element_member_procedure" />
+    <alter-type sql-case-id="alter_type_replace_element_static_procedure" />
+    <alter-type 
sql-case-id="alter_type_replace_element_static_procedure_as_call" />
+    <alter-type 
sql-case-id="alter_type_replace_element_static_procedure_is_call" />
+    <alter-type 
sql-case-id="alter_type_replace_element_overriding_static_function" />
+    <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" />
 </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 b3d29317ac1..7e57bd1ddff 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
@@ -35,4 +35,25 @@
     <sql-case id="alter_type_compile_float" value="ALTER TYPE type_name 
COMPILE number_variable = +5.0 REUSE SETTINGS" db-types="Oracle" />
     <sql-case id="alter_type_compile_minus_float" value="ALTER TYPE type_name 
COMPILE number_variable = -5.0 REUSE SETTINGS" db-types="Oracle" />
     <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" />
+    <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" />
+    <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" />
+    <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" />
+    <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" />
+    <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" />
+    <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" />
+    <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" />
+    <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" />
+    <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" />
 </sql-cases>

Reply via email to