Commit 409fb489 authored by unknown's avatar unknown
Browse files

Fix for bug #16546: DATETIME+0 not always coerced the same way


mysql-test/r/func_time.result:
  Fix for bug #16546: DATETIME+0 not always coerced the same way
    - test case
mysql-test/t/func_time.test:
  Fix for bug #16546: DATETIME+0 not always coerced the same way
    - test case
sql/item_timefunc.cc:
  Fix for bug #16546: DATETIME+0 not always coerced the same way
    - set decimals to DATETIME_DEC
sql/item_timefunc.h:
  Fix for bug #16546: DATETIME+0 not always coerced the same way
    - set decimals to DATETIME_DEC
parent 38b1f7c7
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -7,20 +7,20 @@ period_add("9602",-12) period_diff(199505,"9404")
199502	13
select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_timestamp(now());
now()-now()	weekday(curdate())-weekday(now())	unix_timestamp()-unix_timestamp(now())
0	0	0
0.000000	0	0
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
from_unixtime(unix_timestamp("1994-03-02 10:11:12"))	from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s")	from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0
1994-03-02 10:11:12	1994-03-02 10:11:12	19940302101112
1994-03-02 10:11:12	1994-03-02 10:11:12	19940302101112.000000
select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"),
sec_to_time(time_to_sec("0:30:47")/6.21);
sec_to_time(9001)	sec_to_time(9001)+0	time_to_sec("15:12:22")	sec_to_time(time_to_sec("0:30:47")/6.21)
02:30:01	23001	54742	00:04:57
02:30:01	23001.000000	54742	00:04:57
select sec_to_time(time_to_sec('-838:59:59'));
sec_to_time(time_to_sec('-838:59:59'))
-838:59:59
select now()-curdate()*1000000-curtime();
now()-curdate()*1000000-curtime()
0
0.000000
select strcmp(current_timestamp(),concat(current_date()," ",current_time()));
strcmp(current_timestamp(),concat(current_date()," ",current_time()))
0
@@ -626,3 +626,7 @@ last_day('2005-01-00')
NULL
Warnings:
Warning	1292	Truncated incorrect datetime value: '2005-01-00'
select now() - now() + 0, curtime() - curtime() + 0, 
sec_to_time(1) + 0, from_unixtime(1) + 0;
now() - now() + 0	curtime() - curtime() + 0	sec_to_time(1) + 0	from_unixtime(1) + 0
0.000000	0.000000	1.000000	19700101030001.000000
+8 −0
Original line number Diff line number Diff line
@@ -315,4 +315,12 @@ select last_day('2005-00-00');
select last_day('2005-00-01');
select last_day('2005-01-00');

#
# Bug #16546
# 

select now() - now() + 0, curtime() - curtime() + 0, 
       sec_to_time(1) + 0, from_unixtime(1) + 0;


# End of 4.1 tests
+3 −3
Original line number Diff line number Diff line
@@ -1372,7 +1372,7 @@ void Item_func_curtime::fix_length_and_dec()
{
  TIME ltime;

  decimals=0;
  decimals= DATETIME_DEC;
  collation.set(&my_charset_bin);
  store_now_in_TIME(&ltime);
  value= TIME_to_ulonglong_time(&ltime);
@@ -1419,7 +1419,7 @@ String *Item_func_now::val_str(String *str)

void Item_func_now::fix_length_and_dec()
{
  decimals=0;
  decimals= DATETIME_DEC;
  collation.set(&my_charset_bin);

  store_now_in_TIME(&ltime);
@@ -1680,7 +1680,7 @@ void Item_func_from_unixtime::fix_length_and_dec()
{ 
  thd= current_thd;
  collation.set(&my_charset_bin);
  decimals=0;
  decimals= DATETIME_DEC;
  max_length=MAX_DATETIME_WIDTH*MY_CHARSET_BIN_MB_MAXLEN;
  maybe_null= 1;
  thd->time_zone_used= 1;
+1 −0
Original line number Diff line number Diff line
@@ -580,6 +580,7 @@ class Item_func_sec_to_time :public Item_str_func
  { 
    collation.set(&my_charset_bin);
    maybe_null=1;
    decimals= DATETIME_DEC;
    max_length=MAX_TIME_WIDTH*MY_CHARSET_BIN_MB_MAXLEN;
  }
  enum_field_types field_type() const { return MYSQL_TYPE_TIME; }