Commit 50b5064c authored by unknown's avatar unknown
Browse files

bug #16546 (DATETIME + 0 not always coerced in the same way)

  fix for cast( AS DATETIME) + 0 operation.
  I just implemented Item_datetime_typecast::val() method
  as it is usually done in other classes.
  Should be fixed more radically in 5.0


mysql-test/r/type_datetime.result:
  result added
mysql-test/t/type_datetime.test:
  testcase
sql/item_timefunc.h:
  added double conversion to Item_datetime_typecast
parent 6ef0fee8
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -166,3 +166,6 @@ dt
0000-00-00 00:00:00
0000-00-00 00:00:00
drop table t1;
select cast('2006-12-05 22:10:10' as datetime) + 0;
cast('2006-12-05 22:10:10' as datetime) + 0
20061205221010.000000
+6 −0
Original line number Diff line number Diff line
@@ -113,4 +113,10 @@ insert into t1 values ("00-00-00"), ("00-00-00 00:00:00");
select * from t1;
drop table t1;

#
# Bug #16546 DATETIME+0 not always coerced the same way 
#
select cast('2006-12-05 22:10:10' as datetime) + 0;


# End of 4.1 tests
+7 −0
Original line number Diff line number Diff line
@@ -751,12 +751,19 @@ class Item_datetime_typecast :public Item_typecast_maybe_null
  String *val_str(String *str);
  const char *cast_type() const { return "datetime"; }
  enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
  void fix_length_and_dec()
  {
    Item_typecast_maybe_null::fix_length_and_dec();
    decimals= DATETIME_DEC;
  }

  Field *tmp_table_field(TABLE *t_arg)
  {
    return (new Field_datetime(maybe_null, name, t_arg, &my_charset_bin));
  }
  bool result_as_longlong() { return TRUE; }
  longlong val_int();
  double val() { return (double) val_int(); }
};

class Item_func_makedate :public Item_str_func