• unknown's avatar
    Bug #21159: Optimizer: wrong result after AND with different data types · 3915c3d9
    unknown authored
    Disable const propagation for Item_hex_string.
    This must be done because Item_hex_string->val_int() is not
    the same as (Item_hex_string->val_str() in BINARY column)->val_int().
    We cannot simply disable the replacement in a particular context (
    e.g. <bin_col> = <int_col> AND <bin_col> = <hex_string>) since
    Items don't know the context they are in and there are functions like 
    IF (<hex_string>, 'yes', 'no').
    Note that this will disable some valid cases as well 
    (e.g. : <bin_col> = <hex_string> AND <bin_col2> = <bin_col>) but 
    there's no way to distinguish the valid cases without having the
    Item's parent say something like : Item->set_context(Item::STRING_RESULT)
    and have all the Items that contain other Items do that consistently.
    
    
    mysql-test/r/compare.result:
      Bug #21159: Optimizer: wrong result after AND with different data types
       - test case
    mysql-test/t/compare.test:
      Bug #21159: Optimizer: wrong result after AND with different data types
       - test case
    sql/sql_select.cc:
      Bug #21159: Optimizer: wrong result after AND with different data types
       - disable const propagation for Item_hex_string.
    3915c3d9
sql_select.cc 454 KB