mirror of
https://github.com/MariaDB/server.git
synced 2025-07-21 21:22:27 +03:00
The statement ALTER TABLE...DISCARD TABLESPACE is problematic, because its designed purpose is to break the referential integrity of the data dictionary and make a table point to nowhere. ha_innobase::commit_inplace_alter_table(): Check whether the table has been discarded. (This is a bit late to check it, right before committing the change.) Previously, we performed this check only in a specific branch of the function commit_set_autoinc(). Note: We intentionally allow non-rebuilding ALTER TABLE even if the tablespace has been discarded, to remain compatible with MySQL. (See the various tests with "wl5522" in the name, such as innodb.innodb-wl5522.) The test case would crash starting with 10.3 only, but it does not hurt to minimize the code and test difference between 10.2 and 10.3.
73 lines
2.5 KiB
Plaintext
73 lines
2.5 KiB
Plaintext
set @@sql_mode=strict_trans_tables;
|
|
create table t1(a text not null) row_format=dynamic engine=innodb;
|
|
create index idx1 on t1(a(3073));
|
|
Warnings:
|
|
Note 1071 Specified key was too long; max key length is 3072 bytes
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` text NOT NULL,
|
|
KEY `idx1` (`a`(3072))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
|
drop table t1;
|
|
set @@sql_mode=default;
|
|
create table t1 (
|
|
id1 int(11) not null auto_increment,
|
|
id2 varchar(30) not null,
|
|
id3 datetime not null default current_timestamp,
|
|
primary key (id1),
|
|
unique key unique_id2 (id2)
|
|
) engine=innodb;
|
|
alter table t1 change column id2 id4 varchar(100) not null;
|
|
select * from t1 where id4 like 'a';
|
|
id1 id4 id3
|
|
drop table t1;
|
|
#
|
|
# MDEV-17725 Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed in Diagnostics_area::set_ok_status upon ALTER failing due to error from engine
|
|
#
|
|
SET sql_mode=STRICT_ALL_TABLES;
|
|
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
|
ALTER TABLE t1 ORDER BY a;
|
|
Warnings:
|
|
Warning 1105 ORDER BY ignored as there is a user-defined clustered index in the table 't1'
|
|
DROP TABLE t1;
|
|
SET sql_mode='';
|
|
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
|
ALTER TABLE t1 ORDER BY a;
|
|
Warnings:
|
|
Warning 1105 ORDER BY ignored as there is a user-defined clustered index in the table 't1'
|
|
DROP TABLE t1;
|
|
SET sql_mode=DEFAULT;
|
|
#
|
|
# MDEV-18775 Server crashes in dict_table_t::instant_column
|
|
# upon ADD COLUMN
|
|
#
|
|
CREATE TABLE tx (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
|
CREATE TABLE t1 (pk INT, a INT, PRIMARY KEY (pk), KEY (a), FOREIGN KEY (a) REFERENCES tx (pk)) ENGINE=InnoDB;
|
|
SET FOREIGN_KEY_CHECKS=OFF;
|
|
ALTER TABLE t1 DROP a;
|
|
ERROR HY000: Cannot drop column 'a': needed in a foreign key constraint 'test/t1_ibfk_1'
|
|
SET FOREIGN_KEY_CHECKS=ON;
|
|
ALTER TABLE t1 ADD b INT;
|
|
ALTER TABLE t1 DROP a;
|
|
ERROR HY000: Cannot drop index 'a': needed in a foreign key constraint
|
|
ALTER TABLE t1 ADD c INT;
|
|
DROP TABLE t1, tx;
|
|
#
|
|
# MDEV-14119 Assertion cmp_rec_rec() on ALTER TABLE
|
|
#
|
|
CREATE TABLE t1(a INT NOT NULL UNIQUE) ENGINE=InnoDB;
|
|
INSERT INTO t1 SELECT * FROM seq_1_to_128;
|
|
ALTER TABLE t1 ADD b TINYINT AUTO_INCREMENT PRIMARY KEY, DROP KEY a;
|
|
DROP TABLE t1;
|
|
#
|
|
# MDEV-22939 Server crashes in row_make_new_pathname()
|
|
#
|
|
CREATE TABLE t (a INT) ENGINE=INNODB;
|
|
ALTER TABLE t DISCARD TABLESPACE;
|
|
ALTER TABLE t ENGINE INNODB;
|
|
ERROR HY000: Tablespace has been discarded for table `t`
|
|
ALTER TABLE t FORCE;
|
|
ERROR HY000: Tablespace has been discarded for table `t`
|
|
DROP TABLE t;
|