mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Cleanups: DELETE HISTORY [MDEV-19814]
* Made make_versioned_*() proxies inline; * Renamed truncate_history to delete_history Part of: MDEV-19814 Server crash in row_upd_del_mark_clust_rec or Assertion `update->n_fields < ulint(table->n_cols + table->n_v_cols)' failed in upd_node_t::make_versioned_helper
This commit is contained in:
@ -305,8 +305,8 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
|||||||
|
|
||||||
THD_STAGE_INFO(thd, stage_init_update);
|
THD_STAGE_INFO(thd, stage_init_update);
|
||||||
|
|
||||||
bool truncate_history= table_list->vers_conditions.is_set();
|
bool delete_history= table_list->vers_conditions.is_set();
|
||||||
if (truncate_history)
|
if (delete_history)
|
||||||
{
|
{
|
||||||
if (table_list->is_view_or_derived())
|
if (table_list->is_view_or_derived())
|
||||||
{
|
{
|
||||||
@ -696,7 +696,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
|||||||
while (!(error=info.read_record()) && !thd->killed &&
|
while (!(error=info.read_record()) && !thd->killed &&
|
||||||
! thd->is_error())
|
! thd->is_error())
|
||||||
{
|
{
|
||||||
if (record_should_be_deleted(thd, table, select, explain, truncate_history))
|
if (record_should_be_deleted(thd, table, select, explain, delete_history))
|
||||||
{
|
{
|
||||||
table->file->position(table->record[0]);
|
table->file->position(table->record[0]);
|
||||||
if (unlikely((error=
|
if (unlikely((error=
|
||||||
@ -727,10 +727,10 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
|||||||
{
|
{
|
||||||
if (delete_while_scanning)
|
if (delete_while_scanning)
|
||||||
delete_record= record_should_be_deleted(thd, table, select, explain,
|
delete_record= record_should_be_deleted(thd, table, select, explain,
|
||||||
truncate_history);
|
delete_history);
|
||||||
if (delete_record)
|
if (delete_record)
|
||||||
{
|
{
|
||||||
if (!truncate_history && table->triggers &&
|
if (!delete_history && table->triggers &&
|
||||||
table->triggers->process_triggers(thd, TRG_EVENT_DELETE,
|
table->triggers->process_triggers(thd, TRG_EVENT_DELETE,
|
||||||
TRG_ACTION_BEFORE, FALSE))
|
TRG_ACTION_BEFORE, FALSE))
|
||||||
{
|
{
|
||||||
@ -748,7 +748,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
|||||||
if (likely(!error))
|
if (likely(!error))
|
||||||
{
|
{
|
||||||
deleted++;
|
deleted++;
|
||||||
if (!truncate_history && table->triggers &&
|
if (!delete_history && table->triggers &&
|
||||||
table->triggers->process_triggers(thd, TRG_EVENT_DELETE,
|
table->triggers->process_triggers(thd, TRG_EVENT_DELETE,
|
||||||
TRG_ACTION_AFTER, FALSE))
|
TRG_ACTION_AFTER, FALSE))
|
||||||
{
|
{
|
||||||
|
@ -589,14 +589,6 @@ struct upd_node_t{
|
|||||||
/* column assignment list */
|
/* column assignment list */
|
||||||
ulint magic_n;
|
ulint magic_n;
|
||||||
|
|
||||||
/** Also set row_start = CURRENT_TIMESTAMP/trx->id
|
|
||||||
@param[in] trx transaction */
|
|
||||||
void make_versioned_update(const trx_t* trx);
|
|
||||||
/** Only set row_end = CURRENT_TIMESTAMP/trx->id.
|
|
||||||
Do not touch other fields at all.
|
|
||||||
@param[in] trx transaction */
|
|
||||||
void make_versioned_delete(const trx_t* trx);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Appends row_start or row_end field to update vector and sets a
|
/** Appends row_start or row_end field to update vector and sets a
|
||||||
CURRENT_TIMESTAMP/trx->id value to it.
|
CURRENT_TIMESTAMP/trx->id value to it.
|
||||||
@ -605,6 +597,24 @@ private:
|
|||||||
@param[in] trx transaction
|
@param[in] trx transaction
|
||||||
@param[in] vers_sys_idx table->row_start or table->row_end */
|
@param[in] vers_sys_idx table->row_start or table->row_end */
|
||||||
void make_versioned_helper(const trx_t* trx, ulint idx);
|
void make_versioned_helper(const trx_t* trx, ulint idx);
|
||||||
|
|
||||||
|
public:
|
||||||
|
/** Also set row_start = CURRENT_TIMESTAMP/trx->id
|
||||||
|
@param[in] trx transaction */
|
||||||
|
void make_versioned_update(const trx_t* trx)
|
||||||
|
{
|
||||||
|
make_versioned_helper(trx, table->vers_start);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Only set row_end = CURRENT_TIMESTAMP/trx->id.
|
||||||
|
Do not touch other fields at all.
|
||||||
|
@param[in] trx transaction */
|
||||||
|
void make_versioned_delete(const trx_t* trx)
|
||||||
|
{
|
||||||
|
update->n_fields = 0;
|
||||||
|
is_delete = VERSIONED_DELETE;
|
||||||
|
make_versioned_helper(trx, table->vers_end);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define UPD_NODE_MAGIC_N 1579975
|
#define UPD_NODE_MAGIC_N 1579975
|
||||||
|
@ -3485,7 +3485,8 @@ void upd_node_t::make_versioned_helper(const trx_t* trx, ulint idx)
|
|||||||
|
|
||||||
dict_index_t* clust_index = dict_table_get_first_index(table);
|
dict_index_t* clust_index = dict_table_get_first_index(table);
|
||||||
|
|
||||||
/* row_create_update_node_for_mysql() pre-allocated this much */
|
/* row_create_update_node_for_mysql() pre-allocated this much.
|
||||||
|
At least one PK column always remains unchanged. */
|
||||||
ut_ad(update->n_fields < ulint(table->n_cols + table->n_v_cols));
|
ut_ad(update->n_fields < ulint(table->n_cols + table->n_v_cols));
|
||||||
|
|
||||||
update->n_fields++;
|
update->n_fields++;
|
||||||
@ -3505,19 +3506,3 @@ void upd_node_t::make_versioned_helper(const trx_t* trx, ulint idx)
|
|||||||
dfield_set_data(&ufield->new_val, update->vers_sys_value, col->len);
|
dfield_set_data(&ufield->new_val, update->vers_sys_value, col->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Also set row_start = CURRENT_TIMESTAMP/trx->id
|
|
||||||
@param[in] trx transaction */
|
|
||||||
void upd_node_t::make_versioned_update(const trx_t* trx)
|
|
||||||
{
|
|
||||||
make_versioned_helper(trx, table->vers_start);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Only set row_end = CURRENT_TIMESTAMP/trx->id.
|
|
||||||
Do not touch other fields at all.
|
|
||||||
@param[in] trx transaction */
|
|
||||||
void upd_node_t::make_versioned_delete(const trx_t* trx)
|
|
||||||
{
|
|
||||||
update->n_fields = 0;
|
|
||||||
is_delete = VERSIONED_DELETE;
|
|
||||||
make_versioned_helper(trx, table->vers_end);
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user