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 9a1d5f91416 Enhance the support for Oracle SQL parsing (#30557)
9a1d5f91416 is described below
commit 9a1d5f9141600dd8e16b08accee7fe0c22c650f8
Author: zhuruixuan <[email protected]>
AuthorDate: Thu Mar 21 10:32:48 2024 +0800
Enhance the support for Oracle SQL parsing (#30557)
* Change1 BaseRule
* Change1 Keyword
* Change1 sql
* Change1 case
* Change2 Baserule
* Change2 Sql
* Change2 Case
* Change3 BaseRule
* Change2 Keyword
---
.../oracle/src/main/antlr4/imports/oracle/BaseRule.g4 | 17 +++++++++++++++--
.../oracle/src/main/antlr4/imports/oracle/Keyword.g4 | 8 ++++++--
.../parser/src/main/resources/case/ddl/create-table.xml | 4 ++++
.../main/resources/sql/supported/ddl/create-table.xml | 1 +
4 files changed, 26 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 b02a9dc8681..6e607f021e4 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
@@ -188,7 +188,7 @@ unreservedWord1
| OTHERS | EXCEPTION | CPU_PER_SESSION | CONNECT_TIME |
LOGICAL_READS_PER_SESSION | PRIVATE_SGA | PERCENT_RANK | ROWID
| LPAD | ZONE | SESSIONTIMEZONE | TO_CHAR | XMLELEMENT | COLUMN_VALUE |
EVALNAME | LEVEL | CONTENT | ON | LOOP | EXIT | ELSIF
;
-
+
unreservedWord2
: ABS | ACCESS | ACCOUNT | ACOS | ACTIVE_COMPONENT | ACTIVE_FUNCTION |
ACTIVE_TAG | ADD
| ADD_COLUMN | ADD_GROUP | ADD_MONTHS | ADJ_DATE | ADMIN | ADMINISTRATOR |
ALL_ROWS | AND_EQUAL | ANTIJOIN | APPEND
@@ -205,7 +205,7 @@ unreservedWord2
| COS | COSH | COST_XML_QUERY_REWRITE | COVAR_POP | COVAR_SAMP |
CO_AUTH_IND | CPU_COSTING | CPU_PER_CALL | CRASH
| CREATE_STORED_OUTLINES | CROSSEDITION | CSCONVERT | CUBE_GB | CUME_DIST
| CUME_DISTM | CURRENT | CURRENTV | CURRENT_DATE
| CURRENT_SCHEMA | CURRENT_TIME | CURRENT_TIMESTAMP | CURSOR_SHARING_EXACT
| CURSOR_SPECIFIC_SEGMENT | CV
- | DATABASE_DEFAULT | DATAOBJNO | DATAOBJ_TO_PARTITION | DATE_MODE | DBA |
DBMS_STATS | DB_ROLE_CHANGE | DB_VERSION
+ | DATABASE_DEFAULT | DATAOBJNO | DATAOBJ_TO_PARTITION | DATE_MODE | DBA |
DBMS_STATS | DBMS_LOB | DB_ROLE_CHANGE | DB_VERSION
| DEBUGGER | DECLARE | DECOMPOSE | DECR | DEFAULT | DEFAULTS | DEFINED |
DEGREE | DELAY | DELETEXML | DENSE_RANKM | DEQUEUE | DEREF
| DEREF_NO_REWRITE | DETACHED | DIRECT_LOAD | DISABLE_PRESET |
DISABLE_RPKE | DISTINGUISHED | DML_UPDATE | DOCFIDELITY
| DOCUMENT | DOMAIN_INDEX_FILTER | DOMAIN_INDEX_NO_SORT |
DOMAIN_INDEX_SORT | DRIVING_SITE | DROP_COLUMN | DROP_GROUP
@@ -662,6 +662,7 @@ expr
| booleanPrimary
| expr datetimeExpr
| multisetExpr
+ | builtinFunctionsExpr
;
andOperator
@@ -2090,6 +2091,18 @@ multisetOperator
| UNION
;
+builtinFunctionsExpr
+ : (packageIdentifier DOT_ builtinFunction) AT_ dbLink LP_ expr RP_
+ ;
+
+packageIdentifier
+ : identifier
+ ;
+
+builtinFunction
+ : GETLENGTH
+ ;
+
superview
: identifier
;
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 1fe037802fb..e54bcb7faeb 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
@@ -937,7 +937,7 @@ WHITESPACE
;
OPTIONALLY
- :O P T I O N A L L Y
+ : O P T I O N A L L Y
;
ENCLOSED
@@ -945,5 +945,9 @@ ENCLOSED
;
LRTRIM
- :L R T R I M
+ : L R T R I M
+ ;
+
+GETLENGTH
+ : G E T L E N G T H
;
diff --git a/test/it/parser/src/main/resources/case/ddl/create-table.xml
b/test/it/parser/src/main/resources/case/ddl/create-table.xml
index 9141abe3620..6dc79a24988 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-table.xml
@@ -2404,4 +2404,8 @@
<column name="year_of_birth" start-index="63" stop-index="75"/>
</column-definition>
</create-table>
+
+ <create-table sql-case-id="create_table_with_builtin_function">
+ <table name="tab" start-index="13" stop-index="15"/>
+ </create-table>
</sql-parser-test-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
index f0acfa5af44..df367b177a2 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
@@ -324,4 +324,5 @@
<sql-case id="create_table_parallel_with_as_sub_query" value="CREATE TABLE
hr.admin_emp_dept PARALLEL COMPRESS AS SELECT * FROM hr.employees WHERE
department_id = 10;" db-types="Oracle"/>
<sql-case id="create_table_with_edge_constraint" value="CREATE TABLE
bought ( PurchaseCount INT ,CONSTRAINT EC_BOUGHT CONNECTION (Customer TO
Product) ON DELETE NO ACTION );" db-types="SQLServer"/>
<sql-case id="create_table_with_enclosed" value="CREATE TABLE
emp_load(first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS
PARAMETERS FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '(' and ')'LRTRIM
LOCATION (info.dat));" db-types="Oracle"/>
+ <sql-case id="create_table_with_builtin_function" value="CREATE TABLE tab
AS SELECT DBMS_LOB.GETLENGTH@dbs2(clob_col) len FROM tab@dbs2;"
db-types="Oracle"/>
</sql-cases>