Skip to content
Permalink
Browse files
Import WL#6658 update_time tests from MySQL 5.7
  • Loading branch information
dr-m committed Nov 23, 2017
1 parent 0055e1a commit f8bc799
Show file tree
Hide file tree
Showing 5 changed files with 764 additions and 0 deletions.
@@ -0,0 +1,53 @@
#
# Test that INFORMATION_SCHEMA.TABLES.UPDATE_TIME is filled
# correctly for InnoDB tables.
#
CREATE TABLE t (a INT) ENGINE=INNODB;
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
update_time
NULL
INSERT INTO t VALUES (1);
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
AND update_time IS NOT NULL;
COUNT(*)
1
# We cant deterministically check that the saved value is correct, but
# at least we check that it is a timestamp not older than 2 minutes.
# Usually update_time and NOW() are equal below, but on heavily loaded
# machines NOW() could be younger.
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
AND TIMESTAMPDIFF(SECOND, update_time, NOW()) < 120;
COUNT(*)
1
CREATE TABLE big (a TEXT) ENGINE=INNODB;
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
WHERE table_name = '`test`.`t`';
COUNT(*)
1
# INSERT lots of data in table 'big': begin
# INSERT lots of data in table 'big': end
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
WHERE table_name = '`test`.`t`';
COUNT(*)
0
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
AND update_time IS NOT NULL;
COUNT(*)
1
DROP TABLE big;
# Test the behavior after restart with a prepared XA transaction
XA START 'xatrx';
INSERT INTO t VALUES (5);
XA END 'xatrx';
XA PREPARE 'xatrx';
call mtr.add_suppression("Found 1 prepared XA transactions");
# Kill and restart
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
update_time
NULL
XA COMMIT 'xatrx';
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
AND update_time IS NOT NULL;
COUNT(*)
1
DROP TABLE t;
@@ -0,0 +1,301 @@
#create base table
CREATE TABLE tab1(c1 int,c2 varchar(30), c3 BLOB) ENGINE=InnoDB;
CREATE TABLE tab3(c1 int,c2 varchar(30)) ENGINE=InnoDB;
CREATE TABLE tab4(c1 int,c2 varchar(30)) ENGINE=InnoDB;
CREATE TABLE tab5(c1 int,c2 varchar(30)) ENGINE=InnoDB;
#insert some base records
INSERT INTO tab4 VALUES(1,'Test for Update');
INSERT INTO tab5 VALUES(1,'Test for Delete');
#create a trigger
CREATE TRIGGER test_trig BEFORE INSERT ON tab1
FOR EACH ROW BEGIN
INSERT INTO tab3 VALUES(1,'Inserted From Trigger');
UPDATE tab4 SET c2='Updated from Trigger' WHERE c1=1;
DELETE FROM tab5;
END |
#restart the server
# restart
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables
WHERE table_name IN ('tab1','tab3','tab4','tab5');
table_name update_time
tab1 NULL
tab3 NULL
tab4 NULL
tab5 NULL
SET AUTOCOMMIT=OFF;
#case1:
BEGIN WORK;
INSERT INTO tab1
VALUES(1,'Testing the wl6658', 'Testing the wl6658');
check the update_time Before commit, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
COMMIT;
#check the record is inserted
SELECT * FROM tab1;
c1 c2 c3
1 Testing the wl6658 Testing the wl6658
#check the record is inserted
SELECT * FROM tab3;
c1 c2
1 Inserted From Trigger
#check the record is updated
SELECT * FROM tab4;
c1 c2
1 Updated from Trigger
#check no record exists
SELECT * FROM tab5;
c1 c2
check the update_time After Commit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables
WHERE table_name IN ('tab1','tab3','tab4','tab5')
GROUP BY table_name;
table_name COUNT(update_time)
tab1 1
tab3 1
tab4 1
tab5 1
#restart the server
# restart
Testcase with UPDATE stmt and transaction
#check the record is existing
SELECT * FROM tab1;
c1 c2 c3
1 Testing the wl6658 Testing the wl6658
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
SET AUTOCOMMIT=OFF;
#case2:
START TRANSACTION;
UPDATE tab1 SET c2='Updated',c3='Updated' WHERE c1=1;
check the update_time Before commit, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
COMMIT;
#check the record is updated
SELECT * FROM tab1;
c1 c2 c3
1 Updated Updated
check the update_time After Commit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab1';
table_name COUNT(update_time)
tab1 1
#restart the server
# restart
#check the record is existing
SELECT * FROM tab1;
c1 c2 c3
1 Updated Updated
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
SET AUTOCOMMIT=OFF;
#case3:
START TRANSACTION;
DELETE FROM tab1;
check the update_time Before commit, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
COMMIT;
#check the record is deleted
SELECT * FROM tab1;
c1 c2 c3
check the update_time After Commit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab1';
table_name COUNT(update_time)
tab1 1
#restart the server
# restart
#check no records are existing
SELECT * FROM tab1;
c1 c2 c3
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
SET AUTOCOMMIT=OFF;
#case4:
START TRANSACTION;
INSERT INTO tab1
VALUES(1,'Testing the wl6658', 'Testing the wl6658');
check the update_time Before Rollback, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
ROLLBACK;
#check no record is inserted.
SELECT * FROM tab1;
c1 c2 c3
check the update_time After Rollback, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab1';
table_name update_time
tab1 NULL
CREATE TABLE tab2(
id INT NOT NULL,
store_name VARCHAR(30),
parts VARCHAR(30),
store_id INT
) ENGINE=InnoDB
PARTITION BY LIST(store_id) (
PARTITION pNorth VALUES IN (10,20,30),
PARTITION pEast VALUES IN (40,50,60),
PARTITION pWest VALUES IN (70,80,100)
);
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab2';
table_name update_time
tab2 NULL
#case5:
#create proc with DML
CREATE PROCEDURE proc_wl6658()
BEGIN
INSERT INTO tab2 VALUES(1,'ORACLE','NUTT',10);
INSERT INTO tab2 VALUES(2,'HUAWEI','BOLT',40);
COMMIT;
END |
CALL proc_wl6658;
#check the records are inserted
SELECT * FROM tab2 ORDER BY id,store_id;
id store_name parts store_id
1 ORACLE NUTT 10
2 HUAWEI BOLT 40
check the update_time After Commit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab2';
table_name COUNT(update_time)
tab2 1
#delete all records
TRUNCATE TABLE tab2;
#restart the server
# restart
#case6:
SET AUTOCOMMIT=off;
BEGIN WORK;
INSERT INTO tab2 VALUES(1,'Oracle','NUTT',10);
SAVEPOINT A;
INSERT INTO tab2 VALUES(2,'HUAWEI','BOLT',40);
SAVEPOINT B;
INSERT INTO tab2 VALUES(3,'IBM','NAIL',70);
SAVEPOINT C;
ROLLBACK to A;
#check 1 record is inserted
SELECT * FROM tab2;
id store_name parts store_id
1 Oracle NUTT 10
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab2';
table_name update_time
tab2 NULL
#execute DDL instead of commit
create table tab6(c1 int);
check the update_time After Commit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab2';
table_name COUNT(update_time)
tab2 1
#case7:
#create some base tables
set the flag to default
SET AUTOCOMMIT=Default;
CREATE TABLE tab7(c1 INT NOT NULL, PRIMARY KEY (c1)) ENGINE=INNODB;
CREATE TABLE tab8(c1 INT PRIMARY KEY,c2 INT,
FOREIGN KEY (c2) REFERENCES tab7(c1) ON DELETE CASCADE )
ENGINE=INNODB;
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab7';
table_name update_time
tab7 NULL
check the update_time Before DML, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab8';
table_name update_time
tab8 NULL
INSERT INTO tab7 VALUES(1);
INSERT INTO tab8 VALUES(1,1);
#check the record is inserted
SELECT * FROM tab7;
c1
1
#check the record is inserted
SELECT * FROM tab8;
c1 c2
1 1
check the update_time After Autocommit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab7';
table_name COUNT(update_time)
tab7 1
check the update_time After Autocommit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab8';
table_name COUNT(update_time)
tab8 1
#restart the server
# restart
SET AUTOCOMMIT=off;
START TRANSACTION;
DELETE FROM tab7;
ROLLBACK;
#check record exist
SELECT * FROM tab7;
c1
1
#check record exist
SELECT * FROM tab8;
c1 c2
1 1
check the update_time After Rollback, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab7';
table_name update_time
tab7 NULL
check the update_time After Rollback, whether it is NULL
SELECT table_name,update_time
FROM information_schema.tables WHERE table_name='tab8';
table_name update_time
tab8 NULL
START TRANSACTION;
DELETE FROM tab7;
COMMIT;
#check no record exist
SELECT * FROM tab7;
c1
#check no record exist
SELECT * FROM tab8;
c1 c2
check the update_time After Commit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab7';
table_name COUNT(update_time)
tab7 1
check the update_time After Commit, whether it is not NULL
SELECT table_name,COUNT(update_time)
FROM information_schema.tables WHERE table_name='tab8';
table_name COUNT(update_time)
tab8 1
#cleanup
DROP TRIGGER test_trig;
DROP TABLE tab1,tab2,tab3,tab4,tab5,tab6,tab8,tab7;
DROP PROCEDURE proc_wl6658;
@@ -0,0 +1 @@
--innodb-buffer-pool-size=10M

0 comments on commit f8bc799

Please sign in to comment.