diff -uprN mysql-8.0.3-rc/mysql-test/mysql-test-run.pl mysql-8.0.3-rc/mysql-test/mysql-test-run.pl --- mysql-8.0.3-rc/mysql-test/mysql-test-run.pl 2017-09-19 19:33:50.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/mysql-test-run.pl 2020-04-19 23:52:39.334543845 +0800 @@ -141,7 +141,7 @@ our $opt_vs_config = $ENV{'MTR_VS_CONFIG # If you add a new suite, please check TEST_DIRS in Makefile.am. # -my $DEFAULT_SUITES= "main,sys_vars,binlog,binlog_gtid,binlog_nogtid,federated,gis,rpl,rpl_gtid,rpl_nogtid,innodb,innodb_gis,innodb_fts,innodb_zip,innodb_undo,perfschema,funcs_1,opt_trace,parts,auth_sec,query_rewrite_plugins,gcol,sysschema,test_service_sql_api,json,connection_control,test_services,collations,service_udf_registration,service_sys_var_registration,service_status_var_registration"; +my $DEFAULT_SUITES= "main,sys_vars,binlog,binlog_gtid,binlog_nogtid,federated,gis,rpl,rpl_gtid,rpl_nogtid,innodb,innodb_gis,innodb_fts,innodb_zip,innodb_undo,perfschema,funcs_1,opt_trace,parts,auth_sec,query_rewrite_plugins,gcol,sysschema,test_service_sql_api,json,connection_control,test_services,collations,service_udf_registration,service_sys_var_registration,service_status_var_registration,flashback"; my $opt_suites; our $opt_verbose= 0; # Verbose output, enable with --verbose diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback_info.result mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback_info.result --- mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback_info.result 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback_info.result 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,136 @@ +DROP DATABASE IF EXISTS mytestdb; +Warnings: +Note 1008 Can't drop database 'mytestdb'; database doesn't exist +CREATE DATABASE IF NOT EXISTS mytestdb; +USE mytestdb; + +############################################### +# Ordinary table has no flashback information # +############################################### +CREATE TABLE ordinary_tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)); +SHOW CREATE TABLE ordinary_tbl; +Table Create Table +ordinary_tbl CREATE TABLE `ordinary_tbl` ( + `a` int(11) NOT NULL, + `b` varchar(10) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='ordinary_tbl'; +ORIG_TABLE HIST_TABLE +NO NO + +########################################### +# History table has flashback information # +########################################### +CREATE TABLE tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)) WITH TEMPORAL; +SHOW CREATE TABLE tbl; +Table Create Table +tbl CREATE TABLE `tbl` ( + `a` int(11) NOT NULL, + `b` varchar(10) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 FLASHBACK /*FLASHBACK ORIGINAL*/ +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='tbl'; +ORIG_TABLE HIST_TABLE +YES NO +SHOW CREATE TABLE tbl_history; +Table Create Table +tbl_history CREATE TABLE `tbl_history` ( + `a` int(11) NOT NULL, + `b` varchar(10) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*FLASHBACK HISTORICAL*/ +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='tbl_history'; +ORIG_TABLE HIST_TABLE +NO YES + +############################################################################## +# Flashback info will not be changed when create table with 'LIKE' statement # +############################################################################## +CREATE TABLE like_tbl LIKE tbl; +SHOW CREATE TABLE like_tbl; +Table Create Table +like_tbl CREATE TABLE `like_tbl` ( + `a` int(11) NOT NULL, + `b` varchar(10) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 FLASHBACK /*FLASHBACK ORIGINAL*/ +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='like_tbl'; +ORIG_TABLE HIST_TABLE +YES NO +CREATE TABLE like_tbl_history LIKE tbl_history; +SHOW CREATE TABLE like_tbl_history; +Table Create Table +like_tbl_history CREATE TABLE `like_tbl_history` ( + `a` int(11) NOT NULL, + `b` varchar(10) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*FLASHBACK HISTORICAL*/ +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='like_tbl_history'; +ORIG_TABLE HIST_TABLE +NO YES + +############################################## +# We can define tablespace for history table # +############################################## +CREATE TABLESPACE `ts_hist` ADD DATAFILE 'ts_hist.ibd' Engine=InnoDB; +CREATE TABLESPACE `ts` ADD DATAFILE 'ts.ibd' Engine=InnoDB; +CREATE TABLE tbl1(a INT, b VARCHAR(10)) TABLESPACE=ts HIST_TABLESPACE=ts_hist WITH TEMPORAL; +CREATE TABLE tbl2(a INT, b VARCHAR(10)) HIST_TABLESPACE=ts_hist WITH TEMPORAL; +CREATE TABLE tbl3(a INT, b VARCHAR(10)) TABLESPACE=ts WITH TEMPORAL; +CREATE TABLE tbl4(a INT, b VARCHAR(10)) WITH TEMPORAL; +SHOW CREATE TABLE tbl1; +Table Create Table +tbl1 CREATE TABLE `tbl1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) /*!50100 TABLESPACE `ts` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 FLASHBACK /*FLASHBACK ORIGINAL*/ +SHOW CREATE TABLE tbl1_history; +Table Create Table +tbl1_history CREATE TABLE `tbl1_history` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) /*!50100 TABLESPACE `ts_hist` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 /*FLASHBACK HISTORICAL*/ +SHOW CREATE TABLE tbl2; +Table Create Table +tbl2 CREATE TABLE `tbl2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 FLASHBACK /*FLASHBACK ORIGINAL*/ +SHOW CREATE TABLE tbl2_history; +Table Create Table +tbl2_history CREATE TABLE `tbl2_history` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) /*!50100 TABLESPACE `ts_hist` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 /*FLASHBACK HISTORICAL*/ +SHOW CREATE TABLE tbl3; +Table Create Table +tbl3 CREATE TABLE `tbl3` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) /*!50100 TABLESPACE `ts` */ ENGINE=InnoDB DEFAULT CHARSET=utf8 FLASHBACK /*FLASHBACK ORIGINAL*/ +SHOW CREATE TABLE tbl3_history; +Table Create Table +tbl3_history CREATE TABLE `tbl3_history` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*FLASHBACK HISTORICAL*/ +SHOW CREATE TABLE tbl4; +Table Create Table +tbl4 CREATE TABLE `tbl4` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 FLASHBACK /*FLASHBACK ORIGINAL*/ +SHOW CREATE TABLE tbl4_history; +Table Create Table +tbl4_history CREATE TABLE `tbl4_history` ( + `a` int(11) DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*FLASHBACK HISTORICAL*/ + +########################################################################## +# Parameter 'HIST_TABLESPACE' can't be used when creating a normal table # +########################################################################## +CREATE TABLE tbl5(a INT, b VARCHAR(10)) HIST_TABLESPACE=ts_hist; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback.result mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback.result --- mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback.result 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/r/flashback.result 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,83 @@ +DROP DATABASE IF EXISTS mytestdb; +Warnings: +Note 1008 Can't drop database 'mytestdb'; database doesn't exist +CREATE DATABASE IF NOT EXISTS mytestdb; +USE mytestdb; + +######################################## +# Ordinary table creation not affected # +######################################## +CREATE TABLE ordinary_tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)); +SHOW TABLES; +Tables_in_mytestdb +ordinary_tbl + +########################################### +# Original and history tables are creared # +########################################### +CREATE TABLE cur_tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)) WITH TEMPORAL; +SHOW TABLES; +Tables_in_mytestdb +cur_tbl +cur_tbl_history +ordinary_tbl +INSERT INTO cur_tbl VALUES(1, 1); + +######################################################################################### +# Command except SQLCOM_SHOW_CREATE and SQLCOM_SHOW_FIELDS are banned for history table # +######################################################################################### +DESC cur_tbl_history; +Field Type Null Key Default Extra +a int(11) NO PRI NULL +b varchar(10) YES NULL +SHOW CREATE TABLE cur_tbl_history; +Table Create Table +cur_tbl_history CREATE TABLE `cur_tbl_history` ( + `a` int(11) NOT NULL, + `b` varchar(10) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*FLASHBACK HISTORICAL*/ +SHOW COLUMNS FROM cur_tbl_history; +Field Type Null Key Default Extra +a int(11) NO PRI NULL +b varchar(10) YES NULL +SELECT * FROM cur_tbl_history; +ERROR HY000: Can not access history table "(cur_tbl_history)" directly. + +#################################################### +# Temporal features only apply to select statement # +#################################################### +SELECT * FROM cur_tbl; +a b +1 1 +SELECT * FROM cur_tbl SYSTEM TIME AS OF '9999-12-31 23:59:59'; +a b +1 1 +SELECT * FROM cur_tbl SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b +1 1 +SELECT * FROM cur_tbl SYSTEM TRANSACTION 2003; +a b +UPDATE cur_tbl SYSTEM TIME AS OF '9999-12-31 23:59:59' SET b=b+1 WHERE a=1; +ERROR HY000: Only select statement supports temporal features. +DELETE FROM cur_tbl USING cur_tbl SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59' WHERE a=1; +ERROR HY000: Only select statement supports temporal features. + +###################################################### +# Temporal features can only apply to original table # +###################################################### +SELECT * FROM ordinary_tbl; +a b +SELECT * FROM ordinary_tbl SYSTEM TIME AS OF '9999-12-31 23:59:59'; +ERROR HY000: Only original table supports temporal features. +SELECT * FROM cur_tbl_history SYSTEM TIME AS OF '9999-12-31 23:59:59'; +ERROR HY000: Can not access history table "(cur_tbl_history)" directly. +SELECT * FROM ordinary_tbl SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +ERROR HY000: Only original table supports temporal features. +SELECT * FROM cur_tbl_history SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +ERROR HY000: Can not access history table "(cur_tbl_history)" directly. +SELECT * FROM ordinary_tbl SYSTEM TRANSACTION 2003; +ERROR HY000: Only original table supports temporal features. +SELECT * FROM cur_tbl_history SYSTEM TRANSACTION 2003; +ERROR HY000: Can not access history table "(cur_tbl_history)" directly. +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect2.result mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect2.result --- mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect2.result 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect2.result 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,226 @@ +########### +# Warm up # +########### +CREATE DATABASE mytestdb; + +############################### +# 1. Table without index # +############################### +USE mytestdb; +CREATE TABLE tbl (id INT, val INT, pad CHAR(20)) WITH TEMPORAL; +2020-04-13 18:10:37 +INSERT INTO tbl (id,val,pad) VALUES (1,1,'a'); +INSERT INTO tbl (id,val,pad) VALUES (2,2,'b'); +INSERT INTO tbl (id,val,pad) VALUES (3,3,'c'); +2020-04-13 18:10:41 +UPDATE tbl SET val=4 where id=1; +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:10:37' TO '2020-04-13 18:10:41'; +id val pad +2 2 b +3 3 c +1 1 a +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:37'; +id val pad +2020-04-13 18:10:45 +UPDATE tbl SET pad='b' where id=1; +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:10:41' TO '2020-04-13 18:10:45'; +id val pad +2 2 b +3 3 c +1 1 a +1 4 a +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:45'; +id val pad +2 2 b +3 3 c +1 4 a +SELECT * FROM tbl SYSTEM TRANSACTION 1113; +id val pad +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:45' WHERE id=1; +id val pad +1 4 a +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:45' WHERE id BETWEEN 1 AND 2; +id val pad +2 2 b +1 4 a +SELECT SUM(val), AVG(val), COUNT(pad) FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:45' WHERE id BETWEEN 1 AND 2; +SUM(val) AVG(val) COUNT(pad) +6 3.0000 2 +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:45' WHERE id BETWEEN 1 AND 3 ORDER BY pad; +id val pad +1 4 a +2 2 b +3 3 c +SELECT DISTINCT pad FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:45' WHERE id BETWEEN 1 AND 3 ORDER BY pad; +pad +a +b +c +2020-04-13 18:10:49 +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:10:41' TO '2020-04-13 18:10:49'; +id val pad +1 4 b +2 2 b +3 3 c +1 1 a +1 4 a +SELECT id, SUM(val) FROM tbl SYSTEM TIME FROM '2020-04-13 18:10:41' TO '2020-04-13 18:10:49' GROUP BY id; +id SUM(val) +1 9 +2 2 +3 3 + +################################# +# 2. Table with cluster index # +################################# +CREATE TABLE tbl1 (id1 INT PRIMARY KEY, val1 int, pad1 char(20)) WITH TEMPORAL; +INSERT INTO tbl1 (id1,val1,pad1) VALUES (1,1,'a'); +BEGIN; +UPDATE tbl1 SET val1=2 where id1=1; +UPDATE tbl1 SET pad1='b' where id1=1; +COMMIT; +SELECT * FROM tbl1; +id1 val1 pad1 +1 2 b +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +id1 val1 pad1 +1 2 b +1 2 a +1 1 a +BEGIN; +SELECT * FROM tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:49'; +id1 val1 pad1 +COMMIT; +2020-04-13 18:10:53 +UPDATE tbl1 SET pad1='c' where id1=1; +INSERT INTO tbl1 (id1,val1,pad1) VALUES (2,2,'b'); +SELECT * FROM tbl1; +id1 val1 pad1 +1 2 c +2 2 b +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +id1 val1 pad1 +1 2 c +2 2 b +1 1 a +1 2 a +1 2 b +2020-04-13 18:10:57 +UPDATE tbl1 SET pad1=5 where id1=2; +SELECT * FROM tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:53'; +id1 val1 pad1 +1 2 b +BEGIN; +SELECT * FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:10:41' TO '2020-04-13 18:10:45' WHERE id1 BETWEEN 1 AND 2; +id1 val1 pad1 +SELECT SUM(val1) FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:10:49' TO '2020-04-13 18:10:57' WHERE id1 BETWEEN 1 AND 2; +SUM(val1) +9 +SELECT * FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:10:49' TO '2020-04-13 18:10:57' WHERE id1 BETWEEN 1 AND 3 ORDER BY val1; +id1 val1 pad1 +1 1 a +1 2 c +1 2 a +1 2 b +2 2 b +SELECT DISTINCT pad1 FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:10:49' TO '2020-04-13 18:10:57' WHERE id1 BETWEEN 1 AND 3 ORDER BY pad1; +pad1 +a +b +c +COMMIT; +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:10:41' TO '2020-04-13 18:10:49'; +id val pad +1 4 b +2 2 b +3 3 c +1 1 a +1 4 a +SELECT * FROM tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:53'; +id1 val1 pad1 +1 2 b +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:10:41' TO '2020-04-13 18:10:49' INNER JOIN tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:53' ON tbl.id=tbl1.id1; +id val pad id1 val1 pad1 +1 4 b 1 2 b +1 1 a 1 2 b +1 4 a 1 2 b +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:10:41' TO '2020-04-13 18:10:49' LEFT JOIN tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:49' ON tbl.id=tbl1.id1; +id val pad id1 val1 pad1 +1 4 b NULL NULL NULL +2 2 b NULL NULL NULL +3 3 c NULL NULL NULL +1 1 a NULL NULL NULL +1 4 a NULL NULL NULL +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:10:37' RIGHT JOIN tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:53' ON tbl.id=tbl1.id1; +id val pad id1 val1 pad1 +NULL NULL NULL 1 2 b + +################################# +# 3. Table with secondary index # +################################# +CREATE TABLE tbl3 (id3 INT PRIMARY KEY, val3 INT, pad3 CHAR(20), INDEX(val3)) WITH TEMPORAL; +2020-04-13 18:11:00 +INSERT INTO tbl3 (id3,val3,pad3) VALUES (1,1,'a'); +INSERT INTO tbl3 (id3,val3,pad3) VALUES (2,2,'b'); +INSERT INTO tbl3 (id3,val3,pad3) VALUES (3,3,'c'); +2020-04-13 18:11:04 +UPDATE tbl3 SET val3=4 where id3=1; +SELECT * FROM tbl3 SYSTEM TIME FROM '2020-04-13 18:11:00' TO '2020-04-13 18:11:04'; +id3 val3 pad3 +2 2 b +3 3 c +1 1 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:00'; +id3 val3 pad3 +2020-04-13 18:11:08 +UPDATE tbl3 SET pad3='b' where id3=1; +SELECT * FROM tbl3 SYSTEM TIME FROM '2020-04-13 18:11:04' TO '2020-04-13 18:11:08'; +id3 val3 pad3 +2 2 b +3 3 c +1 1 a +1 4 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08'; +id3 val3 pad3 +2 2 b +3 3 c +1 4 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08' WHERE id3=1; +id3 val3 pad3 +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08' WHERE id3 BETWEEN 1 AND 2; +id3 val3 pad3 +1 4 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08' WHERE id3 BETWEEN 1 AND 3 ORDER BY pad3; +id3 val3 pad3 +1 4 a +2 2 b +3 3 c +SELECT * FROM tbl3 SYSTEM TIME FROM '2020-04-13 18:11:04' TO '2020-04-13 18:11:08' ONLY HISTORY; +id3 val3 pad3 +1 1 a +1 4 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08' ONLY HISTORY; +id3 val3 pad3 +1 4 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08' ONLY HISTORY WHERE id3=1; +id3 val3 pad3 +1 4 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08' ONLY HISTORY WHERE id3 BETWEEN 1 AND 2; +id3 val3 pad3 +1 4 a +SELECT * FROM tbl3 SYSTEM TIME AS OF '2020-04-13 18:11:08' ONLY HISTORY WHERE id3 BETWEEN 1 AND 3 ORDER BY pad3; +id3 val3 pad3 +1 4 a +2020-04-13 18:11:12 +SELECT * FROM tbl3 SYSTEM TIME FROM '2020-04-13 18:11:04' TO '2020-04-13 18:11:12'; +id3 val3 pad3 +1 4 b +2 2 b +3 3 c +1 1 a +1 4 a +SELECT id3, SUM(val3) FROM tbl3 SYSTEM TIME FROM '2020-04-13 18:11:04' TO '2020-04-13 18:11:12' ONLY HISTORY GROUP BY id3; +id3 SUM(val3) +1 5 +############ +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect_complex.result mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect_complex.result --- mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect_complex.result 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect_complex.result 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,101 @@ +########### +# Warm up # +########### +CREATE DATABASE mytestdb; +CREATE USER 'test_user'@'%' IDENTIFIED BY 'password'; +GRANT ALL ON *.* TO 'test_user'@'%'; + +############################## +# 3. Concurrent Transactions # +############################## +USE mytestdb; +USE mytestdb; +CREATE TABLE test2 (a INT PRIMARY KEY, b INT, c CHAR(20)) WITH TEMPORAL; +INSERT INTO test2 (a,b,c) VALUES (1,1,'a'); +2020-04-13 18:11:33 +BEGIN; +BEGIN; +UPDATE test2 SET b=2 where a=1; +COMMIT; +UPDATE test2 SET c='b' where a=1; +COMMIT; +2020-04-13 18:11:38 +SELECT * FROM test2 SYSTEM TIME AS OF '2020-04-13 18:11:33'; +a b c +1 1 a +SELECT * FROM test2 SYSTEM TIME AS OF '2020-04-13 18:11:38'; +a b c +1 2 b +UPDATE test2 SET c='c' where a=1; +2020-04-13 18:11:42 +SELECT * FROM test2; +a b c +1 2 c +SELECT * FROM test2 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b c +1 2 c +1 1 a +1 2 a +1 2 b +SELECT * FROM test2 SYSTEM TIME FROM '2020-04-13 18:11:33' TO '2020-04-13 18:11:42'; +a b c +1 2 c +1 1 a +1 2 a +1 2 b + +#################### +# 4. Complex Scene # +#################### +USE mytestdb; +CREATE TABLE test3 (a INT PRIMARY KEY, b INT, c CHAR(20)) WITH TEMPORAL; +INSERT INTO test3 (a,b,c) VALUES (1,1,'a'); +INSERT INTO test3 (a,b,c) VALUES (2,2,'b'); +INSERT INTO test3 (a,b,c) VALUES (3,3,'c'); +2020-04-13 18:11:46 +BEGIN; +BEGIN; +UPDATE test3 SET b=11 where a=1; +UPDATE test3 SET b=22 where a=2; +COMMIT; +UPDATE test3 SET c='aa' where a=1; +UPDATE test3 SET c='cc' where a=3; +COMMIT; +2020-04-13 18:11:50 +UPDATE test3 SET c='aaa' where a=1; +2020-04-13 18:11:54 +SELECT * FROM test3; +a b c +1 11 aaa +2 22 b +3 3 cc +SELECT * FROM test3 SYSTEM TIME AS OF '2020-04-13 18:11:50'; +a b c +2 22 b +3 3 cc +1 11 aa +SELECT * FROM test3 SYSTEM TIME AS OF '2020-04-13 18:11:54'; +a b c +1 11 aaa +2 22 b +3 3 cc +SELECT * FROM test3 SYSTEM TIME FROM '2020-04-13 18:11:46' TO '2020-04-13 18:11:50'; +a b c +2 22 b +3 3 cc +1 1 a +1 11 a +1 11 aa +2 2 b +3 3 c +SELECT * FROM test3 SYSTEM TIME FROM '2020-04-13 18:11:50' TO '2020-04-13 18:11:54'; +a b c +1 11 aaa +2 22 b +3 3 cc +1 11 aa +############ +# Clean up # +############ +DROP USER test_user@'%'; +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect.result mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect.result --- mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect.result 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/r/fselect.result 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,138 @@ +########### +# Warm up # +########### +CREATE DATABASE mytbldb; + +############################### +# 1. Auto Commit Transactions # +############################### +USE mytbldb; +CREATE TABLE tbl (a INT, b INT, c CHAR(20)) WITH TEMPORAL; +2020-04-13 18:09:48 +INSERT INTO tbl (a,b,c) VALUES (1,1,'a'); +INSERT INTO tbl (a,b,c) VALUES (2,2,'b'); +INSERT INTO tbl (a,b,c) VALUES (3,3,'c'); +2020-04-13 18:09:52 +UPDATE tbl SET b=4 where a=1; +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:09:48' TO '2020-04-13 18:09:52'; +a b c +2 2 b +3 3 c +1 1 a +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:09:48'; +a b c +2020-04-13 18:09:56 +UPDATE tbl SET c='b' where a=1; +SELECT * FROM tbl; +a b c +1 4 b +2 2 b +3 3 c +SELECT * FROM tbl SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b c +1 4 b +2 2 b +3 3 c +1 1 a +1 4 a +SELECT * FROM tbl SYSTEM TIME FROM '2020-04-13 18:09:52' TO '2020-04-13 18:09:56'; +a b c +2 2 b +3 3 c +1 1 a +1 4 a +SELECT * FROM tbl SYSTEM TIME AS OF '2020-04-13 18:09:56'; +a b c +2 2 b +3 3 c +1 4 a +SELECT * FROM tbl SYSTEM TRANSACTION 1113; +a b c +SELECT c FROM tbl SYSTEM TIME AS OF '2020-04-13 18:09:56' WHERE a=1; +c +a +SELECT c FROM tbl SYSTEM TIME AS OF '2020-04-13 18:09:56' WHERE a BETWEEN 1 AND 2; +c +b +a +SELECT SUM(b) FROM tbl SYSTEM TIME AS OF '2020-04-13 18:09:56' WHERE a BETWEEN 1 AND 2; +SUM(b) +6 +SELECT c FROM tbl SYSTEM TIME AS OF '2020-04-13 18:09:56' WHERE a BETWEEN 1 AND 3 ORDER BY c; +c +a +b +c +SELECT DISTINCT c FROM tbl SYSTEM TIME AS OF '2020-04-13 18:09:56' WHERE a BETWEEN 1 AND 3 ORDER BY c; +c +a +b +c + +################################# +# 2. Manual Commit Transactions # +################################# +CREATE TABLE tbl1 (a INT, b INT, c CHAR(20)) WITH TEMPORAL; +INSERT INTO tbl1 (a,b,c) VALUES (1,1,'a'); +2020-04-13 18:10:00 +BEGIN; +UPDATE tbl1 SET b=2 where a=1; +UPDATE tbl1 SET c='b' where a=1; +COMMIT; +SELECT * FROM tbl1; +a b c +1 2 b +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b c +1 2 b +1 1 a +1 2 a +BEGIN; +SELECT * FROM tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:00'; +a b c +1 1 a +COMMIT; +2020-04-13 18:10:04 +UPDATE tbl1 SET c='c' where a=1; +INSERT INTO tbl1 (a,b,c) VALUES (2,2,'b'); +SELECT * FROM tbl1; +a b c +1 2 c +2 2 b +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b c +1 2 c +2 2 b +1 1 a +1 2 a +1 2 b +2020-04-13 18:10:08 +UPDATE tbl1 SET b=5 where a=2; +SELECT * FROM tbl1 SYSTEM TIME AS OF '2020-04-13 18:10:04'; +a b c +1 2 b +BEGIN; +SELECT * FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:09:52' TO '2020-04-13 18:09:56' WHERE a BETWEEN 1 AND 2; +a b c +SELECT SUM(b) FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:10:00' TO '2020-04-13 18:10:08' WHERE a BETWEEN 1 AND 2; +SUM(b) +9 +SELECT * FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:10:00' TO '2020-04-13 18:10:08' WHERE a BETWEEN 1 AND 3 ORDER BY c; +a b c +1 1 a +1 2 a +1 2 b +2 2 b +1 2 c +SELECT DISTINCT * FROM tbl1 SYSTEM TIME FROM '2020-04-13 18:10:00' TO '2020-04-13 18:10:08' WHERE a BETWEEN 1 AND 3 ORDER BY c; +a b c +1 1 a +1 2 a +1 2 b +2 2 b +1 2 c +COMMIT; +############ +# Clean up # +############ +DROP DATABASE mytbldb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/r/restore.result mysql-8.0.3-rc/mysql-test/suite/flashback/r/restore.result --- mysql-8.0.3-rc/mysql-test/suite/flashback/r/restore.result 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/r/restore.result 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,119 @@ +########### +# Warm up # +########### +CREATE DATABASE mytestdb_1; +CREATE DATABASE mytestdb_2; + +############################### +# 1. Auto Commit Transactions # +############################### +USE mytestdb_1; +CREATE TABLE tbl (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO tbl (a,b,c) VALUES (1,1,'a'); +UPDATE tbl SET b=2 WHERE a=1; +UPDATE tbl SET c='b' WHERE a=1; +DELETE FROM tbl; +SELECT * FROM tbl; +a b c +SELECT * FROM tbl SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; +a b c +1 2 b +1 1 a +1 2 a + +################################# +# 2. Manual Commit Transactions # +################################# +CREATE TABLE test1 (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO test1 (a,b,c) VALUES (1,1,'a'); +BEGIN; +UPDATE test1 SET b=2 WHERE a=1; +UPDATE test1 SET c='b' WHERE a=1; +COMMIT; +SELECT * FROM test1; +a b c +1 2 b +SELECT * FROM test1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; +a b c +1 2 b +1 2 a +1 1 a +UPDATE test1 SET c='c' WHERE a=1; +DELETE FROM test1; +INSERT INTO test1 (a,b,c) VALUES (2,2,'b'); +SELECT * FROM test1; +a b c +2 2 b +SELECT * FROM test1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; +a b c +2 2 b +1 1 a +1 2 a +1 2 b +1 2 c +CREATE USER 'test_user'@'%' IDENTIFIED BY 'password'; +GRANT ALL ON *.* TO 'test_user'@'%'; + +############################## +# 3. Concurrent Transactions # +############################## +USE mytestdb_2; +USE mytestdb_2; +CREATE TABLE test2 (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO test2 (a,b,c) VALUES (1,1,'a'); +BEGIN; +BEGIN; +UPDATE test2 SET b=2 WHERE a=1; +COMMIT; +UPDATE test2 SET c='b' WHERE a=1; +COMMIT; +UPDATE test2 SET c='c' WHERE a=1; +SELECT * FROM test2; +a b c +1 2 c +SELECT * FROM test2 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; +a b c +1 2 c +1 2 b +1 1 a +1 2 a + +#################### +# 4. Complex Case # +#################### +USE mytestdb_2; +CREATE TABLE test3 (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO test3 (a,b,c) VALUES (1,1,'a'); +INSERT INTO test3 (a,b,c) VALUES (2,2,'b'); +INSERT INTO test3 (a,b,c) VALUES (3,3,'c'); +BEGIN; +BEGIN; +UPDATE test3 SET b=11 WHERE a=1; +UPDATE test3 SET b=22 WHERE a=2; +COMMIT; +UPDATE test3 SET c='aa' WHERE a=1; +UPDATE test3 SET c='cc' WHERE a=3; +COMMIT; +UPDATE test3 SET c='aaa' WHERE a=1; +DELETE FROM test3 WHERE a=3; +SELECT * FROM test3; +a b c +1 11 aaa +2 22 b +SELECT * FROM test3 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; +a b c +1 11 aaa +2 22 b +1 1 a +2 2 b +3 3 c +1 11 a +1 11 aa +3 3 cc + +############ +# Clean up # +############ +DROP USER test_user@'%'; +DROP DATABASE mytestdb_1; +DROP DATABASE mytestdb_2; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/r/trx_id_index.result mysql-8.0.3-rc/mysql-test/suite/flashback/r/trx_id_index.result --- mysql-8.0.3-rc/mysql-test/suite/flashback/r/trx_id_index.result 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/r/trx_id_index.result 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,127 @@ +DROP DATABASE IF EXISTS mytestdb; +Warnings: +Note 1008 Can't drop database 'mytestdb'; database doesn't exist +CREATE DATABASE IF NOT EXISTS mytestdb; +USE mytestdb; + +################################################### +# TRX_ID_INDEX will be built when no key on table # +################################################### +CREATE TABLE t1 (a INT, b INT) WITH TEMPORAL; +CHECK TABLE t1_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t1_history check status OK +INSERT INTO t1 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t1; +SELECT * FROM t1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +CHECK TABLE t1_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t1_history check status OK + +#################################################### +# TRX_ID_INDEX will be built when only PK on table # +#################################################### +CREATE TABLE t2 (a INT, b INT, PRIMARY KEY(a)) WITH TEMPORAL; +CHECK TABLE t2_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t2_history check status OK +INSERT INTO t2 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t2; +SELECT * FROM t2 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +CHECK TABLE t2_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t2_history check status OK + +################################################################## +# TRX_ID_INDEX will be built when only user defined key on table # +################################################################## +CREATE TABLE t3 (a INT, b INT, INDEX idx(b)) WITH TEMPORAL; +CHECK TABLE t3_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t3_history check status OK +INSERT INTO t3 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t3; +SELECT * FROM t3 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +CHECK TABLE t3_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t3_history check status OK + +#################################################################### +# TRX_ID_INDEX will be built when user defined key and PK on table # +#################################################################### +CREATE TABLE t4 (a INT, b INT, PRIMARY KEY(a), INDEX idx(b)) WITH TEMPORAL; +CHECK TABLE t4_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t4_history check status OK +INSERT INTO t4 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t4; +SELECT * FROM t4 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +a b +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +CHECK TABLE t4_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t4_history check status OK + +######################################################### +# TRX_ID_INDEX will be rebuilt when server be restarted # +######################################################### +# restart +CHECK TABLE t1_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t1_history check status OK +CHECK TABLE t2_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t2_history check status OK +CHECK TABLE t3_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t3_history check status OK +CHECK TABLE t4_history FAST QUICK; +Table Op Msg_type Msg_text +mytestdb.t4_history check status OK + +############ +# Clean up # +############ +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback_info.test mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback_info.test --- mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback_info.test 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback_info.test 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,61 @@ +DROP DATABASE IF EXISTS mytestdb; +CREATE DATABASE IF NOT EXISTS mytestdb; +USE mytestdb; + +--echo +--echo ############################################### +--echo # Ordinary table has no flashback information # +--echo ############################################### +CREATE TABLE ordinary_tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)); +SHOW CREATE TABLE ordinary_tbl; +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='ordinary_tbl'; + +--echo +--echo ########################################### +--echo # History table has flashback information # +--echo ########################################### +CREATE TABLE tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)) WITH TEMPORAL; +SHOW CREATE TABLE tbl; +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='tbl'; +SHOW CREATE TABLE tbl_history; +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='tbl_history'; + +--echo +--echo ############################################################################## +--echo # Flashback info will not be changed when create table with 'LIKE' statement # +--echo ############################################################################## +CREATE TABLE like_tbl LIKE tbl; +SHOW CREATE TABLE like_tbl; +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='like_tbl'; +CREATE TABLE like_tbl_history LIKE tbl_history; +SHOW CREATE TABLE like_tbl_history; +SELECT ORIG_TABLE,HIST_TABLE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='like_tbl_history'; + +--echo +--echo ############################################## +--echo # We can define tablespace for history table # +--echo ############################################## +CREATE TABLESPACE `ts_hist` ADD DATAFILE 'ts_hist.ibd' Engine=InnoDB; +CREATE TABLESPACE `ts` ADD DATAFILE 'ts.ibd' Engine=InnoDB; +CREATE TABLE tbl1(a INT, b VARCHAR(10)) TABLESPACE=ts HIST_TABLESPACE=ts_hist WITH TEMPORAL; +CREATE TABLE tbl2(a INT, b VARCHAR(10)) HIST_TABLESPACE=ts_hist WITH TEMPORAL; +CREATE TABLE tbl3(a INT, b VARCHAR(10)) TABLESPACE=ts WITH TEMPORAL; +CREATE TABLE tbl4(a INT, b VARCHAR(10)) WITH TEMPORAL; +SHOW CREATE TABLE tbl1; +SHOW CREATE TABLE tbl1_history; +SHOW CREATE TABLE tbl2; +SHOW CREATE TABLE tbl2_history; +SHOW CREATE TABLE tbl3; +SHOW CREATE TABLE tbl3_history; +SHOW CREATE TABLE tbl4; +SHOW CREATE TABLE tbl4_history; + +--echo +--echo ########################################################################## +--echo # Parameter 'HIST_TABLESPACE' can't be used when creating a normal table # +--echo ########################################################################## +--error 1149 +CREATE TABLE tbl5(a INT, b VARCHAR(10)) HIST_TABLESPACE=ts_hist; + + +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback.test mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback.test --- mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback.test 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/t/flashback.test 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,62 @@ +DROP DATABASE IF EXISTS mytestdb; +CREATE DATABASE IF NOT EXISTS mytestdb; +USE mytestdb; + +--echo +--echo ######################################## +--echo # Ordinary table creation not affected # +--echo ######################################## +CREATE TABLE ordinary_tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)); +SHOW TABLES; + +--echo +--echo ########################################### +--echo # Original and history tables are creared # +--echo ########################################### +CREATE TABLE cur_tbl(a INT, b VARCHAR(10), PRIMARY KEY(a)) WITH TEMPORAL; +SHOW TABLES; +INSERT INTO cur_tbl VALUES(1, 1); + +--echo +--echo ######################################################################################### +--echo # Command except SQLCOM_SHOW_CREATE and SQLCOM_SHOW_FIELDS are banned for history table # +--echo ######################################################################################### +DESC cur_tbl_history; +SHOW CREATE TABLE cur_tbl_history; +SHOW COLUMNS FROM cur_tbl_history; +--error ER_HIST_TABLE_NOT_ACCESSIBLE_DIRECTLY +SELECT * FROM cur_tbl_history; + +--echo +--echo #################################################### +--echo # Temporal features only apply to select statement # +--echo #################################################### +SELECT * FROM cur_tbl; +SELECT * FROM cur_tbl SYSTEM TIME AS OF '9999-12-31 23:59:59'; +SELECT * FROM cur_tbl SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +SELECT * FROM cur_tbl SYSTEM TRANSACTION 2003; +--error ER_ONLY_SELECT_SUPPORTS_TEMPORAL +UPDATE cur_tbl SYSTEM TIME AS OF '9999-12-31 23:59:59' SET b=b+1 WHERE a=1; +--error ER_ONLY_SELECT_SUPPORTS_TEMPORAL +DELETE FROM cur_tbl USING cur_tbl SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59' WHERE a=1; + +--echo +--echo ###################################################### +--echo # Temporal features can only apply to original table # +--echo ###################################################### +SELECT * FROM ordinary_tbl; +--error ER_ONLY_ORIG_TABLE_SUPPORTS_TEMPORAL +SELECT * FROM ordinary_tbl SYSTEM TIME AS OF '9999-12-31 23:59:59'; +--error ER_HIST_TABLE_NOT_ACCESSIBLE_DIRECTLY +SELECT * FROM cur_tbl_history SYSTEM TIME AS OF '9999-12-31 23:59:59'; +--error ER_ONLY_ORIG_TABLE_SUPPORTS_TEMPORAL +SELECT * FROM ordinary_tbl SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +--error ER_HIST_TABLE_NOT_ACCESSIBLE_DIRECTLY +SELECT * FROM cur_tbl_history SYSTEM TIME FROM '0000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +--error ER_ONLY_ORIG_TABLE_SUPPORTS_TEMPORAL +SELECT * FROM ordinary_tbl SYSTEM TRANSACTION 2003; +--error ER_HIST_TABLE_NOT_ACCESSIBLE_DIRECTLY +SELECT * FROM cur_tbl_history SYSTEM TRANSACTION 2003; + +#Cleanup +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect2.test mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect2.test --- mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect2.test 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect2.test 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,137 @@ +--echo ########### +--echo # Warm up # +--echo ########### +CREATE DATABASE mytestdb; + +--echo +--echo ############################### +--echo # 1. Table without index # +--echo ############################### +USE mytestdb; +CREATE TABLE tbl (id INT, val INT, pad CHAR(20)) WITH TEMPORAL; +let $start_time= `SELECT now()`; +echo $start_time; +--sleep 2 +INSERT INTO tbl (id,val,pad) VALUES (1,1,'a'); +INSERT INTO tbl (id,val,pad) VALUES (2,2,'b'); +INSERT INTO tbl (id,val,pad) VALUES (3,3,'c'); +--sleep 2 +let $time_point1= `SELECT now()`; +echo $time_point1; +--sleep 2 +UPDATE tbl SET val=4 where id=1; +eval SELECT * FROM tbl SYSTEM TIME FROM '$start_time' TO '$time_point1'; +eval SELECT * FROM tbl SYSTEM TIME AS OF '$start_time'; +--sleep 2 +let $time_point2= `SELECT now()`; +echo $time_point2; +--sleep 2 +UPDATE tbl SET pad='b' where id=1; +eval SELECT * FROM tbl SYSTEM TIME FROM '$time_point1' TO '$time_point2'; +eval SELECT * FROM tbl SYSTEM TIME AS OF '$time_point2'; +SELECT * FROM tbl SYSTEM TRANSACTION 1113; +# Point Select +eval SELECT * FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE id=1; +# Range Select +eval SELECT * FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE id BETWEEN 1 AND 2; +eval SELECT SUM(val), AVG(val), COUNT(pad) FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE id BETWEEN 1 AND 2; +eval SELECT * FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE id BETWEEN 1 AND 3 ORDER BY pad; +eval SELECT DISTINCT pad FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE id BETWEEN 1 AND 3 ORDER BY pad; +--sleep 2 +let $time_point3= `SELECT now()`; +echo $time_point3; +--sleep 2 +eval SELECT * FROM tbl SYSTEM TIME FROM '$time_point1' TO '$time_point3'; +eval SELECT id, SUM(val) FROM tbl SYSTEM TIME FROM '$time_point1' TO '$time_point3' GROUP BY id; + +--echo +--echo ################################# +--echo # 2. Table with cluster index # +--echo ################################# +CREATE TABLE tbl1 (id1 INT PRIMARY KEY, val1 int, pad1 char(20)) WITH TEMPORAL; +INSERT INTO tbl1 (id1,val1,pad1) VALUES (1,1,'a'); +BEGIN; +UPDATE tbl1 SET val1=2 where id1=1; +UPDATE tbl1 SET pad1='b' where id1=1; +COMMIT; +SELECT * FROM tbl1; +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +BEGIN; +eval SELECT * FROM tbl1 SYSTEM TIME AS OF '$time_point3'; +COMMIT; +--sleep 2 +let $time_point4= `SELECT now()`; +echo $time_point4; +--sleep 2 +UPDATE tbl1 SET pad1='c' where id1=1; +INSERT INTO tbl1 (id1,val1,pad1) VALUES (2,2,'b'); +SELECT * FROM tbl1; +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +--sleep 2 +let $time_point5= `SELECT now()`; +echo $time_point5; +--sleep 2 +UPDATE tbl1 SET pad1=5 where id1=2; +eval SELECT * FROM tbl1 SYSTEM TIME AS OF '$time_point4'; +BEGIN; +eval SELECT * FROM tbl1 SYSTEM TIME FROM '$time_point1' TO '$time_point2' WHERE id1 BETWEEN 1 AND 2; +eval SELECT SUM(val1) FROM tbl1 SYSTEM TIME FROM '$time_point3' TO '$time_point5' WHERE id1 BETWEEN 1 AND 2; +eval SELECT * FROM tbl1 SYSTEM TIME FROM '$time_point3' TO '$time_point5' WHERE id1 BETWEEN 1 AND 3 ORDER BY val1; +eval SELECT DISTINCT pad1 FROM tbl1 SYSTEM TIME FROM '$time_point3' TO '$time_point5' WHERE id1 BETWEEN 1 AND 3 ORDER BY pad1; +COMMIT; + +# Join opeartion +eval SELECT * FROM tbl SYSTEM TIME FROM '$time_point1' TO '$time_point3'; +eval SELECT * FROM tbl1 SYSTEM TIME AS OF '$time_point4'; +eval SELECT * FROM tbl SYSTEM TIME FROM '$time_point1' TO '$time_point3' INNER JOIN tbl1 SYSTEM TIME AS OF '$time_point4' ON tbl.id=tbl1.id1; +eval SELECT * FROM tbl SYSTEM TIME FROM '$time_point1' TO '$time_point3' LEFT JOIN tbl1 SYSTEM TIME AS OF '$time_point3' ON tbl.id=tbl1.id1; +eval SELECT * FROM tbl SYSTEM TIME AS OF '$start_time' RIGHT JOIN tbl1 SYSTEM TIME AS OF '$time_point4' ON tbl.id=tbl1.id1; + + +--echo +--echo ################################# +--echo # 3. Table with secondary index # +--echo ################################# +CREATE TABLE tbl3 (id3 INT PRIMARY KEY, val3 INT, pad3 CHAR(20), INDEX(val3)) WITH TEMPORAL; +let $time_point6= `SELECT now()`; +echo $time_point6; +--sleep 2 +INSERT INTO tbl3 (id3,val3,pad3) VALUES (1,1,'a'); +INSERT INTO tbl3 (id3,val3,pad3) VALUES (2,2,'b'); +INSERT INTO tbl3 (id3,val3,pad3) VALUES (3,3,'c'); +--sleep 2 +let $time_point7= `SELECT now()`; +echo $time_point7; +--sleep 2 +UPDATE tbl3 SET val3=4 where id3=1; +eval SELECT * FROM tbl3 SYSTEM TIME FROM '$time_point6' TO '$time_point7'; +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point6'; +--sleep 2 +let $time_point8= `SELECT now()`; +echo $time_point8; +--sleep 2 +UPDATE tbl3 SET pad3='b' where id3=1; +eval SELECT * FROM tbl3 SYSTEM TIME FROM '$time_point7' TO '$time_point8'; +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8'; +# Point Select +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8' WHERE id3=1; +# Range Select +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8' WHERE id3 BETWEEN 1 AND 2; +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8' WHERE id3 BETWEEN 1 AND 3 ORDER BY pad3; +# only history +eval SELECT * FROM tbl3 SYSTEM TIME FROM '$time_point7' TO '$time_point8' ONLY HISTORY; +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8' ONLY HISTORY; +# Point Select +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8' ONLY HISTORY WHERE id3=1; +# Range Select +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8' ONLY HISTORY WHERE id3 BETWEEN 1 AND 2; +eval SELECT * FROM tbl3 SYSTEM TIME AS OF '$time_point8' ONLY HISTORY WHERE id3 BETWEEN 1 AND 3 ORDER BY pad3; +--sleep 2 +let $time_point9= `SELECT now()`; +echo $time_point9; +--sleep 2 +eval SELECT * FROM tbl3 SYSTEM TIME FROM '$time_point7' TO '$time_point9'; +eval SELECT id3, SUM(val3) FROM tbl3 SYSTEM TIME FROM '$time_point7' TO '$time_point9' ONLY HISTORY GROUP BY id3; + +--echo ############ +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect_complex.test mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect_complex.test --- mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect_complex.test 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect_complex.test 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,97 @@ +--echo ########### +--echo # Warm up # +--echo ########### +CREATE DATABASE mytestdb; + +# New Connection +CREATE USER 'test_user'@'%' IDENTIFIED BY 'password'; +GRANT ALL ON *.* TO 'test_user'@'%'; +# Connect to MySQL server with TCP port +connect (user1,127.0.0.1,test_user,password,test,$MASTER_MYPORT); + +--echo +--echo ############################## +--echo # 3. Concurrent Transactions # +--echo ############################## +connection user1; +USE mytestdb; +connection default; +USE mytestdb; +CREATE TABLE test2 (a INT PRIMARY KEY, b INT, c CHAR(20)) WITH TEMPORAL; +INSERT INTO test2 (a,b,c) VALUES (1,1,'a'); +--sleep 2 +let $time_point4= `SELECT now()`; +echo $time_point4; +--sleep 2 +BEGIN; +connection user1; +BEGIN; +connection default; +UPDATE test2 SET b=2 where a=1; +COMMIT; +connection user1; +UPDATE test2 SET c='b' where a=1; +COMMIT; +--sleep 2 +let $time_point5= `SELECT now()`; +echo $time_point5; +--sleep 2 +eval SELECT * FROM test2 SYSTEM TIME AS OF '$time_point4'; +eval SELECT * FROM test2 SYSTEM TIME AS OF '$time_point5'; +UPDATE test2 SET c='c' where a=1; +connection default; +--sleep 2 +let $time_point6= `SELECT now()`; +echo $time_point6; +--sleep 2 +SELECT * FROM test2; +SELECT * FROM test2 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +eval SELECT * FROM test2 SYSTEM TIME FROM '$time_point4' TO '$time_point6'; + +--echo +--echo #################### +--echo # 4. Complex Scene # +--echo #################### +connection default; +USE mytestdb; +CREATE TABLE test3 (a INT PRIMARY KEY, b INT, c CHAR(20)) WITH TEMPORAL; +INSERT INTO test3 (a,b,c) VALUES (1,1,'a'); +INSERT INTO test3 (a,b,c) VALUES (2,2,'b'); +INSERT INTO test3 (a,b,c) VALUES (3,3,'c'); +--sleep 2 +let $time_point7= `SELECT now()`; +echo $time_point7; +--sleep 2 +BEGIN; +connection user1; +BEGIN; +connection default; +UPDATE test3 SET b=11 where a=1; +UPDATE test3 SET b=22 where a=2; +COMMIT; +connection user1; +#BEGIN; +UPDATE test3 SET c='aa' where a=1; +UPDATE test3 SET c='cc' where a=3; +COMMIT; +--sleep 2 +let $time_point8= `SELECT now()`; +echo $time_point8; +--sleep 2 +UPDATE test3 SET c='aaa' where a=1; +--sleep 2 +let $time_point9= `SELECT now()`; +echo $time_point9; +--sleep 2 +connection default; +SELECT * FROM test3; +eval SELECT * FROM test3 SYSTEM TIME AS OF '$time_point8'; +eval SELECT * FROM test3 SYSTEM TIME AS OF '$time_point9'; +eval SELECT * FROM test3 SYSTEM TIME FROM '$time_point7' TO '$time_point8'; +eval SELECT * FROM test3 SYSTEM TIME FROM '$time_point8' TO '$time_point9'; + +--echo ############ +--echo # Clean up # +--echo ############ +DROP USER test_user@'%'; +DROP DATABASE mytestdb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect.test mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect.test --- mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect.test 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/t/fselect.test 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,86 @@ +--echo ########### +--echo # Warm up # +--echo ########### +CREATE DATABASE mytbldb; + +--echo +--echo ############################### +--echo # 1. Auto Commit Transactions # +--echo ############################### +USE mytbldb; +CREATE TABLE tbl (a INT, b INT, c CHAR(20)) WITH TEMPORAL; +let $start_time= `SELECT now()`; +echo $start_time; +--sleep 2 +INSERT INTO tbl (a,b,c) VALUES (1,1,'a'); +INSERT INTO tbl (a,b,c) VALUES (2,2,'b'); +INSERT INTO tbl (a,b,c) VALUES (3,3,'c'); +--sleep 2 +let $time_point1= `SELECT now()`; +echo $time_point1; +--sleep 2 +UPDATE tbl SET b=4 where a=1; +eval SELECT * FROM tbl SYSTEM TIME FROM '$start_time' TO '$time_point1'; +eval SELECT * FROM tbl SYSTEM TIME AS OF '$start_time'; +--sleep 2 +let $time_point2= `SELECT now()`; +echo $time_point2; +--sleep 2 +UPDATE tbl SET c='b' where a=1; +SELECT * FROM tbl; +SELECT * FROM tbl SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +eval SELECT * FROM tbl SYSTEM TIME FROM '$time_point1' TO '$time_point2'; +eval SELECT * FROM tbl SYSTEM TIME AS OF '$time_point2'; +SELECT * FROM tbl SYSTEM TRANSACTION 1113; +# Point Select +eval SELECT c FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE a=1; +# Range Select +eval SELECT c FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE a BETWEEN 1 AND 2; +eval SELECT SUM(b) FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE a BETWEEN 1 AND 2; +eval SELECT c FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE a BETWEEN 1 AND 3 ORDER BY c; +eval SELECT DISTINCT c FROM tbl SYSTEM TIME AS OF '$time_point2' WHERE a BETWEEN 1 AND 3 ORDER BY c; + +--echo +--echo ################################# +--echo # 2. Manual Commit Transactions # +--echo ################################# +CREATE TABLE tbl1 (a INT, b INT, c CHAR(20)) WITH TEMPORAL; +INSERT INTO tbl1 (a,b,c) VALUES (1,1,'a'); +--sleep 2 +let $time_point3= `SELECT now()`; +echo $time_point3; +--sleep 2 +BEGIN; +UPDATE tbl1 SET b=2 where a=1; +UPDATE tbl1 SET c='b' where a=1; +COMMIT; +SELECT * FROM tbl1; +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +BEGIN; +eval SELECT * FROM tbl1 SYSTEM TIME AS OF '$time_point3'; +COMMIT; +--sleep 2 +let $time_point4= `SELECT now()`; +echo $time_point4; +--sleep 2 +UPDATE tbl1 SET c='c' where a=1; +INSERT INTO tbl1 (a,b,c) VALUES (2,2,'b'); +SELECT * FROM tbl1; +SELECT * FROM tbl1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +--sleep 2 +let $time_point5= `SELECT now()`; +echo $time_point5; +--sleep 2 +UPDATE tbl1 SET b=5 where a=2; +eval SELECT * FROM tbl1 SYSTEM TIME AS OF '$time_point4'; +BEGIN; +eval SELECT * FROM tbl1 SYSTEM TIME FROM '$time_point1' TO '$time_point2' WHERE a BETWEEN 1 AND 2; +eval SELECT SUM(b) FROM tbl1 SYSTEM TIME FROM '$time_point3' TO '$time_point5' WHERE a BETWEEN 1 AND 2; +eval SELECT * FROM tbl1 SYSTEM TIME FROM '$time_point3' TO '$time_point5' WHERE a BETWEEN 1 AND 3 ORDER BY c; +eval SELECT DISTINCT * FROM tbl1 SYSTEM TIME FROM '$time_point3' TO '$time_point5' WHERE a BETWEEN 1 AND 3 ORDER BY c; +COMMIT; + +--echo ############ +--echo # Clean up # +--echo ############ +DROP DATABASE mytbldb; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/t/restore.test mysql-8.0.3-rc/mysql-test/suite/flashback/t/restore.test --- mysql-8.0.3-rc/mysql-test/suite/flashback/t/restore.test 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/t/restore.test 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,102 @@ +--echo ########### +--echo # Warm up # +--echo ########### +CREATE DATABASE mytestdb_1; +CREATE DATABASE mytestdb_2; + +--echo +--echo ############################### +--echo # 1. Auto Commit Transactions # +--echo ############################### +USE mytestdb_1; +CREATE TABLE tbl (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO tbl (a,b,c) VALUES (1,1,'a'); +UPDATE tbl SET b=2 WHERE a=1; +UPDATE tbl SET c='b' WHERE a=1; +DELETE FROM tbl; +SELECT * FROM tbl; +SELECT * FROM tbl SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; + +--echo +--echo ################################# +--echo # 2. Manual Commit Transactions # +--echo ################################# +CREATE TABLE test1 (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO test1 (a,b,c) VALUES (1,1,'a'); +BEGIN; +UPDATE test1 SET b=2 WHERE a=1; +UPDATE test1 SET c='b' WHERE a=1; +COMMIT; +SELECT * FROM test1; +SELECT * FROM test1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; +UPDATE test1 SET c='c' WHERE a=1; +DELETE FROM test1; +INSERT INTO test1 (a,b,c) VALUES (2,2,'b'); +SELECT * FROM test1; +SELECT * FROM test1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; + +CREATE USER 'test_user'@'%' IDENTIFIED BY 'password'; +GRANT ALL ON *.* TO 'test_user'@'%'; +#connect to MySQL server with TCP port +connect (user1,127.0.0.1,test_user,password,test,$MASTER_MYPORT); + +--echo +--echo ############################## +--echo # 3. Concurrent Transactions # +--echo ############################## +connection user1; +USE mytestdb_2; +connection default; +USE mytestdb_2; +CREATE TABLE test2 (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO test2 (a,b,c) VALUES (1,1,'a'); +BEGIN; +connection user1; +BEGIN; +connection default; +UPDATE test2 SET b=2 WHERE a=1; +COMMIT; +connection user1; +#BEGIN; +UPDATE test2 SET c='b' WHERE a=1; +COMMIT; +UPDATE test2 SET c='c' WHERE a=1; +connection default; +SELECT * FROM test2; +SELECT * FROM test2 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; + +--echo +--echo #################### +--echo # 4. Complex Case # +--echo #################### +connection default; +USE mytestdb_2; +CREATE TABLE test3 (a INT, b INT, c CHAR(20), INDEX(a), INDEX(b), INDEX(c)) WITH TEMPORAL; +INSERT INTO test3 (a,b,c) VALUES (1,1,'a'); +INSERT INTO test3 (a,b,c) VALUES (2,2,'b'); +INSERT INTO test3 (a,b,c) VALUES (3,3,'c'); +BEGIN; +connection user1; +BEGIN; +connection default; +UPDATE test3 SET b=11 WHERE a=1; +UPDATE test3 SET b=22 WHERE a=2; +COMMIT; +connection user1; +#BEGIN; +UPDATE test3 SET c='aa' WHERE a=1; +UPDATE test3 SET c='cc' WHERE a=3; +COMMIT; +UPDATE test3 SET c='aaa' WHERE a=1; +DELETE FROM test3 WHERE a=3; +connection default; +SELECT * FROM test3; +SELECT * FROM test3 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 00:00:00'; + +--echo +--echo ############ +--echo # Clean up # +--echo ############ +DROP USER test_user@'%'; +DROP DATABASE mytestdb_1; +DROP DATABASE mytestdb_2; diff -uprN mysql-8.0.3-rc/mysql-test/suite/flashback/t/trx_id_index.test mysql-8.0.3-rc/mysql-test/suite/flashback/t/trx_id_index.test --- mysql-8.0.3-rc/mysql-test/suite/flashback/t/trx_id_index.test 1970-01-01 08:00:00.000000000 +0800 +++ mysql-8.0.3-rc/mysql-test/suite/flashback/t/trx_id_index.test 2020-04-19 23:52:38.914543861 +0800 @@ -0,0 +1,72 @@ +DROP DATABASE IF EXISTS mytestdb; +CREATE DATABASE IF NOT EXISTS mytestdb; +USE mytestdb; + +--echo +--echo ################################################### +--echo # TRX_ID_INDEX will be built when no key on table # +--echo ################################################### +CREATE TABLE t1 (a INT, b INT) WITH TEMPORAL; +CHECK TABLE t1_history FAST QUICK; +INSERT INTO t1 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t1; +--sleep 2 +SELECT * FROM t1 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +#SELECT * FROM t1_history; +CHECK TABLE t1_history FAST QUICK; + +--echo +--echo #################################################### +--echo # TRX_ID_INDEX will be built when only PK on table # +--echo #################################################### +CREATE TABLE t2 (a INT, b INT, PRIMARY KEY(a)) WITH TEMPORAL; +CHECK TABLE t2_history FAST QUICK; +INSERT INTO t2 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t2; +--sleep 2 +SELECT * FROM t2 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +#SELECT * FROM t2_history; +CHECK TABLE t2_history FAST QUICK; + +--echo +--echo ################################################################## +--echo # TRX_ID_INDEX will be built when only user defined key on table # +--echo ################################################################## +CREATE TABLE t3 (a INT, b INT, INDEX idx(b)) WITH TEMPORAL; +CHECK TABLE t3_history FAST QUICK; +INSERT INTO t3 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t3; +--sleep 2 +SELECT * FROM t3 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +#SELECT * FROM t3_history; +CHECK TABLE t3_history FAST QUICK; + +--echo +--echo #################################################################### +--echo # TRX_ID_INDEX will be built when user defined key and PK on table # +--echo #################################################################### +CREATE TABLE t4 (a INT, b INT, PRIMARY KEY(a), INDEX idx(b)) WITH TEMPORAL; +CHECK TABLE t4_history FAST QUICK; +INSERT INTO t4 VALUES(1,1), (2,2), (3,3), (4,4), (5,5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); +DELETE FROM t4; +--sleep 2 +SELECT * FROM t4 SYSTEM TIME FROM '1000-01-01 00:00:00' TO '9999-12-31 23:59:59'; +#SELECT * FROM t4_history; +CHECK TABLE t4_history FAST QUICK; + + +--echo +--echo ######################################################### +--echo # TRX_ID_INDEX will be rebuilt when server be restarted # +--echo ######################################################### +--source include/restart_mysqld.inc +CHECK TABLE t1_history FAST QUICK; +CHECK TABLE t2_history FAST QUICK; +CHECK TABLE t3_history FAST QUICK; +CHECK TABLE t4_history FAST QUICK; + +--echo +--echo ############ +--echo # Clean up # +--echo ############ +DROP DATABASE mytestdb;