MDEV-14642 Assertion 'table->s->db_create_options == part_table->s->db_create_options' failed in compare_table_with_partition
When trying to execute ALTER TABLE EXCHANGE PARTITION with different definitions, assertion table->s->db_create_options == part_table->s->db_create_options failed in compare_table_with_partition(). However, this execution should not be allowed since executing 'exchange partition' requires the identical structure of the two tables. To fix the problem, I deleted the assertion code and added code that returns an error that indicates tables have different definitions. Reviewed By: Nayuta Yanagisawa
This commit is contained in:
parent
c9b5a05341
commit
8881c0100e
@ -1308,3 +1308,16 @@ ALTER TABLE t2 REMOVE PARTITIONING;
|
||||
ALTER TABLE t1 EXCHANGE PARTITION pm WITH TABLE t2;
|
||||
ERROR HY000: Non matching attribute 'TABLESPACE' between partition and table
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# MDEV-14642 Assertion `table->s->db_create_options == part_table->s->db_create_options' failed in compare_table_with_partition
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ROW_FORMAT=DYNAMIC PARTITION BY KEY(a) PARTITIONS 2;
|
||||
CREATE TABLE t2 (a INT) ;
|
||||
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
||||
ERROR HY000: Tables have different definitions
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (a INT, PRIMARY KEY(a)) ENGINE=InnoDB PARTITION BY KEY(a) PARTITIONS 2;
|
||||
CREATE TABLE t2 (a INT, PRIMARY KEY(a)) CHECKSUM=1, ENGINE=InnoDB;
|
||||
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;
|
||||
ERROR HY000: Tables have different definitions
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -536,3 +536,21 @@ ALTER TABLE t2 REMOVE PARTITIONING;
|
||||
ALTER TABLE t1 EXCHANGE PARTITION pm WITH TABLE t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-14642 Assertion `table->s->db_create_options == part_table->s->db_create_options' failed in compare_table_with_partition
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT) ROW_FORMAT=DYNAMIC PARTITION BY KEY(a) PARTITIONS 2;
|
||||
CREATE TABLE t2 (a INT) ;
|
||||
--error ER_TABLES_DIFFERENT_METADATA
|
||||
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t2;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
CREATE TABLE t1 (a INT, PRIMARY KEY(a)) ENGINE=InnoDB PARTITION BY KEY(a) PARTITIONS 2;
|
||||
CREATE TABLE t2 (a INT, PRIMARY KEY(a)) CHECKSUM=1, ENGINE=InnoDB;
|
||||
--error ER_TABLES_DIFFERENT_METADATA
|
||||
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -249,8 +249,13 @@ static bool compare_table_with_partition(THD *thd, TABLE *table,
|
||||
my_error(ER_TABLES_DIFFERENT_METADATA, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
DBUG_ASSERT(table->s->db_create_options ==
|
||||
part_table->s->db_create_options);
|
||||
|
||||
if (table->s->db_create_options != part_table->s->db_create_options)
|
||||
{
|
||||
my_error(ER_TABLES_DIFFERENT_METADATA, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
DBUG_ASSERT(table->s->db_options_in_use ==
|
||||
part_table->s->db_options_in_use);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user