Commit 0cd82301 authored by tnurnberg@white.intern.koehntopp.de's avatar tnurnberg@white.intern.koehntopp.de
Browse files

Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  mysql.com:/misc/mysql/31990/50-31990
parents 6320cded 5a5ed2a5
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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
+22 −0
Original line number Diff line number Diff line
@@ -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
+7 −0
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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)