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}")