Fixed failure in mtr --ps sql_sequence.create sql_sequence.read_only
Problem was that we got an error in sequence_insert while opening the newly created sequence table in an prepared statement as the table id didn't match. Fixed by temporarly removing the reprepare observer during sequence_insert as there can never be a table missmatch in this case.
This commit is contained in:
parent
099e87e090
commit
958e634d25
@ -263,6 +263,7 @@ bool sequence_insert(THD *thd, LEX *lex, TABLE_LIST *table_list)
|
||||
int error;
|
||||
TABLE *table;
|
||||
TABLE_LIST::enum_open_strategy save_open_strategy;
|
||||
Reprepare_observer *save_reprepare_observer;
|
||||
sequence_definition *seq= lex->create_info.seq_create_info;
|
||||
bool temporary_table= table_list->table != 0;
|
||||
MY_BITMAP *save_write_set;
|
||||
@ -281,6 +282,12 @@ bool sequence_insert(THD *thd, LEX *lex, TABLE_LIST *table_list)
|
||||
*/
|
||||
thd->open_options|= HA_OPEN_FOR_CREATE;
|
||||
save_open_strategy= table_list->open_strategy;
|
||||
/*
|
||||
We have to reset the reprepare observer to be able to open the
|
||||
table under prepared statements.
|
||||
*/
|
||||
save_reprepare_observer= thd->m_reprepare_observer;
|
||||
thd->m_reprepare_observer= 0;
|
||||
table_list->open_strategy= TABLE_LIST::OPEN_IF_EXISTS;
|
||||
table_list->open_type= OT_BASE_ONLY;
|
||||
error= open_and_lock_tables(thd, table_list, FALSE,
|
||||
@ -288,6 +295,7 @@ bool sequence_insert(THD *thd, LEX *lex, TABLE_LIST *table_list)
|
||||
MYSQL_OPEN_HAS_MDL_LOCK);
|
||||
table_list->open_strategy= save_open_strategy;
|
||||
thd->open_options&= ~HA_OPEN_FOR_CREATE;
|
||||
thd->m_reprepare_observer= save_reprepare_observer;
|
||||
if (error)
|
||||
DBUG_RETURN(TRUE); /* purify inspected */
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user