• unknown's avatar
    Fixed bug#18503: Queries with a quantified subquery returning empty set · d2bbf288
    unknown authored
    may return a wrong result.
    
    An Item_sum_hybrid object has the was_values flag which indicates whether any
    values were added to the sum function. By default it is set to true and reset
    to false on any no_rows_in_result() call. This method is called only in
    return_zero_rows() function. An ALL/ANY subquery can be optimized by MIN/MAX
    optimization. The was_values flag is used to indicate whether the subquery
    has returned at least one row. This bug occurs because return_zero_rows() is
    called only when we know that the select will return zero rows before
    starting any scans but often such information is not known.
    In the reported case the return_zero_rows() function is not called and
    the was_values flag is not reset to false and yet the subquery return no rows
    Item_func_not_all and Item_func_nop_all functions return a wrong
    comparison result.
    
    The end_send_group() function now calls no_rows_in_result() for each item
    in the fields_list if there is no rows were found for the (sub)query.
    
    
    mysql-test/t/subselect.test:
      Added test case for bug#18503: Queries with a quantified subquery returning empty set may return a wrong result.
    mysql-test/r/subselect.result:
      Added test case for bug#18503: Queries with a quantified subquery returning empty set may return a wrong result.
    sql/sql_select.cc:
      Fixed bug#18503: Queries with a quantified subquery returning empty set may return a wrong result.
      
      The end_send_group() function now calls no_rows_in_result() for each item
      in the fields_list if there is no matching rows were found.
    d2bbf288
subselect.result 108 KB