1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
--source include/have_debug.inc
# This test checks the default algorithm used by ALTER TABLE .. ADD/DROP COLUMN.
# It also check the behavior when the algorithm clause is specified
# In a table with 0 rows, the default algorithm is INPLACE.
# In a table with 1 or more rows, the default algorithm is INSTANT.
# The table's TOTAL_ROW_VERSIONS is used to determine if INSTANT is used or
# INPLACE is used
--echo # Scenario 1: Table with 0 rows
--echo # Case 1: Default algorithm
CREATE TABLE t1 (c1 INT);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
CREATE TABLE t1 (c1 INT);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=DEFAULT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
--echo # Case 2: ALGORITHM clause has same value as default
CREATE TABLE t1 (c1 INT);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=INPLACE;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
--echo # Case 3: ALGORITHM clause has different value from default
CREATE TABLE t1 (c1 INT);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=INSTANT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
--echo # Scenario 2: Table with 1 or more rows
--echo # Case 1: Default algorithm
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=DEFAULT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
--echo # Case 2: ALGORITHM clause has same value as default
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=INSTANT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
--echo # Case 3: ALGORITHM clause has different value from default
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=INPLACE;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
DROP TABLE t1;
--echo # Scenario 3: Table with 1 delete-marked record
--echo # Case 1: Default algorithm
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SET GLOBAL innodb_purge_stop_now=1;
DELETE FROM t1 WHERE c1 = 1;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
SET GLOBAL innodb_purge_run_now=1;
DROP TABLE t1;
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SET GLOBAL innodb_purge_stop_now=1;
DELETE FROM t1 WHERE c1 = 1;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=DEFAULT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
SET GLOBAL innodb_purge_run_now=1;
DROP TABLE t1;
--echo # Case 2: ALGORITHM clause has same value as default
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SET GLOBAL innodb_purge_stop_now=1;
DELETE FROM t1 WHERE c1 = 1;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=INPLACE;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
SET GLOBAL innodb_purge_run_now=1;
DROP TABLE t1;
--echo # Case 3: ALGORITHM clause has different value from default
CREATE TABLE t1 (c1 INT);
INSERT INTO t1 VALUES (1);
SET GLOBAL innodb_purge_stop_now=1;
DELETE FROM t1 WHERE c1 = 1;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=INSTANT;
SELECT NAME, TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1';
SET GLOBAL innodb_purge_run_now=1;
DROP TABLE t1;
|