From 79bc8c6a67b98c45c4b5392f4d21c9246dcef4dd Mon Sep 17 00:00:00 2001 From: bsrikanth-mariadb Date: Fri, 3 Apr 2026 16:23:19 +0530 Subject: [PATCH] MDEV-39222: Error when inserting data from seq An issue arises during optimizer context replay when the context does not contain metadata for the seq table, which is used for data insertion. The system generates a warning if any table or index required by the storage engine is missing from the context. However, for INSERT statements, this warning is promoted to an error, causing the operation to fail. The solution is to discontinue the use of the replayed context after the target query has been executed. --- mysql-test/include/opt_ctx_cmp_2_runs_of_query.inc | 1 + ...e_sys_vars.opt => opt_context_replay_basic.opt} | 0 ...vars.result => opt_context_replay_basic.result} | 8 +++++++- ...sys_vars.test => opt_context_replay_basic.test} | 8 +++++++- .../main/opt_ctx_replay_innodb_complement.result | 14 ++++++++++++++ .../main/opt_ctx_replay_innodb_preferably.result | 14 ++++++++++++++ sql/opt_context_store_replay.cc | 1 + 7 files changed, 44 insertions(+), 2 deletions(-) rename mysql-test/main/{opt_context_store_sys_vars.opt => opt_context_replay_basic.opt} (100%) rename mysql-test/main/{opt_context_store_sys_vars.result => opt_context_replay_basic.result} (96%) rename mysql-test/main/{opt_context_store_sys_vars.test => opt_context_replay_basic.test} (83%) diff --git a/mysql-test/include/opt_ctx_cmp_2_runs_of_query.inc b/mysql-test/include/opt_ctx_cmp_2_runs_of_query.inc index 38c2ef7476816..ab05efa6964fd 100644 --- a/mysql-test/include/opt_ctx_cmp_2_runs_of_query.inc +++ b/mysql-test/include/opt_ctx_cmp_2_runs_of_query.inc @@ -36,6 +36,7 @@ eval drop table $table_name; -- source "$MYSQLTEST_VARDIR/tmp/dump1.sql" -- enable_query_log +set optimizer_replay_context= 'opt_context'; let $explain_output=`$explain_query`; evalp set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); diff --git a/mysql-test/main/opt_context_store_sys_vars.opt b/mysql-test/main/opt_context_replay_basic.opt similarity index 100% rename from mysql-test/main/opt_context_store_sys_vars.opt rename to mysql-test/main/opt_context_replay_basic.opt diff --git a/mysql-test/main/opt_context_store_sys_vars.result b/mysql-test/main/opt_context_replay_basic.result similarity index 96% rename from mysql-test/main/opt_context_store_sys_vars.result rename to mysql-test/main/opt_context_replay_basic.result index 6fbb2c8d02711..0564a0dad4ed0 100644 --- a/mysql-test/main/opt_context_store_sys_vars.result +++ b/mysql-test/main/opt_context_replay_basic.result @@ -159,5 +159,11 @@ set optimizer_replay_context='opt_context'; select count(*) from t1; count(*) 0 -drop table t1; +set optimizer_replay_context=''; +create table t2( a int); +# +# MDEV-39222: Errors shown when inserting data into a new table +# +insert into t2 select seq from seq_1_to_10; +drop table t1, t2; drop database db1; diff --git a/mysql-test/main/opt_context_store_sys_vars.test b/mysql-test/main/opt_context_replay_basic.test similarity index 83% rename from mysql-test/main/opt_context_store_sys_vars.test rename to mysql-test/main/opt_context_replay_basic.test index e86d7e2fedbf7..236553ee77502 100644 --- a/mysql-test/main/opt_context_store_sys_vars.test +++ b/mysql-test/main/opt_context_replay_basic.test @@ -35,7 +35,13 @@ drop table t1; --source "$MYSQLTEST_VARDIR/tmp/dump1.sql" +create table t2( a int); +--echo # +--echo # MDEV-39222: Errors shown when inserting data into a new table +--echo # +insert into t2 select seq from seq_1_to_10; + --remove_file "$MYSQLTEST_VARDIR/tmp/dump1.sql" -drop table t1; +drop table t1, t2; drop database db1; diff --git a/mysql-test/main/opt_ctx_replay_innodb_complement.result b/mysql-test/main/opt_ctx_replay_innodb_complement.result index 68c0de73381d9..53eed0c2335c7 100644 --- a/mysql-test/main/opt_ctx_replay_innodb_complement.result +++ b/mysql-test/main/opt_ctx_replay_innodb_complement.result @@ -148,6 +148,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -265,6 +266,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -379,6 +381,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -499,6 +502,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -629,6 +633,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -743,6 +748,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -848,6 +854,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -932,6 +939,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1005,6 +1013,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1095,6 +1104,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1179,6 +1189,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1258,6 +1269,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1384,6 +1396,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1518,6 +1531,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); diff --git a/mysql-test/main/opt_ctx_replay_innodb_preferably.result b/mysql-test/main/opt_ctx_replay_innodb_preferably.result index 09de9f83a919e..e5bed53a00711 100644 --- a/mysql-test/main/opt_ctx_replay_innodb_preferably.result +++ b/mysql-test/main/opt_ctx_replay_innodb_preferably.result @@ -148,6 +148,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -265,6 +266,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -379,6 +381,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -499,6 +502,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -629,6 +633,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -743,6 +748,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -848,6 +854,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -932,6 +939,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1005,6 +1013,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1095,6 +1104,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1179,6 +1189,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1258,6 +1269,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1384,6 +1396,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); @@ -1518,6 +1531,7 @@ EXPLAIN ] } } +set optimizer_replay_context= 'opt_context'; set @explain_output= '$explain_output'; set @explain_output= (select json_pretty(round_cost(@explain_output))); select JSON_EQUALS(@saved_explain_output, @explain_output); diff --git a/sql/opt_context_store_replay.cc b/sql/opt_context_store_replay.cc index dca60e674c067..ea8dcf1ff25e4 100644 --- a/sql/opt_context_store_replay.cc +++ b/sql/opt_context_store_replay.cc @@ -610,6 +610,7 @@ bool store_optimizer_context(THD *thd) sql_script.append(STRING_WITH_LEN(";\n\n")); sql_script.append(thd->query(), thd->query_length()); sql_script.append(STRING_WITH_LEN(";\n\n")); + sql_script.append(STRING_WITH_LEN("set optimizer_replay_context='';\n\n")); thd->captured_opt_ctx= new Optimizer_context_capture(thd, sql_script); if (!thd->captured_opt_ctx) return true; // OOM