From ce6505f890956f81354269a991e69f20babae8e4 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 12 Feb 2019 11:59:17 +0400 Subject: [PATCH] MDEV-18447 Assertion `!is_zero_datetime()' failed in Timestamp_or_zero_datetime::tv --- mysql-test/main/type_timestamp.result | 9 +++++++++ mysql-test/main/type_timestamp.test | 8 ++++++++ sql/sql_type.h | 8 +++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/mysql-test/main/type_timestamp.result b/mysql-test/main/type_timestamp.result index c2af8952f4f..a8e2cbb36c6 100644 --- a/mysql-test/main/type_timestamp.result +++ b/mysql-test/main/type_timestamp.result @@ -1164,5 +1164,14 @@ NULL NULL DROP TABLE t1, t2, t3; # +# MDEV-18447 Assertion `!is_zero_datetime()' failed in Timestamp_or_zero_datetime::tv +# +CREATE TABLE t1 (a TIMESTAMP DEFAULT 0, b TIMESTAMP DEFAULT 0, c TIME DEFAULT 0); +INSERT INTO t1 VALUES (0,0,0); +SELECT c IN (GREATEST(a,b)) FROM t1; +c IN (GREATEST(a,b)) +0 +DROP TABLE t1; +# # End of 10.4 tests # diff --git a/mysql-test/main/type_timestamp.test b/mysql-test/main/type_timestamp.test index 8b64fe0bfc3..08ca173ca02 100644 --- a/mysql-test/main/type_timestamp.test +++ b/mysql-test/main/type_timestamp.test @@ -760,6 +760,14 @@ CREATE TABLE t3 (pk INT PRIMARY KEY, b TIMESTAMP) ENGINE=MyISAM; SELECT ( SELECT b FROM t1 LIMIT 1 ) AS sq FROM t2 LEFT JOIN t3 USING (pk); DROP TABLE t1, t2, t3; +--echo # +--echo # MDEV-18447 Assertion `!is_zero_datetime()' failed in Timestamp_or_zero_datetime::tv +--echo # + +CREATE TABLE t1 (a TIMESTAMP DEFAULT 0, b TIMESTAMP DEFAULT 0, c TIME DEFAULT 0); +INSERT INTO t1 VALUES (0,0,0); +SELECT c IN (GREATEST(a,b)) FROM t1; +DROP TABLE t1; --echo # --echo # End of 10.4 tests diff --git a/sql/sql_type.h b/sql/sql_type.h index 5f53c5f4aae..3eb7d39742c 100644 --- a/sql/sql_type.h +++ b/sql/sql_type.h @@ -2435,6 +2435,12 @@ public: length(0); // safety } int save_in_field(Field *field, uint decimals) const; + Datetime to_datetime(THD *thd) const + { + return is_zero_datetime() ? + Datetime() : + Datetime(thd, Timestamp_or_zero_datetime(*this).tv()); + } bool is_zero_datetime() const { return length() == 0; @@ -2459,7 +2465,7 @@ public: Datetime to_datetime(THD *thd) const { return is_null() ? Datetime() : - Datetime(thd, Timestamp_or_zero_datetime(*this).tv()); + Timestamp_or_zero_datetime_native::to_datetime(thd); } void to_TIME(THD *thd, MYSQL_TIME *to) {