1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-35169 ALTER TABLE...IMPORT TABLESPACE does not work with INDEX DESC

Problem:
=======
- Import tablespace fails to check the index fields descending
property while matching the schema given in cfg file with the
table schema.

Fix:
===
row_quiesce_write_index_fields(): Write the descending
property of the field into field fixed length field.
Since the field fixed length uses only 10 bits,
InnoDB can use 0th bit of the field fixed length
to store the descending field property.

row_import_cfg_read_index_fields(): Read the field
descending information from field fixed length.
This commit is contained in:
Thirunarayanan Balathandayuthapani
2025-01-28 11:56:35 +05:30
parent 24c9033947
commit f6e00abda0
6 changed files with 178 additions and 47 deletions

View File

@@ -0,0 +1,67 @@
#
# MDEV-35169 ALTER TABLE...IMPORT TABLESPACE does not
# work with INDEX DESC
#
# prepare cfg for primary key with desc column
create table t1 (pk int, a int, primary key(pk desc)) engine=InnoDB;
insert into t1 values (1,10),(2,20),(3,15);
flush table t1 for export;
unlock tables;
drop table t1;
# prepare cfg for secondary index with desc column
create table t1 (pk int primary key, a int,key(a desc)) engine=InnoDB;
insert into t1 values (1,10),(2,20),(3,15);
flush table t1 for export;
unlock tables;
drop table t1;
# prepare cfg for secondary index with ascending column
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
insert into t1 values (1,10),(2,20),(3,15);
flush table t1 for export;
unlock tables;
drop table t1;
# Import desc tablespace into desc frm
# Import into table with desc primary key column
create table t1 (pk int, a int, primary key(pk desc)) engine=InnoDB;
alter table t1 discard tablespace;
alter table t1 import tablespace;
check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
# Import into table with desc secondary index
create table t1 (pk int primary key, a int, key(a desc))engine=InnoDB;
alter table t1 discard tablespace;
alter table t1 import tablespace;
check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
# Import asc tablespace into desc frm
create table t1 (pk int primary key, a int, key(a desc))engine=InnoDB;
alter table t1 discard tablespace;
alter table t1 import tablespace;
ERROR HY000: Schema mismatch (Index a field a is DESC which does not match with .cfg file)
check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check Error Tablespace has been discarded for table `t1`
test.t1 check error Corrupt
drop table t1;
# Import desc tablespace into asc frm
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
alter table t1 discard tablespace;
alter table t1 import tablespace;
ERROR HY000: Schema mismatch (Index a field a is ASC which does not match with .cfg file)
check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check Error Tablespace has been discarded for table `t1`
test.t1 check error Corrupt
drop table t1;
# Import asc tablespace into asc frm
create table t1 (pk int primary key, a int, key(a)) engine=InnoDB;
alter table t1 discard tablespace;
alter table t1 import tablespace;
check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;

View File

@@ -158,16 +158,6 @@ SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1;
CREATE TABLE t1 (c1 INT) ENGINE = Innodb;
INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_9";
FLUSH TABLES t1 FOR EXPORT;
Warnings:
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flush() failed
Warning 1811 IO Write error: (9, Bad file descriptor) t1.cfg flose() failed
UNLOCK TABLES;
SET SESSION debug_dbug=@saved_debug_dbug;
DROP TABLE t1;
CREATE TABLE t1 (c1 INT) ENGINE = Innodb;
INSERT INTO t1 VALUES (1);
SET SESSION debug_dbug="+d,ib_export_io_write_failure_10";
FLUSH TABLES t1 FOR EXPORT;
Warnings: