MCPcopy Create free account
hub / github.com/MariaDB/server / restore_sub_statement_state

Method restore_sub_statement_state

sql/sql_class.cc:6309–6380  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6307}
6308
6309void 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;

Callers 2

process_triggersMethod · 0.80
execute_implMethod · 0.80

Calls 5

ha_release_savepointFunction · 0.85
copy_shallowMethod · 0.80
nb_elementsMethod · 0.80
stop_union_eventsMethod · 0.80

Tested by

no test coverage detected