mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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.
This commit is contained in:
@ -6093,6 +6093,7 @@ extern "C" int execute_sql_command(const char *command,
|
||||
THD *new_thd= 0;
|
||||
int result;
|
||||
my_bool qc_save= 0;
|
||||
Reprepare_observer *save_reprepare_observer= nullptr;
|
||||
|
||||
if (!thd)
|
||||
{
|
||||
@ -6113,6 +6114,8 @@ extern "C" int execute_sql_command(const char *command,
|
||||
|
||||
qc_save= thd->query_cache_is_applicable;
|
||||
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.length= strlen(command);
|
||||
@ -6150,7 +6153,10 @@ extern "C" int execute_sql_command(const char *command,
|
||||
if (new_thd)
|
||||
delete new_thd;
|
||||
else
|
||||
{
|
||||
thd->query_cache_is_applicable= qc_save;
|
||||
thd->m_reprepare_observer= save_reprepare_observer;
|
||||
}
|
||||
|
||||
*hosts= 0;
|
||||
return result;
|
||||
|
Reference in New Issue
Block a user