mirror of
https://github.com/MariaDB/server.git
synced 2025-05-28 13:01:41 +03:00
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
36 lines
806 B
Plaintext
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;
|
|
|
|
|