Skip to content

Commit

Permalink
MDEV-10802 TIMESTAMP NOT NULL field with explicit_defaults_for_timest…
Browse files Browse the repository at this point in the history
…amp and NO_ZERO_DATE shouldn't throw error
  • Loading branch information
Alexander Barkov committed Oct 14, 2017
1 parent 9534c04 commit 98cd0ec
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 1 deletion.
13 changes: 13 additions & 0 deletions mysql-test/suite/sys_vars/inc/explicit_defaults_for_timestamp.inc
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,16 @@ CREATE TABLE t1 (a INT);
ALTER TABLE t1 ADD b TIMESTAMP;
SHOW CREATE TABLE t1;
DROP TABLE t1;

--echo #
--echo # MDEV-10802 TIMESTAMP NOT NULL field with explicit_defaults_for_timestamp and NO_ZERO_DATE shouldn't throw error
--echo #

SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
SET sql_mode='ANSI,NO_ZERO_DATE';
CREATE TABLE t1 (a TIMESTAMP NOT NULL);
INSERT INTO t1 VALUES ();
SELECT * FROM t1;
DROP TABLE t1;
SET sql_mode=DEFAULT;
SET timestamp=DEFAULT;
Original file line number Diff line number Diff line change
Expand Up @@ -173,3 +173,16 @@ t1 CREATE TABLE `t1` (
`b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
#
# MDEV-10802 TIMESTAMP NOT NULL field with explicit_defaults_for_timestamp and NO_ZERO_DATE shouldn't throw error
#
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
SET sql_mode='ANSI,NO_ZERO_DATE';
CREATE TABLE t1 (a TIMESTAMP NOT NULL);
INSERT INTO t1 VALUES ();
SELECT * FROM t1;
a
2001-01-01 10:20:30
DROP TABLE t1;
SET sql_mode=DEFAULT;
SET timestamp=DEFAULT;
Original file line number Diff line number Diff line change
Expand Up @@ -178,3 +178,18 @@ t1 CREATE TABLE `t1` (
`b` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
#
# MDEV-10802 TIMESTAMP NOT NULL field with explicit_defaults_for_timestamp and NO_ZERO_DATE shouldn't throw error
#
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
SET sql_mode='ANSI,NO_ZERO_DATE';
CREATE TABLE t1 (a TIMESTAMP NOT NULL);
INSERT INTO t1 VALUES ();
Warnings:
Warning 1364 Field 'a' doesn't have a default value
SELECT * FROM t1;
a
0000-00-00 00:00:00
DROP TABLE t1;
SET sql_mode=DEFAULT;
SET timestamp=DEFAULT;
4 changes: 3 additions & 1 deletion sql/sql_table.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4161,7 +4161,8 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
if (!sql_field->def &&
!sql_field->has_default_function() &&
(sql_field->flags & NOT_NULL_FLAG) &&
!is_timestamp_type(sql_field->sql_type))
(!is_timestamp_type(sql_field->sql_type) ||
opt_explicit_defaults_for_timestamp))
{
sql_field->flags|= NO_DEFAULT_VALUE_FLAG;
sql_field->pack_flag|= FIELDFLAG_NO_DEFAULT;
Expand All @@ -4170,6 +4171,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
if (thd->variables.sql_mode & MODE_NO_ZERO_DATE &&
!sql_field->def && !sql_field->vcol_info &&
is_timestamp_type(sql_field->sql_type) &&
!opt_explicit_defaults_for_timestamp &&
(sql_field->flags & NOT_NULL_FLAG) &&
(type == Field::NONE || type == Field::TIMESTAMP_UN_FIELD))
{
Expand Down

0 comments on commit 98cd0ec

Please sign in to comment.