diff options
author | Alexander Barkov <bar@mariadb.com> | 2019-08-26 23:42:06 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-08-26 23:42:06 +0400 |
commit | 72c5a8d39bff8920ccc868390e5329dfa5af33a5 (patch) | |
tree | d90e57c502ab4f6bfc7ea10ba2af6c87cbe0f046 | |
parent | 4a490d1a993959222deb8bae822f40575586a148 (diff) | |
download | mariadb-git-72c5a8d39bff8920ccc868390e5329dfa5af33a5.tar.gz |
MDEV-20417 Assertion `(m_ptr == __null) == item->null_value' failed in VDec::VDec(Item*)
-rw-r--r-- | mysql-test/main/type_timestamp.result | 30 | ||||
-rw-r--r-- | mysql-test/main/type_timestamp.test | 18 | ||||
-rw-r--r-- | sql/sql_type.h | 4 |
3 files changed, 50 insertions, 2 deletions
diff --git a/mysql-test/main/type_timestamp.result b/mysql-test/main/type_timestamp.result index 97a70d042eb..d8c74f15c57 100644 --- a/mysql-test/main/type_timestamp.result +++ b/mysql-test/main/type_timestamp.result @@ -1267,5 +1267,35 @@ f DROP TABLE t1; SET sql_mode=DEFAULT; # +# MDEV-20417 Assertion `(m_ptr == __null) == item->null_value' failed in VDec::VDec(Item*) +# +CREATE TABLE t1 (a TIMESTAMP(4), b TIMESTAMP DEFAULT 0) ENGINE=MyISAM; +INSERT IGNORE INTO t1 VALUES ('2001-01-01','2002-01-01'),('2003-01-01','2004-01-01'); +SELECT * FROM t1 WHERE DEFAULT(b) - a; +a b +Warnings: +Warning 1916 Got overflow when converting '-20010101000000' to UNSIGNED INT. Value truncated +Warning 1916 Got overflow when converting '-20030101000000' to UNSIGNED INT. Value truncated +SELECT LEFT('', DEFAULT(b)-a) FROM t1; +LEFT('', DEFAULT(b)-a) + + +Warnings: +Warning 1916 Got overflow when converting '-20010101000000' to UNSIGNED INT. Value truncated +Warning 1916 Got overflow when converting '-20030101000000' to UNSIGNED INT. Value truncated +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(4), b TIMESTAMP DEFAULT 0) ENGINE=MyISAM; +INSERT IGNORE INTO t1 (a) VALUES ('2001-01-01'),('2003-01-01'); +SELECT * FROM t1 WHERE (SELECT MIN(b) FROM t1) - a; +a b +Warnings: +Warning 1916 Got overflow when converting '-20010101000000' to UNSIGNED INT. Value truncated +Warning 1916 Got overflow when converting '-20030101000000' to UNSIGNED INT. Value truncated +SELECT (SELECT MIN(b) FROM t1) - a FROM t1; +(SELECT MIN(b) FROM t1) - a +-20010101000000.0000 +-20030101000000.0000 +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 ce932b7720c..7b2311eaac3 100644 --- a/mysql-test/main/type_timestamp.test +++ b/mysql-test/main/type_timestamp.test @@ -837,6 +837,24 @@ SELECT GREATEST(a,b) AS f FROM t1 ORDER BY 1 DESC; DROP TABLE t1; SET sql_mode=DEFAULT; + +--echo # +--echo # MDEV-20417 Assertion `(m_ptr == __null) == item->null_value' failed in VDec::VDec(Item*) +--echo # + +CREATE TABLE t1 (a TIMESTAMP(4), b TIMESTAMP DEFAULT 0) ENGINE=MyISAM; +INSERT IGNORE INTO t1 VALUES ('2001-01-01','2002-01-01'),('2003-01-01','2004-01-01'); +SELECT * FROM t1 WHERE DEFAULT(b) - a; +SELECT LEFT('', DEFAULT(b)-a) FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 (a TIMESTAMP(4), b TIMESTAMP DEFAULT 0) ENGINE=MyISAM; +INSERT IGNORE INTO t1 (a) VALUES ('2001-01-01'),('2003-01-01'); +SELECT * FROM t1 WHERE (SELECT MIN(b) FROM t1) - a; +SELECT (SELECT MIN(b) FROM t1) - a FROM t1; +DROP TABLE t1; + + --echo # --echo # End of 10.4 tests --echo # diff --git a/sql/sql_type.h b/sql/sql_type.h index 4b87d6cc989..0d6f7901480 100644 --- a/sql/sql_type.h +++ b/sql/sql_type.h @@ -2439,7 +2439,7 @@ public: Datetime to_datetime(THD *thd) const { if (is_zero_datetime()) - return Datetime(); + return Datetime::zero(); return Timestamp::to_datetime(thd); } bool is_zero_datetime() const { return m_is_zero_datetime; } @@ -2487,7 +2487,7 @@ public: Datetime to_datetime(THD *thd) const { return is_zero_datetime() ? - Datetime() : + Datetime::zero() : Datetime(thd, Timestamp(*this).tv()); } bool is_zero_datetime() const |