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 4dcadfba850 Fix parser Oracle GRANT grammar error (#30391)
4dcadfba850 is described below

commit 4dcadfba850d5ff898984710361cbf7f66ec9f48
Author: LotusMoon <[email protected]>
AuthorDate: Tue Mar 5 07:49:45 2024 +0800

    Fix parser Oracle GRANT grammar error (#30391)
    
    * Fix parser Oracle GRANT grammar error
    
    * Apply spotless
---
 .../src/main/antlr4/imports/oracle/DCLStatement.g4 | 28 +++++++++++++++++-----
 .../main/antlr4/imports/oracle/OracleKeyword.g4    |  3 +++
 .../sql/parser/internal/InternalSQLParserIT.java   |  5 +---
 3 files changed, 26 insertions(+), 10 deletions(-)

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 01e9a266564..b1207221c08 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
@@ -20,11 +20,23 @@ grammar DCLStatement;
 import BaseRule;
 
 grant
-    : GRANT (objectPrivilegeClause | systemPrivilegeClause | roleClause)
+    : GRANT ((objectPrivilegeClause grantObjectTo) | (systemPrivilegeClause 
grantSystemTo) | (roleClause grantRoleTo))
+    ;
+
+grantObjectTo
+    : TO revokeeGranteeClause (WITH HIERARCHY OPTION)? (WITH GRANT OPTION)?
+    ;
+
+grantRoleTo
+    : TO roleClauseFrom
+    ;
+
+granteeIdentifiedBy
+    : name (COMMA_ name)* IDENTIFIED BY name (COMMA_ name)*
     ;
 
 revoke
-    : REVOKE (((objectPrivilegeClause | systemPrivilegeClause) 
objectPrivilegeFrom) | roleClause roleClauseFrom)
+    : REVOKE (((objectPrivilegeClause | systemPrivilegeClause) 
objectPrivilegeFrom) | roleClause FROM roleClauseFrom)
     ;
 
 objectPrivilegeClause
@@ -32,23 +44,27 @@ objectPrivilegeClause
     ;
 
 objectPrivilegeFrom
-    : FROM revokeeClause ((CASCADE CONSTRAINTS) | FORCE)?
+    : FROM revokeeGranteeClause ((CASCADE CONSTRAINTS) | FORCE)?
     ;
 
-revokeeClause
+revokeeGranteeClause
     : (name | PUBLIC) (COMMA_ (name | PUBLIC))*
     ;
 
 systemPrivilegeClause
     : systemPrivilege (COMMA_ systemPrivilege)*
     ;
+
+grantSystemTo
+    : TO (revokeeGranteeClause | granteeIdentifiedBy) (WITH (ADMIN | DELEGATE) 
OPTION)?
+    ;
     
 roleClause
     : ignoredIdentifiers
     ;
 
 roleClauseFrom
-    : FROM programUnit (COMMA_ programUnit)*
+    : programUnit (COMMA_ programUnit)*
     ;
 
 programUnit
@@ -307,7 +323,7 @@ usersSystemPrivilege
     ;
 
 ruleSystemPrivilege
-    : createOperation* TO username
+    : createOperation* (TO username)?
     ;
 
 createOperation
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 f2d4474bb22..831374ff2cb 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
@@ -7808,3 +7808,6 @@ KERBEROS_PRINCIPAL_NAME
     : K E R B E R O S UL_ P R I N C I P A L UL_ N A M E
     ;
 
+DELEGATE
+    : D E L E G A T E
+    ;
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 83142aeb6c6..77f26a704ab 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
@@ -60,10 +60,7 @@ public abstract class InternalSQLParserIT {
             "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_user_identified_by_without_hostname", 
"create_user_with_lock_option", "create_user_with_password", 
"create_user_with_password_expire_lock", "create_user_with_password_option",
-            "create_user_with_quota_option", "create_user_with_tablespace", 
"drop_database_including_backups_noprompt", "drop_index_with_quota", 
"drop_user_with_hostname", "drop_user_with_ip",
-            "grant_all_object_privileges", "grant_all_system_privileges", 
"grant_object_privilege", "grant_object_privilege_to_users", 
"grant_object_privilege_column", "grant_object_privileges",
-            "grant_program", "grant_role", "grant_roles_to_programs", 
"grant_roles_to_users", "grant_system_privilege", 
"grant_system_privilege_to_users", "grant_system_privileges",
-            "grant_user_with_admin", "grant_user_with_grant", 
"grant_user_without_hostname"));
+            "create_user_with_quota_option", "create_user_with_tablespace", 
"drop_database_including_backups_noprompt", "drop_index_with_quota", 
"drop_user_with_hostname", "drop_user_with_ip"));
     // CHECKSTYLE:ON
     
     @ParameterizedTest(name = "{0} ({1}) -> {2}")

Reply via email to