Skip to content
/ server Public

Commit eba938f

Browse files
committed
MDEV-37275 Cannot remove default value of NOT NULL column
Run-time has semantics duplication in unireg_check, default_value and flags, so all three must be in sync before FRM creation. Special unireg_check values for temporal field types was introduced by 32b28f9 WL#1266 "Separate auto-set logic from TIMESTAMP type."
1 parent dc28140 commit eba938f

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed

mysql-test/main/alter_table.result

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3184,3 +3184,31 @@ DROP TABLE t;
31843184
#
31853185
# End of 10.7 tests
31863186
#
3187+
#
3188+
# MDEV-37275 Cannot remove default value of NOT NULL column
3189+
#
3190+
create table t1 (d time default '00:00:00');
3191+
alter table t1 alter column d drop default;
3192+
show create table t1;
3193+
Table Create Table
3194+
t1 CREATE TABLE `t1` (
3195+
`d` time DEFAULT NULL
3196+
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
3197+
create table t2 (d datetime not null default current_timestamp());
3198+
alter table t2 alter column d drop default;
3199+
show create table t2;
3200+
Table Create Table
3201+
t2 CREATE TABLE `t2` (
3202+
`d` datetime NOT NULL
3203+
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
3204+
create table t3 (d datetime not null);
3205+
alter table t3 alter column d set default current_timestamp();
3206+
show create table t3;
3207+
Table Create Table
3208+
t3 CREATE TABLE `t3` (
3209+
`d` datetime NOT NULL DEFAULT current_timestamp()
3210+
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
3211+
drop tables t1, t2, t3;
3212+
#
3213+
# End of 10.11 tests
3214+
#

mysql-test/main/alter_table.test

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2462,3 +2462,25 @@ DROP TABLE t;
24622462
--echo #
24632463
--echo # End of 10.7 tests
24642464
--echo #
2465+
2466+
--echo #
2467+
--echo # MDEV-37275 Cannot remove default value of NOT NULL column
2468+
--echo #
2469+
create table t1 (d time default '00:00:00');
2470+
alter table t1 alter column d drop default;
2471+
show create table t1;
2472+
2473+
create table t2 (d datetime not null default current_timestamp());
2474+
alter table t2 alter column d drop default;
2475+
show create table t2;
2476+
2477+
create table t3 (d datetime not null);
2478+
alter table t3 alter column d set default current_timestamp();
2479+
show create table t3;
2480+
2481+
drop tables t1, t2, t3;
2482+
2483+
--echo #
2484+
--echo # End of 10.11 tests
2485+
--echo #
2486+

sql/sql_table.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8711,6 +8711,9 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
87118711
}
87128712
else
87138713
{
8714+
if (def->default_value != alter->default_value &&
8715+
def->has_default_now_unireg_check())
8716+
def->unireg_check= Field::NONE;
87148717
if ((def->default_value= alter->default_value) ||
87158718
!(def->flags & NOT_NULL_FLAG))
87168719
def->flags&= ~NO_DEFAULT_VALUE_FLAG;

0 commit comments

Comments
 (0)