• Roy Lyseng's avatar
    Bug#15972635: Incorrect results returned in 32 table join with HAVING · 96c373c5
    Roy Lyseng authored
    The problem is a shift operation that is not 64-bit safe.
    The consequence is that used tables information for a join with 32 tables
    or more will be incorrect.
    
    Fixed by adding a type cast in Item_sum::update_used_tables().
    
    Also used the opportunity to fix some other potential bugs by adding an
    explicit type-cast to an integer in a left-shift operation.
    Some of them were quite harmless, but was fixed in order to get the same
    signed-ness as the other operand of the operation it was used in.
    
    sql/item_cmpfunc.cc
      Adjusted signed-ness for some integers in left-shift.
    
    sql/item_subselect.cc
      Added type-cast to nesting_map (which is a 32/64 bit type, so
      potential bug for deeply nested queries).
    
    sql/item_sum.cc
      Added type-cast to nesting_map (32/64-bit type) and table_map
      (64-bit type).
    
    sql/opt_range.cc
      Added type-cast to ulonglong (which is a 64-bit type).
    
    sql/sql_base.cc
      Added type-cast to nesting_map (which is a 32/64-bit type).
    
    sql/sql_select.cc
      Added type-cast to nesting_map (32/64-bit type) and key_part_map
      (64-bit type).
    
    sql/strfunc.cc
      Changed type-cast from longlong to ulonglong, to preserve signed-ness.
    96c373c5
item_cmpfunc.cc 149 KB