summaryrefslogtreecommitdiff
path: root/sql/sql_partition.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_partition.cc')
-rw-r--r--sql/sql_partition.cc22
1 files changed, 17 insertions, 5 deletions
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 08ba4d84d9b..051249db997 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -3426,11 +3426,21 @@ int vers_get_partition_id(partition_info *part_info,
DBUG_ASSERT(part_info);
Field *sys_trx_end= part_info->part_field_array[STAT_TRX_END];
DBUG_ASSERT(sys_trx_end);
- DBUG_ASSERT(part_info->table);
+ TABLE *table= part_info->table;
+ DBUG_ASSERT(table);
Vers_part_info *vers_info= part_info->vers_info;
- DBUG_ASSERT(vers_info && vers_info->initialized());
- DBUG_ASSERT(sys_trx_end->table == part_info->table && part_info->table->versioned());
- DBUG_ASSERT(part_info->table->vers_end_field() == sys_trx_end);
+ DBUG_ASSERT(vers_info);
+ DBUG_ASSERT(vers_info->initialized());
+ DBUG_ASSERT(sys_trx_end->table == table);
+ bool tmp_off= false;
+ if (!table->versioned() && table->file->native_versioned())
+ {
+ // in copy_data_between_tables() versioning may be temporarily turned off
+ tmp_off= true;
+ table->s->versioned= true;
+ }
+ DBUG_ASSERT(table->versioned());
+ DBUG_ASSERT(table->vers_end_field() == sys_trx_end);
// new rows have NULL in sys_trx_end
if (sys_trx_end->is_max() || sys_trx_end->is_null())
@@ -3440,7 +3450,6 @@ int vers_get_partition_id(partition_info *part_info,
else // row is historical
{
THD *thd= current_thd;
- TABLE *table= part_info->table;
switch (thd->lex->sql_command)
{
@@ -3478,6 +3487,9 @@ int vers_get_partition_id(partition_info *part_info,
*part_id= vers_info->hist_part->id;
}
+ if (tmp_off)
+ table->s->versioned= false;
+
DBUG_PRINT("exit",("partition: %d", *part_id));
DBUG_RETURN(0);
}