1
0
mirror of https://github.com/MariaDB/server.git synced 2025-05-28 13:01:41 +03:00
mariadb/mysql-test/t/alter_table_trans.test
Sergei Golubchik 2ff76f6750 MDEV-5406 add index to an innodb table with a uniqueness violation crashes mysqld
After table->file->add_index() in mysql_alter_table() the table in the engine
has the intermediate temporary structure, it's neither the original nor the
final table structure (it'll be final after successful table->file->drop_index()
call). So, when add_index() fails with a unique key violation, we cannot simply
get the failed key number and easily map it to the key name and key structure via
table->key_info[key_no].

For now we'll create this "intermediate temporary structure", emulating InnoDB
internal rules.

This bug and the fix will go away in 10.0 that uses completely different online
alter table code.

mysql-test/t/alter_table_trans.test:
  mdev:5406
2014-01-23 11:04:59 +01:00

36 lines
806 B
Plaintext

#
# Test of alter table with transactional tables
#
--source include/have_innodb.inc
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
#
# This test caused a crash in wait_if_global_read_lock()
#
CREATE TABLE t1 (a INT, INDEX(a)) engine=innodb;
ALTER TABLE t1 RENAME TO t2, DISABLE KEYS;
DROP TABLE t2;
#
# MDEV-5406 add index to an innodb table with a uniqueness violation crashes mysqld
#
CREATE TABLE t1 (
col4 text NOT NULL,
col2 int(11) NOT NULL DEFAULT '0',
col3 int(11) DEFAULT NULL,
extra int(11) DEFAULT NULL,
KEY idx (col4(10))
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
insert t1 values (repeat('1', 8193),3,1,1);
insert t1 values (repeat('3', 8193),3,1,1);
--error ER_DUP_ENTRY
ALTER TABLE t1 ADD PRIMARY KEY (col4(10)) , ADD UNIQUE KEY uidx (col3);
DROP TABLE t1;