diff options
author | Sergei Golubchik <sergii@pisem.net> | 2013-07-15 18:01:22 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2013-07-15 18:01:22 +0200 |
commit | e1c76b80d91c43a9f17d9ec4c96e4dcb72efb1a2 (patch) | |
tree | ba4f3d737607d1a87e68b4e48e1f41119bee3b82 /mysql-test/suite/innodb/t | |
parent | b427da7651f348550deb886024c0d3101720f00e (diff) | |
download | mariadb-git-e1c76b80d91c43a9f17d9ec4c96e4dcb72efb1a2.tar.gz |
Fixes for innodb suite, merging tests from 5.6.
Includes 5.6 changesets for:
*****
Fix for BUG#13489996 valgrind:conditional jump or move depends on uninitialised values-field_blob.
blob_ptr_size was not initialized properly: remove this variable.
*****
Bug#14021323 CRASH IN FIELD::SET_NULL WHEN INSERTING ROWS TO NEW TABLE
*****
Diffstat (limited to 'mysql-test/suite/innodb/t')
-rw-r--r-- | mysql-test/suite/innodb/t/innodb-autoinc-44030.test | 8 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/innodb-index.test | 581 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/innodb_bug21704.test | 55 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/innodb_bug53592.test | 2 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/innodb_bug54044.test | 13 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/innodb_bug56947.test | 18 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/innodb_mysql.test | 513 |
7 files changed, 454 insertions, 736 deletions
diff --git a/mysql-test/suite/innodb/t/innodb-autoinc-44030.test b/mysql-test/suite/innodb/t/innodb-autoinc-44030.test index 07e9ca30fd6..fd90d5d92de 100644 --- a/mysql-test/suite/innodb/t/innodb-autoinc-44030.test +++ b/mysql-test/suite/innodb/t/innodb-autoinc-44030.test @@ -1,4 +1,4 @@ ---source include/have_innodb.inc +-- source include/have_innodb.inc # embedded server ignores 'delayed', so skip this -- source include/not_embedded.inc @@ -27,8 +27,14 @@ SELECT * FROM t1; # to be enabled. Also, see http://bugs.mysql.com/bug.php?id=47621. #-- error ER_AUTOINC_READ_FAILED,1467 INSERT INTO t1 VALUES(null); +# Before WL#5534, the following statement would copy the table, +# and effectively set AUTO_INCREMENT to 4, because while copying +# it would write values 1,2,3 to the column. +# WL#5534 makes this an in-place ALTER, setting AUTO_INCREMENT=3 for real. ALTER TABLE t1 AUTO_INCREMENT = 3; SHOW CREATE TABLE t1; +-- error ER_DUP_ENTRY +INSERT INTO t1 VALUES(null); INSERT INTO t1 VALUES(null); SELECT * FROM t1; DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/innodb-index.test b/mysql-test/suite/innodb/t/innodb-index.test index cea9055b873..b6fd2529ada 100644 --- a/mysql-test/suite/innodb/t/innodb-index.test +++ b/mysql-test/suite/innodb/t/innodb-index.test @@ -7,127 +7,16 @@ let $format=`select @@innodb_file_format`; set global innodb_file_per_table=on; set global innodb_file_format='Barracuda'; -# Bug #12429576 - Test an assertion failure on purge. -CREATE TABLE t1_purge ( -A INT, -B BLOB, C BLOB, D BLOB, E BLOB, -F BLOB, G BLOB, H BLOB, -PRIMARY KEY (B(767), C(767), D(767), E(767), A), -INDEX (A) -) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; - -INSERT INTO t1_purge VALUES (1, -REPEAT('b', 766), REPEAT('c', 766), REPEAT('d', 766), REPEAT('e', 766), -REPEAT('f', 766), REPEAT('g', 766), REPEAT('h', 766)); - -CREATE TABLE t2_purge ( -A INT PRIMARY KEY, -B BLOB, C BLOB, D BLOB, E BLOB, -F BLOB, G BLOB, H BLOB, I BLOB, -J BLOB, K BLOB, L BLOB, -INDEX (B(767))) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; - -INSERT INTO t2_purge VALUES (1, -REPEAT('b', 766), REPEAT('c', 766), REPEAT('d', 766), REPEAT('e', 766), -REPEAT('f', 766), REPEAT('g', 766), REPEAT('h', 766), REPEAT('i', 766), -REPEAT('j', 766), REPEAT('k', 766), REPEAT('l', 766)); - -CREATE TABLE t3_purge ( -A INT, -B VARCHAR(800), C VARCHAR(800), D VARCHAR(800), E VARCHAR(800), -F VARCHAR(800), G VARCHAR(800), H VARCHAR(800), -PRIMARY KEY (B(767), C(767), D(767), E(767), A), -INDEX (A) -) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; - -INSERT INTO t3_purge SELECT * FROM t1_purge; - -CREATE TABLE t4_purge ( -A INT PRIMARY KEY, -B VARCHAR(800), C VARCHAR(800), D VARCHAR(800), E VARCHAR(800), -F VARCHAR(800), G VARCHAR(800), H VARCHAR(800), I VARCHAR(800), -J VARCHAR(800), K VARCHAR(800), L VARCHAR(800), -INDEX (B(767))) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; - -INSERT INTO t4_purge SELECT * FROM t2_purge; - -# This would trigger the failure (Bug #12429576) -# if purge gets a chance to run before DROP TABLE t1_purge, .... -DELETE FROM t1_purge; -DELETE FROM t2_purge; -DELETE FROM t3_purge; -DELETE FROM t4_purge; -# Instead of doing a --sleep 10, wait until the rest of the tests in -# this file complete before dropping the tables. By then, the purge thread -# will have delt with the updates above. - -# Bug#12637786 - Bad assert by purge thread for records with external data -# used in secondary indexes. -SET @r=REPEAT('a',500); -CREATE TABLE t12637786(a INT, - v1 VARCHAR(500), v2 VARCHAR(500), v3 VARCHAR(500), - v4 VARCHAR(500), v5 VARCHAR(500), v6 VARCHAR(500), - v7 VARCHAR(500), v8 VARCHAR(500), v9 VARCHAR(500), - v10 VARCHAR(500), v11 VARCHAR(500), v12 VARCHAR(500), - v13 VARCHAR(500), v14 VARCHAR(500), v15 VARCHAR(500), - v16 VARCHAR(500), v17 VARCHAR(500), v18 VARCHAR(500) -) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; -CREATE INDEX idx1 ON t12637786(a,v1); -INSERT INTO t12637786 VALUES(9,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r); -UPDATE t12637786 SET a=1000; -DELETE FROM t12637786; -# We need to activate the purge thread at this point to make sure it does not -# assert and is able to clean up the old versions of secondary index entries. -# But instead of doing a --sleep 10, wait until the rest of the tests in -# this file complete before dropping the table. By then, the purge thread -# will have delt with the updates above. - -# Bug#12963823 - Test that the purge thread does not crash when -# the number of indexes has changed since the UNDO record was logged. -create table t12963823(a blob,b blob,c blob,d blob,e blob,f blob,g blob,h blob, - i blob,j blob,k blob,l blob,m blob,n blob,o blob,p blob) - engine=innodb row_format=dynamic; -SET @r = repeat('a', 767); -insert into t12963823 values (@r,@r,@r,@r, @r,@r,@r,@r, @r,@r,@r,@r, @r,@r,@r,@r); -create index ndx_a on t12963823 (a(500)); -create index ndx_b on t12963823 (b(500)); -create index ndx_c on t12963823 (c(500)); -create index ndx_d on t12963823 (d(500)); -create index ndx_e on t12963823 (e(500)); -create index ndx_f on t12963823 (f(500)); -create index ndx_k on t12963823 (k(500)); -create index ndx_l on t12963823 (l(500)); - -SET @r = repeat('b', 500); -update t12963823 set a=@r,b=@r,c=@r,d=@r; -update t12963823 set e=@r,f=@r,g=@r,h=@r; -update t12963823 set i=@r,j=@r,k=@r,l=@r; -update t12963823 set m=@r,n=@r,o=@r,p=@r; -alter table t12963823 drop index ndx_a; -alter table t12963823 drop index ndx_b; -create index ndx_g on t12963823 (g(500)); -create index ndx_h on t12963823 (h(500)); -create index ndx_i on t12963823 (i(500)); -create index ndx_j on t12963823 (j(500)); -create index ndx_m on t12963823 (m(500)); -create index ndx_n on t12963823 (n(500)); -create index ndx_o on t12963823 (o(500)); -create index ndx_p on t12963823 (p(500)); -show create table t12963823; -# We need to activate the purge thread at this point to see if it crashes -# but instead of doing a --sleep 10, wait until the rest of the tests in -# this file complete before dropping the table. By then, the purge thread -# will have delt with the updates above. +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; # Bug#13654923 BOGUS DEBUG ASSERTION IN INDEX CREATION FOR ZERO-LENGTH RECORD create table t1(a varchar(2) primary key) engine=innodb; insert into t1 values(''); +--enable_info create index t1a1 on t1(a(1)); +--disable_info drop table t1; -eval set global innodb_file_per_table=$per_table; -eval set global innodb_file_format=$format; - create table t1(a int not null, b int, c char(10) not null, d varchar(20)) engine = innodb; insert into t1 values (5,5,'oo','oo'),(4,4,'tr','tr'),(3,4,'ad','ad'),(2,3,'ak','ak'); commit; @@ -135,19 +24,30 @@ commit; alter table t1 add index b (b), add index b (b); --error ER_DUP_FIELDNAME alter table t1 add index (b,b); +--enable_info alter table t1 add index d2 (d); +--disable_info show create table t1; +-- disable_result_log +analyze table t1; +-- enable_result_log explain select * from t1 force index(d2) order by d; select * from t1 force index (d2) order by d; --error ER_DUP_ENTRY alter table t1 add unique index (b); show create table t1; +--enable_info alter table t1 add index (b); +--disable_info show create table t1; +--enable_info alter table t1 add unique index (c), add index (d); +--disable_info show create table t1; +analyze table t1; explain select * from t1 force index(c) order by c; +--enable_info alter table t1 add primary key (a), drop index c; show create table t1; --error ER_MULTIPLE_PRI_KEY @@ -155,16 +55,23 @@ alter table t1 add primary key (c); --error ER_DUP_ENTRY alter table t1 drop primary key, add primary key (b); create unique index c on t1 (c); +--disable_info show create table t1; +analyze table t1; explain select * from t1 force index(c) order by c; select * from t1 force index(c) order by c; +--enable_info alter table t1 drop index b, add index (b); +--disable_info show create table t1; insert into t1 values(6,1,'ggg','ggg'); select * from t1; select * from t1 force index(b) order by b; select * from t1 force index(c) order by c; select * from t1 force index(d) order by d; +-- disable_result_log +analyze table t1; +-- enable_result_log explain select * from t1 force index(b) order by b; explain select * from t1 force index(c) order by c; explain select * from t1 force index(d) order by d; @@ -174,11 +81,16 @@ drop table t1; create table t1(a int not null, b int, c char(10), d varchar(20), primary key (a)) engine = innodb; insert into t1 values (1,1,'ab','ab'),(2,2,'ac','ac'),(3,3,'ad','ad'),(4,4,'afe','afe'); commit; +--enable_info alter table t1 add index (c(2)); show create table t1; alter table t1 add unique index (d(10)); show create table t1; +--disable_info insert into t1 values(5,1,'ggg','ggg'); +-- disable_result_log +analyze table t1; +-- enable_result_log select * from t1; select * from t1 force index(c) order by c; select * from t1 force index(d) order by d; @@ -186,10 +98,15 @@ explain select * from t1 order by b; explain select * from t1 force index(c) order by c; explain select * from t1 force index(d) order by d; show create table t1; +--enable_info alter table t1 drop index d; +--disable_info insert into t1 values(8,9,'fff','fff'); select * from t1; select * from t1 force index(c) order by c; +-- disable_result_log +analyze table t1; +-- enable_result_log explain select * from t1 order by b; explain select * from t1 force index(c) order by c; explain select * from t1 order by d; @@ -199,23 +116,38 @@ drop table t1; create table t1(a int not null, b int, c char(10), d varchar(20), primary key (a)) engine = innodb; insert into t1 values (1,1,'ab','ab'),(2,2,'ac','ac'),(3,2,'ad','ad'),(4,4,'afe','afe'); commit; +--enable_info alter table t1 add unique index (b,c); +--disable_info insert into t1 values(8,9,'fff','fff'); select * from t1; select * from t1 force index(b) order by b; +-- disable_result_log +analyze table t1; +-- enable_result_log explain select * from t1 force index(b) order by b; show create table t1; +--enable_info alter table t1 add index (b,c); +--disable_info insert into t1 values(11,11,'kkk','kkk'); select * from t1; select * from t1 force index(b) order by b; +-- disable_result_log +analyze table t1; +-- enable_result_log explain select * from t1 force index(b) order by b; show create table t1; +--enable_info alter table t1 add unique index (c,d); +--disable_info insert into t1 values(13,13,'yyy','aaa'); select * from t1; select * from t1 force index(b) order by b; select * from t1 force index(c) order by c; +-- disable_result_log +analyze table t1; +-- enable_result_log explain select * from t1 force index(b) order by b; explain select * from t1 force index(c) order by c; show create table t1; @@ -224,9 +156,9 @@ drop table t1; create table t1(a int not null, b int not null, c int, primary key (a), key (b)) engine = innodb; create table t3(a int not null, c int not null, d int, primary key (a), key (c)) engine = innodb; create table t4(a int not null, d int not null, e int, primary key (a), key (d)) engine = innodb; -create table t2(a int not null, b int not null, c int not null, d int not null, e int, -foreign key (b) references t1(b) on delete cascade, -foreign key (c) references t3(c), foreign key (d) references t4(d)) +create table t2(a int not null, b int, c int, d int, e int, +foreign key (b) references t1(b) on delete set null, +foreign key (c) references t3(c), foreign key (d) references t4(d) on update set null) engine = innodb; --error ER_DROP_INDEX_FK alter table t1 drop index b; @@ -238,38 +170,80 @@ alter table t4 drop index d; alter table t2 drop index b; --error ER_DROP_INDEX_FK alter table t2 drop index b, drop index c, drop index d; +--error ER_FK_COLUMN_CANNOT_CHANGE +alter table t2 MODIFY b INT NOT NULL, ALGORITHM=COPY; +# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on. +set @old_sql_mode = @@sql_mode; +set @@sql_mode = 'STRICT_TRANS_TABLES'; +--error ER_FK_COLUMN_NOT_NULL +alter table t2 MODIFY b INT NOT NULL, ALGORITHM=INPLACE; +set @@sql_mode = @old_sql_mode; + +SET FOREIGN_KEY_CHECKS=0; +--error ER_FK_COLUMN_CANNOT_DROP +alter table t2 DROP COLUMN b, ALGORITHM=COPY; +--error ER_FK_COLUMN_CANNOT_DROP +alter table t2 DROP COLUMN b; +--error ER_FK_COLUMN_CANNOT_DROP_CHILD +alter table t1 DROP COLUMN b, ALGORITHM=COPY; +--error ER_FK_COLUMN_CANNOT_DROP_CHILD +alter table t1 DROP COLUMN b; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; + +--enable_info # Apparently, the following makes mysql_alter_table() drop index d. create unique index dc on t2 (d,c); create index dc on t1 (b,c); # This should preserve the foreign key constraints. -alter table t2 add primary key (a); +--disable_info +# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on. +# And adding a PRIMARY KEY will also add NOT NULL implicitly! +set @@sql_mode = 'STRICT_TRANS_TABLES'; +--enable_info +--error ER_FK_COLUMN_NOT_NULL +alter table t2 add primary key (alpha), change a alpha int, +change b beta int not null, change c charlie int not null; +--error ER_FK_COLUMN_NOT_NULL +alter table t2 add primary key (alpha), change a alpha int, +change c charlie int not null, change d delta int not null; +alter table t2 add primary key (alpha), change a alpha int, +change b beta int, modify c int not null; +--disable_info +set @@sql_mode = @old_sql_mode; insert into t1 values (1,1,1); insert into t3 values (1,1,1); insert into t4 values (1,1,1); insert into t2 values (1,1,1,1,1); commit; +--enable_info alter table t4 add constraint dc foreign key (a) references t1(a); +--disable_info show create table t4; ---replace_regex /'test\.#sql-[0-9a-f_]*'/'#sql-temporary'/ +# mysqltest first does replace_regex, then replace_result +--replace_regex /#sql-[0-9a-f_]*'/#sql-temporary'/ +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLD_DATADIR ./ master-data/ '' # a foreign key 'test/dc' already exists --error ER_CANT_CREATE_TABLE alter table t3 add constraint dc foreign key (a) references t1(a); +SET FOREIGN_KEY_CHECKS=0; +--error ER_FK_FAIL_ADD_SYSTEM +alter table t3 add constraint dc foreign key (a) references t1(a); +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; show create table t3; -# this should be fixed by MySQL (see Bug #51451) ---error ER_WRONG_NAME_FOR_INDEX -alter table t2 drop index b, add index (b); +--enable_info +alter table t2 drop index b, add index (beta); +--disable_info show create table t2; --error ER_ROW_IS_REFERENCED_2 delete from t1; --error ER_CANT_DROP_FIELD_OR_KEY drop index dc on t4; -# there is no foreign key dc on t3 ---replace_regex /'[^']*test\/#sql2-[0-9a-f-]*'/'#sql2-temporary'/ -# Embedded server doesn't chdir to data directory ---replace_result $MYSQLD_DATADIR ./ master-data/ '' ---error ER_ERROR_ON_RENAME +--enable_info +--error ER_CANT_DROP_FIELD_OR_KEY alter table t3 drop foreign key dc; alter table t4 drop foreign key dc; +--disable_info select * from t2; delete from t1; select * from t2; @@ -311,10 +285,15 @@ drop table t1; create table t1(a int not null, b int not null, c int, primary key (a), key(c)) engine=innodb; insert into t1 values (5,1,5),(4,2,4),(3,3,3),(2,4,2),(1,5,1); +--enable_info alter table t1 add unique index (b); +--disable_info insert into t1 values (10,20,20),(11,19,19),(12,18,18),(13,17,17); show create table t1; check table t1; +-- disable_result_log +analyze table t1; +-- enable_result_log explain select * from t1 force index(c) order by c; explain select * from t1 order by a; explain select * from t1 force index(b) order by b; @@ -325,11 +304,14 @@ drop table t1; create table t1(a int not null, b int not null) engine=innodb; insert into t1 values (1,1); +--enable_info alter table t1 add primary key(b); +--disable_info insert into t1 values (2,2); show create table t1; check table t1; select * from t1; +analyze table t1; explain select * from t1; explain select * from t1 order by a; explain select * from t1 order by b; @@ -338,205 +320,19 @@ drop table t1; create table t1(a int not null) engine=innodb; insert into t1 values (1); +--enable_info alter table t1 add primary key(a); +--disable_info insert into t1 values (2); show create table t1; check table t1; commit; select * from t1; +analyze table t1; explain select * from t1; explain select * from t1 order by a; drop table t1; -create table t2(d varchar(17) primary key) engine=innodb default charset=utf8; -create table t3(a int primary key) engine=innodb; - -insert into t3 values(22),(44),(33),(55),(66); - -insert into t2 values ('jejdkrun87'),('adfd72nh9k'), -('adfdpplkeock'),('adfdijnmnb78k'),('adfdijn0loKNHJik'); - -create table t1(a int, b blob, c text, d text not null) -engine=innodb default charset = utf8; - -# r2667 The following test is disabled because MySQL behavior changed. -# r2667 The test was added with this comment: -# r2667 -# r2667 ------------------------------------------------------------------------ -# r2667 r1699 | marko | 2007-08-10 19:53:19 +0300 (Fri, 10 Aug 2007) | 5 lines -# r2667 -# r2667 branches/zip: Add changes that accidentally omitted from r1698: -# r2667 -# r2667 innodb-index.test, innodb-index.result: Add a test for creating -# r2667 a PRIMARY KEY on a column that contains a NULL value. -# r2667 ------------------------------------------------------------------------ -# r2667 -# r2667 but in BZR-r2667: -# r2667 http://bazaar.launchpad.net/~mysql/mysql-server/mysql-5.1/revision/davi%40mysql.com-20080617141221-8yre8ys9j4uw3xx5?start_revid=joerg%40mysql.com-20080630105418-7qoe5ehomgrcdb89 -# r2667 MySQL changed the behavior to do full table copy when creating PRIMARY INDEX -# r2667 on a non-NULL column instead of calling ::add_index() which would fail (and -# r2667 this is what we were testing here). Before r2667 the code execution path was -# r2667 like this (when adding PRIMARY INDEX on a non-NULL column with ALTER TABLE): -# r2667 -# r2667 mysql_alter_table() -# r2667 compare_tables() // would return ALTER_TABLE_INDEX_CHANGED -# r2667 ::add_index() // would fail with "primary index cannot contain NULL" -# r2667 -# r2667 after r2667 the code execution path is the following: -# r2667 -# r2667 mysql_alter_table() -# r2667 compare_tables() // returns ALTER_TABLE_DATA_CHANGED -# r2667 full copy is done, without calling ::add_index() -# r2667 -# r2667 To enable, remove "# r2667: " below. -# r2667 -# r2667: insert into t1 values (null,null,null,'null'); -insert into t1 -select a,left(repeat(d,100*a),65535),repeat(d,20*a),d from t2,t3; -drop table t2, t3; -select count(*) from t1 where a=44; -select a, -length(b),b=left(repeat(d,100*a),65535),length(c),c=repeat(d,20*a),d from t1; -# r2667: --error ER_PRIMARY_CANT_HAVE_NULL -# r2667: alter table t1 add primary key (a), add key (b(20)); -# r2667: delete from t1 where d='null'; ---error ER_DUP_ENTRY -alter table t1 add primary key (a), add key (b(20)); -delete from t1 where a%2; -check table t1; -alter table t1 add primary key (a,b(255),c(255)), add key (b(767)); -select count(*) from t1 where a=44; -select a, -length(b),b=left(repeat(d,100*a),65535),length(c),c=repeat(d,20*a),d from t1; -show create table t1; -check table t1; -explain select * from t1 where b like 'adfd%'; - -# The following tests are disabled because of the introduced timeouts for -# metadata locks at the MySQL level as part of the fix for -# Bug#45225 Locking: hang if drop table with no timeout -# The following commands now play with MySQL metadata locks instead of -# InnoDB locks -# start disabled45225_1 -## -## Test locking -## -# -#create table t2(a int, b varchar(255), primary key(a,b)) engine=innodb; -#insert into t2 select a,left(b,255) from t1; -#drop table t1; -#rename table t2 to t1; -# -#connect (a,localhost,root,,); -#connect (b,localhost,root,,); -#connection a; -#set innodb_lock_wait_timeout=1; -#begin; -## Obtain an IX lock on the table -#select a from t1 limit 1 for update; -#connection b; -#set innodb_lock_wait_timeout=1; -## This would require an S lock on the table, conflicting with the IX lock. -#--error ER_LOCK_WAIT_TIMEOUT -#create index t1ba on t1 (b,a); -#connection a; -#commit; -#begin; -## Obtain an IS lock on the table -#select a from t1 limit 1 lock in share mode; -#connection b; -## This will require an S lock on the table. No conflict with the IS lock. -#create index t1ba on t1 (b,a); -## This would require an X lock on the table, conflicting with the IS lock. -#--error ER_LOCK_WAIT_TIMEOUT -#drop index t1ba on t1; -#connection a; -#commit; -#explain select a from t1 order by b; -#--send -#select a,sleep(2+a/100) from t1 order by b limit 3; -# -## The following DROP INDEX will succeed, altough the SELECT above has -## opened a read view. However, during the execution of the SELECT, -## MySQL should hold a table lock that should block the execution -## of the DROP INDEX below. -# -#connection b; -#select sleep(1); -#drop index t1ba on t1; -# -## After the index was dropped, subsequent SELECTs will use the same -## read view, but they should not be accessing the dropped index any more. -# -#connection a; -#reap; -#explain select a from t1 order by b; -#select a from t1 order by b limit 3; -#commit; -# -#connection default; -#disconnect a; -#disconnect b; -# -# end disabled45225_1 -drop table t1; - -set global innodb_file_per_table=on; -set global innodb_file_format='Barracuda'; -# Test creating a table that could lead to undo log overflow. -# In the undo log, we write a 768-byte prefix (REC_MAX_INDEX_COL_LEN) -# of each externally stored column that appears as a column prefix in an index. -# For this test case, it would suffice to write 1 byte, though. -create table t1(a blob,b blob,c blob,d blob,e blob,f blob,g blob,h blob, - i blob,j blob,k blob,l blob,m blob,n blob,o blob,p blob, - q blob,r blob,s blob,t blob,u blob) - engine=innodb row_format=dynamic; -create index t1a on t1 (a(767)); -create index t1b on t1 (b(767)); -create index t1c on t1 (c(767)); -create index t1d on t1 (d(767)); -create index t1e on t1 (e(767)); -create index t1f on t1 (f(767)); -create index t1g on t1 (g(767)); -create index t1h on t1 (h(767)); -create index t1i on t1 (i(767)); -create index t1j on t1 (j(767)); -create index t1k on t1 (k(767)); -create index t1l on t1 (l(767)); -create index t1m on t1 (m(767)); -create index t1n on t1 (n(767)); -create index t1o on t1 (o(767)); -create index t1p on t1 (p(767)); -create index t1q on t1 (q(767)); -create index t1r on t1 (r(767)); -create index t1s on t1 (s(767)); -create index t1t on t1 (t(767)); ---error 139 -create index t1u on t1 (u(767)); ---error 139 -create index t1ut on t1 (u(767), t(767)); -create index t1st on t1 (s(767), t(767)); -show create table t1; ---error 139 -create index t1u on t1 (u(767)); -alter table t1 row_format=compact; -create index t1u on t1 (u(767)); - -drop table t1; - -# Bug#12547647 UPDATE LOGGING COULD EXCEED LOG PAGE SIZE -CREATE TABLE bug12547647( -a INT NOT NULL, b BLOB NOT NULL, c TEXT, -PRIMARY KEY (b(10), a), INDEX (c(767)), INDEX(b(767)) -) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; - -INSERT INTO bug12547647 VALUES (5,repeat('khdfo5AlOq',1900),repeat('g',7751)); -COMMIT; -# The following used to cause infinite undo log allocation. ---error ER_UNDO_RECORD_TOO_BIG -UPDATE bug12547647 SET c = REPEAT('b',16928); -DROP TABLE bug12547647; - eval set global innodb_file_per_table=$per_table; eval set global innodb_file_format=$format; eval set global innodb_file_format_max=$format; @@ -546,7 +342,7 @@ eval set global innodb_file_format_max=$format; # constraint modifications (Issue #70, Bug #38786) # SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; -SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET FOREIGN_KEY_CHECKS=0; CREATE TABLE t1( c1 BIGINT(12) NOT NULL, @@ -589,8 +385,10 @@ CREATE TABLE t2( PRIMARY KEY (c1,c2,c3) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +SET FOREIGN_KEY_CHECKS=0; ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca FOREIGN KEY (c3) REFERENCES t1(c1); +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SHOW CREATE TABLE t2; @@ -620,26 +418,60 @@ CREATE TABLE t2( PRIMARY KEY (c1) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ---replace_regex /'test\.#sql-[0-9_a-f-]*'/'#sql-temporary'/ +SET FOREIGN_KEY_CHECKS=0; +--enable_info + +# mysqltest first does replace_regex, then replace_result +--replace_regex /#sql-[0-9a-f_]*'/#sql-temporary'/ +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLD_DATADIR ./ master-data/ '' --error ER_CANT_CREATE_TABLE ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca + FOREIGN KEY (c3,c2) REFERENCES t1(c1,c1), ALGORITHM=COPY; +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca FOREIGN KEY (c3,c2) REFERENCES t1(c1,c1); ---replace_regex /'test\.#sql-[0-9_a-f-]*'/'#sql-temporary'/ +# mysqltest first does replace_regex, then replace_result +--replace_regex /#sql-[0-9a-f_]*'/#sql-temporary'/ +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLD_DATADIR ./ master-data/ '' --error ER_CANT_CREATE_TABLE ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca + FOREIGN KEY (c3,c2) REFERENCES t1(c1,c2), ALGORITHM=COPY; +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca FOREIGN KEY (c3,c2) REFERENCES t1(c1,c2); ---replace_regex /'test\.#sql-[0-9_a-f-]*'/'#sql-temporary'/ ---error ER_CANT_CREATE_TABLE + +# FIXME (WL#6251 problem): this should fail, like the ALGORITHM=COPY below ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca FOREIGN KEY (c3,c2) REFERENCES t1(c2,c1); +ALTER TABLE t2 DROP FOREIGN KEY fk_t2_ca; + +# mysqltest first does replace_regex, then replace_result +--replace_regex /#sql-[0-9a-f_]*'/#sql-temporary'/ +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLD_DATADIR ./ master-data/ '' +--error ER_CANT_CREATE_TABLE +ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca + FOREIGN KEY (c3,c2) REFERENCES t1(c2,c1), ALGORITHM=COPY; + ALTER TABLE t1 MODIFY COLUMN c2 BIGINT(12) NOT NULL; ---replace_regex /'test\.#sql-[0-9_a-f-]*'/'#sql-temporary'/ +# mysqltest first does replace_regex, then replace_result +--replace_regex /#sql-[0-9a-f_]*'/#sql-temporary'/ +# Embedded server doesn't chdir to data directory +--replace_result $MYSQLD_DATADIR ./ master-data/ '' --error ER_CANT_CREATE_TABLE ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca + FOREIGN KEY (c3,c2) REFERENCES t1(c1,c2), ALGORITHM=COPY; +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca FOREIGN KEY (c3,c2) REFERENCES t1(c1,c2); ALTER TABLE t2 ADD CONSTRAINT fk_t2_ca FOREIGN KEY (c3,c2) REFERENCES t1(c2,c1); + +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; + SHOW CREATE TABLE t1; SHOW CREATE TABLE t2; CREATE INDEX i_t2_c2_c1 ON t2(c2, c1); @@ -648,40 +480,79 @@ CREATE INDEX i_t2_c3_c1_c2 ON t2(c3, c1, c2); SHOW CREATE TABLE t2; CREATE INDEX i_t2_c3_c2 ON t2(c3, c2); SHOW CREATE TABLE t2; +--disable_info DROP TABLE t2; DROP TABLE t1; -# The following tests are disabled because of the introduced timeouts for -# metadata locks at the MySQL level as part of the fix for -# Bug#45225 Locking: hang if drop table with no timeout -# The following CREATE INDEX t1a ON t1(a); causes a lock wait timeout -# start disabled45225_2 -#connect (a,localhost,root,,); -#connect (b,localhost,root,,); -#connection a; -#CREATE TABLE t1 (a INT, b CHAR(1)) ENGINE=InnoDB; -#INSERT INTO t1 VALUES (3,'a'),(3,'b'),(1,'c'),(0,'d'),(1,'e'); -#connection b; -#BEGIN; -#SELECT * FROM t1; -#connection a; -#CREATE INDEX t1a ON t1(a); -#connection b; -#SELECT * FROM t1; -#--error ER_TABLE_DEF_CHANGED -#SELECT * FROM t1 FORCE INDEX(t1a) ORDER BY a; -#SELECT * FROM t1; -#COMMIT; -#SELECT * FROM t1 FORCE INDEX(t1a) ORDER BY a; -#connection default; -#disconnect a; -#disconnect b; -# -#DROP TABLE t1; -# end disabled45225_2 -#this delay is needed because 45225_2 is disabled, to allow the purge to run -SELECT SLEEP(10); -DROP TABLE t1_purge, t2_purge, t3_purge, t4_purge; -DROP TABLE t12637786; -DROP TABLE t12963823; +connect (a,localhost,root,,); +connect (b,localhost,root,,); +connection a; +CREATE TABLE t1 (a INT, b CHAR(1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (3,'a'),(3,'b'),(1,'c'),(0,'d'),(1,'e'); +CREATE TABLE t2 (a INT, b CHAR(1)) ENGINE=InnoDB; +CREATE TABLE t2i (a INT, b CHAR(1) NOT NULL) ENGINE=InnoDB; +CREATE TABLE t2c (a INT, b CHAR(1) NOT NULL) ENGINE=InnoDB; +INSERT INTO t2 SELECT * FROM t1; +INSERT INTO t2i SELECT * FROM t1; +INSERT INTO t2c SELECT * FROM t1; +connection b; +BEGIN; +# This acquires a MDL lock on t1 until commit. +SELECT * FROM t1; +connection a; +# This times out before of the MDL lock held by connection b. +SET lock_wait_timeout=1; +--error ER_LOCK_WAIT_TIMEOUT +CREATE INDEX t1a ON t1(a); +--enable_info +CREATE INDEX t2a ON t2(a); +--disable_info +set @old_sql_mode = @@sql_mode; +# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on. +# And adding a PRIMARY KEY will also add NOT NULL implicitly! +set @@sql_mode = 'STRICT_TRANS_TABLES'; +--enable_info +ALTER TABLE t2i ADD PRIMARY KEY(a,b), ADD INDEX t2a(a), ALGORITHM=INPLACE; +--disable_info +set @@sql_mode = @old_sql_mode; +--enable_info +ALTER TABLE t2c ADD PRIMARY KEY(a,b), ADD INDEX t2a(a), ALGORITHM=COPY; +--disable_info +connection b; +# t2i and t2c are too new for this transaction, because they were rebuilt +--error ER_TABLE_DEF_CHANGED +SELECT * FROM t2i; +--error ER_TABLE_DEF_CHANGED +SELECT * FROM t2i FORCE INDEX(t2a) ORDER BY a; +--error ER_TABLE_DEF_CHANGED +SELECT * FROM t2c; +--error ER_TABLE_DEF_CHANGED +SELECT * FROM t2c FORCE INDEX(t2a) ORDER BY a; +# In t2, only the new index t2a is too new for this transaction. +SELECT * FROM t2; +--error ER_TABLE_DEF_CHANGED +SELECT * FROM t2 FORCE INDEX(t2a) ORDER BY a; +SELECT * FROM t2; +COMMIT; +# For a new transaction, all of t2, t2i, t2c are accessible. +SELECT * FROM t2; +SELECT * FROM t2 FORCE INDEX(t2a) ORDER BY a; +SELECT * FROM t2i; +SELECT * FROM t2i FORCE INDEX(t2a) ORDER BY a; +SELECT * FROM t2c; +SELECT * FROM t2c FORCE INDEX(t2a) ORDER BY a; +connection default; +disconnect a; +disconnect b; + +--error ER_DUP_KEYNAME +alter table t2 add index t2a(b); +alter table t2 drop index t2a, add index t2a(b); +show create table t2; +show create table t2i; +show create table t2c; + +--disable_info + +DROP TABLE t1,t2,t2c,t2i; diff --git a/mysql-test/suite/innodb/t/innodb_bug21704.test b/mysql-test/suite/innodb/t/innodb_bug21704.test index 67d76587819..82e7c81d0e4 100644 --- a/mysql-test/suite/innodb/t/innodb_bug21704.test +++ b/mysql-test/suite/innodb/t/innodb_bug21704.test @@ -1,4 +1,5 @@ ---source include/have_innodb.inc +-- source include/have_innodb.inc + --echo # --echo # Bug#21704: Renaming column does not update FK definition. --echo # @@ -8,12 +9,6 @@ --echo # foreign key (either in the referencing or referenced table). --echo ---disable_warnings -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; -DROP TABLE IF EXISTS t3; ---enable_warnings - CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT ENGINE=INNODB; CREATE TABLE t2 (a INT PRIMARY KEY, b INT, @@ -32,64 +27,50 @@ INSERT INTO t3 VALUES (1,1,1),(2,2,2),(3,3,3); --echo # Test renaming the column in the referenced table. --echo -# mysqltest first does replace_regex, then replace_result ---replace_regex /'[^']*test\/#sql-[0-9a-f_]*'/'#sql-temporary'/ -# Embedded server doesn't chdir to data directory ---replace_result $MYSQLTEST_VARDIR . mysqld.1/data/ '' ---error ER_ERROR_ON_RENAME -ALTER TABLE t1 CHANGE a c INT; +--enable_info +ALTER TABLE t1 CHANGE a e INT; --echo # Ensure that online column rename works. ---enable_info ALTER TABLE t1 CHANGE b c INT; ---disable_info --echo --echo # Test renaming the column in the referencing table --echo -# mysqltest first does replace_regex, then replace_result ---replace_regex /'[^']*test\/#sql-[0-9a-f_]*'/'#sql-temporary'/ -# Embedded server doesn't chdir to data directory ---replace_result $MYSQLTEST_VARDIR . mysqld.1/data/ '' ---error ER_ERROR_ON_RENAME -ALTER TABLE t2 CHANGE a c INT; +ALTER TABLE t2 CHANGE a z INT; --echo # Ensure that online column rename works. ---enable_info ALTER TABLE t2 CHANGE b c INT; ---disable_info --echo --echo # Test with self-referential constraints --echo -# mysqltest first does replace_regex, then replace_result ---replace_regex /'[^']*test\/#sql-[0-9a-f_]*'/'#sql-temporary'/ -# Embedded server doesn't chdir to data directory ---replace_result $MYSQLTEST_VARDIR . mysqld.1/data/ '' ---error ER_ERROR_ON_RENAME -ALTER TABLE t3 CHANGE a d INT; +ALTER TABLE t3 CHANGE a f INT; -# mysqltest first does replace_regex, then replace_result ---replace_regex /'[^']*test\/#sql-[0-9a-f_]*'/'#sql-temporary'/ -# Embedded server doesn't chdir to data directory ---replace_result $MYSQLTEST_VARDIR . mysqld.1/data/ '' ---error ER_ERROR_ON_RENAME -ALTER TABLE t3 CHANGE b d INT; +ALTER TABLE t3 CHANGE b g INT; --echo # Ensure that online column rename works. ---enable_info ALTER TABLE t3 CHANGE c d INT; ---disable_info --echo --echo # Cleanup. --echo +--disable_info +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; + +SELECT f.*, c.* +FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS c +INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FOREIGN f +ON c.ID=f.ID +WHERE FOR_NAME LIKE 'test/t%'; + DROP TABLE t3; DROP TABLE t2; DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/innodb_bug53592.test b/mysql-test/suite/innodb/t/innodb_bug53592.test index 9bf8578eafa..6c0f5a8422d 100644 --- a/mysql-test/suite/innodb/t/innodb_bug53592.test +++ b/mysql-test/suite/innodb/t/innodb_bug53592.test @@ -1,8 +1,8 @@ ---source include/have_innodb.inc # Testcase for Bug #53592 - "crash replacing duplicates into # table after fast alter table added unique key". The fix is to make # sure index number lookup should go through "index translation table". +--source include/have_innodb.inc # Use FIC for index creation set old_alter_table=0; diff --git a/mysql-test/suite/innodb/t/innodb_bug54044.test b/mysql-test/suite/innodb/t/innodb_bug54044.test index 013a7ff1e93..13c37d9c841 100644 --- a/mysql-test/suite/innodb/t/innodb_bug54044.test +++ b/mysql-test/suite/innodb/t/innodb_bug54044.test @@ -1,12 +1,19 @@ ---source include/have_innodb.inc # This is the test for bug #54044. Special handle MYSQL_TYPE_NULL type # during create table, so it will not trigger assertion failure. +--source include/have_innodb.inc # This 'create table' operation no longer uses the NULL datatype. CREATE TEMPORARY TABLE table_54044 ENGINE = INNODB AS SELECT IF(NULL IS NOT NULL, NULL, NULL); SHOW CREATE TABLE table_54044; -CREATE TEMPORARY TABLE tmp1 ENGINE = INNODB AS SELECT COALESCE(NULL, NULL, NULL); -CREATE TEMPORARY TABLE tmp2 ENGINE = INNODB AS SELECT GREATEST(NULL, NULL); +DROP TABLE table_54044; + +# These 'create table' operations should fail because of +# using NULL datatype + +CREATE TABLE tmp ENGINE = INNODB AS SELECT COALESCE(NULL, NULL, NULL), GREATEST(NULL, NULL), NULL; +SHOW CREATE TABLE tmp; +DROP TABLE tmp; + diff --git a/mysql-test/suite/innodb/t/innodb_bug56947.test b/mysql-test/suite/innodb/t/innodb_bug56947.test index b6feb239314..4cefeb391cf 100644 --- a/mysql-test/suite/innodb/t/innodb_bug56947.test +++ b/mysql-test/suite/innodb/t/innodb_bug56947.test @@ -1,15 +1,17 @@ ---source include/have_innodb.inc # # Bug #56947 valgrind reports a memory leak in innodb-plugin.innodb-index # -SET @old_innodb_file_per_table=@@innodb_file_per_table; -# avoid a message about filed *.ibd file creation in the error log +-- source include/have_innodb.inc +-- source include/have_debug.inc + SET GLOBAL innodb_file_per_table=0; create table bug56947(a int not null) engine = innodb; -CREATE TABLE `bug56947#1`(a int) ENGINE=InnoDB; ---error 156 + +SET DEBUG_DBUG='+d,ib_rebuild_cannot_rename'; +--error ER_GET_ERRNO alter table bug56947 add unique index (a); -drop table `bug56947#1`; +SET DEBUG_DBUG='-d,ib_rebuild_cannot_rename'; +check table bug56947; + drop table bug56947; ---disable_query_log -SET GLOBAL innodb_file_per_table=@old_innodb_file_per_table; +SET @@global.innodb_file_per_table=DEFAULT; diff --git a/mysql-test/suite/innodb/t/innodb_mysql.test b/mysql-test/suite/innodb/t/innodb_mysql.test index 3ae5be3aa30..44e2e8b2342 100644 --- a/mysql-test/suite/innodb/t/innodb_mysql.test +++ b/mysql-test/suite/innodb/t/innodb_mysql.test @@ -5,11 +5,12 @@ # main testing code t/innodb_mysql.test -> include/mix1.inc # -# Slow test, don't run during staging part --- source include/not_staging.inc --- source include/have_innodb.inc --- source include/have_query_cache.inc +#Want to skip this test from daily Valgrind execution. +--source include/no_valgrind_without_big.inc +# Adding big test option for this test. +--source include/big_test.inc +-- source include/have_innodb.inc let $engine_type= InnoDB; let $other_engine_type= MEMORY; # InnoDB does support FOREIGN KEYFOREIGN KEYs @@ -21,21 +22,21 @@ set session innodb_support_xa=default; --disable_warnings drop table if exists t1, t2, t3; --enable_warnings -# -# BUG#35850: Performance regression in 5.1.23/5.1.24 -# +--echo # +--echo # BUG#35850: Performance regression in 5.1.23/5.1.24 +--echo # create table t1(a int); insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); create table t2 (a int, b int, pk int, key(a,b), primary key(pk)) engine=innodb; insert into t2 select @a:=A.a+10*(B.a + 10*C.a),@a, @a from t1 A, t1 B, t1 C; ---echo this must use key 'a', not PRIMARY: +--echo # this must use key 'a', not PRIMARY: --replace_column 9 # explain select a from t2 where a=b; drop table t1, t2; -# -# Bug #40360: Binlog related errors with binlog off -# +--echo # +--echo # Bug #40360: Binlog related errors with binlog off +--echo # # This bug is triggered when the binlog format is STATEMENT and the # binary log is turned off. In this case, no error should be shown for # the statement since there are no replication issues. @@ -47,9 +48,9 @@ CREATE TABLE t1 ( a INT ) ENGINE=InnoDB; INSERT INTO t1 VALUES(1); DROP TABLE t1; -# -# Bug#37284 Crash in Field_string::type() -# +--echo # +--echo # Bug#37284 Crash in Field_string::type() +--echo # --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings @@ -58,10 +59,10 @@ CREATE INDEX i1 on t1 (a(3)); SELECT * FROM t1 WHERE a = 'abcde'; DROP TABLE t1; -# -# Bug #37742: HA_EXTRA_KEYREAD flag is set when key contains only prefix of -# requested column -# +--echo # +--echo # Bug #37742: HA_EXTRA_KEYREAD flag is set when key contains only prefix of +--echo # requested column +--echo # CREATE TABLE foo (a int, b int, c char(10), PRIMARY KEY (c(3)), @@ -85,6 +86,12 @@ INSERT INTO foo VALUES INSERT INTO bar SELECT * FROM foo; INSERT INTO foo2 SELECT * FROM foo; +-- disable_result_log +ANALYZE TABLE bar; +ANALYZE TABLE foo; +ANALYZE TABLE foo2; +-- enable_result_log + --query_vertical EXPLAIN SELECT c FROM bar WHERE b>2; --query_vertical EXPLAIN SELECT c FROM foo WHERE b>2; --query_vertical EXPLAIN SELECT c FROM foo2 WHERE b>2; @@ -96,9 +103,9 @@ INSERT INTO foo2 SELECT * FROM foo; DROP TABLE foo, bar, foo2; -# -# Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table -# +--echo # +--echo # Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table +--echo # --disable_warnings DROP TABLE IF EXISTS t1,t3,t2; @@ -137,9 +144,9 @@ DEALLOCATE PREPARE stmt3; DROP TABLE t1,t3,t2; DROP FUNCTION f1; -# -# Bug#37016: TRUNCATE TABLE removes some rows but not all -# +--echo # +--echo # Bug#37016: TRUNCATE TABLE removes some rows but not all +--echo # --disable_warnings DROP TABLE IF EXISTS t1,t2; @@ -337,9 +344,9 @@ DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; -# -# Bug#43580: Issue with Innodb on multi-table update -# +--echo # +--echo # Bug#43580: Issue with Innodb on multi-table update +--echo # CREATE TABLE t1 (a INT, b INT, KEY (a)) ENGINE = INNODB; CREATE TABLE t2 (a INT KEY, b INT, KEY (b)) ENGINE = INNODB; @@ -460,8 +467,14 @@ INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1; INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1; INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1; INSERT INTO t1 (b,c,d,e) SELECT RAND()*10000, RAND()*10000, d, e FROM t1; +-- disable_result_log +ANALYZE TABLE t1; +-- enable_result_log EXPLAIN SELECT * FROM t1 WHERE b=1 AND c=1 ORDER BY a; EXPLAIN SELECT * FROM t1 FORCE INDEX(i2) WHERE b=1 and c=1 ORDER BY a; +# With 4k pages, the 'rows' column in the output below is either 120 or 138, +# not 128 as it is with 8k and 16k. Bug#12602606 +--replace_result 128 {checked} 120 {checked} 138 {checked} EXPLAIN SELECT * FROM t1 FORCE INDEX(PRIMARY) WHERE b=1 AND c=1 ORDER BY a; DROP TABLE t1; @@ -505,11 +518,7 @@ INSERT INTO t2 VALUES (),(); CREATE OR REPLACE VIEW v1 AS SELECT 1 FROM t2 WHERE b =(SELECT a FROM t1 LIMIT 1); ---disable_query_log ---disable_result_log CONNECT (con1, localhost, root,,); ---enable_query_log ---enable_result_log CONNECTION default; DELIMITER |; @@ -546,7 +555,7 @@ DROP TABLE t1,t2; --echo # Bug #49324: more valgrind errors in test_if_skip_sort_order --echo # CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb ; ---echo #should not cause valgrind warnings +--echo # should not cause valgrind warnings SELECT 1 FROM t1 JOIN t1 a USING(a) GROUP BY t1.a,t1.a; DROP TABLE t1; @@ -558,6 +567,10 @@ create table t1(f1 int not null primary key, f2 int) engine=innodb; create table t2(f1 int not null, key (f1)) engine=innodb; insert into t1 values (1,1),(2,2),(3,3); insert into t2 values (1),(2),(3); +-- disable_result_log +analyze table t1; +analyze table t2; +-- enable_result_log explain select t1.* from t1 left join t2 using(f1) group by t1.f1; drop table t1,t2; --echo # @@ -576,6 +589,8 @@ INSERT INTO t1 VALUES (1,1,1,1,1,1), (2,2,2,2,2,2), (3,3,3,3,3,3), (7,7,7,7,7,7), (8,8,8,8,8,8), (9,9,9,9,9,9), (11,11,11,11,11,11); +ANALYZE TABLE t1; + --query_vertical EXPLAIN SELECT COUNT(*) FROM t1 DROP TABLE t1; @@ -594,36 +609,6 @@ ALTER TABLE t1 DROP INDEX k, ADD UNIQUE INDEX k (a,b); DROP TABLE t1; ---echo # ---echo # Bug #53334: wrong result for outer join with impossible ON condition ---echo # (see the same test case for MyISAM in join.test) ---echo # - -create table t1 (id int primary key); -create table t2 (id int); - -insert into t1 values (75); -insert into t1 values (79); -insert into t1 values (78); -insert into t1 values (77); -replace into t1 values (76); -replace into t1 values (76); -insert into t1 values (104); -insert into t1 values (103); -insert into t1 values (102); -insert into t1 values (101); -insert into t1 values (105); -insert into t1 values (106); -insert into t1 values (107); - -insert into t2 values (107),(75),(1000); - -select t1.id,t2.id from t2 left join t1 on t1.id>=74 and t1.id<=0 - where t2.id=75 and t1.id is null; -explain select t1.id,t2.id from t2 left join t1 on t1.id>=74 and t1.id<=0 - where t2.id=75 and t1.id is null; - -drop table t1,t2; --echo # --echo # Bug #47453: InnoDB incorrectly changes TIMESTAMP columns when @@ -635,7 +620,7 @@ CREATE TABLE t2 (a INT, b INT, c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB; ---echo set up our data elements +--echo # set up our data elements INSERT INTO t1 (d) VALUES (1); INSERT INTO t2 (a,b) VALUES (1,1); SELECT SECOND(c) INTO @bug47453 FROM t2; @@ -648,7 +633,7 @@ SELECT SLEEP(1); UPDATE t1 JOIN t2 ON d=a SET b=1 WHERE a=1; ---echo #should be 0 +--echo # should be 0 SELECT SECOND(c)-@bug47453 FROM t1 JOIN t2 ON d=a; DROP TABLE t1, t2; @@ -728,6 +713,10 @@ CREATE TABLE t1 ( LOAD DATA INFILE '../../std_data/intersect-bug50389.tsv' INTO TABLE t1; +-- disable_result_log +ANALYZE TABLE t1; +-- enable_result_log + SELECT * FROM t1 WHERE f1 IN (3305028,3353871,3772880,3346860,4228206,3336022, 3470988,3305175,3329875,3817277,3856380,3796193, @@ -754,7 +743,7 @@ CREATE TABLE t1 ( PRIMARY KEY (f1), UNIQUE KEY (f2, f3), KEY (f4) -) ENGINE=InnoDB; +) ENGINE=InnoDB STATS_PERSISTENT=0; INSERT INTO t1 VALUES (1,1,991,1), (2,1,992,1), (3,1,993,1), (4,1,994,1), (5,1,995,1), @@ -786,64 +775,11 @@ UNLOCK TABLES; DROP TABLE t1; --echo # ---echo # Bug#55826: create table .. select crashes with when KILL_BAD_DATA ---echo # is returned ---echo # -CREATE TABLE t1(a INT) ENGINE=innodb; -INSERT INTO t1 VALUES (0); -SET SQL_MODE='STRICT_ALL_TABLES'; ---error ER_TRUNCATED_WRONG_VALUE -CREATE TABLE t2 - SELECT LEAST((SELECT '' FROM t1),NOW()) FROM `t1`; -DROP TABLE t1; -SET SQL_MODE=DEFAULT; - - - ---echo # ---echo # Bug#55580: segfault in read_view_sees_trx_id ---echo # -CREATE TABLE t1 (a INT) ENGINE=Innodb; -CREATE TABLE t2 (a INT) ENGINE=Innodb; -INSERT INTO t1 VALUES (1),(2); -INSERT INTO t2 VALUES (1),(2); - -connect (con1,localhost,root,,test); -connect (con2,localhost,root,,test); - -connection con1; -START TRANSACTION; -SELECT * FROM t2 LOCK IN SHARE MODE; - -connection con2; -START TRANSACTION; -SELECT * FROM t1 LOCK IN SHARE MODE; - -connection con1; -let $conn_id= `SELECT CONNECTION_ID()`; ---send SELECT * FROM t1 FOR UPDATE - -connection con2; -let $wait_timeout= 2; -let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST -WHERE ID=$conn_id AND STATE='Sending data'; ---source include/wait_condition.inc ---echo # should not crash ---error ER_LOCK_DEADLOCK -SELECT * FROM t1 GROUP BY (SELECT a FROM t2 LIMIT 1 FOR UPDATE) + t1.a; - -connection default; -disconnect con1; -disconnect con2; - -DROP TABLE t1,t2; - ---echo # --echo # Bug#55656: mysqldump can be slower after bug #39653 fix --echo # CREATE TABLE t1 (a INT , b INT, c INT, d INT, - KEY (b), PRIMARY KEY (a,b)) ENGINE=INNODB; + KEY (b), PRIMARY KEY (a,b)) ENGINE=INNODB STATS_PERSISTENT=0; INSERT INTO t1 VALUES (1,1,1,1), (2,2,2,2), (3,3,3,3); --query_vertical EXPLAIN SELECT COUNT(*) FROM t1 @@ -862,63 +798,6 @@ CREATE INDEX b ON t1(a,b,c,d); DROP TABLE t1; --echo # ---echo # Bug#56862 Execution of a query that uses index merge returns a wrong result ---echo # - -CREATE TABLE t1 ( - pk int NOT NULL AUTO_INCREMENT PRIMARY KEY, - a int, - b int, - INDEX idx(a)) -ENGINE=INNODB; - -INSERT INTO t1(a,b) VALUES - (11, 1100), (2, 200), (1, 100), (14, 1400), (5, 500), - (3, 300), (17, 1700), (4, 400), (12, 1200), (8, 800), - (6, 600), (18, 1800), (9, 900), (10, 1000), (7, 700), - (13, 1300), (15, 1500), (19, 1900), (16, 1600), (20, 2000); -INSERT INTO t1(a,b) SELECT a+20, b+2000 FROM t1; -INSERT INTO t1(a,b) SELECT a+40, b+4000 FROM t1; -INSERT INTO t1(a,b) SELECT a+80, b+8000 FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1 VALUES (1000000, 0, 0); - -SET SESSION sort_buffer_size = 1024*36; - -EXPLAIN -SELECT COUNT(*) FROM - (SELECT * FROM t1 FORCE INDEX (idx,PRIMARY) - WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t; - -SELECT COUNT(*) FROM - (SELECT * FROM t1 FORCE INDEX (idx,PRIMARY) - WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t; - -SET SESSION sort_buffer_size = DEFAULT; - -DROP TABLE t1; - ---echo # ---echo # ALTER TABLE IGNORE didn't ignore duplicates for unique add index ---echo # - -create table t1 (a int primary key, b int) engine = innodb; -insert into t1 values (1,1),(2,1); -alter ignore table t1 add unique `main` (b); -select * from t1; -drop table t1; - ---echo End of 5.1 tests ---echo # - ---echo # --echo # Bug#55826: create table .. select crashes with when KILL_BAD_DATA --echo # is returned --echo # @@ -933,49 +812,8 @@ DROP TABLE t1; SET SQL_MODE=DEFAULT; --echo # ---echo # Bug#56862 Execution of a query that uses index merge returns a wrong result +--echo # Bug#56862 Moved to innodb_16k.test --echo # - -CREATE TABLE t1 ( - pk int NOT NULL AUTO_INCREMENT PRIMARY KEY, - a int, - b int, - INDEX idx(a)) -ENGINE=INNODB; - -INSERT INTO t1(a,b) VALUES - (11, 1100), (2, 200), (1, 100), (14, 1400), (5, 500), - (3, 300), (17, 1700), (4, 400), (12, 1200), (8, 800), - (6, 600), (18, 1800), (9, 900), (10, 1000), (7, 700), - (13, 1300), (15, 1500), (19, 1900), (16, 1600), (20, 2000); -INSERT INTO t1(a,b) SELECT a+20, b+2000 FROM t1; -INSERT INTO t1(a,b) SELECT a+40, b+4000 FROM t1; -INSERT INTO t1(a,b) SELECT a+80, b+8000 FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1(a,b) SELECT a,b FROM t1; -INSERT INTO t1 VALUES (1000000, 0, 0); - -SET SESSION sort_buffer_size = 1024*36; - -EXPLAIN -SELECT COUNT(*) FROM - (SELECT * FROM t1 FORCE INDEX (idx,PRIMARY) - WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t; - -SELECT COUNT(*) FROM - (SELECT * FROM t1 FORCE INDEX (idx,PRIMARY) - WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t; - -SET SESSION sort_buffer_size = DEFAULT; - -DROP TABLE t1; - --echo # --echo # Test for bug #39932 "create table fails if column for FK is in different --echo # case than in corr index". @@ -984,122 +822,15 @@ DROP TABLE t1; drop tables if exists t1, t2; --enable_warnings create table t1 (pk int primary key) engine=InnoDB; ---echo # Even although the below statement uses uppercased field names in ---echo # foreign key definition it still should be able to find explicitly ---echo # created supporting index. So it should succeed and should not ---echo # create any additional supporting indexes. +# Even although the below statement uses uppercased field names in +# foreign key definition it still should be able to find explicitly +# created supporting index. So it should succeed and should not +# create any additional supporting indexes. create table t2 (fk int, key x (fk), constraint x foreign key (FK) references t1 (PK)) engine=InnoDB; show create table t2; drop table t2, t1; ---echo # ---echo # Bug #663818: wrong result when BNLH is used ---echo # - -CREATE TABLE t1(pk int NOT NULL PRIMARY KEY) ENGINE=InnoDB; -INSERT INTO t1 VALUES - (1), (2), (11), (12), (13), (14), - (15), (16), (17), (18), (19); -CREATE TABLE t2(pk int NOT NULL PRIMARY KEY) ENGINE=InnoDB; -INSERT INTO t2 VALUES - (1), (10), (11), (12), (13), (14), - (15), (16), (17), (18), (19), (20), (21); - -SET SESSION join_buffer_size=10000; - -SET SESSION join_cache_level=3; -EXPLAIN -SELECT t1.pk FROM t1,t2 - WHERE t1.pk = t2.pk AND t2.pk <> 8; -SELECT t1.pk FROM t1,t2 - WHERE t1.pk = t2.pk AND t2.pk <> 8; - -SET SESSION join_cache_level=1; -EXPLAIN -SELECT t1.pk FROM t1,t2 - WHERE t1.pk = t2.pk AND t2.pk <> 8; -SELECT t1.pk FROM t1,t2 - WHERE t1.pk = t2.pk AND t2.pk <> 8; - -DROP TABLE t1,t2; - -SET SESSION join_cache_level=DEFAULT; -SET SESSION join_buffer_size=DEFAULT; - ---echo # ---echo # Bug#668644: HAVING + ORDER BY ---echo # - -CREATE TABLE t1 ( - pk int NOT NULL PRIMARY KEY, i int DEFAULT NULL, - INDEX idx (i) -) ENGINE=INNODB; -INSERT INTO t1 VALUES - (6,-1636630528),(2,-1097924608),(1,6),(3,6),(4,1148715008),(5,1541734400); - -CREATE TABLE t2 ( - i int DEFAULT NULL, - pk int NOT NULL PRIMARY KEY, - INDEX idx (i) -) ENGINE= INNODB; -INSERT INTO t2 VALUES - (-1993998336,20),(-1036582912,1),(-733413376,5),(-538247168,16), - (-514260992,4),(-249561088,9),(1,2),(1,6),(2,10),(2,19),(4,17), - (5,14),(5,15),(6,8),(7,13),(8,18),(9,11),(9,12),(257425408,7), - (576061440,3); - -EXPLAIN -SELECT t1 .i AS f FROM t1, t2 - WHERE t2.i = t1.pk AND t1.pk BETWEEN 0 AND 224 - HAVING f > 7 - ORDER BY f; -SELECT t1 .i AS f FROM t1, t2 - WHERE t2.i = t1.pk AND t1.pk BETWEEN 0 AND 224 - HAVING f > 7 - ORDER BY f; - -DROP TABLE t1, t2; - ---echo # ---echo # Test for bug #56619 - Assertion failed during ---echo # ALTER TABLE RENAME, DISABLE KEYS ---echo # - ---disable_warnings -DROP TABLE IF EXISTS t1, t2; ---enable_warnings -CREATE TABLE t1 (a INT, INDEX(a)) engine=innodb; ---disable_warnings -ALTER TABLE t1 RENAME TO t2, DISABLE KEYS; -DROP TABLE IF EXISTS t1, t2; ---enable_warnings - ---echo # ---echo # Bug#702322: HAVING with two ANDed predicates + ORDER BY ---echo # - -CREATE TABLE t1 (pk int PRIMARY KEY, a int, KEY (a)) ENGINE=InnoDB; -CREATE TABLE t2 (a int, KEY (a)) ENGINE=InnoDB; - -INSERT INTO t1 VALUES - (18,0),(9,10),(8,11),(2,15),(7,19),(1,20); - -SET SESSION join_cache_level = 0; - -# vanilla InnoDB doesn't do ICP ---replace_result "Using where" "Using index condition" -EXPLAIN -SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.pk = t2.a - WHERE t1.pk >= 6 HAVING t1.a<> 0 AND t1.a <> 11 - ORDER BY t1.a; -SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.pk = t2.a - WHERE t1.pk >= 6 HAVING t1.a<> 0 AND t1.a <> 11 - ORDER BY t1.a; - -DROP TABLE t1,t2; - ---echo End of 5.3 tests --echo # --echo # Test for bug #11762012 - "54553: INNODB ASSERTS IN HA_INNOBASE:: @@ -1120,7 +851,41 @@ UPDATE t1 SET c = 5; UNLOCK TABLES; DROP TEMPORARY TABLE t1; ---echo End of 5.1 tests +--echo # End of 5.1 tests + + +--echo # +--echo # Bug#49604 "6.0 processing compound WHERE clause incorrectly +--echo # with Innodb - extra rows" +--echo # + +CREATE TABLE t1 ( + c1 INT NOT NULL, + c2 INT, + PRIMARY KEY (c1), + KEY k1 (c2) +) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (12,1); +INSERT INTO t1 VALUES (15,1); +INSERT INTO t1 VALUES (16,1); +INSERT INTO t1 VALUES (22,1); +INSERT INTO t1 VALUES (20,2); + +CREATE TABLE t2 ( + c1 INT NOT NULL, + c2 INT, + PRIMARY KEY (c1) +) ENGINE=InnoDB; + +INSERT INTO t2 VALUES (1,2); +INSERT INTO t2 VALUES (2,9); + +SELECT STRAIGHT_JOIN t2.c2, t1.c2, t2.c1 +FROM t1 JOIN t2 ON t1.c2 = t2.c1 +WHERE t2.c1 IN (2, 1, 6) OR t2.c1 NOT IN (1); + +DROP TABLE t1, t2; --echo # @@ -1160,12 +925,64 @@ connection default; COMMIT; DROP TABLE t1; DROP FUNCTION f1; +--echo # +--echo # Bug#42744: Crash when using a join buffer to join a table with a blob +--echo # column and an additional column used for duplicate elimination. +--echo # + +CREATE TABLE t1 (a tinyblob) ENGINE=InnoDB; +CREATE TABLE t2 (a int PRIMARY KEY, b tinyblob) ENGINE=InnoDB; +INSERT INTO t1 VALUES ('1'), (NULL); +INSERT INTO t2 VALUES (1, '1'); + +EXPLAIN +SELECT t2.b FROM t1,t2 WHERE t1.a IN (SELECT 1 FROM t2); + +SELECT t2.b FROM t1,t2 WHERE t1.a IN (SELECT 1 FROM t2); + +DROP TABLE t1,t2; + +--echo # +--echo # Bug#48093: 6.0 Server not processing equivalent IN clauses properly +--echo # with Innodb tables +--echo # + +CREATE TABLE t1 ( + i int(11) DEFAULT NULL, + v1 varchar(1) DEFAULT NULL, + v2 varchar(20) DEFAULT NULL, + KEY i (i), + KEY v (v1,i) +) ENGINE=innodb; + +INSERT INTO t1 VALUES (1,'f','no'); +INSERT INTO t1 VALUES (2,'u','yes-u'); +INSERT INTO t1 VALUES (2,'h','yes-h'); +INSERT INTO t1 VALUES (3,'d','no'); + +--echo +SELECT v2 +FROM t1 +WHERE v1 IN ('f', 'd', 'h', 'u' ) AND i = 2; + +--echo +--echo # Should not use index_merge +EXPLAIN +SELECT v2 +FROM t1 +WHERE v1 IN ('f', 'd', 'h', 'u' ) AND i = 2; + +DROP TABLE t1; --echo # --echo # Bug#54606 innodb fast alter table + pack_keys=0 --echo # prevents adding new indexes --echo # +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + CREATE TABLE t1 (a INT, b CHAR(9), c INT, key(b)) ENGINE=InnoDB PACK_KEYS=0; @@ -1174,4 +991,38 @@ CREATE INDEX c on t1 (c); DROP TABLE t1; ---echo End of 5.1 tests + +--echo # +--echo # Additional coverage for refactoring which is made as part +--echo # of fix for Bug#27480 "Extend CREATE TEMPORARY TABLES privilege +--echo # to allow temp table operations". +--echo # +--echo # Check that OPTIMIZE table works for temporary InnoDB tables. +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +CREATE TEMPORARY TABLE t1 (a INT) ENGINE=InnoDB; +OPTIMIZE TABLE t1; +DROP TABLE t1; + + +--echo # +--echo # Bug#11762345 54927: DROPPING AND ADDING AN INDEX IN ONE +--echo # COMMAND CAN FAIL IN INNODB PLUGIN 1.0 +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (id int, a int, b int, PRIMARY KEY (id), + INDEX a (a)) ENGINE=innodb; + +ALTER TABLE t1 DROP INDEX a, ADD INDEX a (b, a); +# This used to fail +ALTER TABLE t1 DROP INDEX a, ADD INDEX (a, b); + +DROP TABLE t1; + + +--echo End of 6.0 tests |