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 109351d7e6f Fix parser alter materialized view log、 create 
cluster、create controlfile 、create role sql syntax (#30406)
109351d7e6f is described below

commit 109351d7e6f6212ebe4cb5e3e0e28bc8ecbf8f76
Author: yydeng626 <[email protected]>
AuthorDate: Thu Mar 7 14:53:32 2024 +0800

    Fix parser alter materialized view log、 create cluster、create controlfile 
、create role sql syntax (#30406)
    
    * Fix parser alter materialized view log sql syntax
    Fix parser create cluster sql syntax
    Fix parser create controlfile sql syntax
    Fix parser create role sql syntax
    
    * fix code style check and spotless check error
---
 .../src/main/antlr4/imports/oracle/BaseRule.g4     | 10 ++++++---
 .../src/main/antlr4/imports/oracle/DCLStatement.g4 | 21 +++++++++++--------
 .../src/main/antlr4/imports/oracle/DDLStatement.g4 | 24 +++++++++++-----------
 .../src/main/antlr4/imports/oracle/Literals.g4     |  4 ----
 .../main/antlr4/imports/oracle/OracleKeyword.g4    |  4 ++++
 .../oracle/src/main/antlr4/imports/oracle/PLSQL.g4 | 13 ++++++++----
 .../sql/parser/autogen/OracleStatement.g4          |  1 +
 .../sql/parser/internal/InternalSQLParserIT.java   |  9 +++-----
 .../resources/sql/supported/ddl/create-cluster.xml |  2 +-
 .../sql/supported/ddl/create-control-file.xml      |  1 -
 .../resources/sql/supported/ddl/create-java.xml    |  5 ++++-
 11 files changed, 54 insertions(+), 40 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 64bdf9d4c59..b3d61af91f6 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
@@ -87,7 +87,7 @@ identifier
     ;
 
 unreservedWord
-    : unreservedWord1 | unreservedWord2 | unreservedWord3 | capacityUnit
+    : unreservedWord1 | unreservedWord2 | unreservedWord3 | capacityUnit | 
timeUnit
     ;
 
 unreservedWord1
@@ -1779,7 +1779,11 @@ externalDatatype
     ;
 
 capacityUnit
-    : ('K' | 'M' | 'G' | 'T' | 'P' | 'E')
+    : ('K' | 'M' | 'G' | 'T' | 'P' | 'E' | 'k' | 'm' | 'g' | 't' | 'p' | 'e')
+    ;
+
+timeUnit
+    : 'M' | 'H' | 'm' | 'h'
     ;
 
 attributeDimensionName
@@ -2107,7 +2111,7 @@ keyForBlob
     ;
 
 sourceText
-    : identifier
+    : .*? RBE_
     ;
 
 fullPathName
diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4
index 5c3f0e03177..c29c87793e6 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4
@@ -360,7 +360,7 @@ identifiedExternallyOption
     ;
 
 identifiedGloballyOption
-    : GLOBALLY (AS SQ_ (name | (AZURE_ROLE | AZURE_USER | IAM_GROUP_NAME | 
IAM_PRINCIPAL_NAME) EQ_ name) SQ_)
+    : GLOBALLY (AS SQ_ (name | (AZURE_ROLE | AZURE_USER | IAM_GROUP_NAME | 
IAM_PRINCIPAL_NAME) EQ_ name) SQ_)?
     ;
 
 noAuthOption
@@ -418,8 +418,8 @@ dropUser
 alterUser
     : ALTER USER ((username (IDENTIFIED (BY password (REPLACE password)?
     | EXTERNALLY (AS CERTIFICATE_DN | AS KERBEROS_PRINCIPAL_NAME)?
-    | NO AUTHENTICATION
     | GLOBALLY AS (STRING_ | SQ_ AZURE_ROLE EQ_ identifier SQ_ | SQ_ 
IAM_GROUP_NAME EQ_ identifier SQ_))
+    | NO AUTHENTICATION
     | DEFAULT COLLATION collationName
     | DEFAULT TABLESPACE tablespaceName
     | LOCAL? TEMPORARY TABLESPACE tablespaceName tablespaceGroupName
@@ -435,7 +435,7 @@ alterUser
     ;
 
 createRole
-    : CREATE ROLE
+    : CREATE ROLE roleName ( NOT IDENTIFIED | identifiedCluase)? (CONTAINER 
EQ_ (CURRENT | ALL))?
     ;
 
 dropRole
@@ -443,11 +443,16 @@ dropRole
     ;
 
 alterRole
-    : ALTER ROLE roleName ( NOT IDENTIFIED | IDENTIFIED (
-    | BY password 
-    | USING packageName 
-    | EXTERNALLY 
-    | GLOBALLY AS (STRING_ | SQ_ AZURE_ROLE EQ_ identifier SQ_ | SQ_ 
IAM_GROUP_NAME EQ_ identifier SQ_) ) ) (CONTAINER EQ_ (CURRENT | ALL))?
+    : ALTER ROLE roleName ( NOT IDENTIFIED | identifiedCluase  ) (CONTAINER 
EQ_ (CURRENT | ALL))?
+    ;
+
+identifiedCluase
+    : IDENTIFIED (
+    | BY password
+    | USING packageName
+    | EXTERNALLY
+    | GLOBALLY AS (STRING_ | SQ_ AZURE_ROLE EQ_ identifier SQ_ | SQ_ 
IAM_GROUP_NAME EQ_ identifier SQ_)
+    | GLOBALLY)
     ;
 
 setRole
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 f94075da8d6..95c8c39e894 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
@@ -2819,8 +2819,8 @@ createPFile
     ;
 
 createControlFile
-    : CREATE CONTROLFILE REUSE? SET? DATABASE databaseName 
logfileForControlClause? resetLogsOrNot
-    ( MAXLOGFILES INTEGER_
+    : CREATE CONTROLFILE REUSE? SET? DATABASE databaseName 
(logfileForControlClause | RESETLOGS | NORESETLOGS | DATAFILE fileSpecifications
+    |( MAXLOGFILES INTEGER_
     | MAXLOGMEMBERS INTEGER_
     | MAXLOGHISTORY INTEGER_
     | MAXDATAFILES INTEGER_
@@ -2828,17 +2828,16 @@ createControlFile
     | ARCHIVELOG
     | NOARCHIVELOG
     | FORCE LOGGING
-    | SET STANDBY NOLOGGING FOR (DATA AVAILABILITY | LOAD PERFORMANCE)
-    )*
+    | SET STANDBY NOLOGGING FOR (DATA AVAILABILITY | LOAD PERFORMANCE)))+
     characterSetClause?
     ;
 
 resetLogsOrNot
-   :  ( RESETLOGS | NORESETLOGS) (DATAFILE fileSpecifications)?
+   :  ( RESETLOGS | NORESETLOGS)? (DATAFILE fileSpecifications)?
    ;
 
 logfileForControlClause
-    : LOGFILE (GROUP INTEGER_)? fileSpecification (COMMA_ (GROUP INTEGER_)? 
fileSpecification)+
+    : LOGFILE (GROUP INTEGER_)? fileSpecification (COMMA_ (GROUP INTEGER_)? 
fileSpecification)*
     ;
 
 characterSetClause
@@ -3323,7 +3322,7 @@ diskOfflineClause
     ;
 
 timeoutClause
-    : DROP AFTER INTEGER_ TIME_UNIT
+    : DROP AFTER INTEGER_ timeUnit
     ;
 
 checkDiskgroupClause
@@ -3555,7 +3554,7 @@ buildClause
     ;
 
 createMaterializedViewLog
-    : CREATE MATERIALIZED VIEW LOG ON tableName materializedViewLogAttribute? 
parallelClause? ( WITH ( COMMA_? ( OBJECT ID | PRIMARY KEY | ROWID | SEQUENCE | 
COMMIT SCN ) )* (LP_ ( COMMA_? identifier )+ RP_ newViewValuesClause? )? 
mvLogPurgeClause? )*
+    : CREATE MATERIALIZED VIEW LOG ON tableName materializedViewLogAttribute? 
parallelClause? ( WITH ( ( COMMA_? ( OBJECT ID | PRIMARY KEY | ROWID | SEQUENCE 
| COMMIT SCN ) ) | (LP_ columnName ( COMMA_ columnName )* RP_ ) )* )? 
newViewValuesClause? mvLogPurgeClause? createMvRefresh? ((FOR UPDATE)? ( 
(DISABLE | ENABLE) QUERY REWRITE )? AS selectSubquery)?
     ;
 
 materializedViewLogAttribute
@@ -3716,15 +3715,16 @@ newValuesClause
     ;
 
 mvLogPurgeClause
-    : PURGE IMMEDIATE (SYNCHRONOUS | ASYNCHRONOUS)?
+    : PURGE (IMMEDIATE (SYNCHRONOUS | ASYNCHRONOUS)?
     | START WITH dateValue nextOrRepeatClause?
-    | (START WITH dateValue)? nextOrRepeatClause
+    | (START WITH dateValue)? nextOrRepeatClause)
     ;
 
 nextOrRepeatClause
-    : NEXT dateValue | REPEAT INTERVAL intervalExpression
+    : NEXT dateValue | REPEAT intervalLiterals
     ;
 
+
 forRefreshClause
     : FOR ((SYNCHRONOUS REFRESH USING stagingLogName) | (FAST REFRESH))
     ;
@@ -4209,7 +4209,7 @@ alterType
 
 createCluster
     : CREATE CLUSTER (schemaName DOT_)? clusterName LP_ (columnName dataType 
(COLLATE columnCollationName)? SORT? (COMMA_ columnName dataType (COLLATE 
columnCollationName)? SORT?)*) RP_
-    ( physicalAttributesClause | SIZE sizeClause | TABLESPACE tablespaceName | 
INDEX | (SINGLE TABLE)? HASHKEYS INTEGER_ (HASH IS expr)?)? parallelClause?
+    ( physicalAttributesClause | SIZE sizeClause | TABLESPACE tablespaceName | 
INDEX | (SINGLE TABLE)? HASHKEYS INTEGER_ (HASH IS expr)?)* parallelClause?
     ( NOROWDEPENDENCIES | ROWDEPENDENCIES)? (CACHE | NOCACHE)? 
clusterRangePartitions?
     ;
 
diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4
index 6588316d5cd..47e1bc5ceb3 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4
@@ -19,10 +19,6 @@ lexer grammar Literals;
 
 import Alphabet, Symbol;
 
-TIME_UNIT
-    : M | H
-    ;
-
 IDENTIFIER_
     : 
[A-Za-z\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]+[A-Za-z_$#0-9\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]*
     ;
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 494c5e7d611..ff754667263 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
@@ -7820,6 +7820,10 @@ DELEGATE
     : D E L E G A T E
     ;
 
+TIME_UNIT
+    : T I M E UL_ U N I T
+    ;
+
 DEVICE
     : D E V I C E
     ;
diff --git a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
index 315be7fc6b5..ed9b25989a6 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
@@ -57,18 +57,23 @@ createTrigger
     ;
 
 plsqlFunctionSource
-    : function (LP_ parameterDeclaration (COMMA_ parameterDeclaration)* RP_)? 
RETURN dataType
+    : function (LP_ parameterDeclaration (COMMA_ parameterDeclaration)* RP_)? 
returnDateType?
     sharingClause? (invokerRightsClause
-    | accessibleByClause 
+    | accessibleByClause
     | defaultCollationoOptionClause
     | deterministicClause
     | parallelEnableClause
     | resultCacheClause
+    | aggregateClause
     | pipelinedClause
     | sqlMacroClause)*
-    (aggregateClause | ((IS | AS) (callSpec | declareSection? body)))
+    (IS | AS) (callSpec | declareSection? body)
     ;
-    
+
+returnDateType
+    : RETURN dataType
+    ;
+
 body
     : BEGIN statement+ (EXCEPTION (exceptionHandler)+)? END (identifier)? SEMI_
     ;
diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
 
b/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
index c27ea823d56..2052012e363 100644
--- 
a/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
+++ 
b/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
@@ -19,6 +19,7 @@ grammar OracleStatement;
 
 import DMLStatement, DCLStatement, DDLStatement, TCLStatement, DALStatement, 
PLSQL;
 
+
 execute
     : (select
     | insert
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
index 157c947adaf..3376d0ce4b0 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
@@ -53,12 +53,9 @@ public abstract class InternalSQLParserIT {
     // TODO fix these sql parser cases after add eof in OracleStatement.g4
     // CHECKSTYLE:OFF
     private static final Collection<String> IGNORE_TEST_CASES = new 
HashSet<>(Arrays.asList(
-            "create_function_call_spec_java", 
"create_cluster_number_size_hashkeys", "create_cluster_set_size", 
"create_cluster_size_initial_next", "create_external_role",
-            "create_external_user", "create_control_file", 
"create_global_role", "create_global_user", "create_java", 
"create_materialized_view_log_with_including_new",
-            "create_materialized_view_log_with_pctfree_storage_purge_repeat", 
"create_materialized_view_log_with_row_id_sequence_including_new", 
"create_materialized_view_log_with_tablespace",
-            "create_no_identified_role", "create_role", 
"create_role_identified_by", "create_role_with_container", 
"create_role_with_identified_by_password",
-            "create_table_with_out_of_line_constraints_oracle", 
"create_table_with_xmltype_column_clob_oracle", 
"create_table_with_xmltype_column_oracle", "create_tablespace_with_blocksize",
-            "create_tablespace_with_temporary_tablespace_group", 
"create_tablespace_with_temporary_tempfile_spec_extent_management", 
"create_tablespace_with_undo_tablespace_spec"));
+            "create_function_with_aggregate_using_function", 
"create_table_with_out_of_line_constraints_oracle", 
"create_table_with_xmltype_column_clob_oracle",
+            "create_table_with_xmltype_column_oracle", 
"create_tablespace_with_blocksize", 
"create_tablespace_with_temporary_tablespace_group",
+            
"create_tablespace_with_temporary_tempfile_spec_extent_management", 
"create_tablespace_with_undo_tablespace_spec"));
     // CHECKSTYLE:ON
     
     @ParameterizedTest(name = "{0} ({1}) -> {2}")
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-cluster.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-cluster.xml
index 4460d23fcc9..6686798a678 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-cluster.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-cluster.xml
@@ -31,7 +31,7 @@
     <sql-case id="create_cluster_pctfree" value="CREATE CLUSTER test_cluster 
(col1 NUMBER) PCTFREE 2" db-types="Oracle" />
     <sql-case id="create_cluster_pctused" value="CREATE CLUSTER test_cluster 
(col1 NUMBER) PCTUSED 4" db-types="Oracle" />
     <sql-case id="create_cluster_initrans" value="CREATE CLUSTER test_cluster 
(col1 NUMBER) INITRANS 5" db-types="Oracle" />
-    <sql-case id="create_cluster_set_size" value="CREATE CLUSTER test_cluster 
(col1 NUMBER) SET 10M" db-types="Oracle" />
+    <sql-case id="create_cluster_set_size" value="CREATE CLUSTER test_cluster 
(col1 NUMBER) SIZE 10M" db-types="Oracle" />
     <sql-case id="create_cluster_storage_init" value="CREATE CLUSTER 
test_cluster (col1 NUMBER) STORAGE (INITIAL 109G)" db-types="Oracle" />
     <sql-case id="create_cluster_storage_next" value="CREATE CLUSTER 
test_cluster (col1 NUMBER) STORAGE (NEXT 109G)" db-types="Oracle" />
     <sql-case id="create_cluster_storage_minextents" value="CREATE CLUSTER 
test_cluster (col1 NUMBER) STORAGE (MINEXTENTS 109)" db-types="Oracle" />
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml
index a0734523a1a..5438a369271 100644
--- 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml
+++ 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml
@@ -26,7 +26,6 @@
                                               LOGFILE
                                                 GROUP 1 
'/path/oracle/dbs/t_log1.f'  SIZE 500K,
                                                 GROUP 2 
'/path/oracle/dbs/t_log2.f'  SIZE 500K
-                                              # STANDBY LOGFILE
                                               DATAFILE
                                                 '/path/oracle/dbs/t_db1.f',
                                                 '/path/oracle/dbs/dbu19i.dbf',
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml
index 81fda18cf7c..4981f766990 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml
@@ -17,5 +17,8 @@
   -->
 
 <sql-cases>
-    <sql-case id="create_java" value="CREATE JAVA SOURCE NAMED 
&quot;Welcome&quot; AS public class Welcome { public static String welcome() { 
return &quot;Welcome World&quot;;" db-types="Oracle" />
+    <sql-case id="create_java" value="CREATE JAVA SOURCE NAMED 
&quot;Welcome&quot; AS
+   public class Welcome {
+      public static String welcome() {
+         return &quot;Welcome World&quot;;   } }" db-types="Oracle" />
 </sql-cases>

Reply via email to