| 6307 | } |
| 6308 | |
| 6309 | void THD::restore_sub_statement_state(Sub_statement_state *backup) |
| 6310 | { |
| 6311 | DBUG_ENTER("THD::restore_sub_statement_state"); |
| 6312 | #ifndef EMBEDDED_LIBRARY |
| 6313 | /* BUG#33029, if we are replicating from a buggy master, restore |
| 6314 | auto_inc_intervals_forced so that the top statement can use the |
| 6315 | INSERT_ID value set before this statement. |
| 6316 | */ |
| 6317 | if (rpl_master_erroneous_autoinc(this)) |
| 6318 | { |
| 6319 | auto_inc_intervals_forced.copy_shallow(&backup->auto_inc_intervals_forced); |
| 6320 | DBUG_ASSERT(backup->auto_inc_intervals_forced.nb_elements() == 0); |
| 6321 | } |
| 6322 | #endif |
| 6323 | |
| 6324 | /* |
| 6325 | To save resources we want to release savepoints which were created |
| 6326 | during execution of function or trigger before leaving their savepoint |
| 6327 | level. It is enough to release first savepoint set on this level since |
| 6328 | all later savepoints will be released automatically. |
| 6329 | */ |
| 6330 | if (transaction->savepoints) |
| 6331 | { |
| 6332 | SAVEPOINT *sv; |
| 6333 | for (sv= transaction->savepoints; sv->prev; sv= sv->prev) |
| 6334 | {} |
| 6335 | /* ha_release_savepoint() never returns error. */ |
| 6336 | (void)ha_release_savepoint(this, sv); |
| 6337 | } |
| 6338 | count_cuted_fields= backup->count_cuted_fields; |
| 6339 | transaction->savepoints= backup->savepoints; |
| 6340 | variables.option_bits= backup->option_bits; |
| 6341 | in_sub_stmt= backup->in_sub_stmt; |
| 6342 | enable_slow_log= backup->enable_slow_log; |
| 6343 | first_successful_insert_id_in_prev_stmt= |
| 6344 | backup->first_successful_insert_id_in_prev_stmt; |
| 6345 | first_successful_insert_id_in_cur_stmt= |
| 6346 | backup->first_successful_insert_id_in_cur_stmt; |
| 6347 | limit_found_rows= backup->limit_found_rows; |
| 6348 | client_capabilities= backup->client_capabilities; |
| 6349 | |
| 6350 | /* Restore statistic needed for slow log */ |
| 6351 | add_slow_query_state(backup); |
| 6352 | if (backup->sent_row_count) |
| 6353 | MYSQL_SET_STATEMENT_ROWS_SENT(m_statement_psi, m_sent_row_count); |
| 6354 | if (backup->examined_row_count) |
| 6355 | MYSQL_SET_STATEMENT_ROWS_EXAMINED(m_statement_psi, m_examined_row_count); |
| 6356 | |
| 6357 | /* |
| 6358 | If we've left sub-statement mode, reset the fatal error flag. |
| 6359 | Otherwise keep the current value, to propagate it up the sub-statement |
| 6360 | stack. |
| 6361 | |
| 6362 | NOTE: is_fatal_sub_stmt_error can be set only if we've been in the |
| 6363 | sub-statement mode. |
| 6364 | */ |
| 6365 | if (!in_sub_stmt) |
| 6366 | is_fatal_sub_stmt_error= false; |
no test coverage detected