Commit e9ffed07 authored by Dmitry Shulga's avatar Dmitry Shulga

MDEV-25973: fixed the test plugins.test_sql_service

Set the data member THD::m_prepare_observer temporary to nullptr
to avoid running a handler when a table version in TABLE_LIST
differs from a value of version in TABLE_SHARE. It happens
for any table when the method Ed_connection::execute_direct()
is called from execute_sql_command() since the data members
TABLE_LIST::m_table_ref_type and TABLES_LIST::m_table_ref_version
have zero values on opening a table but corresponding members
of TABLE_SHARE doesn't have. If the function execute_sql_command()
is called on handling a Prepared statement it results in
issuing the error ER_NEED_REPREPARE that is not issued in case the
statement is run in regular way. So, to make fix the issue
reset the data member THD::m_prepare_observer before running
Ed_connection::execute_direct() and restoring it on return.
parent 675b72d0
...@@ -6093,6 +6093,7 @@ extern "C" int execute_sql_command(const char *command, ...@@ -6093,6 +6093,7 @@ extern "C" int execute_sql_command(const char *command,
THD *new_thd= 0; THD *new_thd= 0;
int result; int result;
my_bool qc_save= 0; my_bool qc_save= 0;
Reprepare_observer *save_reprepare_observer= nullptr;
if (!thd) if (!thd)
{ {
...@@ -6113,6 +6114,8 @@ extern "C" int execute_sql_command(const char *command, ...@@ -6113,6 +6114,8 @@ extern "C" int execute_sql_command(const char *command,
qc_save= thd->query_cache_is_applicable; qc_save= thd->query_cache_is_applicable;
thd->query_cache_is_applicable= 0; thd->query_cache_is_applicable= 0;
save_reprepare_observer= thd->m_reprepare_observer;
thd->m_reprepare_observer= nullptr;
} }
sql_text.str= (char *) command; sql_text.str= (char *) command;
sql_text.length= strlen(command); sql_text.length= strlen(command);
...@@ -6150,7 +6153,10 @@ extern "C" int execute_sql_command(const char *command, ...@@ -6150,7 +6153,10 @@ extern "C" int execute_sql_command(const char *command,
if (new_thd) if (new_thd)
delete new_thd; delete new_thd;
else else
{
thd->query_cache_is_applicable= qc_save; thd->query_cache_is_applicable= qc_save;
thd->m_reprepare_observer= save_reprepare_observer;
}
*hosts= 0; *hosts= 0;
return result; return result;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment