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>

Reply via email to