mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
9fc67c6bf3
commit_try_rebuild(): Invoke trx_t::drop_table_statistics()
with the correct (original) name of the table.
This fixes a regression that was introduced in
commit 1bd681c8b3
(MDEV-25506 part 3).
233 lines
6.1 KiB
Text
233 lines
6.1 KiB
Text
--source include/have_innodb.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_sequence.inc
|
|
|
|
delimiter |;
|
|
create function get_index_id(tbl_id int, index_name char(100))
|
|
returns int
|
|
begin
|
|
declare res int;
|
|
select index_id into res from information_schema.innodb_sys_indexes where
|
|
name=index_name and table_id = tbl_id;
|
|
return res;
|
|
end|
|
|
|
|
delimiter ;|
|
|
|
|
create table t (
|
|
pk int primary key,
|
|
a int,
|
|
b int,
|
|
c int,
|
|
unique index a_key (a),
|
|
key c_key (c)
|
|
) engine=innodb stats_persistent=1;
|
|
|
|
insert into t values (1, 1, 1, 1);
|
|
|
|
set @table_id = (select table_id from information_schema.innodb_sys_tables where name='test/t');
|
|
|
|
set @a_key_id = get_index_id(@table_id, 'a_key');
|
|
set @c_key_id = get_index_id(@table_id, 'c_key');
|
|
set @primary_id = get_index_id(@table_id, 'primary');
|
|
|
|
select distinct(index_name) from mysql.innodb_index_stats where table_name = 't';
|
|
alter table t
|
|
drop index a_key,
|
|
add unique index a_key_strikes_back (a);
|
|
select distinct(index_name) from mysql.innodb_index_stats where table_name = 't';
|
|
|
|
check table t;
|
|
select @a_key_id = get_index_id(@table_id, 'a_key_strikes_back'),
|
|
@c_key_id = get_index_id(@table_id, 'c_key'),
|
|
@primary_id = get_index_id(@table_id, 'primary');
|
|
|
|
set @a_key_strikes_back_id = get_index_id(@table_id, 'a_key_strikes_back');
|
|
set @c_key_id = get_index_id(@table_id, 'c_key');
|
|
set @primary_id = get_index_id(@table_id, 'primary');
|
|
|
|
alter table t
|
|
drop index a_key_strikes_back,
|
|
add unique index a_key_returns (a),
|
|
drop primary key,
|
|
add primary key (pk),
|
|
add unique index b_key (b);
|
|
|
|
check table t;
|
|
select @a_key_strikes_back_id = get_index_id(@table_id, 'a_key_returns'),
|
|
@c_key_id = get_index_id(@table_id, 'c_key'),
|
|
@primary_id = get_index_id(@table_id, 'primary');
|
|
|
|
set @a_key_returns_id = get_index_id(@table_id, 'a_key_returns');
|
|
set @b_key_id = get_index_id(@table_id, 'b_key');
|
|
set @c_key_id = get_index_id(@table_id, 'c_key');
|
|
set @primary_id = get_index_id(@table_id, 'primary');
|
|
|
|
alter table t
|
|
drop key c_key,
|
|
add key c_key2 (c);
|
|
|
|
check table t;
|
|
select @a_key_returns_id = get_index_id(@table_id, 'a_key_returns'),
|
|
@b_key_id = get_index_id(@table_id, 'b_key'),
|
|
@c_key_id = get_index_id(@table_id, 'c_key2'),
|
|
@primary_id = get_index_id(@table_id, 'primary');
|
|
|
|
drop table t;
|
|
|
|
create table errors (
|
|
a int,
|
|
unique key a_key (a),
|
|
b int
|
|
) engine=innodb;
|
|
|
|
--error ER_CANT_DROP_FIELD_OR_KEY
|
|
alter table errors
|
|
drop key a_key,
|
|
drop key a_key,
|
|
add unique key a_key2 (a);
|
|
|
|
--error ER_CANT_DROP_FIELD_OR_KEY
|
|
alter table errors
|
|
drop key a_key,
|
|
drop key a_key2,
|
|
add unique key a_key2 (a);
|
|
|
|
--error ER_CANT_DROP_FIELD_OR_KEY
|
|
alter table errors
|
|
add key b_key (b),
|
|
drop key b_key,
|
|
add key bb_key (b);
|
|
|
|
--error ER_CANT_DROP_FIELD_OR_KEY
|
|
alter table errors
|
|
drop key a_key,
|
|
add key a_key2 (a),
|
|
drop key a_key,
|
|
add key a_key2 (a);
|
|
|
|
drop table errors;
|
|
|
|
--disable_query_log
|
|
call mtr.add_suppression("Flagged corruption of `a_key` in table `test`.`corrupted` in dict_set_index_corrupted");
|
|
--enable_query_log
|
|
|
|
create table corrupted (
|
|
a int,
|
|
key a_key (a)
|
|
) engine=innodb;
|
|
|
|
insert into corrupted values (1);
|
|
|
|
select * from corrupted;
|
|
|
|
SET @save_dbug = @@SESSION.debug_dbug;
|
|
SET debug_dbug = '+d,dict_set_index_corrupted';
|
|
check table corrupted;
|
|
SET debug_dbug = @save_dbug;
|
|
|
|
--error ER_INDEX_CORRUPT
|
|
select * from corrupted;
|
|
|
|
--error ER_INDEX_CORRUPT
|
|
alter table corrupted
|
|
drop key a_key,
|
|
add key a_key2 (a);
|
|
|
|
alter table corrupted
|
|
drop key a_key;
|
|
|
|
select * from corrupted;
|
|
|
|
check table corrupted;
|
|
|
|
drop table corrupted;
|
|
|
|
create table t (
|
|
a int,
|
|
unique key a_key (a)
|
|
) engine=innodb stats_persistent=1;
|
|
|
|
SET @save_dbug = @@SESSION.debug_dbug;
|
|
SET debug_dbug = '+d,ib_rename_index_fail1';
|
|
-- error ER_LOCK_DEADLOCK
|
|
alter table t
|
|
drop key a_key,
|
|
add unique key a_key2 (a),
|
|
algorithm=instant;
|
|
SET debug_dbug = @save_dbug;
|
|
|
|
--error ER_WRONG_NAME_FOR_INDEX
|
|
alter table t
|
|
drop key a_key,
|
|
add unique key `GEN_CLUST_INDEX` (a),
|
|
algorithm=instant;
|
|
|
|
show create table t;
|
|
|
|
drop table t;
|
|
|
|
|
|
create table rename_column_and_index (
|
|
a int,
|
|
unique index a_key(a)
|
|
) engine=innodb;
|
|
|
|
insert into rename_column_and_index values (1), (3);
|
|
|
|
alter table rename_column_and_index
|
|
change a aa int,
|
|
drop key a_key,
|
|
add unique key aa_key(aa),
|
|
algorithm=instant;
|
|
|
|
show create table rename_column_and_index;
|
|
check table rename_column_and_index;
|
|
drop table rename_column_and_index;
|
|
|
|
|
|
--echo #
|
|
--echo # MDEV-19189: ASAN memcpy-param-overlap in fill_alter_inplace_info upon adding indexes
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 INT, f2 INT, f3 INT);
|
|
ALTER TABLE t1 ADD FOREIGN KEY f (f2) REFERENCES xx(f2);
|
|
ALTER TABLE t1 ADD FOREIGN KEY (f2) REFERENCES t1(f2), ADD KEY (f3), ADD KEY (f1);
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-21669 InnoDB: Table ... contains <n> indexes inside InnoDB, which is different from the number of indexes <n> defined in the MariaDB
|
|
--echo #
|
|
CREATE TABLE t1 (col_int INTEGER, col_char CHAR(20), col_varchar VARCHAR(500)) ENGINE=InnoDB;
|
|
SET @table_id = (SELECT table_id FROM information_schema.innodb_sys_tables WHERE name='test/t1');
|
|
ALTER TABLE t1 ADD KEY idx3 (col_varchar(9)), ADD KEY idX2 (col_char(9));
|
|
SET @idx3_key_id = get_index_id(@table_id, 'iDx3');
|
|
ALTER TABLE t1 DROP KEY iDx3, ADD KEY Idx3 (col_varchar(9));
|
|
SELECT @idx3_key_id = get_index_id(@table_id, 'Idx3');
|
|
CHECK TABLE t1 EXTENDED ;
|
|
DROP TABLE t1;
|
|
|
|
DROP FUNCTION get_index_id;
|
|
|
|
--echo #
|
|
--echo # MDEV-23356 InnoDB: Failing assertion: field->col->mtype == type, crash or ASAN failures in row_sel_convert_mysql_key_to_innobase, InnoDB indexes are inconsistent after INDEX changes
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT, b INT, c CHAR(8),
|
|
KEY ind1(c), KEY ind2(b)) ENGINE=InnoDB STATS_PERSISTENT=1;
|
|
|
|
INSERT INTO t1 SELECT 1, 1, 'a' FROM seq_1_to_100;
|
|
|
|
SELECT table_name, index_name, stat_name FROM mysql.innodb_index_stats;
|
|
|
|
ALTER TABLE t1 DROP INDEX ind2, ADD INDEX ind3(b),
|
|
DROP INDEX ind1, ADD INDEX ind2(c);
|
|
|
|
SELECT table_name, index_name, stat_name FROM mysql.innodb_index_stats;
|
|
|
|
ALTER TABLE t1 DROP b, FORCE;
|
|
SELECT table_name, index_name, stat_name FROM mysql.innodb_index_stats;
|
|
|
|
UPDATE t1 SET a = 1 WHERE c = 'foo';
|
|
DROP TABLE t1;
|
|
SELECT table_name, index_name, stat_name FROM mysql.innodb_index_stats;
|