From 35533dc0b381ddbc665531d39ce3d3e9a8af2e88 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Thu, 27 Jul 2023 14:21:35 +0300 Subject: [PATCH] MDEV-29727 ALTER and CREATE with default partitioning differently react to SQL_MODE => unusable SHOW CREATE Use abort_on_warning dependent on strict mode over create new table like it is done for copy data and inplace alter. --- mysql-test/suite/plugins/r/audit_null_debug.result | 3 +++ mysql-test/suite/plugins/t/audit_null_debug.test | 3 +++ mysql-test/suite/versioning/r/partition.result | 10 ++++++++++ mysql-test/suite/versioning/t/partition.test | 11 +++++++++++ sql/sql_table.cc | 2 ++ 5 files changed, 29 insertions(+) diff --git a/mysql-test/suite/plugins/r/audit_null_debug.result b/mysql-test/suite/plugins/r/audit_null_debug.result index 727bd67aecf..69a1fa5a866 100644 --- a/mysql-test/suite/plugins/r/audit_null_debug.result +++ b/mysql-test/suite/plugins/r/audit_null_debug.result @@ -1,6 +1,9 @@ +set @old_sql_mode= @@sql_mode; +set @@sql_mode= ''; alter table mysql.plugin engine=myisam; Warnings: Warning 1478 Table storage engine 'MyISAM' does not support the create option 'TRANSACTIONAL=1' +set @@sql_mode= @old_sql_mode; set @old_dbug=@@debug_dbug; call mtr.add_suppression("Index for table.*mysql.plugin.MYI"); call mtr.add_suppression("Index for table 'plugin' is corrupt; try to repair it"); diff --git a/mysql-test/suite/plugins/t/audit_null_debug.test b/mysql-test/suite/plugins/t/audit_null_debug.test index 52c50f13b74..ed1a59be033 100644 --- a/mysql-test/suite/plugins/t/audit_null_debug.test +++ b/mysql-test/suite/plugins/t/audit_null_debug.test @@ -5,7 +5,10 @@ if (!$ADT_NULL_SO) { skip No NULL_AUDIT plugin; } +set @old_sql_mode= @@sql_mode; +set @@sql_mode= ''; alter table mysql.plugin engine=myisam; +set @@sql_mode= @old_sql_mode; set @old_dbug=@@debug_dbug; call mtr.add_suppression("Index for table.*mysql.plugin.MYI"); diff --git a/mysql-test/suite/versioning/r/partition.result b/mysql-test/suite/versioning/r/partition.result index b8ad7693f51..1ceb9c443a2 100644 --- a/mysql-test/suite/versioning/r/partition.result +++ b/mysql-test/suite/versioning/r/partition.result @@ -1781,6 +1781,16 @@ t1 CREATE TABLE `t1` ( PARTITION `pn` CURRENT ENGINE = DEFAULT_ENGINE) drop tables t1; # +# MDEV-29727 ALTER and CREATE with default partitioning +# differently react to SQL_MODE => unusable SHOW CREATE +# +create table t (a int) with system versioning; +alter table t partition by system_time partitions 3; +ERROR HY000: Maybe missing parameters: no rotation condition for multiple HISTORY partitions. +drop table t; +create table t (a int) with system versioning partition by system_time partitions 3; +ERROR HY000: Maybe missing parameters: no rotation condition for multiple HISTORY partitions. +# # End of 10.5 tests # set global innodb_stats_persistent= @save_persistent; diff --git a/mysql-test/suite/versioning/t/partition.test b/mysql-test/suite/versioning/t/partition.test index 151dabdbdca..a4f487aae29 100644 --- a/mysql-test/suite/versioning/t/partition.test +++ b/mysql-test/suite/versioning/t/partition.test @@ -1548,6 +1548,17 @@ show create table t1; drop tables t1; +--echo # +--echo # MDEV-29727 ALTER and CREATE with default partitioning +--echo # differently react to SQL_MODE => unusable SHOW CREATE +--echo # +create table t (a int) with system versioning; +--error WARN_VERS_PARAMETERS +alter table t partition by system_time partitions 3; +drop table t; +--error WARN_VERS_PARAMETERS +create table t (a int) with system versioning partition by system_time partitions 3; + --echo # --echo # End of 10.5 tests --echo # diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 5adf4dfd4c1..387f086484b 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -10792,6 +10792,7 @@ do_continue:; else alter_info->flags|= ALTER_INDEX_ORDER; create_info->alias= alter_ctx.table_name; + thd->abort_on_warning= !ignore && thd->is_strict_mode(); /* Partitioning: part_info is passed via thd->work_part_info */ @@ -10801,6 +10802,7 @@ do_continue:; thd->lex->create_info, create_info, alter_info, C_ALTER_TABLE_FRM_ONLY, NULL, &key_info, &key_count, &frm); + thd->abort_on_warning= false; reenable_binlog(thd); if (unlikely(error)) {