summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-11-15 02:41:45 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2017-11-15 02:41:45 +0200
commit761e6574c879998817d932198906545815987091 (patch)
tree14d445c8e33386cfd4d1afd836365ad9107a7ab3
parente94c9d24f6e2942f473a59af271dbd5aff60e8b4 (diff)
downloadmariadb-git-761e6574c879998817d932198906545815987091.tar.gz
MDEV-14396 Assertion failed in create_option_need_rebuild
Relax a too strict debug assertion, and add a test.
-rw-r--r--mysql-test/suite/innodb/r/instant_alter,32k.rdiff36
-rw-r--r--mysql-test/suite/innodb/r/instant_alter,64k.rdiff36
-rw-r--r--mysql-test/suite/innodb/r/instant_alter.resultbin119063 -> 119287 bytes
-rw-r--r--mysql-test/suite/innodb/t/instant_alter.test8
-rw-r--r--storage/innobase/handler/handler0alter.cc4
5 files changed, 50 insertions, 34 deletions
diff --git a/mysql-test/suite/innodb/r/instant_alter,32k.rdiff b/mysql-test/suite/innodb/r/instant_alter,32k.rdiff
index 44f15898846..37c3c479e68 100644
--- a/mysql-test/suite/innodb/r/instant_alter,32k.rdiff
+++ b/mysql-test/suite/innodb/r/instant_alter,32k.rdiff
@@ -1,15 +1,15 @@
--- instant_alter.result
+++ instant_alter,32k.result
-@@ -1,7 +1,7 @@
- #
+@@ -2,7 +2,7 @@
# MDEV-11369: Instant ADD COLUMN for InnoDB
#
--CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
-+CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
- INSERT INTO t VALUES(1);
+ CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=COMPACT;
+-ALTER TABLE t ADD e INT, ROW_FORMAT=COMPRESSED;
++ALTER TABLE t ADD e INT, ROW_FORMAT=DYNAMIC;
+ INSERT INTO t SET a=1;
SET @old_instant=
(SELECT variable_value FROM information_schema.global_status
-@@ -31,12 +31,12 @@
+@@ -33,17 +33,17 @@
`c` int(11) NOT NULL,
`d` int(11) NOT NULL,
UNIQUE KEY `a` (`a`)
@@ -21,10 +21,16 @@
instants
-0
+1
+ SELECT variable_value-@old_instant instants
+ FROM information_schema.global_status
+ WHERE variable_name = 'innodb_instant_alter_column';
+ instants
+-0
++1
DROP TABLE t;
connect analyze, localhost, root;
connection default;
-@@ -355,7 +355,7 @@
+@@ -374,7 +374,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -33,7 +39,7 @@
connection default;
ALTER TABLE big ADD COLUMN
(d1 INT DEFAULT 0, d2 VARCHAR(20) DEFAULT 'abcde',
-@@ -378,7 +378,7 @@
+@@ -397,7 +397,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -42,7 +48,7 @@
connection default;
ROLLBACK;
CHECKSUM TABLE big;
-@@ -391,7 +391,7 @@
+@@ -410,7 +410,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -51,7 +57,7 @@
connection default;
InnoDB 0 transactions not purged
DROP TABLE t1,t2,t3,big;
-@@ -703,7 +703,7 @@
+@@ -734,7 +734,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -60,7 +66,7 @@
connection default;
ALTER TABLE big ADD COLUMN
(d1 INT DEFAULT 0, d2 VARCHAR(20) DEFAULT 'abcde',
-@@ -726,7 +726,7 @@
+@@ -757,7 +757,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -69,7 +75,7 @@
connection default;
ROLLBACK;
CHECKSUM TABLE big;
-@@ -739,7 +739,7 @@
+@@ -770,7 +770,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -78,7 +84,7 @@
connection default;
InnoDB 0 transactions not purged
DROP TABLE t1,t2,t3,big;
-@@ -1051,7 +1051,7 @@
+@@ -1094,7 +1094,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -87,7 +93,7 @@
connection default;
ALTER TABLE big ADD COLUMN
(d1 INT DEFAULT 0, d2 VARCHAR(20) DEFAULT 'abcde',
-@@ -1074,7 +1074,7 @@
+@@ -1117,7 +1117,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -96,7 +102,7 @@
connection default;
ROLLBACK;
CHECKSUM TABLE big;
-@@ -1087,7 +1087,7 @@
+@@ -1130,7 +1130,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
diff --git a/mysql-test/suite/innodb/r/instant_alter,64k.rdiff b/mysql-test/suite/innodb/r/instant_alter,64k.rdiff
index b3697865a0e..d9a398fc8c8 100644
--- a/mysql-test/suite/innodb/r/instant_alter,64k.rdiff
+++ b/mysql-test/suite/innodb/r/instant_alter,64k.rdiff
@@ -1,15 +1,15 @@
--- instant_alter.result
+++ instant_alter,64k.result
-@@ -1,7 +1,7 @@
- #
+@@ -2,7 +2,7 @@
# MDEV-11369: Instant ADD COLUMN for InnoDB
#
--CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
-+CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
- INSERT INTO t VALUES(1);
+ CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=COMPACT;
+-ALTER TABLE t ADD e INT, ROW_FORMAT=COMPRESSED;
++ALTER TABLE t ADD e INT, ROW_FORMAT=DYNAMIC;
+ INSERT INTO t SET a=1;
SET @old_instant=
(SELECT variable_value FROM information_schema.global_status
-@@ -31,12 +31,12 @@
+@@ -33,17 +33,17 @@
`c` int(11) NOT NULL,
`d` int(11) NOT NULL,
UNIQUE KEY `a` (`a`)
@@ -21,10 +21,16 @@
instants
-0
+1
+ SELECT variable_value-@old_instant instants
+ FROM information_schema.global_status
+ WHERE variable_name = 'innodb_instant_alter_column';
+ instants
+-0
++1
DROP TABLE t;
connect analyze, localhost, root;
connection default;
-@@ -355,7 +355,7 @@
+@@ -374,7 +374,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -33,7 +39,7 @@
connection default;
ALTER TABLE big ADD COLUMN
(d1 INT DEFAULT 0, d2 VARCHAR(20) DEFAULT 'abcde',
-@@ -378,7 +378,7 @@
+@@ -397,7 +397,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -42,7 +48,7 @@
connection default;
ROLLBACK;
CHECKSUM TABLE big;
-@@ -391,7 +391,7 @@
+@@ -410,7 +410,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -51,7 +57,7 @@
connection default;
InnoDB 0 transactions not purged
DROP TABLE t1,t2,t3,big;
-@@ -703,7 +703,7 @@
+@@ -734,7 +734,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -60,7 +66,7 @@
connection default;
ALTER TABLE big ADD COLUMN
(d1 INT DEFAULT 0, d2 VARCHAR(20) DEFAULT 'abcde',
-@@ -726,7 +726,7 @@
+@@ -757,7 +757,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -69,7 +75,7 @@
connection default;
ROLLBACK;
CHECKSUM TABLE big;
-@@ -739,7 +739,7 @@
+@@ -770,7 +770,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -78,7 +84,7 @@
connection default;
InnoDB 0 transactions not purged
DROP TABLE t1,t2,t3,big;
-@@ -1051,7 +1051,7 @@
+@@ -1094,7 +1094,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -87,7 +93,7 @@
connection default;
ALTER TABLE big ADD COLUMN
(d1 INT DEFAULT 0, d2 VARCHAR(20) DEFAULT 'abcde',
-@@ -1074,7 +1074,7 @@
+@@ -1117,7 +1117,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
@@ -96,7 +102,7 @@
connection default;
ROLLBACK;
CHECKSUM TABLE big;
-@@ -1087,7 +1087,7 @@
+@@ -1130,7 +1130,7 @@
SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
WHERE name = 'test/big';
clust_index_size
diff --git a/mysql-test/suite/innodb/r/instant_alter.result b/mysql-test/suite/innodb/r/instant_alter.result
index 99f08c3c727..1bf2d1025a0 100644
--- a/mysql-test/suite/innodb/r/instant_alter.result
+++ b/mysql-test/suite/innodb/r/instant_alter.result
Binary files differ
diff --git a/mysql-test/suite/innodb/t/instant_alter.test b/mysql-test/suite/innodb/t/instant_alter.test
index d2f96c2f6d5..4045ce282e8 100644
--- a/mysql-test/suite/innodb/t/instant_alter.test
+++ b/mysql-test/suite/innodb/t/instant_alter.test
@@ -6,8 +6,9 @@
let $format= `SELECT CASE WHEN @@GLOBAL.innodb_page_size>16384
THEN 'DYNAMIC' ELSE 'COMPRESSED' END`;
-eval CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=$format;
-INSERT INTO t VALUES(1);
+CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=COMPACT;
+eval ALTER TABLE t ADD e INT, ROW_FORMAT=$format;
+INSERT INTO t SET a=1;
SET @old_instant=
(SELECT variable_value FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column');
@@ -26,6 +27,9 @@ SHOW CREATE TABLE t;
SELECT variable_value-@old_instant instants
FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
+SELECT variable_value-@old_instant instants
+FROM information_schema.global_status
+WHERE variable_name = 'innodb_instant_alter_column';
DROP TABLE t;
connect analyze, localhost, root;
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index 5dff7e55c6c..517f2ee7631 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -473,8 +473,8 @@ static bool create_option_need_rebuild(
const Alter_inplace_info* ha_alter_info,
const TABLE* table)
{
- DBUG_ASSERT((ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE)
- == Alter_inplace_info::CHANGE_CREATE_OPTION);
+ DBUG_ASSERT(ha_alter_info->handler_flags
+ & Alter_inplace_info::CHANGE_CREATE_OPTION);
if (ha_alter_info->create_info->used_fields
& (HA_CREATE_USED_ROW_FORMAT