• Alexander Barkov's avatar
    MDEV-11134 Assertion `fixed' failed in Item::const_charset_converter(THD*,... · 45e40892
    Alexander Barkov authored
    MDEV-11134 Assertion `fixed' failed in Item::const_charset_converter(THD*, CHARSET_INFO*, bool, const char*)
    
    Problem: Item_param::basic_const_item() returned true when fixed==false.
    This unexpected combination made Item::const_charset_converter() crash
    on asserts.
    
    Fix:
    - Changing all Item_param::set_xxx() to set "fixed" to true.
      This fixes the problem.
    - Additionally, changing all Item_param::set_xxx() to set
      Item_param::item_type, to avoid duplicate code, and for consistency,
      to make the code symmetric between different constant types.
      Before this patch only set_null() set item_type.
    - Moving Item_param::state and Item_param::item_type from public to private,
      to make sure easier that these members are in sync with "fixed" and to
      each other.
    - Adding a new argument "unsigned_arg" to Item::set_decimal(),
      and reusing it in two places instead of duplicate code.
    - Adding a new method Item_param::fix_temporal() and reusing it in two places.
    - Adding methods has_no_value(), has_long_data_value(), has_int_value(),
      instead of direct access to Item_param::state.
    45e40892
item.h 191 KB