• Evgeny Potemkin's avatar
    Bug#43668: Wrong comparison and MIN/MAX for YEAR(2) · bc43bff7
    Evgeny Potemkin authored
    MySQL manual describes values of the YEAR(2) field type as follows:
    values 00 - 69 mean 2000 - 2069 years and values 70 - 99 mean 1970 - 1999
    years. MIN/MAX and comparison functions was comparing them as int values
    thus producing wrong result.
    
    Now the Arg_comparator class is extended with compare_year function which
    performs correct comparison of the YEAR type.
    The Item_sum_hybrid class now uses Item_cache and Arg_comparator objects to
    correctly calculate its value.
    To allow Arg_comparator to use func_name() function for Item_func and Item_sum
    objects the func_name declaration is moved to the Item_result_field class.
    A helper function is_owner_equal_func is added to the Arg_comparator class.
    It checks whether the Arg_comparator object owner is the <=> function or not.
    A helper function setup is added to the Item_sum_hybrid class. It sets up
    cache item and comparator.
    
    mysql-test/r/func_group.result:
      Added a test case for the bug#43668.
    mysql-test/t/func_group.test:
      Added a test case for the bug#43668.
    sql/item.cc:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      Now Item_cache_int returns the type of cached item.
    sql/item.h:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      To allow Arg_comparator to use func_name() function for Item_func and Item_sum
      objects the func_name declaration is moved to the Item_result_field class.
    sql/item_cmpfunc.cc:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      The Arg_comparator class is extended with compare_year function which
      performs correct comparison of the YEAR type.
    sql/item_cmpfunc.h:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      The year_as_datetime variable is added to the Arg_comparator class.
      It's set to TRUE when YEAR value should be converted to the
      YYYY-00-00 00:00:00 format for correct YEAR-DATETIME comparison.
    sql/item_geofunc.cc:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      Item_func_spatial_rel::val_int chenged to use Arg_comparator's string
      buffers.
    sql/item_subselect.h:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      Added an implementation of the virtual func_name function.
    sql/item_sum.cc:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      The Item_sum_hybrid class now uses Item_cache and Arg_comparator objects to
      correctly calculate its value.
      A helper function setup is added to the Item_sum_hybrid class. It sets up
      cache item and comparator.
    sql/item_sum.h:
      Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
      The Item_sum_hybrid class now uses Item_cache and Arg_comparator objects to
      correctly calculate its value.
      Added an implementation of the virtual func_name function.
    bc43bff7
item_func.h 47.6 KB