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 963be68fa1f Support parsing MySQL stored procedure syntax part5 (#35441) 963be68fa1f is described below commit 963be68fa1f4b3be2b7d3d248669642245f4d9f7 Author: Chakkk <chakk6...@gmail.com> AuthorDate: Mon May 19 17:33:40 2025 +0800 Support parsing MySQL stored procedure syntax part5 (#35441) * Support parsing MySQL stored procedure syntax part5 * Update release notes --- RELEASE-NOTES.md | 2 +- .../src/main/antlr4/imports/mysql/DDLStatement.g4 | 2 +- .../parser/src/main/resources/case/dcl/revoke.xml | 1 + .../main/resources/case/ddl/create-procedure.xml | 31 ++++++++++++++++++++++ .../resources/sql/supported/dcl/revoke-user.xml | 1 + .../sql/supported/ddl/create-procedure.xml | 4 +++ 6 files changed, 39 insertions(+), 2 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 7e51f81aaef..e46eaf2ef7b 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -34,7 +34,7 @@ 1. DistSQL: Add job sharding nodes to the result set of `SHOW MIGRATION LIST` - [#35053](https://github.com/apache/shardingsphere/pull/35053) 1. SQL Parser: Enhance combineType in Oracle to support EXCEPT ALL and INTERSECT ALL - [#35099](https://github.com/apache/shardingsphere/pull/35099) 1. DistSQL: Add InUsedStorageUnitRetriever for single rule - [#35131](https://github.com/apache/shardingsphere/pull/35131) -1. SQL Parser: Support parsing MySQL stored procedure syntax - [#35137](https://github.com/apache/shardingsphere/pull/35137) +1. SQL Parser: Support parsing MySQL stored procedure syntax - [#35137](https://github.com/apache/shardingsphere/pull/35137), [#35441](https://github.com/apache/shardingsphere/pull/35441) 1. SQL Parser: Support Oracle SQL parsing V1 keywords as identifiers - [#35373](https://github.com/apache/shardingsphere/pull/35373) 1. SQL Parser: Support Oracle in literal sql parsing - [#35384](https://github.com/apache/shardingsphere/pull/35384) 1. SQL Bind: Support explain statement sql bind - [#35439](https://github.com/apache/shardingsphere/pull/35439) diff --git a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DDLStatement.g4 b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DDLStatement.g4 index ec90b6628f6..fd56fa6146d 100644 --- a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DDLStatement.g4 +++ b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DDLStatement.g4 @@ -682,7 +682,7 @@ validStatement | insert | replace | update | delete | select | call | createView | prepare | executeStmt | commit | deallocate | setVariable | beginStatement | declareStatement | flowControlStatement | cursorStatement | conditionHandlingStatement - | setStatement | showStatement) SEMI_? + | setStatement | showStatement | showCreateTable | startTransaction | rollback | commit | show) SEMI_? ; showStatement diff --git a/test/it/parser/src/main/resources/case/dcl/revoke.xml b/test/it/parser/src/main/resources/case/dcl/revoke.xml index 3d430aa2e87..edd0813e6ae 100644 --- a/test/it/parser/src/main/resources/case/dcl/revoke.xml +++ b/test/it/parser/src/main/resources/case/dcl/revoke.xml @@ -233,4 +233,5 @@ <revoke sql-case-id="revoke_alter_execute_on_procedure_from_role" /> <revoke sql-case-id="revoke_grant_option_on_procedure_from_user" /> <revoke sql-case-id="revoke_alter_execute_on_procedure_from_user" /> + <revoke sql-case-id="revoke_grant_option_on_procedure_from_role" /> </sql-parser-test-cases> diff --git a/test/it/parser/src/main/resources/case/ddl/create-procedure.xml b/test/it/parser/src/main/resources/case/ddl/create-procedure.xml index 558649c67cc..fa46f3075a8 100644 --- a/test/it/parser/src/main/resources/case/ddl/create-procedure.xml +++ b/test/it/parser/src/main/resources/case/ddl/create-procedure.xml @@ -91,4 +91,35 @@ </sql-statements> </create-procedure> <create-procedure sql-case-id="create_procedure_if_not_exists" /> + <create-procedure sql-case-id="create_procedure_with_transaction"> + <procedure-name name="proc1" /> + <sql-statements> + <sql-statement start-index="30" stop-index="50" statement-class-simple-name="MySQLStartTransactionStatement" /> + <sql-statement start-index="52" stop-index="83" statement-class-simple-name="MySQLCreateTableStatement" /> + <sql-statement start-index="85" stop-index="93" statement-class-simple-name="MySQLRollbackStatement" /> + <sql-statement start-index="95" stop-index="115" statement-class-simple-name="MySQLStartTransactionStatement" /> + <sql-statement start-index="117" stop-index="148" statement-class-simple-name="MySQLCreateTableStatement" /> + <sql-statement start-index="150" stop-index="158" statement-class-simple-name="MySQLCommitStatement" /> + </sql-statements> + </create-procedure> + <create-procedure sql-case-id="create_procedure_with_charset_parameters_and_insert"> + <procedure-name name="bug18293" /> + <sql-statements> + <sql-statement start-index="125" stop-index="172" statement-class-simple-name="MySQLInsertStatement" /> + </sql-statements> + </create-procedure> + <create-procedure sql-case-id="create_procedure_with_create_table_and_show_create_table_schema"> + <procedure-name name="p2" /> + <sql-statements> + <sql-statement start-index="47" stop-index="90" statement-class-simple-name="MySQLCreateTableStatement" /> + <sql-statement start-index="92" stop-index="116" statement-class-simple-name="MySQLShowCreateTableStatement" /> + </sql-statements> + </create-procedure> + <create-procedure sql-case-id="create_procedure_with_show_create_table_in_default_schema"> + <procedure-name name="p1" /> + <sql-statements> + <sql-statement start-index="33" stop-index="76" statement-class-simple-name="MySQLCreateTableStatement" /> + <sql-statement start-index="78" stop-index="102" statement-class-simple-name="MySQLShowCreateTableStatement" /> + </sql-statements> + </create-procedure> </sql-parser-test-cases> diff --git a/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml b/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml index cf1329dc2c4..8dc854c1f85 100644 --- a/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml +++ b/test/it/parser/src/main/resources/sql/supported/dcl/revoke-user.xml @@ -130,4 +130,5 @@ <sql-case id="revoke_alter_execute_on_procedure_from_role" value="REVOKE IF EXISTS ALTER ROUTINE, EXECUTE ON PROCEDURE rngp_db.rngp_proc FROM rngp_role" db-types="MySQL" /> <sql-case id="revoke_grant_option_on_procedure_from_user" value="REVOKE IF EXISTS GRANT OPTION ON PROCEDURE rngp_db.rngp_proc FROM rngp_user" db-types="MySQL" /> <sql-case id="revoke_alter_execute_on_procedure_from_user" value="REVOKE IF EXISTS ALTER ROUTINE, EXECUTE ON PROCEDURE rngp_db.rngp_proc FROM rngp_user" db-types="MySQL" /> + <sql-case id="revoke_grant_option_on_procedure_from_role" value="REVOKE IF EXISTS GRANT OPTION ON PROCEDURE rngp_db.rngp_proc FROM rngp_role" db-types="MySQL" /> </sql-cases> diff --git a/test/it/parser/src/main/resources/sql/supported/ddl/create-procedure.xml b/test/it/parser/src/main/resources/sql/supported/ddl/create-procedure.xml index 12975247024..2daaf507f8d 100644 --- a/test/it/parser/src/main/resources/sql/supported/ddl/create-procedure.xml +++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-procedure.xml @@ -54,4 +54,8 @@ <sql-case id="create_procedure_with_transaction_read_only_and_isolation" value="CREATE PROCEDURE p1() SET SESSION TRANSACTION READ ONLY, ISOLATION LEVEL SERIALIZABLE" db-types="MySQL" /> <sql-case id="create_procedure_with_transaction_read_only" value="CREATE PROCEDURE p1() SET SESSION TRANSACTION READ ONLY" db-types="MySQL" /> <sql-case id="create_procedure_if_not_exists" value="CREATE PROCEDURE IF NOT EXISTS sp1() BEGIN END" db-types="MySQL" /> + <sql-case id="create_procedure_with_transaction" value="CREATE PROCEDURE proc1() BEGIN START TRANSACTION; CREATE TABLE t1 (f1 INT); ROLLBACK; START TRANSACTION; CREATE TABLE t1 (f1 INT); COMMIT; END;" db-types="MySQL" /> + <sql-case id="create_procedure_with_charset_parameters_and_insert" value="CREATE PROCEDURE bug18293 (IN ins1 CHAR(50), IN ins2 CHAR(50) CHARACTER SET cp932, IN ind DECIMAL(10,2)) BEGIN INSERT INTO t4 VALUES (ins1, ins2, ind); END;" db-types="MySQL" /> + <sql-case id="create_procedure_with_create_table_and_show_create_table_schema" value="CREATE PROCEDURE mysqltest2.p2() BEGIN CREATE TABLE t2(col1 VARCHAR(10)); SHOW CREATE TABLE t2; END;" db-types="MySQL" /> + <sql-case id="create_procedure_with_show_create_table_in_default_schema" value="CREATE PROCEDURE p1() BEGIN CREATE TABLE t1(col1 VARCHAR(10)); SHOW CREATE TABLE t1; END;" db-types="MySQL" /> </sql-cases>