diff --git a/mysql-test/r/ctype_latin1.result b/mysql-test/r/ctype_latin1.result index b1507a3222b468ef6640ebfff17b04e5e1b338d6..b29e66b0a3f7a35fc57708a15bd9a1ca79a5f4d1 100644 --- a/mysql-test/r/ctype_latin1.result +++ b/mysql-test/r/ctype_latin1.result @@ -370,7 +370,7 @@ pattern varchar(64) NO INSERT INTO t1 VALUES (_utf8'2001÷01÷01',_utf8'%Y÷%m÷%d'); SELECT HEX(subject),HEX(pattern),STR_TO_DATE(subject, pattern) FROM t1; HEX(subject) HEX(pattern) STR_TO_DATE(subject, pattern) -32303031F73031F73031 2559F7256DF72564 2001-01-01 00:00:00 +32303031F73031F73031 2559F7256DF72564 2001-01-01 00:00:00.000000 DROP TABLE t1; SET collation_connection='latin1_bin'; create table t1 select repeat('a',4000) a; diff --git a/mysql-test/r/ctype_sjis.result b/mysql-test/r/ctype_sjis.result index 994a16261f5487076faea2dfbf5d0c3e6651cccd..0b9e893c9e836b5adb7ae95d3b8f770a1f788b08 100644 --- a/mysql-test/r/ctype_sjis.result +++ b/mysql-test/r/ctype_sjis.result @@ -172,7 +172,7 @@ pattern varchar(64) NO INSERT INTO t1 VALUES (_utf8'2001÷01÷01',_utf8'%Y÷%m÷%d'); SELECT HEX(subject),HEX(pattern),STR_TO_DATE(subject, pattern) FROM t1; HEX(subject) HEX(pattern) STR_TO_DATE(subject, pattern) -323030318180303181803031 25598180256D81802564 2001-01-01 00:00:00 +323030318180303181803031 25598180256D81802564 2001-01-01 00:00:00.000000 DROP TABLE t1; SET collation_connection='sjis_bin'; create table t1 select repeat('a',4000) a; diff --git a/mysql-test/r/ctype_ucs.result b/mysql-test/r/ctype_ucs.result index 6e5ea46fde1039a2b78a76df33f313deffe94550..ae3798e38fb478c66686e792b3b92e019deac413 100644 --- a/mysql-test/r/ctype_ucs.result +++ b/mysql-test/r/ctype_ucs.result @@ -929,7 +929,7 @@ pattern varchar(64) NO INSERT INTO t1 VALUES (_utf8'2001÷01÷01',_utf8'%Y÷%m÷%d'); SELECT HEX(subject),HEX(pattern),STR_TO_DATE(subject, pattern) FROM t1; HEX(subject) HEX(pattern) STR_TO_DATE(subject, pattern) -003200300030003100F70030003100F700300031 0025005900F70025006D00F700250064 2001-01-01 00:00:00 +003200300030003100F70030003100F700300031 0025005900F70025006D00F700250064 2001-01-01 00:00:00.000000 DROP TABLE t1; SET NAMES latin1; SET collation_connection='ucs2_bin'; diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index ba96712653ddbdb7508f82d96212e8507c8fbb3f..bb3a9365793f0296910d7ac9d667bf54da2a2d38 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -1114,7 +1114,7 @@ pattern varchar(64) NO INSERT INTO t1 VALUES (_utf8'2001÷01÷01',_utf8'%Y÷%m÷%d'); SELECT HEX(subject),HEX(pattern),STR_TO_DATE(subject, pattern) FROM t1; HEX(subject) HEX(pattern) STR_TO_DATE(subject, pattern) -32303031C3B73031C3B73031 2559C3B7256DC3B72564 2001-01-01 00:00:00 +32303031C3B73031C3B73031 2559C3B7256DC3B72564 2001-01-01 00:00:00.000000 DROP TABLE t1; SET collation_connection='utf8_bin'; create table t1 select repeat('a',4000) a; diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result index ff3f4038447e56b4eadaa184708792b17017770a..8439c40fbf9f0b238f562683be70d5294cf99dc7 100644 --- a/mysql-test/r/date_formats.result +++ b/mysql-test/r/date_formats.result @@ -60,70 +60,70 @@ insert into t1 values ('15-2001-1', '%d-%Y-%c'); select date,format,str_to_date(date, format) as str_to_date from t1; date format str_to_date -2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12 -03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02 -0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02 08:11:02 -03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02 -2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12 +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02 08:11:02.000000 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 01:11:12.123450 2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02 02:11:12.123450 2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 00:11:12.123450 -2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12 -10:20:10 %H:%i:%s 0000-00-00 10:20:10 -10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10 -10:20:10 %T 0000-00-00 10:20:10 -10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10 -10:20:10AM %r 0000-00-00 10:20:10 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12.000000 +10:20:10 %H:%i:%s 0000-00-00 10:20:10.000000 +10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10.000000 +10:20:10 %T 0000-00-00 10:20:10.000000 +10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10.000000 +10:20:10AM %r 0000-00-00 10:20:10.000000 10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 10:20:10.440000 -15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58 -15 September 2001 %d %M %Y 2001-09-15 00:00:00 -15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00 -15 MAY 2001 %d %b %Y 2001-05-15 00:00:00 -15th May 2001 %D %b %Y 2001-05-15 00:00:00 -Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00 -Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00 -Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00 -Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00 -Sunday 01 2001 %W %v %x 2001-01-07 00:00:00 -Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00 -060 2004 %j %Y 2004-02-29 00:00:00 -4 53 1998 %w %u %Y 1998-12-31 00:00:00 -15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00 -15-01-20 %d-%m-%y 2020-01-15 00:00:00 -15-2001-1 %d-%Y-%c 2001-01-15 00:00:00 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58.000000 +15 September 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 MAY 2001 %d %b %Y 2001-05-15 00:00:00.000000 +15th May 2001 %D %b %Y 2001-05-15 00:00:00.000000 +Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00.000000 +Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00.000000 +Sunday 01 2001 %W %v %x 2001-01-07 00:00:00.000000 +Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00.000000 +060 2004 %j %Y 2004-02-29 00:00:00.000000 +4 53 1998 %w %u %Y 1998-12-31 00:00:00.000000 +15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00.000000 +15-01-20 %d-%m-%y 2020-01-15 00:00:00.000000 +15-2001-1 %d-%Y-%c 2001-01-15 00:00:00.000000 select date,format,concat('',str_to_date(date, format)) as con from t1; date format con -2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12 -03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02 -0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02 08:11:02 -03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02 -2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12 +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02 08:11:02.000000 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 01:11:12.123450 2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02 02:11:12.123450 2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 00:11:12.123450 -2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12 -10:20:10 %H:%i:%s 0000-00-00 10:20:10 -10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10 -10:20:10 %T 0000-00-00 10:20:10 -10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10 -10:20:10AM %r 0000-00-00 10:20:10 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12.000000 +10:20:10 %H:%i:%s 0000-00-00 10:20:10.000000 +10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10.000000 +10:20:10 %T 0000-00-00 10:20:10.000000 +10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10.000000 +10:20:10AM %r 0000-00-00 10:20:10.000000 10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 10:20:10.440000 -15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58 -15 September 2001 %d %M %Y 2001-09-15 00:00:00 -15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00 -15 MAY 2001 %d %b %Y 2001-05-15 00:00:00 -15th May 2001 %D %b %Y 2001-05-15 00:00:00 -Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00 -Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00 -Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00 -Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00 -Sunday 01 2001 %W %v %x 2001-01-07 00:00:00 -Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00 -060 2004 %j %Y 2004-02-29 00:00:00 -4 53 1998 %w %u %Y 1998-12-31 00:00:00 -15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00 -15-01-20 %d-%m-%y 2020-01-15 00:00:00 -15-2001-1 %d-%Y-%c 2001-01-15 00:00:00 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58.000000 +15 September 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 MAY 2001 %d %b %Y 2001-05-15 00:00:00.000000 +15th May 2001 %D %b %Y 2001-05-15 00:00:00.000000 +Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00.000000 +Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00.000000 +Sunday 01 2001 %W %v %x 2001-01-07 00:00:00.000000 +Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00.000000 +060 2004 %j %Y 2004-02-29 00:00:00.000000 +4 53 1998 %w %u %Y 1998-12-31 00:00:00.000000 +15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00.000000 +15-01-20 %d-%m-%y 2020-01-15 00:00:00.000000 +15-2001-1 %d-%Y-%c 2001-01-15 00:00:00.000000 select date,format,cast(str_to_date(date, format) as datetime) as datetime from t1; date format datetime 2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12 @@ -352,16 +352,16 @@ insert into t1 values ('03-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p'); select date,format,str_to_date(date, format) as str_to_date from t1; date format str_to_date -10:20:10AM %h:%i:%s 0000-00-00 10:20:10 -2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12 -03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12 +10:20:10AM %h:%i:%s 0000-00-00 10:20:10.000000 +2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 Warnings: Warning 1292 Truncated incorrect datetime value: '10:20:10AM' select date,format,concat(str_to_date(date, format),'') as con from t1; date format con -10:20:10AM %h:%i:%s 0000-00-00 10:20:10 -2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12 -03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12 +10:20:10AM %h:%i:%s 0000-00-00 10:20:10.000000 +2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 Warnings: Warning 1292 Truncated incorrect datetime value: '10:20:10AM' drop table t1; @@ -418,7 +418,7 @@ drop table t1; create table t1 select "02 10" as a, "%d %H" as b; select str_to_date(a,b) from t1; str_to_date(a,b) -0000-00-02 10:00:00 +0000-00-02 10:00:00.000000 create table t2 select str_to_date(a,b) from t1; describe t2; Field Type Null Key Default Extra diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index 400e3fdc5444c5f4fbeea7e25e2aa3418121c193..cebba082ea42e0de5c204fe7c3bd56767468a43f 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -1945,6 +1945,74 @@ SELECT 1 FROM DUAL WHERE MINUTE(TIMEDIFF(NULL, '12:12:12')); SELECT 1 FROM DUAL WHERE SECOND(TIMEDIFF(NULL, '12:12:12')); 1 # +# MDEV-4511 Assertion `scale <= precision' fails on GROUP BY TIMEDIFF with incorrect types +# +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT a FROM t1 GROUP BY TIMEDIFF('2004-06-12',a) * 1; +a +2005-05-04 +Warnings: +Warning 1292 Truncated incorrect time value: '2004-06-12' +Warning 1292 Truncated incorrect time value: '2004-06-12' +DROP TABLE t1; +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT a FROM t1 GROUP BY ADDTIME(a,'10')*1; +a +2000-02-23 +2005-05-04 +DROP TABLE t1; +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT * FROM t1 GROUP BY SEC_TO_TIME(concat(a,'10'))*1; +a +2000-02-23 +2005-05-04 +DROP TABLE t1; +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT * FROM t1 GROUP BY ADDTIME(timestamp('2001-01-01 00:00:00'),CAST(a AS SIGNED)&0xF)*1; +a +2005-05-04 +2000-02-23 +DROP TABLE t1; +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT * FROM t1 GROUP BY STR_TO_DATE(a,concat('%Y-%m-%d.%f',if(rand(),'','')))*1; +a +2000-02-23 +2005-05-04 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +STR_TO_DATE('2001-01-01', '%Y-%m-%d') AS date_only, +STR_TO_DATE('10:10:10', '%H:%i:%s') AS time_only, +STR_TO_DATE('10:10:10.123', '%H:%i:%s.%f') AS time_microsecond, +STR_TO_DATE('2001-01-01 10:10:10', '%Y-%m-%d %H:%i:%s') AS date_time, +STR_TO_DATE('2001-01-01 10:10:10.123', '%Y-%m-%d %H:%i:%s.%f') AS date_time_microsecond; +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +date_only date YES NULL +time_only time YES NULL +time_microsecond time(6) YES NULL +date_time datetime YES NULL +date_time_microsecond datetime(6) YES NULL +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +SEC_TO_TIME(1)+0.1, +SEC_TO_TIME(1.1)+0.1, +SEC_TO_TIME(1.12)+0.1, +SEC_TO_TIME(1.123456)+0.1, +SEC_TO_TIME(1.1234567)+0.1; +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +SEC_TO_TIME(1)+0.1 decimal(12,1) YES NULL +SEC_TO_TIME(1.1)+0.1 decimal(13,1) YES NULL +SEC_TO_TIME(1.12)+0.1 decimal(14,2) YES NULL +SEC_TO_TIME(1.123456)+0.1 decimal(18,6) YES NULL +SEC_TO_TIME(1.1234567)+0.1 decimal(18,6) YES NULL +DROP TABLE t1; +# # MDEV-4635 Crash in UNIX_TIMESTAMP(STR_TO_DATE('2020','%Y')) # SET TIME_ZONE='+02:00'; diff --git a/mysql-test/r/type_date.result b/mysql-test/r/type_date.result index 03b942be3f6bfa37f1e95897a741375ff2b4838d..e23c8640dfccf5606e593749aba3f103c0173428 100644 --- a/mysql-test/r/type_date.result +++ b/mysql-test/r/type_date.result @@ -161,7 +161,7 @@ INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (NULL); SELECT str_to_date( '', a ) FROM t1; str_to_date( '', a ) -0000-00-00 00:00:00 +0000-00-00 00:00:00.000000 NULL DROP TABLE t1; CREATE TABLE t1 (a DATE, b INT, PRIMARY KEY (a,b)); diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index 9270b30c042ddb943f4836fc425d4475f2a16d2c..b65e634ea610b5ecea9e2e7b6434474f8d8f4dba 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -1190,6 +1190,52 @@ SELECT 1 FROM DUAL WHERE MINUTE(TIMEDIFF(NULL, '12:12:12')); SELECT 1 FROM DUAL WHERE SECOND(TIMEDIFF(NULL, '12:12:12')); +--echo # +--echo # MDEV-4511 Assertion `scale <= precision' fails on GROUP BY TIMEDIFF with incorrect types +--echo # +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT a FROM t1 GROUP BY TIMEDIFF('2004-06-12',a) * 1; +DROP TABLE t1; + +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT a FROM t1 GROUP BY ADDTIME(a,'10')*1; +DROP TABLE t1; + +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT * FROM t1 GROUP BY SEC_TO_TIME(concat(a,'10'))*1; +DROP TABLE t1; + +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT * FROM t1 GROUP BY ADDTIME(timestamp('2001-01-01 00:00:00'),CAST(a AS SIGNED)&0xF)*1; +DROP TABLE t1; + +CREATE TABLE t1 (a DATE) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('2005-05-04'),('2000-02-23'); +SELECT * FROM t1 GROUP BY STR_TO_DATE(a,concat('%Y-%m-%d.%f',if(rand(),'','')))*1; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT + STR_TO_DATE('2001-01-01', '%Y-%m-%d') AS date_only, + STR_TO_DATE('10:10:10', '%H:%i:%s') AS time_only, + STR_TO_DATE('10:10:10.123', '%H:%i:%s.%f') AS time_microsecond, + STR_TO_DATE('2001-01-01 10:10:10', '%Y-%m-%d %H:%i:%s') AS date_time, + STR_TO_DATE('2001-01-01 10:10:10.123', '%Y-%m-%d %H:%i:%s.%f') AS date_time_microsecond; +SHOW COLUMNS FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT + SEC_TO_TIME(1)+0.1, + SEC_TO_TIME(1.1)+0.1, + SEC_TO_TIME(1.12)+0.1, + SEC_TO_TIME(1.123456)+0.1, + SEC_TO_TIME(1.1234567)+0.1; +SHOW COLUMNS FROM t1; +DROP TABLE t1; + --echo # --echo # MDEV-4635 Crash in UNIX_TIMESTAMP(STR_TO_DATE('2020','%Y')) --echo # diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 4d261e7a7d9769f4a0f98b62eae28c7fd9e4cd79..f2f5b7b1b637dec02b88ce67c454d04be0e6b8df 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -3144,7 +3144,7 @@ void Item_func_str_to_date::fix_length_and_dec() } cached_field_type= MYSQL_TYPE_DATETIME; - decimals= NOT_FIXED_DEC; + decimals= TIME_SECOND_PART_DIGITS; if ((const_item= args[1]->const_item())) { char format_buff[64]; diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index 8f881487e21dd6476bf1eaf5ff9f552cc622119f..29badddad8ecd34098fd0c71e06f5c3233bd0d09 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -809,7 +809,7 @@ class Item_func_sec_to_time :public Item_timefunc bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date); void fix_length_and_dec() { - decimals= args[0]->decimals; + decimals= MY_MIN(args[0]->decimals, TIME_SECOND_PART_DIGITS); Item_timefunc::fix_length_and_dec(); } const char *func_name() const { return "sec_to_time"; } diff --git a/storage/tokudb/mysql-test/tokudb/r/type_date.result b/storage/tokudb/mysql-test/tokudb/r/type_date.result index f34dc07130f0faf92e9cc2add44562162e24a0e2..047dc6dc777c3be5ec334a9875a9980466da5b7a 100644 --- a/storage/tokudb/mysql-test/tokudb/r/type_date.result +++ b/storage/tokudb/mysql-test/tokudb/r/type_date.result @@ -153,7 +153,7 @@ INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (NULL); SELECT str_to_date( '', a ) FROM t1; str_to_date( '', a ) -0000-00-00 00:00:00 +0000-00-00 00:00:00.000000 NULL DROP TABLE t1; CREATE TABLE t1 (a DATE, b int, PRIMARY KEY (a,b));