• Georgi Kodinov's avatar
    Bug #38637: COUNT DISTINCT prevents NULL testing in HAVING clause · e7a6e86f
    Georgi Kodinov authored
    IS NULL was not checking the correct row in a HAVING context.
    At the first row of a new group (where the HAVING clause is evaluated)
    the column and SELECT list references in the HAVING clause should 
    refer to the last row of the previous group and not to the current one. 
    This was not done for IS NULL, because it was using Item::is_null() doesn't
    have a  Item_is_null_result() counterpart to access the data from the 
    last row of the previous group. Note that all the Item::val_xxx() functions 
    (e.g. Item::val_int()) have their _result counterparts (e.g. Item::val_int_result()).
    
    Fixed by implementing a is_null_result() (similarly to int_result()) and
    calling this instead of is_null() column and SELECT list references inside
    the HAVING clause.
    
    mysql-test/r/having.result:
      Bug #38637: test case
    mysql-test/t/having.test:
      Bug #38637: test case
    sql/item.cc:
      Bug #38637: implement Item::is_null_result() and call it
      from Item_ref and Item_field as appropriate.
    sql/item.h:
      Bug #38637: implement Item::is_null_result() and call it
      from Item_ref and Item_field as appropriate.
    sql/item_func.cc:
      Bug #38637: implement Item::is_null_result() and call it
      from Item_ref and Item_field as appropriate.
    sql/item_func.h:
      Bug #38637: implement Item::is_null_result() and call it
      from Item_ref and Item_field as appropriate.
    e7a6e86f
having.test 13.8 KB