Loading mysql-test/r/cast.result +24 −0 Original line number Diff line number Diff line Loading @@ -414,4 +414,28 @@ NULL NULL 20070719 drop table t1; CREATE TABLE t1 (f1 DATE); INSERT INTO t1 VALUES ('2007-07-19'), (NULL); SELECT HOUR(f1), MINUTE(f1), SECOND(f1) FROM t1; HOUR(f1) MINUTE(f1) SECOND(f1) 0 0 0 NULL NULL NULL SELECT HOUR(CAST('2007-07-19' AS DATE)), MINUTE(CAST('2007-07-19' AS DATE)), SECOND(CAST('2007-07-19' AS DATE)); HOUR(CAST('2007-07-19' AS DATE)) MINUTE(CAST('2007-07-19' AS DATE)) SECOND(CAST('2007-07-19' AS DATE)) 0 0 0 SELECT HOUR(CAST(NULL AS DATE)), MINUTE(CAST(NULL AS DATE)), SECOND(CAST(NULL AS DATE)); HOUR(CAST(NULL AS DATE)) MINUTE(CAST(NULL AS DATE)) SECOND(CAST(NULL AS DATE)) NULL NULL NULL SELECT HOUR(NULL), MINUTE(NULL), SECOND(NULL); HOUR(NULL) MINUTE(NULL) SECOND(NULL) NULL NULL NULL DROP TABLE t1; End of 5.0 tests mysql-test/t/cast.test +22 −0 Original line number Diff line number Diff line Loading @@ -246,4 +246,26 @@ INSERT INTO t1(d1) VALUES ('2007-07-19 08:30:00'), (NULL), SELECT cast(date(d1) as signed) FROM t1; drop table t1; # # Bug #31990: MINUTE() and SECOND() return bogus results when used on a DATE # # Show that HH:MM:SS of a DATE are 0, and that it's the same for columns # and typecasts (NULL in, NULL out). CREATE TABLE t1 (f1 DATE); INSERT INTO t1 VALUES ('2007-07-19'), (NULL); SELECT HOUR(f1), MINUTE(f1), SECOND(f1) FROM t1; SELECT HOUR(CAST('2007-07-19' AS DATE)), MINUTE(CAST('2007-07-19' AS DATE)), SECOND(CAST('2007-07-19' AS DATE)); SELECT HOUR(CAST(NULL AS DATE)), MINUTE(CAST(NULL AS DATE)), SECOND(CAST(NULL AS DATE)); SELECT HOUR(NULL), MINUTE(NULL), SECOND(NULL); DROP TABLE t1; --echo End of 5.0 tests sql/item_timefunc.cc +7 −0 Original line number Diff line number Diff line Loading @@ -2645,6 +2645,13 @@ bool Item_date_typecast::get_date(MYSQL_TIME *ltime, uint fuzzy_date) } bool Item_date_typecast::get_time(MYSQL_TIME *ltime) { bzero((char *)ltime, sizeof(MYSQL_TIME)); return args[0]->null_value; } String *Item_date_typecast::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading sql/item_timefunc.h +1 −0 Original line number Diff line number Diff line Loading @@ -779,6 +779,7 @@ class Item_date_typecast :public Item_typecast_maybe_null const char *func_name() const { return "cast_as_date"; } String *val_str(String *str); bool get_date(MYSQL_TIME *ltime, uint fuzzy_date); bool get_time(MYSQL_TIME *ltime); const char *cast_type() const { return "date"; } enum_field_types field_type() const { return MYSQL_TYPE_DATE; } Field *tmp_table_field(TABLE *t_arg) Loading Loading
mysql-test/r/cast.result +24 −0 Original line number Diff line number Diff line Loading @@ -414,4 +414,28 @@ NULL NULL 20070719 drop table t1; CREATE TABLE t1 (f1 DATE); INSERT INTO t1 VALUES ('2007-07-19'), (NULL); SELECT HOUR(f1), MINUTE(f1), SECOND(f1) FROM t1; HOUR(f1) MINUTE(f1) SECOND(f1) 0 0 0 NULL NULL NULL SELECT HOUR(CAST('2007-07-19' AS DATE)), MINUTE(CAST('2007-07-19' AS DATE)), SECOND(CAST('2007-07-19' AS DATE)); HOUR(CAST('2007-07-19' AS DATE)) MINUTE(CAST('2007-07-19' AS DATE)) SECOND(CAST('2007-07-19' AS DATE)) 0 0 0 SELECT HOUR(CAST(NULL AS DATE)), MINUTE(CAST(NULL AS DATE)), SECOND(CAST(NULL AS DATE)); HOUR(CAST(NULL AS DATE)) MINUTE(CAST(NULL AS DATE)) SECOND(CAST(NULL AS DATE)) NULL NULL NULL SELECT HOUR(NULL), MINUTE(NULL), SECOND(NULL); HOUR(NULL) MINUTE(NULL) SECOND(NULL) NULL NULL NULL DROP TABLE t1; End of 5.0 tests
mysql-test/t/cast.test +22 −0 Original line number Diff line number Diff line Loading @@ -246,4 +246,26 @@ INSERT INTO t1(d1) VALUES ('2007-07-19 08:30:00'), (NULL), SELECT cast(date(d1) as signed) FROM t1; drop table t1; # # Bug #31990: MINUTE() and SECOND() return bogus results when used on a DATE # # Show that HH:MM:SS of a DATE are 0, and that it's the same for columns # and typecasts (NULL in, NULL out). CREATE TABLE t1 (f1 DATE); INSERT INTO t1 VALUES ('2007-07-19'), (NULL); SELECT HOUR(f1), MINUTE(f1), SECOND(f1) FROM t1; SELECT HOUR(CAST('2007-07-19' AS DATE)), MINUTE(CAST('2007-07-19' AS DATE)), SECOND(CAST('2007-07-19' AS DATE)); SELECT HOUR(CAST(NULL AS DATE)), MINUTE(CAST(NULL AS DATE)), SECOND(CAST(NULL AS DATE)); SELECT HOUR(NULL), MINUTE(NULL), SECOND(NULL); DROP TABLE t1; --echo End of 5.0 tests
sql/item_timefunc.cc +7 −0 Original line number Diff line number Diff line Loading @@ -2645,6 +2645,13 @@ bool Item_date_typecast::get_date(MYSQL_TIME *ltime, uint fuzzy_date) } bool Item_date_typecast::get_time(MYSQL_TIME *ltime) { bzero((char *)ltime, sizeof(MYSQL_TIME)); return args[0]->null_value; } String *Item_date_typecast::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading
sql/item_timefunc.h +1 −0 Original line number Diff line number Diff line Loading @@ -779,6 +779,7 @@ class Item_date_typecast :public Item_typecast_maybe_null const char *func_name() const { return "cast_as_date"; } String *val_str(String *str); bool get_date(MYSQL_TIME *ltime, uint fuzzy_date); bool get_time(MYSQL_TIME *ltime); const char *cast_type() const { return "date"; } enum_field_types field_type() const { return MYSQL_TYPE_DATE; } Field *tmp_table_field(TABLE *t_arg) Loading