mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-28545 MyISAM reorganize partition corrupt older table format
The ALTER related code cannot do at the same time both: - modify partitions - change column data types Explicit changing of a column data type together with a partition change is prohibited by the parter, so this is not allowed and returns a syntax error: ALTER TABLE t MODIFY ts BIGINT, DROP PARTITION p1; This fix additionally disables implicit data type upgrade (e.g. from "MariaDB 5.3 TIME" to "MySQL 5.6 TIME", or the other way around according to the current mysql56_temporal_format) in case of an ALTER modifying partitions, e.g.: ALTER TABLE t DROP PARTITION p1; In such commands now only the partition change happens, while the data types stay unchanged. One can additionally run: ALTER TABLE t FORCE; either before or after the ALTER modifying partitions to upgrade data types according to mysql56_temporal_format.
This commit is contained in:
@ -4346,6 +4346,16 @@ TABLE *select_create::create_table_from_items(THD *thd, List<Item> *items,
|
||||
alter_info->create_list.push_back(cr_field, thd->mem_root);
|
||||
}
|
||||
|
||||
/*
|
||||
Item*::type_handler() always returns pointers to
|
||||
type_handler_{time2|datetime2|timestamp2} no matter what
|
||||
the current mysql56_temporal_format says.
|
||||
Let's convert them according to mysql56_temporal_format.
|
||||
QQ: This perhaps should eventually be fixed to have Item*::type_handler()
|
||||
respect mysql56_temporal_format, and remove the upgrade from here.
|
||||
*/
|
||||
Create_field::upgrade_data_types(alter_info->create_list);
|
||||
|
||||
if (create_info->check_fields(thd, alter_info,
|
||||
create_table->table_name,
|
||||
create_table->db,
|
||||
|
Reference in New Issue
Block a user