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 <duanzhengqi...@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>