mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Remove the flag vers_update_trt
THD::vers_update_trt, trx_t::vers_update_trt, trx_savept_t::vers_update_trt: Remove. Instead, determine from trx_t::mod_tables whether versioned columns were affected by the transaction. handlerton::prepare_commit_versioned: Replaces vers_get_trt_data. Return the transaction start ID and also the commit ID, in case the transaction modified any system-versioned columns (0 if not). TR_table::store_data(): Remove (merge with update() below). TR_table::update(): Add the parameters start_id, end_id. ha_commit_trans(): Remove a condition on SQLCOM_ALTER_TABLE. If we need something special for ALTER TABLE...ALGORITHM=INPLACE, that can be done inside InnoDB by modifying trx_t::mod_tables. innodb_prepare_commit_versioned(): Renamed from innodb_get_trt_data(). Check trx_t::mod_tables to see if any changes to versioned columns are present. trx_mod_table_time_t: A pair of logical timestamps, replacing the undo_no_t in trx_mod_tables_t. Keep track of not only the first modification to a persistent table in each transaction, but also the first modification of a versioned column in a table. dtype_t, dict_col_t: Add the accessor is_any_versioned(), to check if the type refers to a system-versioned user or system column. upd_t::affects_versioned(): Check if an update affects a versioned column. trx_undo_report_row_operation(): If a versioned column is affected by the update, invoke trx_mod_table_time_t::set_versioned(). trx_rollback_to_savepoint_low(): If all changes to versioned columns were rolled back, invoke trx_mod_table_time_t::rollback_versioned(), so that trx_mod_table_time_t::is_versioned() will no longer hold.
This commit is contained in:
committed by
Aleksey Midenkov
parent
03fbfeef66
commit
0b89a42ffc
@ -7442,10 +7442,16 @@ static bool mysql_inplace_alter_table(THD *thd,
|
||||
|
||||
{
|
||||
TR_table trt(thd, true);
|
||||
if (thd->vers_update_trt && trt != *table_list)
|
||||
if (trt == *table_list || !use_transaction_registry);
|
||||
else if (ulonglong (*prepare)(THD*,ulonglong*)= table->file->ht->
|
||||
prepare_commit_versioned)
|
||||
{
|
||||
if (use_transaction_registry && trt.update())
|
||||
return true;
|
||||
ulonglong trx_start_id, trx_end_id= prepare(thd, &trx_start_id);
|
||||
if (trx_end_id && trt.update(trx_start_id, trx_end_id))
|
||||
{
|
||||
my_error(ER_UNKNOWN_ERROR, MYF(0));
|
||||
goto rollback;
|
||||
}
|
||||
}
|
||||
|
||||
if (table->file->ha_commit_inplace_alter_table(altered_table,
|
||||
|
Reference in New Issue
Block a user