• unknown's avatar
    Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions. · 99bde6d9
    unknown authored
    The LEAST/GREATEST functions compared DATE/DATETIME values as
    strings which in some cases could lead to a wrong result.
    
    A new member function called cmp_datetimes() is added to the
    Item_func_min_max class. It compares arguments in DATETIME context
    and returns index of the least/greatest argument.
    The Item_func_min_max::fix_length_and_dec() function now detects when
    arguments should be compared in DATETIME context and sets the newly
    added flag compare_as_dates. It indicates that the cmp_datetimes() function
    should be called to get a correct result.
    Item_func_min_max::val_xxx() methods are corrected to call the
    cmp_datetimes() function when needed.
    Objects of the Item_splocal class now stores and reports correct original
    field type.
    
    
    mysql-test/t/type_datetime.test:
      Added a test case for the bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
    mysql-test/r/type_datetime.result:
      Added a test case for the bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
    mysql-test/r/sp-vars.result:
      A test case result corrected after the fix for the bug#27759.
    sql/mysql_priv.h:
      Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      Added the prototype of the get_datetime_value() function.
    sql/item_func.h:
      Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      A new member function called cmp_datetimes() is added to the
      Item_func_min_max class.
    sql/item_func.cc:
      Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      A new member function called cmp_datetimes() is added to the
      Item_func_min_max class. It compares arguments in DATETIME context
      and returns index of the least/greatest argument.
      The Item_func_min_max::fix_length_and_dec() function now detects when
      arguments should be compared in DATETIME context and sets the newly
      added flag compare_as_dates. It indicates that the cmp_datetimes() function
      should be called to get a correct result.
      Item_func_min_max::val_xxx() methods are corrected to call the
      cmp_datetimes() function when needed.
    sql/item_cmpfunc.cc:
      Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      The get_datetime_value() function is no longer static.
    sql/item.h:
      Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      Objects of the Item_splocal class now stores and reports correct original
      field type.
    sql/item.cc:
      Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      Objects of the Item_splocal class now stores and reports correct original
      field type.
    99bde6d9
item_cmpfunc.cc 116 KB