• Alexey Kopytov's avatar
    Bug #54190: Comparison to row subquery produces incorrect · 453107bc
    Alexey Kopytov authored
                result
    
    Row subqueries producing no rows were not handled as UNKNOWN
    values in row comparison expressions.
    
    That was a result of the following two problems:
    
    1. Item_singlerow_subselect did not mark the resulting row
    value as NULL/UNKNOWN when no rows were produced.
    
    2. Arg_comparator::compare_row() did not take into account that
    a whole argument may be NULL rather than just individual scalar
    values.
    
    Before bug#34384 was fixed, the above problems were hidden
    because an uninitialized (i.e. without any stored value) cached
    object would appear as NULL for scalar values in a row subquery
    returning an empty result. After the fix
    Arg_comparator::compare_row() would try to evaluate
    uninitialized cached objects.
    
    Fixed by removing the aforementioned problems.
    
    
    mysql-test/r/row.result:
      Added a test case for bug #54190.
    mysql-test/r/subselect.result:
      Updated the result for a test relying on wrong behavior.
    mysql-test/t/row.test:
      Added a test case for bug #54190.
    sql/item_cmpfunc.cc:
      If either of the argument rows is NULL, return NULL as the
      result of comparison.
    sql/item_subselect.cc:
      Adjust null_value for Item_singlerow_subselect depending on
      whether a row has been produced by the row subquery.
    453107bc
item_cmpfunc.cc 141 KB