From ee68d019d1e059fa0fcf9e63bd97176dd46582c2 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 19 Dec 2017 16:12:56 +0300 Subject: [PATCH] SQL: removed VERS_HIDDEN_FLAG [closes #409] --- include/mysql_com.h | 1 - mysql-test/suite/versioning/r/alter.result | 143 +++++---------- .../suite/versioning/r/auto_increment.result | 4 +- .../suite/versioning/r/commit_id.result | 4 +- mysql-test/suite/versioning/r/create.result | 167 +++++++----------- mysql-test/suite/versioning/r/delete.result | 16 +- mysql-test/suite/versioning/r/insert.result | 24 +-- .../suite/versioning/r/partition.result | 10 +- mysql-test/suite/versioning/r/select.result | 8 +- .../suite/versioning/r/select_sp.result | 8 +- mysql-test/suite/versioning/r/sysvars.result | 4 +- mysql-test/suite/versioning/r/trx_id.result | 8 +- mysql-test/suite/versioning/r/update.result | 28 +-- mysql-test/suite/versioning/t/alter.test | 48 ++--- .../suite/versioning/t/auto_increment.test | 4 +- mysql-test/suite/versioning/t/commit_id.test | 4 +- mysql-test/suite/versioning/t/create.test | 78 ++++---- mysql-test/suite/versioning/t/delete.test | 12 +- mysql-test/suite/versioning/t/insert.test | 24 +-- mysql-test/suite/versioning/t/select.test | 8 +- mysql-test/suite/versioning/t/select_sp.test | 8 +- mysql-test/suite/versioning/t/sysvars.test | 4 +- mysql-test/suite/versioning/t/trx_id.test | 8 +- mysql-test/suite/versioning/t/update.test | 28 +-- sql/field.cc | 10 +- sql/field.h | 10 +- sql/handler.cc | 9 +- sql/sql_base.cc | 78 ++++---- sql/sql_insert.cc | 2 +- sql/sql_select.cc | 11 +- sql/sql_show.cc | 41 +++-- sql/sql_table.cc | 38 ++-- sql/sql_yacc.yy | 2 +- sql/sql_yacc_ora.yy | 2 +- sql/table.cc | 10 +- sql/table.h | 21 +-- sql/unireg.cc | 8 +- sql/unireg.h | 4 +- 38 files changed, 406 insertions(+), 491 deletions(-) diff --git a/include/mysql_com.h b/include/mysql_com.h index 5a37677ffdd..6db7ef58c6f 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -202,7 +202,6 @@ enum enum_indicator_type #define VERS_UPDATE_UNVERSIONED_FLAG (1 << 29) /* column that doesn't support system versioning when table itself supports it*/ -#define VERS_HIDDEN_FLAG (1 << 31) /* hide from SELECT * */ #define REFRESH_GRANT (1ULL << 0) /* Refresh grant tables */ #define REFRESH_LOG (1ULL << 1) /* Start on new log file */ diff --git a/mysql-test/suite/versioning/r/alter.result b/mysql-test/suite/versioning/r/alter.result index 081cb3a5942..6250b0ec33d 100644 --- a/mysql-test/suite/versioning/r/alter.result +++ b/mysql-test/suite/versioning/r/alter.result @@ -15,10 +15,7 @@ alter table t add system versioning; show create table t; Table Create Table t CREATE TABLE `t` ( - `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t add column y int; ERROR HY000: Not allowed for system-versioned `test`.`t`. Change @@system_versioning_alter_history to proceed with ALTER. @@ -32,35 +29,35 @@ t CREATE TABLE `t` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 set system_versioning_alter_history= keep; alter table t -add column trx_start bigint(20) unsigned generated always as row start, -add column trx_end bigint(20) unsigned generated always as row end, +add column trx_start bigint(20) unsigned as row start invisible, +add column trx_end bigint(20) unsigned as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; ERROR HY000: `trx_start` must be of type TIMESTAMP(6) for system-versioned table `t` alter table t -add column trx_start timestamp generated always as row start, -add column trx_end timestamp generated always as row end, +add column trx_start timestamp as row start invisible, +add column trx_end timestamp as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; ERROR HY000: `trx_start` must be of type TIMESTAMP(6) for system-versioned table `t` alter table t -add column trx_start timestamp(6) not null generated always as row start, -add column trx_end timestamp(6) not null generated always as row end, +add column trx_start timestamp(6) not null as row start invisible, +add column trx_end timestamp(6) not null as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'generated always as row start, -add column trx_end timestamp(6) not null generate' at line 2 +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'as row start invisible, +add column trx_end timestamp(6) not null as row end invi' at line 2 alter table t -add column trx_start timestamp(6) generated always as row start, -add column trx_end timestamp(6) generated always as row end, +add column trx_start timestamp(6) as row start invisible, +add column trx_end timestamp(6) as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, + `trx_start` timestamp(6) GENERATED ALWAYS AS ROW START INVISIBLE, + `trx_end` timestamp(6) GENERATED ALWAYS AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME (`trx_start`, `trx_end`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t drop column trx_start, drop column trx_end; @@ -74,31 +71,22 @@ alter table t add system versioning; show create table t; Table Create Table t CREATE TABLE `t` ( - `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t add column b int; show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - `b` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `b` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t add column c int; show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, `b` int(11) DEFAULT NULL, - `c` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `c` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t add column d int first; show create table t; @@ -106,11 +94,8 @@ Table Create Table t CREATE TABLE `t` ( `d` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, `b` int(11) DEFAULT NULL, - `c` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `c` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t add column e int after d; show create table t; @@ -119,11 +104,8 @@ t CREATE TABLE `t` ( `d` int(11) DEFAULT NULL, `e` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, `b` int(11) DEFAULT NULL, - `c` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `c` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t drop column a; show create table t; @@ -131,20 +113,17 @@ Table Create Table t CREATE TABLE `t` ( `d` int(11) DEFAULT NULL, `e` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, `b` int(11) DEFAULT NULL, - `c` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `c` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t ( a int, -sys_trx_start timestamp(6) generated always as row start, -sys_trx_end timestamp(6) generated always as row end, +sys_trx_start timestamp(6) as row start invisible, +sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end)) with system versioning; select * from t for system_time all; -a sys_trx_start sys_trx_end +a alter table t drop column sys_trx_start; alter table t drop column sys_trx_end; select * from t for system_time all; @@ -155,12 +134,12 @@ alter table t drop column sys_trx_end; ERROR 42000: Can't DROP COLUMN `sys_trx_end`; check that it exists create or replace table t ( a int, -sys_trx_start timestamp(6) generated always as row start, -sys_trx_end timestamp(6) generated always as row end, +sys_trx_start timestamp(6) as row start invisible, +sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end)) with system versioning; select * from t for system_time all; -a sys_trx_start sys_trx_end +a alter table t drop column sys_trx_start, drop column sys_trx_end; select * from t for system_time all; a @@ -172,10 +151,7 @@ alter table t add system versioning; show create table t; Table Create Table t CREATE TABLE `t` ( - `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING insert into t values(2); select * from t for system_time all; @@ -205,10 +181,7 @@ show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - `b` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `b` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING select * from t; a b @@ -240,35 +213,29 @@ show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING, - `b` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `b` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t modify a int with system versioning; show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `b` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `b` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t( a int ) engine=innodb; alter table t -add column trx_start timestamp(6) as row start, -add column trx_end timestamp(6) as row end, +add column trx_start timestamp(6) as row start invisible, +add column trx_end timestamp(6) as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, + `trx_start` timestamp(6) GENERATED ALWAYS AS ROW START INVISIBLE, + `trx_end` timestamp(6) GENERATED ALWAYS AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME (`trx_start`, `trx_end`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING # Issue #211: drop of system columns required before drop system versioning @@ -276,18 +243,15 @@ alter table t drop column trx_start, drop column trx_end; show create table t; Table Create Table t CREATE TABLE `t` ( - `a` int(11) DEFAULT NULL, - `trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`trx_start`, `trx_end`) + `a` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING alter table t drop system versioning; insert into t values(1); call verify_vtq; No A B C D alter table t -add column trx_start bigint(20) unsigned as row start, -add column trx_end bigint(20) unsigned as row end, +add column trx_start bigint(20) unsigned as row start invisible, +add column trx_end bigint(20) unsigned as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; call verify_vtq; @@ -296,8 +260,8 @@ show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `trx_start` bigint(20) unsigned GENERATED ALWAYS AS ROW START, - `trx_end` bigint(20) unsigned GENERATED ALWAYS AS ROW END, + `trx_start` bigint(20) unsigned GENERATED ALWAYS AS ROW START INVISIBLE, + `trx_end` bigint(20) unsigned GENERATED ALWAYS AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME (`trx_start`, `trx_end`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t( @@ -310,10 +274,7 @@ No A B C D show create table t; Table Create Table t CREATE TABLE `t` ( - `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `a` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING update t set a= 2; select * from t for system_time all; @@ -325,10 +286,7 @@ show create table t; Table Create Table t CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - `b` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `b` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING select * from t; a b @@ -339,10 +297,7 @@ alter table t drop column b, algorithm=copy; show create table t; Table Create Table t CREATE TABLE `t` ( - `a` int(11) DEFAULT NULL, - `sys_trx_start` timestamp(6) GENERATED ALWAYS AS ROW START, - `sys_trx_end` timestamp(6) GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `a` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING select * from t for system_time all; a @@ -420,33 +375,33 @@ a b 4 2 create or replace table t ( a int, -sys_trx_start bigint(20) unsigned generated always as row start, -sys_trx_end bigint(20) unsigned generated always as row end, +sys_trx_start bigint(20) unsigned as row start invisible, +sys_trx_end bigint(20) unsigned as row end invisible, period for system_time(sys_trx_start, sys_trx_end) ) with system versioning engine innodb; alter table t change column sys_trx_start asdf bigint unsigned; ERROR HY000: Can not change system versioning field `sys_trx_start` create or replace table t ( a int, -sys_trx_start timestamp(6) generated always as row start, -sys_trx_end timestamp(6) generated always as row end, +sys_trx_start timestamp(6) as row start invisible, +sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end) ) with system versioning engine myisam; alter table t change column sys_trx_start asdf timestamp(6); ERROR HY000: Can not change system versioning field `sys_trx_start` create or replace table t ( a int, -sys_trx_start timestamp(6) generated always as row start, -sys_trx_end timestamp(6) generated always as row end, +sys_trx_start timestamp(6) as row start invisible, +sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end) ) with system versioning; select * from t; -a sys_trx_start sys_trx_end +a alter table t drop system versioning; ERROR HY000: System versioning field `sys_trx_start` is not hidden alter table t drop column sys_trx_start; select * from t; -a sys_trx_end +a alter table t drop system versioning; ERROR HY000: System versioning field `sys_trx_end` is not hidden alter table t drop column sys_trx_end; diff --git a/mysql-test/suite/versioning/r/auto_increment.result b/mysql-test/suite/versioning/r/auto_increment.result index 0c0f0035b07..1f43595848b 100644 --- a/mysql-test/suite/versioning/r/auto_increment.result +++ b/mysql-test/suite/versioning/r/auto_increment.result @@ -8,8 +8,8 @@ set @str= concat(' id int unsigned auto_increment primary key, x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); diff --git a/mysql-test/suite/versioning/r/commit_id.result b/mysql-test/suite/versioning/r/commit_id.result index d6cdb0182ff..e2bd0f21b64 100644 --- a/mysql-test/suite/versioning/r/commit_id.result +++ b/mysql-test/suite/versioning/r/commit_id.result @@ -1,7 +1,7 @@ create table t1( id int auto_increment primary key, -sys_trx_start bigint unsigned generated always as row start, -sys_trx_end bigint unsigned generated always as row end, +sys_trx_start bigint unsigned as row start invisible, +sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning diff --git a/mysql-test/suite/versioning/r/create.result b/mysql-test/suite/versioning/r/create.result index 08be180614f..629434f7518 100644 --- a/mysql-test/suite/versioning/r/create.result +++ b/mysql-test/suite/versioning/r/create.result @@ -1,16 +1,16 @@ drop table if exists t1; create table t1 ( x1 int unsigned, -Sys_start SYS_DATATYPE generated always as row start comment 'start', -Sys_end SYS_DATATYPE generated always as row end comment 'end', +Sys_start SYS_DATATYPE as row start invisible comment 'start', +Sys_end SYS_DATATYPE as row end invisible comment 'end', period for system_time (Sys_start, Sys_end) ) with system versioning; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `x1` int(10) unsigned DEFAULT NULL, - `Sys_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START COMMENT 'start', - `Sys_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END COMMENT 'end', + `Sys_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START INVISIBLE COMMENT 'start', + `Sys_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END INVISIBLE COMMENT 'end', PERIOD FOR SYSTEM_TIME (`Sys_start`, `Sys_end`) ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING # Implicit fields test @@ -20,29 +20,26 @@ x2 int unsigned show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `x2` int(10) unsigned DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `x2` int(10) unsigned DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t1 ( x3 int unsigned, -Sys_start SYS_DATATYPE generated always as row start, -Sys_end SYS_DATATYPE generated always as row end, +Sys_start SYS_DATATYPE as row start invisible, +Sys_end SYS_DATATYPE as row end invisible, period for system_time (x, Sys_end) ) with system versioning; ERROR HY000: PERIOD FOR SYSTEM_TIME must use columns `Sys_start` and `Sys_end` create or replace table t1 ( x4 int unsigned, -Sys_start SYS_DATATYPE generated always as row start, -Sys_end2 SYS_DATATYPE generated always as row end, +Sys_start SYS_DATATYPE as row start invisible, +Sys_end2 SYS_DATATYPE as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; ERROR HY000: PERIOD FOR SYSTEM_TIME must use columns `Sys_start` and `Sys_end2` create or replace table t1 ( x5 int unsigned, -Sys_start SYS_DATATYPE generated always as row start, -Sys_end SYS_DATATYPE generated always as row end, +Sys_start SYS_DATATYPE as row start invisible, +Sys_end SYS_DATATYPE as row end invisible, period for system_time (Sys_start, x) ) with system versioning; ERROR HY000: PERIOD FOR SYSTEM_TIME must use columns `Sys_start` and `Sys_end` @@ -53,57 +50,57 @@ period for system_time (Sys_start, Sys_end) ERROR HY000: Wrong parameters for `t1`: missing 'AS ROW START' create or replace table t1 ( x7 int unsigned, -Sys_start SYS_DATATYPE generated always as row start, -Sys_end SYS_DATATYPE generated always as row end, +Sys_start SYS_DATATYPE as row start invisible, +Sys_end SYS_DATATYPE as row end invisible, period for system_time (Sys_start, Sys_end) ); ERROR HY000: Wrong parameters for `t1`: missing 'WITH SYSTEM VERSIONING' create or replace table t1 ( x8 int unsigned, -Sys_start SYS_DATATYPE generated always as row start, -Sys_end SYS_DATATYPE generated always as row end, +Sys_start SYS_DATATYPE as row start invisible, +Sys_end SYS_DATATYPE as row end invisible, period for system_time (sys_insert, sys_remove) ) with system versioning; ERROR HY000: PERIOD FOR SYSTEM_TIME must use columns `Sys_start` and `Sys_end` create or replace table t1 ( x9 int unsigned, -Sys_start SYS_DATATYPE generated always as row start, -Sys_end SYS_DATATYPE generated always as row end, +Sys_start SYS_DATATYPE as row start invisible, +Sys_end SYS_DATATYPE as row end invisible, period for system_time (Sys_start, Sys_end) ); ERROR HY000: Wrong parameters for `t1`: missing 'WITH SYSTEM VERSIONING' create or replace table t1 ( x10 int unsigned, -Sys_start SYS_DATATYPE generated always as row start, -Sys_end SYS_DATATYPE generated always as row end, +Sys_start SYS_DATATYPE as row start invisible, +Sys_end SYS_DATATYPE as row end invisible, period for system_time (Sys_start, Sys_start) ); ERROR HY000: Wrong parameters for `t1`: missing 'WITH SYSTEM VERSIONING' create or replace table t1 ( x11 int unsigned, -Sys_start bigint unsigned generated always as row start, -Sys_end timestamp(6) generated always as row end, +Sys_start bigint unsigned as row start invisible, +Sys_end timestamp(6) as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; Got one of the listed errors create or replace table t1 ( x12 int unsigned, -Sys_start timestamp(6) generated always as row start, -Sys_end bigint unsigned generated always as row end, +Sys_start timestamp(6) as row start invisible, +Sys_end bigint unsigned as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; Got one of the listed errors create or replace table t1 ( x13 int unsigned, -Sys_start bigint generated always as row start, -Sys_end bigint unsigned generated always as row end, +Sys_start bigint as row start invisible, +Sys_end bigint unsigned as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning engine innodb; ERROR HY000: `Sys_start` must be of type TIMESTAMP(6) for system-versioned table `t1` create or replace table t1 ( x14 int unsigned, -Sys_start bigint unsigned generated always as row start, -Sys_end bigint generated always as row end, +Sys_start bigint unsigned as row start invisible, +Sys_end bigint as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning engine innodb; ERROR HY000: `Sys_end` must be of type BIGINT(20) UNSIGNED for system-versioned table `t1` @@ -115,10 +112,7 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `x15` int(11) DEFAULT NULL, - `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t1 ( x16 int with system versioning, @@ -128,10 +122,7 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `x16` int(11) DEFAULT NULL, - `B` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `B` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t1 ( x17 int, @@ -145,10 +136,7 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `x18` int(11) DEFAULT NULL, - `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t1 ( x19 int with system versioning, @@ -158,10 +146,7 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `x19` int(11) DEFAULT NULL, - `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t1 ( x20 int with system versioning, @@ -171,10 +156,7 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `x20` int(11) DEFAULT NULL, - `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `B` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t1 ( x21 int without system versioning @@ -188,10 +170,7 @@ create table tt1 like t1; show create table tt1; Table Create Table tt1 CREATE TABLE `tt1` ( - `a` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `a` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING drop table tt1; create temporary table tt1 like t1; @@ -207,8 +186,8 @@ tt1 CREATE TEMPORARY TABLE `tt1` ( create or replace table t1 (x23 int) with system versioning; create or replace table t0( y int, -st SYS_DATATYPE generated always as row start, -en SYS_DATATYPE generated always as row end, +st SYS_DATATYPE as row start, +en SYS_DATATYPE as row end, period for system_time (st, en) ) with system versioning; ## For non-versioned table: @@ -233,17 +212,14 @@ t3 CREATE TABLE `t3` ( ## For versioned table insert into t1 values (1); select sys_trx_start from t1 into @sys_trx_start; -insert into t0 values (2); +insert into t0 (y) values (2); select st from t0 into @st; ### 1. implicit system fields are included as implicit create or replace table t2 with system versioning as select * from t1; show create table t2; Table Create Table t2 CREATE TABLE `t2` ( - `x23` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `x23` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING #### sys_trx_start, sys_trx_end are copied; wildcard not expanded select * from t2 where sys_trx_start = @sys_trx_start; @@ -256,10 +232,7 @@ Table Create Table t3 CREATE TABLE `t3` ( `y` int(11) DEFAULT NULL, `st` SYS_DATATYPE, - `en` SYS_DATATYPE, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `en` SYS_DATATYPE ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING #### st, en are plain fields now select * from t3 where y > 2; @@ -269,16 +242,16 @@ y 2 ### 3. explicit system fields are kept as system create or replace table t3 ( -st SYS_DATATYPE generated always as row start, -en SYS_DATATYPE generated always as row end, +st SYS_DATATYPE as row start invisible, +en SYS_DATATYPE as row end invisible, period for system_time (st, en) ) with system versioning as select * from t0; show create table t3; Table Create Table t3 CREATE TABLE `t3` ( `y` int(11) DEFAULT NULL, - `st` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `en` SYS_DATATYPE GENERATED ALWAYS AS ROW END, + `st` SYS_DATATYPE GENERATED ALWAYS AS ROW START INVISIBLE, + `en` SYS_DATATYPE GENERATED ALWAYS AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME (`st`, `en`) ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING select y from t3 where st = @st; @@ -289,10 +262,7 @@ create or replace table t3 with system versioning select x23 from t1; show create table t3; Table Create Table t3 CREATE TABLE `t3` ( - `x23` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `x23` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING select * from t3; x23 @@ -314,16 +284,13 @@ show create table t3; Table Create Table t3 CREATE TABLE `t3` ( `x23` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - `y` int(11) DEFAULT NULL, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `y` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING select * from t3 for system_time all where sys_trx_start = @sys_trx_start and sys_trx_end = @sys_trx_end; x23 y 1 3 create or replace table t2 like t0; -insert into t2 values (1), (2); +insert into t2 (y) values (1), (2); delete from t2 where y = 2; create or replace table t3 select * from t2 for system_time all; select st, en from t3 where y = 1 into @st, @en; @@ -341,24 +308,19 @@ as select x25, sys_trx_start, sys_trx_end from t1 for system_time all; show create table t2; Table Create Table t2 CREATE TABLE `t2` ( - `x25` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE, - `sys_trx_end` SYS_DATATYPE + `x25` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 create or replace table t2 with system versioning as select x25, sys_trx_start, sys_trx_end from t1; show create table t2; Table Create Table t2 CREATE TABLE `t2` ( - `x25` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `x25` int(11) DEFAULT NULL ) ENGINE=NON_DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING create or replace table t1 ( x26 int, -st bigint unsigned generated always as row start, -en bigint unsigned generated always as row end, +st bigint unsigned as row start invisible, +en bigint unsigned as row end invisible, period for system_time (st, en) ) with system versioning engine innodb; create or replace table t2 with system versioning engine myisam @@ -372,10 +334,7 @@ show create table t3; Table Create Table t3 CREATE TABLE `t3` ( `b` int(11) DEFAULT NULL, - `x27` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `x27` int(11) DEFAULT NULL ) ENGINE=NON_DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING ## Errors create or replace table t (sys_trx_start int); @@ -388,9 +347,9 @@ create or replace temporary table t (x28 int) with system versioning; ERROR HY000: Incorrect usage of TEMPORARY and WITH SYSTEM VERSIONING create or replace table t1 ( x29 int unsigned, -Sys_start0 timestamp(6) generated always as row start, -Sys_start timestamp(6) generated always as row start, -Sys_end timestamp(6) generated always as row end, +Sys_start0 timestamp(6) as row start invisible, +Sys_start timestamp(6) as row start invisible, +Sys_end timestamp(6) as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; ERROR HY000: Duplicate ROW START column `Sys_start` @@ -398,8 +357,8 @@ ERROR HY000: Duplicate ROW START column `Sys_start` create or replace table t1 (x30 int) with system versioning; create or replace table t2 ( y int, -st SYS_DATATYPE generated always as row start, -en SYS_DATATYPE generated always as row end, +st SYS_DATATYPE as row start invisible, +en SYS_DATATYPE as row end invisible, period for system_time (st, en) ) with system versioning; create or replace table t3 @@ -409,15 +368,13 @@ Table Create Table t3 CREATE TABLE `t3` ( `x30` int(11) DEFAULT NULL, `y` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE, - `sys_trx_end` SYS_DATATYPE, - `st` SYS_DATATYPE, - `en` SYS_DATATYPE + `st` SYS_DATATYPE NOT NULL INVISIBLE DEFAULT '0000-00-00 00:00:00.000000', + `en` SYS_DATATYPE NOT NULL INVISIBLE DEFAULT '0000-00-00 00:00:00.000000' ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 create or replace table t3 ( y int, -st SYS_DATATYPE generated always as row start, -en SYS_DATATYPE generated always as row end, +st SYS_DATATYPE as row start invisible, +en SYS_DATATYPE as row end invisible, period for system_time (st, en) ) with system versioning as select x30, y, sys_trx_start, sys_trx_end, st, en from t1, t2; @@ -426,10 +383,8 @@ Table Create Table t3 CREATE TABLE `t3` ( `x30` int(11) DEFAULT NULL, `y` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE, - `sys_trx_end` SYS_DATATYPE, - `st` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `en` SYS_DATATYPE GENERATED ALWAYS AS ROW END, + `st` SYS_DATATYPE GENERATED ALWAYS AS ROW START INVISIBLE, + `en` SYS_DATATYPE GENERATED ALWAYS AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME (`st`, `en`) ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING drop database test; diff --git a/mysql-test/suite/versioning/r/delete.result b/mysql-test/suite/versioning/r/delete.result index cafb321ddd4..79f619fecdd 100644 --- a/mysql-test/suite/versioning/r/delete.result +++ b/mysql-test/suite/versioning/r/delete.result @@ -6,8 +6,8 @@ begin set @str= concat(' create or replace table t1( XNo int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -52,8 +52,8 @@ fields varchar(255)) begin set @str= concat('create or replace table t1 ( x int, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -74,8 +74,8 @@ begin set @str0= concat('( x int, y int, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -239,11 +239,11 @@ No A B C D 14 1 1 1 1 # Check sys_start, sys_end call test_02('timestamp(6)', 'myisam', 'sys_end'); -x sys_start sys_end +x A B C 1 1 1 call test_02('bigint unsigned', 'innodb', 'vtq_commit_ts(sys_end)'); -x sys_start sys_end +x A B C 1 1 1 call verify_vtq; diff --git a/mysql-test/suite/versioning/r/insert.result b/mysql-test/suite/versioning/r/insert.result index ab17b1c6c0a..06237f6904e 100644 --- a/mysql-test/suite/versioning/r/insert.result +++ b/mysql-test/suite/versioning/r/insert.result @@ -7,8 +7,8 @@ set @str= concat(' create table t1( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -30,8 +30,8 @@ set @str= concat(' id int unsigned auto_increment primary key, x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -52,8 +52,8 @@ set @str= concat(' create table t1( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -94,8 +94,8 @@ begin set @str= concat('( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -265,8 +265,8 @@ No A B C D 16 1 1 1 1 create table t1( x int unsigned, -sys_start bigint unsigned generated always as row start, -sys_end bigint unsigned generated always as row end, +sys_start bigint unsigned as row start invisible, +sys_end bigint unsigned as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine=innodb; create table t2(x int unsigned) engine=innodb; @@ -294,8 +294,8 @@ Warning 4145 Transaction-based system versioning is EXPERIMENTAL and is subject create or replace table t1 ( x int, y int as (x) virtual, -sys_trx_start bigint unsigned as row start, -sys_trx_end bigint unsigned as row end, +sys_trx_start bigint unsigned as row start invisible, +sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) engine=innodb with system versioning; insert into t1 values (1, null); diff --git a/mysql-test/suite/versioning/r/partition.result b/mysql-test/suite/versioning/r/partition.result index f67b9d1d69e..9fddd74cba7 100644 --- a/mysql-test/suite/versioning/r/partition.result +++ b/mysql-test/suite/versioning/r/partition.result @@ -89,10 +89,7 @@ Warning 4115 Maybe missing parameters: no rotation condition for multiple HISTOR show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `x` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `x` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING PARTITION BY SYSTEM_TIME (PARTITION `p0` HISTORY ENGINE = DEFAULT_ENGINE, @@ -215,10 +212,7 @@ partition pn current); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `x` int(11) DEFAULT NULL, - `sys_trx_start` SYS_DATATYPE GENERATED ALWAYS AS ROW START, - `sys_trx_end` SYS_DATATYPE GENERATED ALWAYS AS ROW END, - PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) + `x` int(11) DEFAULT NULL ) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING PARTITION BY SYSTEM_TIME LIMIT 2 (PARTITION `p0` HISTORY ENGINE = DEFAULT_ENGINE, diff --git a/mysql-test/suite/versioning/r/select.result b/mysql-test/suite/versioning/r/select.result index 3d80f19a2ea..13ccec1f6bb 100644 --- a/mysql-test/suite/versioning/r/select.result +++ b/mysql-test/suite/versioning/r/select.result @@ -1,8 +1,8 @@ create or replace table t1 ( x int unsigned, y int unsigned, -sys_trx_start SYS_DATATYPE generated always as row start, -sys_trx_end SYS_DATATYPE generated always as row end, +sys_trx_start SYS_DATATYPE as row start invisible, +sys_trx_end SYS_DATATYPE as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning; insert into t1 (x, y) values @@ -313,8 +313,8 @@ select * from t1 for system_time as of transaction 1; ERROR HY000: Transaction system versioning for `t1` is not supported create or replace table t1 ( x int, -sys_trx_start bigint unsigned generated always as row start, -sys_trx_end bigint unsigned generated always as row end, +sys_trx_start bigint unsigned as row start invisible, +sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning engine innodb; insert into t1 values (1); diff --git a/mysql-test/suite/versioning/r/select_sp.result b/mysql-test/suite/versioning/r/select_sp.result index dc84343847e..2d37ffbb8f1 100644 --- a/mysql-test/suite/versioning/r/select_sp.result +++ b/mysql-test/suite/versioning/r/select_sp.result @@ -6,8 +6,8 @@ set @str= concat(' create table t1( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -58,8 +58,8 @@ declare sys_type varchar(255) default sys_datatype(default_engine()); set @str0= concat('( x int, y int, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); diff --git a/mysql-test/suite/versioning/r/sysvars.result b/mysql-test/suite/versioning/r/sysvars.result index c9f2ff05111..d9e12a6daef 100644 --- a/mysql-test/suite/versioning/r/sysvars.result +++ b/mysql-test/suite/versioning/r/sysvars.result @@ -118,8 +118,8 @@ a sys_trx_start sys_trx_end set system_versioning_hide= FULL; create or replace table t ( x int, -st timestamp(6) generated always as row start, -en timestamp(6) generated always as row end, +st timestamp(6) as row start invisible, +en timestamp(6) as row end invisible, period for system_time (st, en)) with system versioning; show create table t; diff --git a/mysql-test/suite/versioning/r/trx_id.result b/mysql-test/suite/versioning/r/trx_id.result index 6a19a89c40f..929e49f8b53 100644 --- a/mysql-test/suite/versioning/r/trx_id.result +++ b/mysql-test/suite/versioning/r/trx_id.result @@ -3,8 +3,8 @@ select @@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, +sys_trx_start bigint(20) unsigned as row start invisible, +sys_trx_end bigint(20) unsigned as row end invisible, 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). @@ -13,8 +13,8 @@ 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, +sys_trx_start bigint(20) unsigned as row start invisible, +sys_trx_end bigint(20) unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning engine innodb; insert into t1 (x) values (1); diff --git a/mysql-test/suite/versioning/r/update.result b/mysql-test/suite/versioning/r/update.result index 601906e10ca..08be6825b7f 100644 --- a/mysql-test/suite/versioning/r/update.result +++ b/mysql-test/suite/versioning/r/update.result @@ -7,8 +7,8 @@ set @str= concat(' create table t1( x int unsigned, y int unsigned, - sys_trx_start ', sys_type, ' generated always as row start, - sys_trx_end ', sys_type, ' generated always as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -41,8 +41,8 @@ set @str= concat(' id bigint primary key, x int, y int without system versioning, - sys_trx_start ', sys_type, ' as row start, - sys_trx_end ', sys_type, ' as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -66,8 +66,8 @@ set @str= concat(' create table t1 ( x int, y int, - sys_trx_start bigint unsigned as row start, - sys_trx_end bigint unsigned as row end, + sys_trx_start bigint unsigned as row start invisible, + sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning engine ', engine); @@ -92,8 +92,8 @@ set @str= concat(' create table t1 ( id int primary key auto_increment, x int, - sys_trx_start ', sys_type, ' as row start, - sys_trx_end ', sys_type, ' as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -118,8 +118,8 @@ begin set @str= concat(' create table t1( x int unsigned, - sys_trx_end ', sys_type, ' generated always as row end, - sys_trx_start ', sys_type, ' generated always as row start, + sys_trx_end ', sys_type, ' as row end invisible, + sys_trx_start ', sys_type, ' as row start invisible, y int unsigned, period for system_time (sys_trx_start, sys_trx_end), primary key(x, y)) @@ -145,8 +145,8 @@ begin set @str= concat('( x int unsigned, y int unsigned, - sys_trx_start ', sys_type, ' generated always as row start, - sys_trx_end ', sys_type, ' generated always as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -191,8 +191,8 @@ set @str= concat('( id bigint primary key without system versioning, name varchar(128), salary bigint without system versioning, - sys_trx_start ', sys_type, ' as row start, - sys_trx_end ', sys_type, ' as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); diff --git a/mysql-test/suite/versioning/t/alter.test b/mysql-test/suite/versioning/t/alter.test index 5d1b7c0644d..c8a2f9014cd 100644 --- a/mysql-test/suite/versioning/t/alter.test +++ b/mysql-test/suite/versioning/t/alter.test @@ -22,28 +22,28 @@ set system_versioning_alter_history= keep; --error ER_VERS_FIELD_WRONG_TYPE alter table t - add column trx_start bigint(20) unsigned generated always as row start, - add column trx_end bigint(20) unsigned generated always as row end, + add column trx_start bigint(20) unsigned as row start invisible, + add column trx_end bigint(20) unsigned as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; --error ER_VERS_FIELD_WRONG_TYPE alter table t - add column trx_start timestamp generated always as row start, - add column trx_end timestamp generated always as row end, + add column trx_start timestamp as row start invisible, + add column trx_end timestamp as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; --error ER_PARSE_ERROR alter table t - add column trx_start timestamp(6) not null generated always as row start, - add column trx_end timestamp(6) not null generated always as row end, + add column trx_start timestamp(6) not null as row start invisible, + add column trx_end timestamp(6) not null as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; alter table t - add column trx_start timestamp(6) generated always as row start, - add column trx_end timestamp(6) generated always as row end, + add column trx_start timestamp(6) as row start invisible, + add column trx_end timestamp(6) as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; show create table t; @@ -72,8 +72,8 @@ show create table t; create or replace table t ( a int, - sys_trx_start timestamp(6) generated always as row start, - sys_trx_end timestamp(6) generated always as row end, + sys_trx_start timestamp(6) as row start invisible, + sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end)) with system versioning; @@ -89,8 +89,8 @@ alter table t drop column sys_trx_end; create or replace table t ( a int, - sys_trx_start timestamp(6) generated always as row start, - sys_trx_end timestamp(6) generated always as row end, + sys_trx_start timestamp(6) as row start invisible, + sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end)) with system versioning; @@ -142,8 +142,8 @@ create or replace table t( ) engine=innodb; alter table t - add column trx_start timestamp(6) as row start, - add column trx_end timestamp(6) as row end, + add column trx_start timestamp(6) as row start invisible, + add column trx_end timestamp(6) as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; @@ -158,8 +158,8 @@ insert into t values(1); call verify_vtq; alter table t - add column trx_start bigint(20) unsigned as row start, - add column trx_end bigint(20) unsigned as row end, + add column trx_start bigint(20) unsigned as row start invisible, + add column trx_end bigint(20) unsigned as row end invisible, add period for system_time(trx_start, trx_end), add system versioning; call verify_vtq; @@ -262,8 +262,8 @@ select * from t for system_time all; create or replace table t ( a int, - sys_trx_start bigint(20) unsigned generated always as row start, - sys_trx_end bigint(20) unsigned generated always as row end, + sys_trx_start bigint(20) unsigned as row start invisible, + sys_trx_end bigint(20) unsigned as row end invisible, period for system_time(sys_trx_start, sys_trx_end) ) with system versioning engine innodb; --error ER_VERS_ALTER_SYSTEM_FIELD @@ -271,8 +271,8 @@ alter table t change column sys_trx_start asdf bigint unsigned; create or replace table t ( a int, - sys_trx_start timestamp(6) generated always as row start, - sys_trx_end timestamp(6) generated always as row end, + sys_trx_start timestamp(6) as row start invisible, + sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end) ) with system versioning engine myisam; --error ER_VERS_ALTER_SYSTEM_FIELD @@ -280,8 +280,8 @@ alter table t change column sys_trx_start asdf timestamp(6); create or replace table t ( a int, - sys_trx_start timestamp(6) generated always as row start, - sys_trx_end timestamp(6) generated always as row end, + sys_trx_start timestamp(6) as row start invisible, + sys_trx_end timestamp(6) as row end invisible, period for system_time(sys_trx_start, sys_trx_end) ) with system versioning; select * from t; @@ -333,10 +333,10 @@ insert into non_empty values (1, 100, 200); --error ER_VERS_GENERATED_ALWAYS_NOT_EMPTY alter table non_empty - change column sys_trx_start sys_trx_start bigint(20) unsigned generated always as row start; + change column sys_trx_start sys_trx_start bigint(20) unsigned as row start invisible; --error ER_VERS_GENERATED_ALWAYS_NOT_EMPTY alter table non_empty - change column sys_trx_end sys_trx_end bigint(20) unsigned generated always as row end; + change column sys_trx_end sys_trx_end bigint(20) unsigned as row end invisible; drop table non_empty; create or replace table t (a int primary key) with system versioning; diff --git a/mysql-test/suite/versioning/t/auto_increment.test b/mysql-test/suite/versioning/t/auto_increment.test index 7b79be575d1..6108f6d9818 100644 --- a/mysql-test/suite/versioning/t/auto_increment.test +++ b/mysql-test/suite/versioning/t/auto_increment.test @@ -11,8 +11,8 @@ begin id int unsigned auto_increment primary key, x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); diff --git a/mysql-test/suite/versioning/t/commit_id.test b/mysql-test/suite/versioning/t/commit_id.test index 6f68630f0d9..66a9db64e10 100644 --- a/mysql-test/suite/versioning/t/commit_id.test +++ b/mysql-test/suite/versioning/t/commit_id.test @@ -2,8 +2,8 @@ create table t1( id int auto_increment primary key, - sys_trx_start bigint unsigned generated always as row start, - sys_trx_end bigint unsigned generated always as row end, + sys_trx_start bigint unsigned as row start invisible, + sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning diff --git a/mysql-test/suite/versioning/t/create.test b/mysql-test/suite/versioning/t/create.test index 3acb5eaa852..9b78dccf00b 100644 --- a/mysql-test/suite/versioning/t/create.test +++ b/mysql-test/suite/versioning/t/create.test @@ -8,8 +8,8 @@ drop table if exists t1; --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE NULL '' eval create table t1 ( x1 int unsigned, - Sys_start $sys_datatype generated always as row start comment 'start', - Sys_end $sys_datatype generated always as row end comment 'end', + Sys_start $sys_datatype as row start invisible comment 'start', + Sys_end $sys_datatype as row end invisible comment 'end', period for system_time (Sys_start, Sys_end) ) with system versioning; --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE @@ -26,8 +26,8 @@ show create table t1; --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x3 int unsigned, - Sys_start $sys_datatype generated always as row start, - Sys_end $sys_datatype generated always as row end, + Sys_start $sys_datatype as row start invisible, + Sys_end $sys_datatype as row end invisible, period for system_time (x, Sys_end) ) with system versioning; @@ -35,8 +35,8 @@ eval create or replace table t1 ( --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x4 int unsigned, - Sys_start $sys_datatype generated always as row start, - Sys_end2 $sys_datatype generated always as row end, + Sys_start $sys_datatype as row start invisible, + Sys_end2 $sys_datatype as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; @@ -44,8 +44,8 @@ eval create or replace table t1 ( --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x5 int unsigned, - Sys_start $sys_datatype generated always as row start, - Sys_end $sys_datatype generated always as row end, + Sys_start $sys_datatype as row start invisible, + Sys_end $sys_datatype as row end invisible, period for system_time (Sys_start, x) ) with system versioning; @@ -59,8 +59,8 @@ create or replace table t1 ( --error ER_MISSING eval create or replace table t1 ( x7 int unsigned, - Sys_start $sys_datatype generated always as row start, - Sys_end $sys_datatype generated always as row end, + Sys_start $sys_datatype as row start invisible, + Sys_end $sys_datatype as row end invisible, period for system_time (Sys_start, Sys_end) ); @@ -68,8 +68,8 @@ eval create or replace table t1 ( --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x8 int unsigned, - Sys_start $sys_datatype generated always as row start, - Sys_end $sys_datatype generated always as row end, + Sys_start $sys_datatype as row start invisible, + Sys_end $sys_datatype as row end invisible, period for system_time (sys_insert, sys_remove) ) with system versioning; @@ -77,8 +77,8 @@ eval create or replace table t1 ( --error ER_MISSING eval create or replace table t1 ( x9 int unsigned, - Sys_start $sys_datatype generated always as row start, - Sys_end $sys_datatype generated always as row end, + Sys_start $sys_datatype as row start invisible, + Sys_end $sys_datatype as row end invisible, period for system_time (Sys_start, Sys_end) ); @@ -86,40 +86,40 @@ eval create or replace table t1 ( --error ER_MISSING eval create or replace table t1 ( x10 int unsigned, - Sys_start $sys_datatype generated always as row start, - Sys_end $sys_datatype generated always as row end, + Sys_start $sys_datatype as row start invisible, + Sys_end $sys_datatype as row end invisible, period for system_time (Sys_start, Sys_start) ); --error ER_VERS_FIELD_WRONG_TYPE, ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x11 int unsigned, - Sys_start bigint unsigned generated always as row start, - Sys_end timestamp(6) generated always as row end, + Sys_start bigint unsigned as row start invisible, + Sys_end timestamp(6) as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; --error ER_VERS_FIELD_WRONG_TYPE, ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x12 int unsigned, - Sys_start timestamp(6) generated always as row start, - Sys_end bigint unsigned generated always as row end, + Sys_start timestamp(6) as row start invisible, + Sys_end bigint unsigned as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; --error ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x13 int unsigned, - Sys_start bigint generated always as row start, - Sys_end bigint unsigned generated always as row end, + Sys_start bigint as row start invisible, + Sys_end bigint unsigned as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning engine innodb; --error ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x14 int unsigned, - Sys_start bigint unsigned generated always as row start, - Sys_end bigint generated always as row end, + Sys_start bigint unsigned as row start invisible, + Sys_end bigint as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning engine innodb; @@ -190,8 +190,8 @@ create or replace table t1 (x23 int) with system versioning; --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE eval create or replace table t0( y int, - st $sys_datatype generated always as row start, - en $sys_datatype generated always as row end, + st $sys_datatype as row start, + en $sys_datatype as row end, period for system_time (st, en) ) with system versioning; @@ -210,7 +210,7 @@ show create table t3; --echo ## For versioned table insert into t1 values (1); select sys_trx_start from t1 into @sys_trx_start; -insert into t0 values (2); +insert into t0 (y) values (2); select st from t0 into @st; --echo ### 1. implicit system fields are included as implicit @@ -231,8 +231,8 @@ select y from t3 where st = @st and sys_trx_start > @st; --echo ### 3. explicit system fields are kept as system --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE eval create or replace table t3 ( - st $sys_datatype generated always as row start, - en $sys_datatype generated always as row end, + st $sys_datatype as row start invisible, + en $sys_datatype as row end invisible, period for system_time (st, en) ) with system versioning as select * from t0; --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE $sys_datatype_null SYS_DATATYPE $sys_datatype_not_null SYS_DATATYPE $sys_datatype_default_null SYS_DATATYPE @@ -264,7 +264,7 @@ show create table t3; select * from t3 for system_time all where sys_trx_start = @sys_trx_start and sys_trx_end = @sys_trx_end; create or replace table t2 like t0; -insert into t2 values (1), (2); +insert into t2 (y) values (1), (2); delete from t2 where y = 2; create or replace table t3 select * from t2 for system_time all; @@ -288,8 +288,8 @@ show create table t2; create or replace table t1 ( x26 int, - st bigint unsigned generated always as row start, - en bigint unsigned generated always as row end, + st bigint unsigned as row start invisible, + en bigint unsigned as row end invisible, period for system_time (st, en) ) with system versioning engine innodb; --error ER_VERS_FIELD_WRONG_TYPE @@ -319,9 +319,9 @@ create or replace temporary table t (x28 int) with system versioning; --error ER_VERS_DUPLICATE_ROW_START_END create or replace table t1 ( x29 int unsigned, - Sys_start0 timestamp(6) generated always as row start, - Sys_start timestamp(6) generated always as row start, - Sys_end timestamp(6) generated always as row end, + Sys_start0 timestamp(6) as row start invisible, + Sys_start timestamp(6) as row start invisible, + Sys_end timestamp(6) as row end invisible, period for system_time (Sys_start, Sys_end) ) with system versioning; @@ -330,8 +330,8 @@ create or replace table t1 (x30 int) with system versioning; --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE eval create or replace table t2 ( y int, - st $sys_datatype generated always as row start, - en $sys_datatype generated always as row end, + st $sys_datatype as row start invisible, + en $sys_datatype as row end invisible, period for system_time (st, en) ) with system versioning; @@ -343,8 +343,8 @@ show create table t3; --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE eval create or replace table t3 ( y int, - st $sys_datatype generated always as row start, - en $sys_datatype generated always as row end, + st $sys_datatype as row start invisible, + en $sys_datatype as row end invisible, period for system_time (st, en) ) with system versioning as select x30, y, sys_trx_start, sys_trx_end, st, en from t1, t2; diff --git a/mysql-test/suite/versioning/t/delete.test b/mysql-test/suite/versioning/t/delete.test index 5af0f4a6913..55420a21185 100644 --- a/mysql-test/suite/versioning/t/delete.test +++ b/mysql-test/suite/versioning/t/delete.test @@ -9,8 +9,8 @@ begin set @str= concat(' create or replace table t1( XNo int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -56,8 +56,8 @@ create or replace procedure test_02( begin set @str= concat('create or replace table t1 ( x int, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -79,8 +79,8 @@ begin set @str0= concat('( x int, y int, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); diff --git a/mysql-test/suite/versioning/t/insert.test b/mysql-test/suite/versioning/t/insert.test index 77277032b8c..8336e0a2671 100644 --- a/mysql-test/suite/versioning/t/insert.test +++ b/mysql-test/suite/versioning/t/insert.test @@ -10,8 +10,8 @@ begin create table t1( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -34,8 +34,8 @@ begin id int unsigned auto_increment primary key, x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -57,8 +57,8 @@ begin create table t1( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -101,8 +101,8 @@ begin set @str= concat('( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -168,8 +168,8 @@ call verify_vtq; create table t1( x int unsigned, - sys_start bigint unsigned generated always as row start, - sys_end bigint unsigned generated always as row end, + sys_start bigint unsigned as row start invisible, + sys_end bigint unsigned as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine=innodb; @@ -198,8 +198,8 @@ set global system_versioning_transaction_registry= on; create or replace table t1 ( x int, y int as (x) virtual, - sys_trx_start bigint unsigned as row start, - sys_trx_end bigint unsigned as row end, + sys_trx_start bigint unsigned as row start invisible, + sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) engine=innodb with system versioning; insert into t1 values (1, null); diff --git a/mysql-test/suite/versioning/t/select.test b/mysql-test/suite/versioning/t/select.test index ee3ccae98e5..c0dbcbd972a 100644 --- a/mysql-test/suite/versioning/t/select.test +++ b/mysql-test/suite/versioning/t/select.test @@ -7,8 +7,8 @@ eval create or replace table t1 ( x int unsigned, y int unsigned, - sys_trx_start $sys_datatype_expl generated always as row start, - sys_trx_end $sys_datatype_expl generated always as row end, + sys_trx_start $sys_datatype_expl as row start invisible, + sys_trx_end $sys_datatype_expl as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning; @@ -203,8 +203,8 @@ select * from t1 for system_time as of transaction 1; create or replace table t1 ( x int, - sys_trx_start bigint unsigned generated always as row start, - sys_trx_end bigint unsigned generated always as row end, + sys_trx_start bigint unsigned as row start invisible, + sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning engine innodb; insert into t1 values (1); diff --git a/mysql-test/suite/versioning/t/select_sp.test b/mysql-test/suite/versioning/t/select_sp.test index 328256ded32..6e85508104c 100644 --- a/mysql-test/suite/versioning/t/select_sp.test +++ b/mysql-test/suite/versioning/t/select_sp.test @@ -11,8 +11,8 @@ begin create table t1( x int unsigned, y int unsigned, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); @@ -70,8 +70,8 @@ begin set @str0= concat('( x int, y int, - sys_start ', sys_type, ' generated always as row start, - sys_end ', sys_type, ' generated always as row end, + sys_start ', sys_type, ' as row start invisible, + sys_end ', sys_type, ' as row end invisible, period for system_time (sys_start, sys_end)) with system versioning engine ', engine); diff --git a/mysql-test/suite/versioning/t/sysvars.test b/mysql-test/suite/versioning/t/sysvars.test index ef8133fef6f..cf450db2fb0 100644 --- a/mysql-test/suite/versioning/t/sysvars.test +++ b/mysql-test/suite/versioning/t/sysvars.test @@ -85,8 +85,8 @@ select * from t; set system_versioning_hide= FULL; create or replace table t ( x int, - st timestamp(6) generated always as row start, - en timestamp(6) generated always as row end, + st timestamp(6) as row start invisible, + en timestamp(6) as row end invisible, period for system_time (st, en)) with system versioning; diff --git a/mysql-test/suite/versioning/t/trx_id.test b/mysql-test/suite/versioning/t/trx_id.test index 951073f56d7..daf4adb3181 100644 --- a/mysql-test/suite/versioning/t/trx_id.test +++ b/mysql-test/suite/versioning/t/trx_id.test @@ -5,8 +5,8 @@ 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, + sys_trx_start bigint(20) unsigned as row start invisible, + sys_trx_end bigint(20) unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning engine innodb; @@ -14,8 +14,8 @@ 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, + sys_trx_start bigint(20) unsigned as row start invisible, + sys_trx_end bigint(20) unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning engine innodb; diff --git a/mysql-test/suite/versioning/t/update.test b/mysql-test/suite/versioning/t/update.test index 5c53b3fd6fc..bda908f4b54 100644 --- a/mysql-test/suite/versioning/t/update.test +++ b/mysql-test/suite/versioning/t/update.test @@ -10,8 +10,8 @@ begin create table t1( x int unsigned, y int unsigned, - sys_trx_start ', sys_type, ' generated always as row start, - sys_trx_end ', sys_type, ' generated always as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -45,8 +45,8 @@ begin id bigint primary key, x int, y int without system versioning, - sys_trx_start ', sys_type, ' as row start, - sys_trx_end ', sys_type, ' as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -73,8 +73,8 @@ begin create table t1 ( x int, y int, - sys_trx_start bigint unsigned as row start, - sys_trx_end bigint unsigned as row end, + sys_trx_start bigint unsigned as row start invisible, + sys_trx_end bigint unsigned as row end invisible, period for system_time (sys_trx_start, sys_trx_end) ) with system versioning engine ', engine); @@ -104,8 +104,8 @@ begin create table t1 ( id int primary key auto_increment, x int, - sys_trx_start ', sys_type, ' as row start, - sys_trx_end ', sys_type, ' as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -134,8 +134,8 @@ begin set @str= concat(' create table t1( x int unsigned, - sys_trx_end ', sys_type, ' generated always as row end, - sys_trx_start ', sys_type, ' generated always as row start, + sys_trx_end ', sys_type, ' as row end invisible, + sys_trx_start ', sys_type, ' as row start invisible, y int unsigned, period for system_time (sys_trx_start, sys_trx_end), primary key(x, y)) @@ -162,8 +162,8 @@ begin set @str= concat('( x int unsigned, y int unsigned, - sys_trx_start ', sys_type, ' generated always as row start, - sys_trx_end ', sys_type, ' generated always as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); @@ -209,8 +209,8 @@ begin id bigint primary key without system versioning, name varchar(128), salary bigint without system versioning, - sys_trx_start ', sys_type, ' as row start, - sys_trx_end ', sys_type, ' as row end, + sys_trx_start ', sys_type, ' as row start invisible, + sys_trx_end ', sys_type, ' as row end invisible, period for system_time (sys_trx_start, sys_trx_end)) with system versioning engine ', engine); diff --git a/sql/field.cc b/sql/field.cc index 4014fca818f..21f869d8a07 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1603,7 +1603,7 @@ String *Field::val_int_as_str(String *val_buffer, bool unsigned_val) Field::Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg, uchar null_bit_arg, utype unireg_check_arg, const LEX_CSTRING *field_name_arg) - :ptr(ptr_arg), field_visibility(NOT_INVISIBLE), + :ptr(ptr_arg), invisible(VISIBLE), null_ptr(null_ptr_arg), table(0), orig_table(0), table_name(0), field_name(*field_name_arg), option_list(0), option_struct(0), key_start(0), part_of_key(0), @@ -2238,9 +2238,9 @@ Field *Field::make_new_field(MEM_ROOT *root, TABLE *new_table, tmp->flags&= (NOT_NULL_FLAG | BLOB_FLAG | UNSIGNED_FLAG | ZEROFILL_FLAG | BINARY_FLAG | ENUM_FLAG | SET_FLAG | VERS_SYS_START_FLAG | VERS_SYS_END_FLAG | - VERS_UPDATE_UNVERSIONED_FLAG | VERS_HIDDEN_FLAG); + VERS_UPDATE_UNVERSIONED_FLAG); tmp->reset_fields(); - tmp->field_visibility= NOT_INVISIBLE; + tmp->invisible= VISIBLE; return tmp; } @@ -10750,7 +10750,7 @@ Column_definition::Column_definition(THD *thd, Field *old_field, pack_flag= 0; compression_method_ptr= 0; versioning= VERSIONING_NOT_SET; - field_visibility= old_field->field_visibility; + invisible= old_field->invisible; if (orig_field) { @@ -10888,7 +10888,7 @@ Column_definition::redefine_stage1_common(const Column_definition *dup_field, flags= dup_field->flags; interval= dup_field->interval; vcol_info= dup_field->vcol_info; - field_visibility= dup_field->field_visibility; + invisible= dup_field->invisible; } diff --git a/sql/field.h b/sql/field.h index addd1e95f38..42a3b9e58bd 100644 --- a/sql/field.h +++ b/sql/field.h @@ -683,7 +683,7 @@ public: uchar *ptr; // Position to field in record - field_visible_type field_visibility; + field_visibility_t invisible; /** Byte where the @c NULL bit is stored inside a record. If this Field is a @c NOT @c NULL field, this member is @c NULL. @@ -1468,6 +1468,8 @@ public: return flags & VERS_UPDATE_UNVERSIONED_FLAG; } + bool vers_sys_invisible(THD *thd) const; + virtual bool vers_trx_id() const { return false; @@ -4142,7 +4144,7 @@ public: max number of characters. */ ulonglong length; - field_visible_type field_visibility; + field_visibility_t invisible; /* The value of `length' as set by parser: is the number of characters for most of the types, or of bytes for BLOBs or numeric types. @@ -4175,7 +4177,7 @@ public: :Type_handler_hybrid_field_type(&type_handler_null), compression_method_ptr(0), comment(null_clex_str), - on_update(NULL), length(0),field_visibility(NOT_INVISIBLE), decimals(0), + on_update(NULL), length(0), invisible(VISIBLE), decimals(0), flags(0), pack_length(0), key_length(0), unireg_check(Field::NONE), interval(0), charset(&my_charset_bin), srid(0), geom_type(Field::GEOM_GEOMETRY), @@ -4654,7 +4656,7 @@ bool check_expression(Virtual_column_info *vcol, LEX_CSTRING *name, #define f_no_default(x) ((x) & FIELDFLAG_NO_DEFAULT) #define f_bit_as_char(x) ((x) & FIELDFLAG_TREAT_BIT_AS_CHAR) #define f_is_hex_escape(x) ((x) & FIELDFLAG_HEX_ESCAPE) -#define f_visibility(x) (static_cast ((x) & MAX_BITS_INVISIBLE)) +#define f_visibility(x) (static_cast ((x) & INVISIBLE_MAX_BITS)) inline ulonglong TABLE::vers_end_id() const diff --git a/sql/handler.cc b/sql/handler.cc index 6d275a4396f..d462e1a279a 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -6771,9 +6771,10 @@ static Create_field *vers_init_sys_field(THD *thd, const char *field_name, f->field_name.str= field_name; f->field_name.length= strlen(field_name); f->charset= system_charset_info; - f->flags= flags | VERS_HIDDEN_FLAG; + f->flags= flags; f->set_handler(&type_handler_timestamp2); f->length= MAX_DATETIME_PRECISION; + f->invisible= INVISIBLE_SYSTEM; if (f->check(thd)) return NULL; @@ -7120,13 +7121,13 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info, return true; } - if (!(share->vers_start_field()->flags & VERS_HIDDEN_FLAG)) + if (share->vers_start_field()->invisible < INVISIBLE_SYSTEM) { my_error(ER_VERS_SYS_FIELD_NOT_HIDDEN, MYF(0), share->vers_start_field()->field_name.str); return true; } - if (!(share->vers_end_field()->flags & VERS_HIDDEN_FLAG)) + if (share->vers_end_field()->invisible < INVISIBLE_SYSTEM) { my_error(ER_VERS_SYS_FIELD_NOT_HIDDEN, MYF(0), share->vers_end_field()->field_name.str); @@ -7255,7 +7256,7 @@ bool Vers_parse_info::fix_alter_info(THD *thd, Alter_info *alter_info, } else continue; - if (f->flags & VERS_HIDDEN_FLAG) + if (f->invisible > INVISIBLE_USER) { my_error(ER_CANT_DROP_FIELD_OR_KEY, MYF(0), d->type_name(), name); return true; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index d07e626ec6a..b6e38477eab 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -5528,7 +5528,7 @@ find_field_in_table(THD *thd, TABLE *table, const char *name, uint length, if (field_ptr && *field_ptr) { - if ((*field_ptr)->field_visibility == COMPLETELY_INVISIBLE && + if ((*field_ptr)->invisible == INVISIBLE_FULL && DBUG_EVALUATE_IF("test_completely_invisible", 0, 1)) DBUG_RETURN((Field*)0); @@ -7492,6 +7492,29 @@ bool get_key_map_from_key_list(key_map *map, TABLE *table, } +inline +bool Field::vers_sys_invisible(THD *thd) const +{ + DBUG_ASSERT(vers_sys_field()); + enum_sql_command sql_command= thd->lex->sql_command; + SELECT_LEX *slex= thd->lex->current_select; + ulong vers_hide= thd->variables.vers_hide; + DBUG_ASSERT(table); + DBUG_ASSERT(table->pos_in_table_list); + TABLE_LIST *tl= table->pos_in_table_list; + vers_system_time_t vers_type= tl->vers_conditions.type; + + return (sql_command == SQLCOM_CREATE_VIEW || + slex->nest_level > 0 || + vers_hide == VERS_HIDE_FULL || + (invisible && ( + vers_hide == VERS_HIDE_IMPLICIT || + (vers_hide == VERS_HIDE_AUTO && ( + vers_type == SYSTEM_TIME_UNSPECIFIED || + vers_type == SYSTEM_TIME_AS_OF))))); +} + + /* Drops in all fields instead of current '*' field @@ -7518,7 +7541,6 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name, Field_iterator_table_ref field_iterator; bool found; char name_buff[SAFE_NAME_LEN+1]; - ulong vers_hide= thd->variables.vers_hide; DBUG_ENTER("insert_fields"); DBUG_PRINT("arena", ("stmt arena: %p",thd->stmt_arena)); @@ -7623,45 +7645,21 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name, But view fields can never be invisible. */ if ((field= field_iterator.field()) && - field->field_visibility != NOT_INVISIBLE) + (field->vers_sys_field() ? + field->vers_sys_invisible(thd) : + field->invisible)) + { + if (thd->lex->sql_command != SQLCOM_CREATE_TABLE || + !(thd->lex->create_info.options & HA_VERSIONED_TABLE)) continue; + } + Item *item; if (!(item= field_iterator.create_item(thd))) DBUG_RETURN(TRUE); - if (item->type() == Item::FIELD_ITEM) - { - Item_field *f= static_cast(item); - DBUG_ASSERT(f->field); - uint32 fl= f->field->flags; - bool sys_field= fl & (VERS_SYS_START_FLAG | VERS_SYS_END_FLAG); - SELECT_LEX *slex= thd->lex->current_select; - TABLE *table= f->field->table; - DBUG_ASSERT(table && table->pos_in_table_list); - TABLE_LIST *tl= table->pos_in_table_list; - vers_system_time_t vers_type= tl->vers_conditions.type; - - enum_sql_command sql_command= thd->lex->sql_command; - unsigned int create_options= thd->lex->create_info.options; - - if (sys_field ? - (sql_command == SQLCOM_CREATE_VIEW || - slex->nest_level > 0 || - vers_hide == VERS_HIDE_FULL || - ((fl & VERS_HIDDEN_FLAG) && ( - vers_hide == VERS_HIDE_IMPLICIT || - (vers_hide == VERS_HIDE_AUTO && ( - vers_type == SYSTEM_TIME_UNSPECIFIED || - vers_type == SYSTEM_TIME_AS_OF))))) : - (fl & VERS_HIDDEN_FLAG)) - { - if (sql_command != SQLCOM_CREATE_TABLE || - !(create_options & HA_VERSIONED_TABLE)) - continue; - } - } - else if (item->type() == Item::REF_ITEM) + if (item->type() == Item::REF_ITEM) { Item *i= item; while (i->type() == Item::REF_ITEM) @@ -7670,7 +7668,7 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name, { Item_field *f= (Item_field *)i; DBUG_ASSERT(f->field); - if (f->field->flags & VERS_HIDDEN_FLAG) + if (f->field->vers_sys_field() && f->field->vers_sys_invisible(thd)) continue; } } @@ -8307,14 +8305,18 @@ fill_record(THD *thd, TABLE *table, Field **ptr, List &values, /* Ensure that all fields are from the same table */ DBUG_ASSERT(field->table == table); - if (table->versioned() && field->vers_sys_field() && !ignore_errors) + bool vers_sys_field= table->versioned() && field->vers_sys_field(); + + if (vers_sys_field && !ignore_errors) { my_error(ER_NONUPDATEABLE_COLUMN, MYF(0), field->field_name.str); goto err; } - if (field->field_visibility != NOT_INVISIBLE) + if (field->invisible && !vers_sys_field) + { continue; + } else value=v++; if (field->field_index == autoinc_index) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index b118cac09c2..7c7f2050b34 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -222,7 +222,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list, table_list->view_db.str, table_list->view_name.str); DBUG_RETURN(-1); } - if (values.elements != table->vers_user_fields()) + if (values.elements != table->s->visible_fields) { my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), 1L); DBUG_RETURN(-1); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c5d6954171e..651c7fc838a 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -16865,7 +16865,6 @@ Field *create_tmp_field_from_field(THD *thd, Field *org_field, new_field->field_name= *name; new_field->flags|= (org_field->flags & ( NO_DEFAULT_VALUE_FLAG | - VERS_HIDDEN_FLAG | VERS_SYS_START_FLAG | VERS_SYS_END_FLAG | VERS_UPDATE_UNVERSIONED_FLAG)); @@ -17128,6 +17127,10 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, modify_item ? field : NULL); } + + if (field->field->vers_sys_field()) + result->invisible= field->field->invisible; + if (orig_type == Item::REF_ITEM && orig_modify) ((Item_ref*)orig_item)->set_result_field(result); /* @@ -17715,8 +17718,10 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List &fields, if (sys_trx_start && sys_trx_end) { DBUG_ASSERT(versioned); - sys_trx_start->flags|= VERS_SYS_START_FLAG | VERS_HIDDEN_FLAG; - sys_trx_end->flags|= VERS_SYS_END_FLAG | VERS_HIDDEN_FLAG; + sys_trx_start->flags|= VERS_SYS_START_FLAG; + sys_trx_end->flags|= VERS_SYS_END_FLAG; + sys_trx_start->invisible= INVISIBLE_SYSTEM; + sys_trx_end->invisible= INVISIBLE_SYSTEM; share->versioned= versioned; share->field= table->field; share->row_start_field= sys_trx_start->field_index; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 1296ac3ae2f..1c4c0b614b1 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2189,12 +2189,17 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet, uint flags = field->flags; - if (vers_hide == VERS_HIDE_FULL && - (flags & (VERS_SYS_START_FLAG | VERS_SYS_END_FLAG))) - continue; - - if (field->field_visibility > USER_DEFINED_INVISIBLE) + if (field->vers_sys_field()) + { + if (vers_hide == VERS_HIDE_FULL || (vers_hide != VERS_HIDE_NEVER && + field->invisible > INVISIBLE_USER)) + { + continue; + } + } + else if (field->invisible > INVISIBLE_USER) continue; + if (not_the_first_field) packet->append(STRING_WITH_LEN(",\n")); @@ -2259,7 +2264,7 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet, packet->append(STRING_WITH_LEN(" NULL")); } - if (field->field_visibility == USER_DEFINED_INVISIBLE) + if (field->invisible == INVISIBLE_USER) { packet->append(STRING_WITH_LEN(" INVISIBLE")); } @@ -2343,8 +2348,8 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet, Field *field= key_part->field; if (field && field->vers_sys_field()) { - if (vers_hide == VERS_HIDE_FULL /*|| ((field->flags & HIDDEN_FLAG) && - vers_hide != VERS_HIDE_NEVER)*/) + if (vers_hide == VERS_HIDE_FULL || (field->invisible && + vers_hide != VERS_HIDE_NEVER)) continue; } @@ -2380,11 +2385,17 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet, { const Field *fs = table->vers_start_field(); const Field *fe = table->vers_end_field(); - packet->append(STRING_WITH_LEN(",\n PERIOD FOR SYSTEM_TIME (")); - append_identifier(thd,packet,fs->field_name.str, fs->field_name.length); - packet->append(STRING_WITH_LEN(", ")); - append_identifier(thd,packet,fe->field_name.str, fe->field_name.length); - packet->append(STRING_WITH_LEN(")")); + DBUG_ASSERT(fs); + DBUG_ASSERT(fe); + DBUG_ASSERT(!fs->invisible || fe->invisible); + if (fe->invisible < INVISIBLE_SYSTEM || vers_hide == VERS_HIDE_NEVER) + { + packet->append(STRING_WITH_LEN(",\n PERIOD FOR SYSTEM_TIME (")); + append_identifier(thd,packet,fs->field_name.str, fs->field_name.length); + packet->append(STRING_WITH_LEN(", ")); + append_identifier(thd,packet,fe->field_name.str, fe->field_name.length); + packet->append(STRING_WITH_LEN(")")); + } } /* @@ -5847,7 +5858,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables, for (; (field= *ptr) ; ptr++) { - if(field->field_visibility > USER_DEFINED_INVISIBLE) + if(field->invisible > INVISIBLE_USER) continue; uchar *pos; char tmp[MAX_FIELD_WIDTH]; @@ -5928,7 +5939,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables, else table->field[20]->store(STRING_WITH_LEN("NEVER"), cs); /*Invisible can coexist with auto_increment and virtual */ - if (field->field_visibility == USER_DEFINED_INVISIBLE) + if (field->invisible == INVISIBLE_USER) { if (buf.length()) buf.append(STRING_WITH_LEN(", ")); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index e7c43d08ea3..c4c8361c92d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3316,22 +3316,22 @@ bool Column_definition::prepare_stage1_check_typelib_default() field_list list of all table fields field_name name/prefix of invisible field ( Prefix in the case when it is - *COMPLETELY_INVISIBLE* + *INVISIBLE_FULL* and given name is duplicate) type_handler field data type - field_visibility + invisible default value RETURN VALUE Create_field pointer */ int mysql_add_invisible_field(THD *thd, List * field_list, const char *field_name, Type_handler *type_handler, - field_visible_type field_visibility, Item* default_value) + field_visibility_t invisible, Item* default_value) { Create_field *fld= new(thd->mem_root)Create_field(); const char *new_name= NULL; - /* Get unique field name if field_visibility == COMPLETELY_INVISIBLE */ - if (field_visibility == COMPLETELY_INVISIBLE) + /* Get unique field name if invisible == INVISIBLE_FULL */ + if (invisible == INVISIBLE_FULL) { if ((new_name= make_unique_invisible_field_name(thd, field_name, field_list))) @@ -3348,7 +3348,7 @@ int mysql_add_invisible_field(THD *thd, List * field_list, fld->field_name.length= strlen(field_name); } fld->set_handler(type_handler); - fld->field_visibility= field_visibility; + fld->invisible= invisible; if (default_value) { Virtual_column_info *v= new (thd->mem_root) Virtual_column_info(); @@ -3421,12 +3421,12 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, DBUG_EXECUTE_IF("test_pseudo_invisible",{ mysql_add_invisible_field(thd, &alter_info->create_list, - "invisible", &type_handler_long, SYSTEM_INVISIBLE, + "invisible", &type_handler_long, INVISIBLE_SYSTEM, new (thd->mem_root)Item_int(thd, 9)); }); DBUG_EXECUTE_IF("test_completely_invisible",{ mysql_add_invisible_field(thd, &alter_info->create_list, - "invisible", &type_handler_long, COMPLETELY_INVISIBLE, + "invisible", &type_handler_long, INVISIBLE_FULL, new (thd->mem_root)Item_int(thd, 9)); }); DBUG_EXECUTE_IF("test_invisible_index",{ @@ -3584,7 +3584,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, */ if (sql_field->stored_in_db()) record_offset+= sql_field->pack_length; - if (sql_field->field_visibility == USER_DEFINED_INVISIBLE && + if (sql_field->invisible == INVISIBLE_USER && sql_field->flags & NOT_NULL_FLAG && sql_field->flags & NO_DEFAULT_VALUE_FLAG) { @@ -3604,7 +3604,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->offset= record_offset; record_offset+= sql_field->pack_length; } - if (sql_field->field_visibility == NOT_INVISIBLE) + if (sql_field->invisible == VISIBLE) is_all_invisible= false; } if (is_all_invisible) @@ -3862,15 +3862,15 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, &sql_field->field_name)) field++; /* - Either field is not present or field visibility is > - USER_DEFINED_INVISIBLE + Either field is not present or field visibility is > INVISIBLE_USER */ if (!sql_field) { my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), column->field_name.str); DBUG_RETURN(TRUE); } - if (sql_field->field_visibility > USER_DEFINED_INVISIBLE && + if (sql_field->invisible > INVISIBLE_USER && + !(sql_field->flags & VERS_SYSTEM_FIELD) && !key->invisible && DBUG_EVALUATE_IF("test_invisible_index", 0, 1)) { my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), column->field_name.str); @@ -5343,11 +5343,11 @@ static void make_unique_constraint_name(THD *thd, LEX_CSTRING *name, } /** - COMPLETELY_INVISIBLE are internally created. They are completely invisible + INVISIBLE_FULL are internally created. They are completely invisible to Alter command (Opposite of SYSTEM_INVISIBLE which throws an error when same name column is added by Alter). So in the case of when - user added a same column name as of COMPLETELY_INVISIBLE , we change - COMPLETELY_INVISIBLE column name. + user added a same column name as of INVISIBLE_FULL , we change + INVISIBLE_FULL column name. */ static const char * make_unique_invisible_field_name(THD *thd, const char *field_name, @@ -7889,7 +7889,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, bitmap_clear_all(&table->tmp_set); for (f_ptr=table->field ; (field= *f_ptr) ; f_ptr++) { - if (field->field_visibility == COMPLETELY_INVISIBLE) + if (field->invisible == INVISIBLE_FULL) continue; Alter_drop *drop; if (field->type() == MYSQL_TYPE_VARCHAR) @@ -7902,7 +7902,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, !my_strcasecmp(system_charset_info,field->field_name.str, drop->name)) break; } - if (drop && field->field_visibility < SYSTEM_INVISIBLE) + if (drop && (field->invisible < INVISIBLE_SYSTEM || field->vers_sys_field())) { /* Reset auto_increment value if it was dropped */ if (MTYP_TYPENR(field->unireg_check) == Field::NEXT_NUMBER && @@ -7927,7 +7927,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, &def->change)) break; } - if (def && field->field_visibility < SYSTEM_INVISIBLE) + if (def && (field->invisible < INVISIBLE_SYSTEM || field->vers_sys_field())) { // Field is changed def->field=field; /* diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index db6199bb787..f68ce213a2c 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -6649,7 +6649,7 @@ vcol_attribute: | COMMENT_SYM TEXT_STRING_sys { Lex->last_field->comment= $2; } | INVISIBLE_SYM { - Lex->last_field->field_visibility= USER_DEFINED_INVISIBLE; + Lex->last_field->invisible= INVISIBLE_USER; } ; diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy index 763add813c3..82295e5453d 100644 --- a/sql/sql_yacc_ora.yy +++ b/sql/sql_yacc_ora.yy @@ -6135,7 +6135,7 @@ vcol_attribute: | COMMENT_SYM TEXT_STRING_sys { Lex->last_field->comment= $2; } | INVISIBLE_SYM { - Lex->last_field->field_visibility= USER_DEFINED_INVISIBLE; + Lex->last_field->invisible= INVISIBLE_USER; } ; diff --git a/sql/table.cc b/sql/table.cc index 2601480c6f5..882d4c88410 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -2076,14 +2076,12 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, uchar flags= *extra2_field_flags++; if (flags & VERS_OPTIMIZED_UPDATE) reg_field->flags|= VERS_UPDATE_UNVERSIONED_FLAG; - if (flags & VERS_HIDDEN) - reg_field->flags|= VERS_HIDDEN_FLAG; - reg_field->field_visibility= f_visibility(flags); + reg_field->invisible= f_visibility(flags); } - if (reg_field->field_visibility == USER_DEFINED_INVISIBLE) + if (reg_field->invisible == INVISIBLE_USER) status_var_increment(thd->status_var.feature_invisible_columns); - if (reg_field->field_visibility == NOT_INVISIBLE) + if (!reg_field->invisible) share->visible_fields++; if (field_type == MYSQL_TYPE_BIT && !f_bit_as_char(pack_flag)) { @@ -2336,7 +2334,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, field= key_part->field= share->field[key_part->fieldnr-1]; key_part->type= field->key_type(); - if (field->field_visibility > USER_DEFINED_INVISIBLE) + if (field->invisible > INVISIBLE_USER && !field->vers_sys_field()) keyinfo->flags |= HA_INVISIBLE_KEY; if (field->null_ptr) { diff --git a/sql/table.h b/sql/table.h index 0fcdc0c7ceb..2437901b92d 100644 --- a/sql/table.h +++ b/sql/table.h @@ -337,16 +337,18 @@ enum enum_vcol_update_mode /* Field visibility enums */ -enum field_visible_type{ - NOT_INVISIBLE= 0, - USER_DEFINED_INVISIBLE, +enum field_visibility_t { + VISIBLE= 0, + INVISIBLE_USER, /* automatically added by the server. Can be queried explicitly in SELECT, otherwise invisible from anything" */ - SYSTEM_INVISIBLE, - COMPLETELY_INVISIBLE, - MAX_BITS_INVISIBLE= 3 + INVISIBLE_SYSTEM, + INVISIBLE_FULL }; +#define INVISIBLE_MAX_BITS 3 + + /** Category of table found in the table share. */ @@ -1561,13 +1563,6 @@ public: /** Number of additional fields used in versioned tables */ #define VERSIONING_FIELDS 2 - - uint vers_user_fields() const - { - return s->versioned ? - s->visible_fields - VERSIONING_FIELDS : - s->visible_fields; - } }; diff --git a/sql/unireg.cc b/sql/unireg.cc index 38ca36728cc..251d48f2d96 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -98,11 +98,9 @@ static uchar *extra2_write_field_properties(uchar *pos, pos= extra2_write_len(pos, create_fields.elements); while (Create_field *cf= it++) { - uchar flags= cf->field_visibility; + uchar flags= cf->invisible; if (cf->flags & VERS_UPDATE_UNVERSIONED_FLAG) flags|= VERS_OPTIMIZED_UPDATE; - if (cf->flags & VERS_HIDDEN_FLAG) - flags|= VERS_HIDDEN; *pos++= flags; } return pos; @@ -143,9 +141,9 @@ bool has_extra2_field_flags(List &create_fields) List_iterator it(create_fields); while (Create_field *f= it++) { - if (f->field_visibility != NOT_INVISIBLE) + if (f->invisible) return true; - if (f->flags & (VERS_UPDATE_UNVERSIONED_FLAG | VERS_HIDDEN_FLAG)) + if (f->flags & VERS_UPDATE_UNVERSIONED_FLAG) return true; } return false; diff --git a/sql/unireg.h b/sql/unireg.h index 99e5e6c1b6c..6d49b1d5092 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -182,8 +182,8 @@ enum extra2_frm_value_type { }; enum extra2_field_flags { - VERS_OPTIMIZED_UPDATE= 1 << MAX_BITS_INVISIBLE, - VERS_HIDDEN= 1 << (MAX_BITS_INVISIBLE + 1), + VERS_OPTIMIZED_UPDATE= 1 << INVISIBLE_MAX_BITS, + VERS_HIDDEN= 1 << (INVISIBLE_MAX_BITS + 1), }; int rea_create_table(THD *thd, LEX_CUSTRING *frm,