mirror of
https://github.com/MariaDB/server.git
synced 2025-07-20 10:24:14 +03:00
MDEV-18239 ASAN use-after-poison in process_str_arg / ... / mark_unsupported_func or unexpected ER_BAD_FIELD_ERROR upon ALTER TABLE
renaming columns in a CHECK constraint during ALTER TABLE taints the original TABLE and requires m_need_reopen=1. In this case, though, renaming was redundant, so just don't do it.
This commit is contained in:
9
mysql-test/r/check_constraint_innodb.result
Normal file
9
mysql-test/r/check_constraint_innodb.result
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
create table t1 (a int, b smallint) engine=innodb;
|
||||||
|
connect con1,localhost,root,,test;
|
||||||
|
alter table t1 add constraint check (b < 8);
|
||||||
|
alter table t1 modify column b int, algorithm=inplace;
|
||||||
|
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY
|
||||||
|
connection default;
|
||||||
|
alter table t1 add primary key (a);
|
||||||
|
drop table t1;
|
||||||
|
disconnect con1;
|
14
mysql-test/t/check_constraint_innodb.test
Normal file
14
mysql-test/t/check_constraint_innodb.test
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-18239 ASAN use-after-poison in process_str_arg / ... / mark_unsupported_func or unexpected ER_BAD_FIELD_ERROR upon ALTER TABLE
|
||||||
|
#
|
||||||
|
create table t1 (a int, b smallint) engine=innodb;
|
||||||
|
connect con1,localhost,root,,test;
|
||||||
|
alter table t1 add constraint check (b < 8);
|
||||||
|
error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON;
|
||||||
|
alter table t1 modify column b int, algorithm=inplace;
|
||||||
|
connection default;
|
||||||
|
alter table t1 add primary key (a);
|
||||||
|
drop table t1;
|
||||||
|
disconnect con1;
|
@ -8123,7 +8123,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||||||
}
|
}
|
||||||
if (!drop)
|
if (!drop)
|
||||||
{
|
{
|
||||||
check->expr->walk(&Item::rename_fields_processor, 1, &column_rename_param);
|
if (alter_info->flags & Alter_info::ALTER_RENAME_COLUMN)
|
||||||
|
{
|
||||||
|
check->expr->walk(&Item::rename_fields_processor, 1,
|
||||||
|
&column_rename_param);
|
||||||
|
table->m_needs_reopen= 1; // because new column name is on thd->mem_root
|
||||||
|
}
|
||||||
new_constraint_list.push_back(check, thd->mem_root);
|
new_constraint_list.push_back(check, thd->mem_root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user