mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
cleanup: prepare_for_insert() -> prepare_for_modify()
make handler::prepare_for_insert() to be called to prepare the handler for writes, INSERT/UPDATE/DELETE.
This commit is contained in:
parent
0e2b9e7621
commit
f2512c0fa8
8 changed files with 42 additions and 33 deletions
|
@ -8087,20 +8087,30 @@ bool handler::prepare_for_row_logging()
|
|||
|
||||
|
||||
/*
|
||||
Do all initialization needed for insert
|
||||
Do all initialization needed for writes: INSERT/UPDATE/DELETE
|
||||
|
||||
can_set_fields is true if values of individual fields in a record
|
||||
can be set. That is, INSERT/UPDATE, need uniqueness checks, for example.
|
||||
|
||||
can_lookup is true if the operation needs to look up rows in the table,
|
||||
that is UPDATE/DELETE, and here we need a separate `lookup_handler`
|
||||
to avoid disrupting the state of `this`
|
||||
*/
|
||||
|
||||
int handler::prepare_for_insert(bool do_create)
|
||||
int handler::prepare_for_modify(bool can_set_fields, bool can_lookup)
|
||||
{
|
||||
if (table->open_hlindexes_for_write())
|
||||
return 1;
|
||||
|
||||
/* Preparation for unique of blob's */
|
||||
if (table->s->long_unique_table || table->s->period.unique_keys)
|
||||
if (can_set_fields)
|
||||
{
|
||||
if (do_create && create_lookup_handler())
|
||||
return 1;
|
||||
alloc_lookup_buffer();
|
||||
/* Preparation for unique of blob's */
|
||||
if (table->s->long_unique_table || table->s->period.unique_keys)
|
||||
{
|
||||
if (can_lookup && create_lookup_handler())
|
||||
return 1;
|
||||
alloc_lookup_buffer();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -8109,8 +8119,8 @@ int handler::prepare_for_insert(bool do_create)
|
|||
int handler::ha_write_row(const uchar *buf)
|
||||
{
|
||||
int error;
|
||||
DBUG_ASSERT(table_share->tmp_table != NO_TMP_TABLE ||
|
||||
m_lock_type == F_WRLCK);
|
||||
DBUG_ASSERT(table_share->tmp_table != NO_TMP_TABLE || m_lock_type == F_WRLCK);
|
||||
DBUG_ASSERT(buf == table->record[0]);
|
||||
DBUG_ENTER("handler::ha_write_row");
|
||||
DEBUG_SYNC_C("ha_write_row_start");
|
||||
#ifdef WITH_WSREP
|
||||
|
@ -8131,7 +8141,7 @@ int handler::ha_write_row(const uchar *buf)
|
|||
DBUG_ASSERT(inited == NONE || lookup_handler != this);
|
||||
if ((error= check_duplicate_long_entries(buf)))
|
||||
{
|
||||
if (table->next_number_field && buf == table->record[0])
|
||||
if (table->next_number_field)
|
||||
if (int err= update_auto_increment())
|
||||
error= err;
|
||||
DBUG_RETURN(error);
|
||||
|
@ -8265,9 +8275,9 @@ int handler::ha_delete_row(const uchar *buf)
|
|||
m_lock_type == F_WRLCK);
|
||||
/*
|
||||
Normally table->record[0] is used, but sometimes table->record[1] is used.
|
||||
(notably, for REPLACE and in sql_acl.cc)
|
||||
*/
|
||||
DBUG_ASSERT(buf == table->record[0] ||
|
||||
buf == table->record[1]);
|
||||
DBUG_ASSERT(buf == table->record[0] || buf == table->record[1]);
|
||||
|
||||
MYSQL_DELETE_ROW_START(table_share->db.str, table_share->table_name.str);
|
||||
mark_trx_read_write();
|
||||
|
|
|
@ -5162,9 +5162,8 @@ public:
|
|||
virtual int delete_table(const char *name);
|
||||
bool check_table_binlog_row_based();
|
||||
bool prepare_for_row_logging();
|
||||
int prepare_for_insert(bool do_create);
|
||||
int binlog_log_row(const uchar *before_record,
|
||||
const uchar *after_record,
|
||||
int prepare_for_modify(bool can_set_fields, bool can_lookup);
|
||||
int binlog_log_row(const uchar *before_record, const uchar *after_record,
|
||||
Log_func *log_func);
|
||||
|
||||
inline void clear_cached_table_binlog_row_based_flag()
|
||||
|
|
|
@ -5114,7 +5114,8 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
|
|||
Rows_log_event::Db_restore_ctx restore_ctx(this);
|
||||
master_had_triggers= table->master_had_triggers;
|
||||
bool transactional_table= table->file->has_transactions_and_rollback();
|
||||
table->file->prepare_for_insert(get_general_type_code() != WRITE_ROWS_EVENT);
|
||||
table->file->prepare_for_modify(true,
|
||||
get_general_type_code() != WRITE_ROWS_EVENT);
|
||||
|
||||
/*
|
||||
table == NULL means that this table should not be replicated
|
||||
|
|
|
@ -467,6 +467,7 @@ bool Sql_cmd_delete::delete_from_single_table(THD *thd)
|
|||
if (thd->lex->describe)
|
||||
goto produce_explain_and_leave;
|
||||
|
||||
table->file->prepare_for_modify(false, false);
|
||||
if (likely(!(error=table->file->ha_delete_all_rows())))
|
||||
{
|
||||
/*
|
||||
|
@ -849,8 +850,8 @@ bool Sql_cmd_delete::delete_from_single_table(THD *thd)
|
|||
&& !table->versioned()
|
||||
&& table->file->has_transactions();
|
||||
|
||||
if (table->versioned(VERS_TIMESTAMP) || (table_list->has_period()))
|
||||
table->file->prepare_for_insert(1);
|
||||
table->file->prepare_for_modify(table->versioned(VERS_TIMESTAMP) ||
|
||||
table_list->has_period(), true);
|
||||
DBUG_ASSERT(table->file->inited != handler::NONE);
|
||||
|
||||
THD_STAGE_INFO(thd, stage_updating);
|
||||
|
@ -1178,9 +1179,7 @@ multi_delete::initialize_tables(JOIN *join)
|
|||
normal_tables= 1;
|
||||
tbl->prepare_triggers_for_delete_stmt_or_event();
|
||||
tbl->prepare_for_position();
|
||||
|
||||
if (tbl->versioned(VERS_TIMESTAMP))
|
||||
tbl->file->prepare_for_insert(1);
|
||||
tbl->file->prepare_for_modify(tbl->versioned(VERS_TIMESTAMP), true);
|
||||
}
|
||||
else if ((tab->type != JT_SYSTEM && tab->type != JT_CONST) &&
|
||||
walk == delete_tables)
|
||||
|
|
|
@ -956,7 +956,7 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
|
|||
if (lock_type != TL_WRITE_DELAYED)
|
||||
#endif /* EMBEDDED_LIBRARY */
|
||||
{
|
||||
bool create_lookup_handler= duplic != DUP_ERROR;
|
||||
bool create_lookup_handler= false;
|
||||
if (duplic != DUP_ERROR || ignore)
|
||||
{
|
||||
create_lookup_handler= true;
|
||||
|
@ -967,7 +967,7 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
|
|||
goto abort;
|
||||
}
|
||||
}
|
||||
if (table->file->prepare_for_insert(create_lookup_handler))
|
||||
if (table->file->prepare_for_modify(true, create_lookup_handler))
|
||||
goto abort;
|
||||
/**
|
||||
This is a simple check for the case when the table has a trigger
|
||||
|
@ -3686,7 +3686,7 @@ bool Delayed_insert::handle_inserts(void)
|
|||
handler_writes() will not have called decide_logging_format.
|
||||
*/
|
||||
table->file->prepare_for_row_logging();
|
||||
table->file->prepare_for_insert(1);
|
||||
table->file->prepare_for_modify(true, true);
|
||||
using_bin_log= table->file->row_logging;
|
||||
|
||||
/*
|
||||
|
@ -4195,7 +4195,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
|||
#endif
|
||||
|
||||
thd->cuted_fields=0;
|
||||
bool create_lookup_handler= info.handle_duplicates != DUP_ERROR;
|
||||
bool create_lookup_handler= false;
|
||||
if (info.ignore || info.handle_duplicates != DUP_ERROR)
|
||||
{
|
||||
create_lookup_handler= true;
|
||||
|
@ -4206,7 +4206,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
|||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
table->file->prepare_for_insert(create_lookup_handler);
|
||||
table->file->prepare_for_modify(true, create_lookup_handler);
|
||||
if (info.handle_duplicates == DUP_REPLACE &&
|
||||
(!table->triggers || !table->triggers->has_delete_triggers()))
|
||||
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
|
||||
|
@ -4980,7 +4980,7 @@ select_create::prepare(List<Item> &_values, SELECT_LEX_UNIT *u)
|
|||
|
||||
restore_record(table,s->default_values); // Get empty record
|
||||
thd->cuted_fields=0;
|
||||
bool create_lookup_handler= info.handle_duplicates != DUP_ERROR;
|
||||
bool create_lookup_handler= false;
|
||||
if (info.ignore || info.handle_duplicates != DUP_ERROR)
|
||||
{
|
||||
create_lookup_handler= true;
|
||||
|
@ -4991,7 +4991,7 @@ select_create::prepare(List<Item> &_values, SELECT_LEX_UNIT *u)
|
|||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
table->file->prepare_for_insert(create_lookup_handler);
|
||||
table->file->prepare_for_modify(true, create_lookup_handler);
|
||||
if (info.handle_duplicates == DUP_REPLACE &&
|
||||
(!table->triggers || !table->triggers->has_delete_triggers()))
|
||||
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
|
||||
|
|
|
@ -685,14 +685,14 @@ int mysql_load(THD *thd, const sql_exchange *ex, TABLE_LIST *table_list,
|
|||
thd->abort_on_warning= !ignore && thd->is_strict_mode();
|
||||
thd->get_stmt_da()->reset_current_row_for_warning(1);
|
||||
|
||||
bool create_lookup_handler= handle_duplicates != DUP_ERROR;
|
||||
bool create_lookup_handler= false;
|
||||
if ((table_list->table->file->ha_table_flags() & HA_DUPLICATE_POS))
|
||||
{
|
||||
create_lookup_handler= true;
|
||||
if ((error= table_list->table->file->ha_rnd_init_with_error(0)))
|
||||
goto err;
|
||||
}
|
||||
table->file->prepare_for_insert(create_lookup_handler);
|
||||
table->file->prepare_for_modify(true, create_lookup_handler);
|
||||
thd_progress_init(thd, 2);
|
||||
fix_rownum_pointers(thd, thd->lex->current_select, &info.copied);
|
||||
if (table_list->table->validate_default_values_of_unset_fields(thd))
|
||||
|
|
|
@ -12333,7 +12333,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
|||
|
||||
from->file->column_bitmaps_signal();
|
||||
|
||||
to->file->prepare_for_insert(0);
|
||||
to->file->prepare_for_modify(true, false);
|
||||
DBUG_ASSERT(to->file->inited == handler::NONE);
|
||||
|
||||
/* Tell handler that we have values for all columns in the to table */
|
||||
|
|
|
@ -956,7 +956,7 @@ update_begin:
|
|||
can_compare_record= records_are_comparable(table);
|
||||
explain->tracker.on_scan_init();
|
||||
|
||||
table->file->prepare_for_insert(1);
|
||||
table->file->prepare_for_modify(true, true);
|
||||
DBUG_ASSERT(table->file->inited != handler::NONE);
|
||||
|
||||
THD_STAGE_INFO(thd, stage_updating);
|
||||
|
@ -1892,7 +1892,7 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
|||
table->read_set= &table->def_read_set;
|
||||
bitmap_union(table->read_set, &table->tmp_set);
|
||||
if (!(thd->lex->context_analysis_only & CONTEXT_ANALYSIS_ONLY_PREPARE))
|
||||
table->file->prepare_for_insert(1);
|
||||
table->file->prepare_for_modify(true, true);
|
||||
}
|
||||
}
|
||||
if (unlikely(error))
|
||||
|
|
Loading…
Reference in a new issue