From e78ce6329196df600cd2f601603787e6f19d8366 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 10 Aug 2023 11:15:57 +0200 Subject: [PATCH] MDEV-17711 Assertion `arena_for_set_stmt== 0' failed in LEX::set_arena_for_set_stmt upon SET STATEMENT restore SET STATEMENT variables between statements in a multi-statement --- mysql-test/main/set_statement.result | 12 ++++++++++++ mysql-test/main/set_statement.test | 12 ++++++++++++ sql/sql_parse.cc | 2 ++ 3 files changed, 26 insertions(+) diff --git a/mysql-test/main/set_statement.result b/mysql-test/main/set_statement.result index c5ad11c74c0..625b120c58b 100644 --- a/mysql-test/main/set_statement.result +++ b/mysql-test/main/set_statement.result @@ -1271,4 +1271,16 @@ SET sql_mode=ORACLE; SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown'; SET sql_mode=default; SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown'; +# +# MDEV-17711 Assertion `arena_for_set_stmt== 0' failed in LEX::set_arena_for_set_stmt upon SET STATEMENT +# +set rand_seed1=1, rand_seed2=2; +set statement rand_seed1=4 for select 2, @@rand_seed1, @@rand_seed2; +set statement rand_seed2=5 for select 3, @@rand_seed1, @@rand_seed2 $ +2 @@rand_seed1 @@rand_seed2 +2 4 2 +3 @@rand_seed1 @@rand_seed2 +3 1 5 +# # End of 10.4 tests +# diff --git a/mysql-test/main/set_statement.test b/mysql-test/main/set_statement.test index f9d7c098327..e6a37d8a051 100644 --- a/mysql-test/main/set_statement.test +++ b/mysql-test/main/set_statement.test @@ -1191,4 +1191,16 @@ SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unk SET sql_mode=default; SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown'; +--echo # +--echo # MDEV-17711 Assertion `arena_for_set_stmt== 0' failed in LEX::set_arena_for_set_stmt upon SET STATEMENT +--echo # + +--delimiter $ +set rand_seed1=1, rand_seed2=2; +set statement rand_seed1=4 for select 2, @@rand_seed1, @@rand_seed2; +set statement rand_seed2=5 for select 3, @@rand_seed1, @@rand_seed2 $ +--delimiter ; + +--echo # --echo # End of 10.4 tests +--echo # diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index f8039b7df09..f5a80e9e5e5 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1901,6 +1901,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd, MYSQL_QUERY_DONE(thd->is_error()); } + thd->lex->restore_set_statement_var(); + #if defined(ENABLED_PROFILING) thd->profiling.finish_current_query(); thd->profiling.start_new_query("continuing");