1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields

versioning_fields flag indicates that any columns were specified WITH
SYSTEM VERSIONING. In that case we imply WITH SYSTEM VERSIONING for
the whole table and WITHOUT SYSTEM VERSIONING for the other columns.
This commit is contained in:
Aleksey Midenkov
2021-11-02 04:52:04 +03:00
parent 1be39f86cc
commit c8cece9144
3 changed files with 47 additions and 5 deletions

View File

@ -7207,15 +7207,16 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
if (!vers_info.need_check(alter_info))
return false;
if (!vers_info.versioned_fields && vers_info.unversioned_fields &&
!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING))
const bool add_versioning= alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING;
if (!vers_info.versioned_fields && vers_info.unversioned_fields && !add_versioning)
{
// All is correct but this table is not versioned.
options&= ~HA_VERSIONED_TABLE;
return false;
}
if (!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING) && vers_info)
if (!add_versioning && vers_info && !vers_info.versioned_fields)
{
my_error(ER_MISSING, MYF(0), create_table.table_name.str,
"WITH SYSTEM VERSIONING");
@ -7225,8 +7226,7 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
List_iterator<Create_field> it(alter_info->create_list);
while (Create_field *f= it++)
{
if ((f->versioning == Column_definition::VERSIONING_NOT_SET &&
!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)) ||
if ((f->versioning == Column_definition::VERSIONING_NOT_SET && !add_versioning) ||
f->versioning == Column_definition::WITHOUT_VERSIONING)
{
f->flags|= VERS_UPDATE_UNVERSIONED_FLAG;