mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-15951 system versioning by trx id doesn't work with partitioning
Fix partitioning for trx_id-versioned tables. `partition by hash`, `range` and others now work. `partition by system_time` is forbidden. Currently we cannot use row_start and row_end in `partition by`, because insertion of versioned field is done by engine's handler, as well as row_start/row_end's value set up, which is a transaction id -- so it's also forbidden. The drawback is that it's now impossible to use `partition by key()` without parameters for such tables, because it references row_start and row_end implicitly. * add handler::vers_can_native() * drop Table_scope_and_contents_source_st::vers_native() * drop partition_element::find_engine_flag as unused * forbid versioning partitioning for trx_id as not supported * adopt vers tests for trx_id partitioning * forbid any row_end referencing in `partition by` clauses, including implicit `by key()`
This commit is contained in:
committed by
Sergei Golubchik
parent
f6ee132491
commit
e6230e844c
@ -341,7 +341,15 @@ static bool set_up_field_array(THD *thd, TABLE *table,
|
||||
while ((field= *(ptr++)))
|
||||
{
|
||||
if (field->flags & GET_FIXED_FIELDS_FLAG)
|
||||
{
|
||||
if (table->versioned(VERS_TRX_ID)
|
||||
&& unlikely(field->flags & VERS_SYSTEM_FIELD))
|
||||
{
|
||||
my_error(ER_VERS_TRX_PART_HISTORIC_ROW_NOT_SUPPORTED, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
num_fields++;
|
||||
}
|
||||
}
|
||||
if (unlikely(num_fields > MAX_REF_PARTS))
|
||||
{
|
||||
|
Reference in New Issue
Block a user