Commit 6b91e90a authored by Marko Mäkelä's avatar Marko Mäkelä

Add recovery&rollback tests for instant DROP COLUMN

parent 876ab037
FLUSH TABLES; FLUSH TABLES;
# #
# MDEV-11369: Instant ADD COLUMN for InnoDB # MDEV-11369: Instant ADD COLUMN for InnoDB
# MDEV-15562: Instant DROP COLUMN or changing the order of columns
# #
connect to_be_killed, localhost, root; connect to_be_killed, localhost, root;
SET @old_instant=
(SELECT variable_value FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column');
CREATE TABLE empty (id INT PRIMARY KEY, c2 INT UNIQUE) ENGINE=InnoDB; CREATE TABLE empty (id INT PRIMARY KEY, c2 INT UNIQUE) ENGINE=InnoDB;
CREATE TABLE once LIKE empty; CREATE TABLE once LIKE empty;
CREATE TABLE twice LIKE empty; CREATE TABLE twice LIKE empty;
CREATE TABLE thrice LIKE empty;
INSERT INTO once SET id=1,c2=1; INSERT INTO once SET id=1,c2=1;
INSERT INTO twice SET id=1,c2=1; INSERT INTO twice SET id=1,c2=1;
INSERT INTO thrice SET id=1,c2=1;
ALTER TABLE empty ADD COLUMN (d1 INT DEFAULT 15); ALTER TABLE empty ADD COLUMN (d1 INT DEFAULT 15);
ALTER TABLE once ADD COLUMN (d1 INT DEFAULT 20); ALTER TABLE once ADD COLUMN (d1 INT DEFAULT 20);
ALTER TABLE twice ADD COLUMN (d1 INT DEFAULT 20); ALTER TABLE twice ADD COLUMN (d1 INT DEFAULT 20);
ALTER TABLE thrice ADD COLUMN (d1 INT DEFAULT 20);
ALTER TABLE twice ADD COLUMN ALTER TABLE twice ADD COLUMN
(d2 INT NOT NULL DEFAULT 10, (d2 INT NOT NULL DEFAULT 10,
d3 VARCHAR(15) NOT NULL DEFAULT 'var och en char'); d3 VARCHAR(15) NOT NULL DEFAULT 'var och en char');
ALTER TABLE thrice ADD COLUMN
(d2 INT NOT NULL DEFAULT 10,
d3 TEXT NOT NULL DEFAULT 'con');
ALTER TABLE thrice DROP c2, DROP d3, CHANGE d2 d3 INT NOT NULL FIRST;
SELECT variable_value-@old_instant instants
FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
instants
7
BEGIN; BEGIN;
INSERT INTO empty set id=0,c2=42; INSERT INTO empty set id=0,c2=42;
UPDATE once set c2=c2+1; UPDATE once set c2=c2+1;
UPDATE twice set c2=c2+1; UPDATE twice set c2=c2+1;
UPDATE thrice set d3=d3+1;
INSERT INTO twice SET id=2,c2=0,d3=''; INSERT INTO twice SET id=2,c2=0,d3='';
INSERT INTO thrice SET id=2,d3=0;
DELETE FROM empty;
DELETE FROM once;
DELETE FROM twice;
DELETE FROM thrice;
connection default; connection default;
SET GLOBAL innodb_flush_log_at_trx_commit=1; SET GLOBAL innodb_flush_log_at_trx_commit=1;
CREATE TABLE foo(a INT PRIMARY KEY) ENGINE=InnoDB; CREATE TABLE foo(a INT PRIMARY KEY) ENGINE=InnoDB;
...@@ -37,4 +59,7 @@ id c2 d1 ...@@ -37,4 +59,7 @@ id c2 d1
SELECT * FROM twice; SELECT * FROM twice;
id c2 d1 d2 d3 id c2 d1 d2 d3
1 1 20 10 var och en char 1 1 20 10 var och en char
DROP TABLE empty, once, twice; SELECT * FROM thrice;
d3 id d1
10 1 20
DROP TABLE empty, once, twice, thrice;
...@@ -8,28 +8,49 @@ FLUSH TABLES; ...@@ -8,28 +8,49 @@ FLUSH TABLES;
--echo # --echo #
--echo # MDEV-11369: Instant ADD COLUMN for InnoDB --echo # MDEV-11369: Instant ADD COLUMN for InnoDB
--echo # MDEV-15562: Instant DROP COLUMN or changing the order of columns
--echo # --echo #
connect to_be_killed, localhost, root; connect to_be_killed, localhost, root;
SET @old_instant=
(SELECT variable_value FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column');
CREATE TABLE empty (id INT PRIMARY KEY, c2 INT UNIQUE) ENGINE=InnoDB; CREATE TABLE empty (id INT PRIMARY KEY, c2 INT UNIQUE) ENGINE=InnoDB;
CREATE TABLE once LIKE empty; CREATE TABLE once LIKE empty;
CREATE TABLE twice LIKE empty; CREATE TABLE twice LIKE empty;
CREATE TABLE thrice LIKE empty;
INSERT INTO once SET id=1,c2=1; INSERT INTO once SET id=1,c2=1;
INSERT INTO twice SET id=1,c2=1; INSERT INTO twice SET id=1,c2=1;
INSERT INTO thrice SET id=1,c2=1;
ALTER TABLE empty ADD COLUMN (d1 INT DEFAULT 15); ALTER TABLE empty ADD COLUMN (d1 INT DEFAULT 15);
ALTER TABLE once ADD COLUMN (d1 INT DEFAULT 20); ALTER TABLE once ADD COLUMN (d1 INT DEFAULT 20);
ALTER TABLE twice ADD COLUMN (d1 INT DEFAULT 20); ALTER TABLE twice ADD COLUMN (d1 INT DEFAULT 20);
ALTER TABLE thrice ADD COLUMN (d1 INT DEFAULT 20);
ALTER TABLE twice ADD COLUMN ALTER TABLE twice ADD COLUMN
(d2 INT NOT NULL DEFAULT 10, (d2 INT NOT NULL DEFAULT 10,
d3 VARCHAR(15) NOT NULL DEFAULT 'var och en char'); d3 VARCHAR(15) NOT NULL DEFAULT 'var och en char');
ALTER TABLE thrice ADD COLUMN
(d2 INT NOT NULL DEFAULT 10,
d3 TEXT NOT NULL DEFAULT 'con');
ALTER TABLE thrice DROP c2, DROP d3, CHANGE d2 d3 INT NOT NULL FIRST;
SELECT variable_value-@old_instant instants
FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
BEGIN; BEGIN;
INSERT INTO empty set id=0,c2=42; INSERT INTO empty set id=0,c2=42;
UPDATE once set c2=c2+1; UPDATE once set c2=c2+1;
UPDATE twice set c2=c2+1; UPDATE twice set c2=c2+1;
UPDATE thrice set d3=d3+1;
INSERT INTO twice SET id=2,c2=0,d3=''; INSERT INTO twice SET id=2,c2=0,d3='';
INSERT INTO thrice SET id=2,d3=0;
DELETE FROM empty;
DELETE FROM once;
DELETE FROM twice;
DELETE FROM thrice;
connection default; connection default;
SET GLOBAL innodb_flush_log_at_trx_commit=1; SET GLOBAL innodb_flush_log_at_trx_commit=1;
...@@ -48,4 +69,5 @@ SET GLOBAL innodb_purge_rseg_truncate_frequency=@saved_frequency; ...@@ -48,4 +69,5 @@ SET GLOBAL innodb_purge_rseg_truncate_frequency=@saved_frequency;
SELECT * FROM empty; SELECT * FROM empty;
SELECT * FROM once; SELECT * FROM once;
SELECT * FROM twice; SELECT * FROM twice;
DROP TABLE empty, once, twice; SELECT * FROM thrice;
DROP TABLE empty, once, twice, thrice;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment