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 601d5a2d25d Fix oracle parse REVOKE clause error when add EOF (#30371)
601d5a2d25d is described below

commit 601d5a2d25dc2fc5a01d6a30049b391959176ce5
Author: LotusMoon <[email protected]>
AuthorDate: Sat Mar 2 14:10:13 2024 +0800

    Fix oracle parse REVOKE clause error when add EOF (#30371)
    
    * Fix oracle parse REVOKE clause error when add EOF
    
    * Fix parse revoke from error
---
 .../src/main/antlr4/imports/oracle/DCLStatement.g4  | 21 +++++++++++++++++++--
 .../src/main/antlr4/imports/oracle/OracleKeyword.g4 |  1 +
 .../it/sql/parser/internal/InternalSQLParserIT.java |  4 +---
 3 files changed, 21 insertions(+), 5 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 5a5a1afcd1c..01e9a266564 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
@@ -24,21 +24,37 @@ grant
     ;
 
 revoke
-    : REVOKE (objectPrivilegeClause | systemPrivilegeClause | roleClause)
+    : REVOKE (((objectPrivilegeClause | systemPrivilegeClause) 
objectPrivilegeFrom) | roleClause roleClauseFrom)
     ;
 
 objectPrivilegeClause
     : objectPrivileges ON onObjectClause
     ;
 
+objectPrivilegeFrom
+    : FROM revokeeClause ((CASCADE CONSTRAINTS) | FORCE)?
+    ;
+
+revokeeClause
+    : (name | PUBLIC) (COMMA_ (name | PUBLIC))*
+    ;
+
 systemPrivilegeClause
-    : systemPrivilege
+    : systemPrivilege (COMMA_ systemPrivilege)*
     ;
     
 roleClause
     : ignoredIdentifiers
     ;
 
+roleClauseFrom
+    : FROM programUnit (COMMA_ programUnit)*
+    ;
+
+programUnit
+    : (FUNCTION | PROCEDURE | PACKAGE) schemaName DOT_ name
+    ;
+
 objectPrivileges
     : objectPrivilegeType columnNames? (COMMA_ objectPrivilegeType 
columnNames?)*
     ;
@@ -119,6 +135,7 @@ systemPrivilege
     | viewsSystemPrivilege
     | miscellaneousSystemPrivilege
     | ruleSystemPrivilege
+    | name
     ;
 
 systemPrivilegeOperation
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 29f03f1329f..f2d4474bb22 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
@@ -7807,3 +7807,4 @@ CERTIFICATE_DN
 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
     ;
+
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 ca86ebadb26..56a57907f4f 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
@@ -65,9 +65,7 @@ public abstract class InternalSQLParserIT {
             "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", "revoke_all_system_privileges", 
"revoke_all_object_privileges", "revoke_object_privilege",
-            "revoke_object_privilege_column", 
"revoke_object_privilege_from_users", "revoke_object_privileges", 
"revoke_program", "revoke_role", "revoke_role_from_user", 
"revoke_roles_from_programs",
-            "revoke_system_privilege_from_users", "revoke_system_privilege", 
"revoke_system_privileges", "revoke_user_from", 
"revoke_user_without_hostname"));
+            "grant_user_with_admin", "grant_user_with_grant", 
"grant_user_without_hostname"));
     // CHECKSTYLE:ON
     
     @ParameterizedTest(name = "{0} ({1}) -> {2}")

Reply via email to