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>