1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +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:
Alexander Barkov
2022-10-25 11:53:39 +04:00
parent 8c5d323326
commit f1bbc1cd19
6 changed files with 78 additions and 2 deletions

View File

@ -10068,6 +10068,18 @@ do_continue:;
set_table_default_charset(thd, create_info, alter_ctx.db);
/*
The ALTER related code cannot alter partitions and change column data types
at the same time. So in case of partition change statements like:
ALTER TABLE t1 DROP PARTITION p1;
we skip implicit data type upgrade (such as "MariaDB 5.3 TIME" to
"MySQL 5.6 TIME" or vice versa according to mysql56_temporal_format).
Note, one can run a separate "ALTER TABLE t1 FORCE;" statement
before or after the partition change ALTER statement to upgrade data types.
*/
if (IF_PARTITIONING(!fast_alter_partition, 1))
Create_field::upgrade_data_types(alter_info->create_list);
if (create_info->check_fields(thd, alter_info,
table_list->table_name, table_list->db) ||
create_info->fix_period_fields(thd, alter_info))