• Evgeny Potemkin's avatar
    Bug#43668: Wrong comparison and MIN/MAX for YEAR(2) · 726e8390
    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.
    726e8390
item.cc 208 KB