summaryrefslogtreecommitdiff
path: root/sql/item_subselect.cc
diff options
context:
space:
mode:
authorunknown <igor@rurik.mysql.com>2005-08-07 14:03:46 -0700
committerunknown <igor@rurik.mysql.com>2005-08-07 14:03:46 -0700
commit84d34d9d59d5d4c54787b0ceb40e087a130542a9 (patch)
tree5030101e137e6e0eecee5484131551642bfd4d3e /sql/item_subselect.cc
parentb9e04cf1efa45a717832cd2500502edb4c318858 (diff)
downloadmariadb-git-84d34d9d59d5d4c54787b0ceb40e087a130542a9.tar.gz
subselect.result:
Added test case for bug #11867. Fixed results for two existing test cases. subselect.test: Added test case for bug #11867. item_subselect.cc: Fixed bug #11867. Added missing code in Item_in_subselect::row_value_transformer that caused problems for queries with ROW(elems) IN (SELECT DISTINCT cols FROM ...). sql/item_subselect.cc: Fixed bug #11867. Added missing code in Item_in_subselect::row_value_transformer that caused problems for queries with ROW(elems) IN (SELECT DISTINCT cols FROM ...). mysql-test/t/subselect.test: Added test case for bug #11867. mysql-test/r/subselect.result: Added test case for bug #11867. Fixed results for two existing test cases.
Diffstat (limited to 'sql/item_subselect.cc')
-rw-r--r--sql/item_subselect.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 82954a664c0..6ec8b11d863 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -951,14 +951,19 @@ Item_in_subselect::row_value_transformer(JOIN *join)
List_iterator_fast<Item> li(select_lex->item_list);
for (uint i= 0; i < n; i++)
{
+ Item *func;
DBUG_ASSERT(left_expr->fixed && select_lex->ref_pointer_array[i]->fixed);
if (select_lex->ref_pointer_array[i]->
check_cols(left_expr->el(i)->cols()))
DBUG_RETURN(RES_ERROR);
- Item *func= new Item_ref_null_helper(this,
- select_lex->ref_pointer_array+i,
- (char *) "<no matter>",
- (char *) "<list ref>");
+ if (join->having || select_lex->with_sum_func ||
+ select_lex->group_list.elements)
+ func= new Item_ref_null_helper(this,
+ select_lex->ref_pointer_array+i,
+ (char *) "<no matter>",
+ (char *) "<list ref>");
+ else
+ func= li++;
func=
eq_creator.create(new Item_direct_ref((*optimizer->get_cache())->
addr(i),