diff --git a/mysql-test/suite/versioning/common.opt b/mysql-test/suite/versioning/common.opt index 86f2c53c753..7babe6d0dc6 100644 --- a/mysql-test/suite/versioning/common.opt +++ b/mysql-test/suite/versioning/common.opt @@ -1,2 +1,3 @@ --system-versioning-hide=implicit +--system-versioning-transaction-registry=1 --plugin-load=versioning diff --git a/mysql-test/suite/versioning/r/insert.result b/mysql-test/suite/versioning/r/insert.result index 1891587a406..ab17b1c6c0a 100644 --- a/mysql-test/suite/versioning/r/insert.result +++ b/mysql-test/suite/versioning/r/insert.result @@ -284,11 +284,13 @@ rollback to a; commit; call verify_vtq; No A B C D -set global transaction_registry= off; +set global system_versioning_transaction_registry= off; insert into t2(x) values (1); insert into t1(x) values (1); ERROR HY000: Temporal operation requires `mysql.transaction_registry` (@@system_versioning_transaction_registry). -set global transaction_registry= on; +set global system_versioning_transaction_registry= on; +Warnings: +Warning 4145 Transaction-based system versioning is EXPERIMENTAL and is subject to change in future. create or replace table t1 ( x int, y int as (x) virtual, diff --git a/mysql-test/suite/versioning/r/trx_id.result b/mysql-test/suite/versioning/r/trx_id.result new file mode 100644 index 00000000000..6a19a89c40f --- /dev/null +++ b/mysql-test/suite/versioning/r/trx_id.result @@ -0,0 +1,28 @@ +select @@system_versioning_transaction_registry; +@@system_versioning_transaction_registry +0 +create or replace table t1 ( +x int, +sys_trx_start bigint(20) unsigned generated always as row start, +sys_trx_end bigint(20) unsigned generated always as row end, +period for system_time (sys_trx_start, sys_trx_end) +) with system versioning engine innodb; +ERROR HY000: Temporal operation requires `mysql.transaction_registry` (@@system_versioning_transaction_registry). +set global system_versioning_transaction_registry= 1; +Warnings: +Warning 4145 Transaction-based system versioning is EXPERIMENTAL and is subject to change in future. +create or replace table t1 ( +x int, +sys_trx_start bigint(20) unsigned generated always as row start, +sys_trx_end bigint(20) unsigned generated always as row end, +period for system_time (sys_trx_start, sys_trx_end) +) with system versioning engine innodb; +insert into t1 (x) values (1); +set global system_versioning_transaction_registry= 0; +insert into t1 (x) values (2); +ERROR HY000: Temporal operation requires `mysql.transaction_registry` (@@system_versioning_transaction_registry). +delete from t1; +ERROR HY000: Temporal operation requires `mysql.transaction_registry` (@@system_versioning_transaction_registry). +update t1 set x= 3; +ERROR HY000: Temporal operation requires `mysql.transaction_registry` (@@system_versioning_transaction_registry). +drop table t1; diff --git a/mysql-test/suite/versioning/t/insert.test b/mysql-test/suite/versioning/t/insert.test index 2945f3714ba..77277032b8c 100644 --- a/mysql-test/suite/versioning/t/insert.test +++ b/mysql-test/suite/versioning/t/insert.test @@ -188,11 +188,11 @@ rollback to a; commit; call verify_vtq; -set global transaction_registry= off; +set global system_versioning_transaction_registry= off; insert into t2(x) values (1); --error ER_VERS_TRT_IS_DISABLED insert into t1(x) values (1); -set global transaction_registry= on; +set global system_versioning_transaction_registry= on; # virtual columns create or replace table t1 ( diff --git a/mysql-test/suite/versioning/t/trx_id.test b/mysql-test/suite/versioning/t/trx_id.test new file mode 100644 index 00000000000..951073f56d7 --- /dev/null +++ b/mysql-test/suite/versioning/t/trx_id.test @@ -0,0 +1,32 @@ +-- source include/have_innodb.inc + +select @@system_versioning_transaction_registry; + +--error ER_VERS_TRT_IS_DISABLED +create or replace table t1 ( + x int, + sys_trx_start bigint(20) unsigned generated always as row start, + sys_trx_end bigint(20) unsigned generated always as row end, + period for system_time (sys_trx_start, sys_trx_end) +) with system versioning engine innodb; + +set global system_versioning_transaction_registry= 1; + +create or replace table t1 ( + x int, + sys_trx_start bigint(20) unsigned generated always as row start, + sys_trx_end bigint(20) unsigned generated always as row end, + period for system_time (sys_trx_start, sys_trx_end) +) with system versioning engine innodb; + +insert into t1 (x) values (1); + +set global system_versioning_transaction_registry= 0; +--error ER_VERS_TRT_IS_DISABLED +insert into t1 (x) values (2); +--error ER_VERS_TRT_IS_DISABLED +delete from t1; +--error ER_VERS_TRT_IS_DISABLED +update t1 set x= 3; + +drop table t1; diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 8c230c7e5a4..833240d1ac5 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7928,3 +7928,6 @@ ER_VERS_DUPLICATE_ROW_START_END ER_VERS_ALREADY_VERSIONED eng "Table %`s is already system-versioned" + +WARN_VERS_TRT_EXPERIMENTAL + eng "Transaction-based system versioning is EXPERIMENTAL and is subject to change in future." diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 02237921c11..9b534fabb5b 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -426,14 +426,19 @@ static Sys_var_enum Sys_vers_alter_history( static bool update_transaction_registry(sys_var *self, THD *thd, enum_var_type type) { use_transaction_registry= opt_transaction_registry; + if (use_transaction_registry) + { + push_warning(thd, Sql_condition::WARN_LEVEL_WARN, WARN_VERS_TRT_EXPERIMENTAL, + ER_THD(thd, WARN_VERS_TRT_EXPERIMENTAL)); + } return false; } -static Sys_var_mybool Sys_transaction_registry( - "transaction_registry", - "Enable or disable update of transaction_registry", +static Sys_var_mybool Sys_vers_transaction_registry( + "system_versioning_transaction_registry", + "Enable or disable update of `mysql`.`transaction_registry`", GLOBAL_VAR(opt_transaction_registry), CMD_LINE(OPT_ARG), - DEFAULT(TRUE), NO_MUTEX_GUARD, NOT_IN_BINLOG, + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, 0, ON_UPDATE(update_transaction_registry)); static Sys_var_ulonglong Sys_binlog_cache_size( diff --git a/sql/table.h b/sql/table.h index 83bc9d4597f..0fcdc0c7ceb 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1499,7 +1499,6 @@ public: int update_virtual_field(Field *vf); int update_virtual_fields(handler *h, enum_vcol_update_mode update_mode); int update_default_fields(bool update, bool ignore_errors); - void vers_update_fields(); void reset_default_fields(); inline ha_rows stat_records() { return used_stat_records; } @@ -1558,6 +1557,7 @@ public: ulonglong vers_end_id() const; int delete_row(); + void vers_update_fields(); /** Number of additional fields used in versioned tables */ #define VERSIONING_FIELDS 2