• unknown's avatar
    Bug#31990: MINUTE() and SECOND() return bogus results when used on a DATE · 08b256f9
    unknown authored
    HOUR(), MINUTE(), ... returned spurious results when used on a DATE-cast.
    This happened because DATE-cast object did not overload get_time() method
    in superclass Item. The default method was inappropriate here and
    misinterpreted the data.
    
    Patch adds missing method; get_time() on DATE-casts now returns SQL-NULL
    on NULL input, 0 otherwise. This coincides with the way DATE-columns
    behave.
    
    Also fixes similar bug in Date-Field now.
    
    
    mysql-test/r/cast.result:
      Show that HOUR(), MINUTE(), ... return sensible values when used
      on DATE-cast objects, namely NULL for NULL-dates and 0 otherwise.
      Show that this coincides with how DATE-columns behave.
    mysql-test/r/type_date.result:
      Show that HOUR(), MINUTE(), ... return sensible values when used
      on DATE-fields.
    mysql-test/t/cast.test:
      Show that HOUR(), MINUTE(), ... return sensible values when used
      on DATE-cast objects, namely NULL for NULL-dates and 0 otherwise.
      Show that this coincides with how DATE-columns behave.
    mysql-test/t/type_date.test:
      Show that HOUR(), MINUTE(), ... return sensible values when used
      on DATE-fields.
    sql/field.cc:
      Add get_time() method to DATE-field object to overload
      the method in Field superclass that would return spurious
      results. Return zero-result.
    sql/field.h:
      Add get_time() declaration to date-field class
    sql/item_timefunc.cc:
      Add get_time() method to DATE-cast object to overload
      the method in Item superclass that would return spurious
      results. Return zero-result; flag NULL if input was NULL.
    sql/item_timefunc.h:
      Add get_time() declaration to DATE-cast object.
    08b256f9
cast.result 13.8 KB