• Jorgen Loland's avatar
    BUG#11766317: FIND_IN_SET won't work normaly after upgrade · 4015719c
    Jorgen Loland authored
                  from 5.1 to 5.5
    
    (Former 59405)
    
    In this bug, args[0] in an Item_func_find_in_set stored an 
    Item_func_weekday that was constant. In 
    Item_func_find_in_set::fix_length_and_dec(), args[0]->val_str() 
    was called. Later, when Item_func_find_in_set::val_int() was 
    called, args[0]->null_value was checked. However, the 
    Item_func_weekday in args[0] had now been replaced with an 
    Item_cache. No val_*() calls had been made to this Item_cache,
    thus null_value was incorrectly 'true', resulting in missing 
    rows in the result set.
    
    enum_value gets a value in fix_length_and_dec() iff args[0]
    is both constant and non-null. It is therefore unnecessary 
    to check the null_value of args[0] in val_int().
    
    An alternative fix would be to call args[0]->val_int() inside 
    Item_func_find_in_set::val_int(). This would ensure
    args[0]->null_value was set correctly (always false in this case), 
    but that would have to be done for every record this const value 
    is checked against.
    
    
    mysql-test/r/func_set.result:
      Add test for BUG#59405
    mysql-test/t/func_set.test:
      Add test for BUG#59405
    4015719c
item_func.cc 166 KB