@@ -6976,7 +6976,6 @@ static Create_field *vers_init_sys_field(THD *thd, const char *field_name, int f
69766976 f->flags = flags | NOT_NULL_FLAG;
69776977 if (integer)
69786978 {
6979- DBUG_ASSERT (0 ); // Not implemented yet
69806979 f->set_handler (&type_handler_vers_trx_id);
69816980 f->length = MY_INT64_NUM_DECIMAL_DIGITS - 1 ;
69826981 f->flags |= UNSIGNED_FLAG;
@@ -6994,10 +6993,13 @@ static Create_field *vers_init_sys_field(THD *thd, const char *field_name, int f
69946993 return f;
69956994}
69966995
6997- static bool vers_create_sys_field (THD *thd, const char *field_name,
6998- Alter_info *alter_info, int flags)
6996+ bool Vers_parse_info::create_sys_field (THD *thd, const char *field_name,
6997+ Alter_info *alter_info, int flags)
69996998{
7000- Create_field *f= vers_init_sys_field (thd, field_name, flags, false );
6999+ DBUG_ASSERT (can_native >= 0 ); /* Requires vers_check_native() called */
7000+ Create_field *f= vers_init_sys_field (thd, field_name, flags,
7001+ DBUG_EVALUATE_IF (" sysvers_force_trx" ,
7002+ (bool ) can_native, false ));
70017003 if (!f)
70027004 return true ;
70037005
@@ -7021,23 +7023,34 @@ bool Vers_parse_info::fix_implicit(THD *thd, Alter_info *alter_info)
70217023 system_time= start_end_t (default_start, default_end);
70227024 as_row= system_time;
70237025
7024- if (vers_create_sys_field (thd, default_start, alter_info, VERS_ROW_START) ||
7025- vers_create_sys_field (thd, default_end, alter_info, VERS_ROW_END))
7026+ if (create_sys_field (thd, default_start, alter_info, VERS_ROW_START) ||
7027+ create_sys_field (thd, default_end, alter_info, VERS_ROW_END))
70267028 {
70277029 return true ;
70287030 }
70297031 return false ;
70307032}
70317033
70327034
7035+ void Table_scope_and_contents_source_st::vers_check_native ()
7036+ {
7037+ vers_info.can_native = (db_type->db_type == DB_TYPE_PARTITION_DB ||
7038+ ha_check_storage_engine_flag (db_type,
7039+ HTON_NATIVE_SYS_VERSIONING));
7040+ }
7041+
7042+
70337043bool Table_scope_and_contents_source_st::vers_fix_system_fields (
70347044 THD *thd, Alter_info *alter_info, const TABLE_LIST &create_table)
70357045{
70367046 DBUG_ASSERT (!(alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING));
70377047
7038- DBUG_EXECUTE_IF (" sysvers_force" , if (!tmp_table ()) {
7039- alter_info->flags |= ALTER_ADD_SYSTEM_VERSIONING;
7040- options|= HA_VERSIONED_TABLE; });
7048+ if (DBUG_EVALUATE_IF (" sysvers_force" , true , false ) ||
7049+ DBUG_EVALUATE_IF (" sysvers_force_trx" , true , false ))
7050+ {
7051+ alter_info->flags |= ALTER_ADD_SYSTEM_VERSIONING;
7052+ options|= HA_VERSIONED_TABLE;
7053+ }
70417054
70427055 if (!vers_info.need_check (alter_info))
70437056 return false ;
@@ -7068,7 +7081,9 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
70687081 {
70697082 f->flags |= VERS_UPDATE_UNVERSIONED_FLAG;
70707083 }
7071- } // while (Create_field *f= it++)
7084+ } // while
7085+
7086+ vers_check_native ();
70727087
70737088 if (vers_info.fix_implicit (thd, alter_info))
70747089 return true ;
@@ -7121,11 +7136,7 @@ bool Table_scope_and_contents_source_st::vers_check_system_fields(
71217136 if (!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING) && !versioned_fields)
71227137 return false ;
71237138
7124- bool can_native= ha_check_storage_engine_flag (db_type,
7125- HTON_NATIVE_SYS_VERSIONING)
7126- || db_type->db_type == DB_TYPE_PARTITION_DB;
7127-
7128- return vers_info.check_sys_fields (table_name, db, alter_info, can_native);
7139+ return vers_info.check_sys_fields (table_name, db, alter_info);
71297140}
71307141
71317142
@@ -7138,7 +7149,8 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info,
71387149 if (!need_check (alter_info) && !share->versioned )
71397150 return false ;
71407151
7141- if (DBUG_EVALUATE_IF (" sysvers_force" , 0 , share->tmp_table ))
7152+ if (DBUG_EVALUATE_IF (" sysvers_force" , 0 , share->tmp_table ) ||
7153+ DBUG_EVALUATE_IF (" sysvers_force_trx" , 0 , share->tmp_table ))
71427154 {
71437155 my_error (ER_VERS_TEMPORARY, MYF (0 ));
71447156 return true ;
@@ -7383,8 +7395,7 @@ bool Create_field::vers_check_bigint(const Lex_table_name &table_name) const
73837395
73847396bool Vers_parse_info::check_sys_fields (const Lex_table_name &table_name,
73857397 const Lex_table_name &db,
7386- Alter_info *alter_info,
7387- bool can_native) const
7398+ Alter_info *alter_info) const
73887399{
73897400 if (check_conditions (table_name, db))
73907401 return true ;
0 commit comments