You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by tu...@apache.org on 2022/05/16 09:37:12 UTC
[shardingsphere] branch master updated: Refactor create schema statement parse logic (#17703)
This is an automated email from the ASF dual-hosted git repository.
tuichenchuxin 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 5f5edc64bfb Refactor create schema statement parse logic (#17703)
5f5edc64bfb is described below
commit 5f5edc64bfb239b5c98b775dac5f9f5d4998063b
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Mon May 16 17:37:04 2022 +0800
Refactor create schema statement parse logic (#17703)
* Fix npe when execute drop schema if exist statement
* Refactor create schema statement parse logic
* update sql parse test case
* update sql parse test case
---
.../main/antlr4/imports/opengauss/DCLStatement.g4 | 64 --------------------
.../main/antlr4/imports/opengauss/DDLStatement.g4 | 69 +++++++++++++++++++++-
.../main/antlr4/imports/postgresql/DCLStatement.g4 | 63 --------------------
.../main/antlr4/imports/postgresql/DDLStatement.g4 | 67 +++++++++++++++++++++
.../src/main/resources/case/ddl/create-schema.xml | 3 +-
.../resources/sql/supported/ddl/create-schema.xml | 5 +-
6 files changed, 140 insertions(+), 131 deletions(-)
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DCLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DCLStatement.g4
index 9bec7c75a06..9452bd3b719 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DCLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DCLStatement.g4
@@ -27,73 +27,10 @@ revoke
: REVOKE optionForClause? (privilegeClause | roleClause) (CASCADE | RESTRICT)?
;
-privilegeClause
- : privilegeTypes ON onObjectClause (FROM | TO) granteeList (WITH GRANT OPTION)?
- ;
-
-roleClause
- : privilegeList (FROM | TO) roleList (WITH ADMIN OPTION)? (GRANTED BY roleSpec)?
- ;
-
optionForClause
: (GRANT | ADMIN) OPTION FOR
;
-privilegeTypes
- : privilegeType columnNames? (COMMA_ privilegeType columnNames?)*
- ;
-
-privilegeType
- : SELECT
- | INSERT
- | UPDATE
- | DELETE
- | TRUNCATE
- | REFERENCES
- | TRIGGER
- | CREATE
- | CONNECT
- | TEMPORARY
- | TEMP
- | EXECUTE
- | USAGE
- | ALL PRIVILEGES?
- ;
-
-onObjectClause
- : DATABASE nameList
- | SCHEMA nameList
- | DOMAIN anyNameList
- | FUNCTION functionWithArgtypesList
- | PROCEDURE functionWithArgtypesList
- | ROUTINE functionWithArgtypesList
- | LANGUAGE nameList
- | LARGE OBJECT numericOnlyList
- | TABLESPACE nameList
- | TYPE anyNameList
- | SEQUENCE qualifiedNameList
- | TABLE? privilegeLevel
- | FOREIGN DATA WRAPPER nameList
- | FOREIGN SERVER nameList
- | ALL TABLES IN SCHEMA nameList
- | ALL SEQUENCES IN SCHEMA nameList
- | ALL FUNCTIONS IN SCHEMA nameList
- | ALL PROCEDURES IN SCHEMA nameList
- | ALL ROUTINES IN SCHEMA nameList
- ;
-
-privilegeLevel
- : ASTERISK_ | ASTERISK_ DOT_ASTERISK_ | identifier DOT_ASTERISK_ | tableNames | schemaName DOT_ routineName
- ;
-
-routineName
- : identifier
- ;
-
-numericOnlyList
- : numericOnly (COMMA_ numericOnly)*
- ;
-
createUser
: CREATE USER roleSpec WITH? createOptRoleElem*
;
@@ -161,4 +98,3 @@ dropDroup
reassignOwned
: REASSIGN OWNED BY roleList TO roleSpec
;
-
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DDLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DDLStatement.g4
index 9068981d9af..40f7d1905cc 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DDLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DDLStatement.g4
@@ -1869,7 +1869,74 @@ schemaEltList
schemaStmt
: createTable | createIndex | createSequence | createTrigger | grant | createView
- ;
+ ;
+
+grant
+ : GRANT (privilegeClause | roleClause)
+ ;
+
+privilegeClause
+ : privilegeTypes ON onObjectClause (FROM | TO) granteeList (WITH GRANT OPTION)?
+ ;
+
+roleClause
+ : privilegeList (FROM | TO) roleList (WITH ADMIN OPTION)? (GRANTED BY roleSpec)?
+ ;
+
+privilegeTypes
+ : privilegeType columnNames? (COMMA_ privilegeType columnNames?)*
+ ;
+
+onObjectClause
+ : DATABASE nameList
+ | SCHEMA nameList
+ | DOMAIN anyNameList
+ | FUNCTION functionWithArgtypesList
+ | PROCEDURE functionWithArgtypesList
+ | ROUTINE functionWithArgtypesList
+ | LANGUAGE nameList
+ | LARGE OBJECT numericOnlyList
+ | TABLESPACE nameList
+ | TYPE anyNameList
+ | SEQUENCE qualifiedNameList
+ | TABLE? privilegeLevel
+ | FOREIGN DATA WRAPPER nameList
+ | FOREIGN SERVER nameList
+ | ALL TABLES IN SCHEMA nameList
+ | ALL SEQUENCES IN SCHEMA nameList
+ | ALL FUNCTIONS IN SCHEMA nameList
+ | ALL PROCEDURES IN SCHEMA nameList
+ | ALL ROUTINES IN SCHEMA nameList
+ ;
+
+numericOnlyList
+ : numericOnly (COMMA_ numericOnly)*
+ ;
+
+privilegeLevel
+ : ASTERISK_ | ASTERISK_ DOT_ASTERISK_ | identifier DOT_ASTERISK_ | tableNames | schemaName DOT_ routineName
+ ;
+
+routineName
+ : identifier
+ ;
+
+privilegeType
+ : SELECT
+ | INSERT
+ | UPDATE
+ | DELETE
+ | TRUNCATE
+ | REFERENCES
+ | TRIGGER
+ | CREATE
+ | CONNECT
+ | TEMPORARY
+ | TEMP
+ | EXECUTE
+ | USAGE
+ | ALL PRIVILEGES?
+ ;
alterSchema
: ALTER SCHEMA name (RENAME TO name | OWNER TO roleSpec)
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DCLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DCLStatement.g4
index dae89e62435..8d5830ccd40 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DCLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DCLStatement.g4
@@ -29,73 +29,10 @@ revoke
: REVOKE optionForClause? (privilegeClause | roleClause) (CASCADE | RESTRICT)?
;
-privilegeClause
- : privilegeTypes ON onObjectClause (FROM | TO) granteeList (WITH GRANT OPTION)?
- ;
-
-roleClause
- : privilegeList (FROM | TO) roleList (WITH ADMIN OPTION)? (GRANTED BY roleSpec)?
- ;
-
optionForClause
: (GRANT | ADMIN) OPTION FOR
;
-privilegeTypes
- : privilegeType columnNames? (COMMA_ privilegeType columnNames?)*
- ;
-
-privilegeType
- : SELECT
- | INSERT
- | UPDATE
- | DELETE
- | TRUNCATE
- | REFERENCES
- | TRIGGER
- | CREATE
- | CONNECT
- | TEMPORARY
- | TEMP
- | EXECUTE
- | USAGE
- | ALL PRIVILEGES?
- ;
-
-onObjectClause
- : DATABASE nameList
- | SCHEMA nameList
- | DOMAIN anyNameList
- | FUNCTION functionWithArgtypesList
- | PROCEDURE functionWithArgtypesList
- | ROUTINE functionWithArgtypesList
- | LANGUAGE nameList
- | LARGE OBJECT numericOnlyList
- | TABLESPACE nameList
- | TYPE anyNameList
- | SEQUENCE qualifiedNameList
- | TABLE? privilegeLevel
- | FOREIGN DATA WRAPPER nameList
- | FOREIGN SERVER nameList
- | ALL TABLES IN SCHEMA nameList
- | ALL SEQUENCES IN SCHEMA nameList
- | ALL FUNCTIONS IN SCHEMA nameList
- | ALL PROCEDURES IN SCHEMA nameList
- | ALL ROUTINES IN SCHEMA nameList
- ;
-
-privilegeLevel
- : ASTERISK_ | ASTERISK_ DOT_ASTERISK_ | identifier DOT_ASTERISK_ | tableNames | schemaName DOT_ routineName
- ;
-
-routineName
- : identifier
- ;
-
-numericOnlyList
- : numericOnly (COMMA_ numericOnly)*
- ;
-
createUser
: CREATE USER roleSpec WITH? createOptRoleElem*
;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4
index c5b713fb0e1..77d5825a284 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4
@@ -1883,6 +1883,73 @@ schemaStmt
: createTable | createIndex | createSequence | createTrigger | grant | createView
;
+grant
+ : GRANT (privilegeClause | roleClause)
+ ;
+
+privilegeClause
+ : privilegeTypes ON onObjectClause (FROM | TO) granteeList (WITH GRANT OPTION)?
+ ;
+
+roleClause
+ : privilegeList (FROM | TO) roleList (WITH ADMIN OPTION)? (GRANTED BY roleSpec)?
+ ;
+
+privilegeTypes
+ : privilegeType columnNames? (COMMA_ privilegeType columnNames?)*
+ ;
+
+onObjectClause
+ : DATABASE nameList
+ | SCHEMA nameList
+ | DOMAIN anyNameList
+ | FUNCTION functionWithArgtypesList
+ | PROCEDURE functionWithArgtypesList
+ | ROUTINE functionWithArgtypesList
+ | LANGUAGE nameList
+ | LARGE OBJECT numericOnlyList
+ | TABLESPACE nameList
+ | TYPE anyNameList
+ | SEQUENCE qualifiedNameList
+ | TABLE? privilegeLevel
+ | FOREIGN DATA WRAPPER nameList
+ | FOREIGN SERVER nameList
+ | ALL TABLES IN SCHEMA nameList
+ | ALL SEQUENCES IN SCHEMA nameList
+ | ALL FUNCTIONS IN SCHEMA nameList
+ | ALL PROCEDURES IN SCHEMA nameList
+ | ALL ROUTINES IN SCHEMA nameList
+ ;
+
+numericOnlyList
+ : numericOnly (COMMA_ numericOnly)*
+ ;
+
+privilegeLevel
+ : ASTERISK_ | ASTERISK_ DOT_ASTERISK_ | identifier DOT_ASTERISK_ | tableNames | schemaName DOT_ routineName
+ ;
+
+routineName
+ : identifier
+ ;
+
+privilegeType
+ : SELECT
+ | INSERT
+ | UPDATE
+ | DELETE
+ | TRUNCATE
+ | REFERENCES
+ | TRIGGER
+ | CREATE
+ | CONNECT
+ | TEMPORARY
+ | TEMP
+ | EXECUTE
+ | USAGE
+ | ALL PRIVILEGES?
+ ;
+
alterSchema
: ALTER SCHEMA name (RENAME TO name | OWNER TO roleSpec)
;
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-schema.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-schema.xml
index 2310e909cfa..8f452d7393b 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-schema.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-schema.xml
@@ -17,6 +17,7 @@
-->
<sql-parser-test-cases>
- <create-schema sql-case-id="create_schema_grant_permissions" />
<create-schema sql-case-id="create_schema" />
+ <create-schema sql-case-id="create_schema_with_grant_permissions" />
+ <create-schema sql-case-id="create_schema_with_if_not_exists" />
</sql-parser-test-cases>
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-schema.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-schema.xml
index d635aa741b2..4ee3d2e9a61 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-schema.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-schema.xml
@@ -17,9 +17,10 @@
-->
<sql-cases>
- <sql-case id="create_schema_grant_permissions" value="CREATE SCHEMA Sprockets AUTHORIZATION Annik
+ <sql-case id="create_schema" value="CREATE SCHEMA test_schema" db-types="SQLServer,PostgreSQL,openGauss"/>
+ <sql-case id="create_schema_with_grant_permissions" value="CREATE SCHEMA test_schema AUTHORIZATION Annik
CREATE TABLE NineProngs (source int, cost int, partnumber int)
GRANT SELECT ON SCHEMA::Sprockets TO Mandar
DENY SELECT ON SCHEMA::Sprockets TO Prasanna" db-types="SQLServer" />
- <sql-case id="create_schema" value="CREATE SCHEMA alt_nsp1" db-types="SQLServer,PostgreSQL,openGauss"/>
+ <sql-case id="create_schema_with_if_not_exists" value="CREATE SCHEMA IF NOT EXISTS test_schema" db-types="PostgreSQL"/>
</sql-cases>