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>