summaryrefslogtreecommitdiff
path: root/sql/item_subselect.cc
diff options
context:
space:
mode:
authorVarun Gupta <varun.gupta@mariadb.com>2020-05-11 19:56:14 +0530
committerVarun Gupta <varun.gupta@mariadb.com>2020-05-11 20:01:11 +0530
commit3f7e71439f6fb781a6eff0a70dfbf65ba9ef3540 (patch)
treefb151e6dc4a0404178434229129ad3909bf33e20 /sql/item_subselect.cc
parent1887b5ae87ac0d1519f95a1e2f59efe09aded98f (diff)
downloadmariadb-git-10.1-mdev22498.tar.gz
MDEV-22498: SIGSEGV in Bitmap<64u>::merge on SELECT10.1-mdev22498
For the case when the optimizer does the IN-EXISTS transformation, the equality condition is injected in the WHERE OR HAVING clause of the subquery. If the select list of the subquery has a reference to the parent select make sure to use the reference and not the original item.
Diffstat (limited to 'sql/item_subselect.cc')
-rw-r--r--sql/item_subselect.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index e3cb82df170..16ef8a192c5 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -2135,10 +2135,13 @@ Item_in_subselect::create_single_in_to_exists_cond(JOIN *join,
}
else
{
+ /*
+ No need to use real_item for the item, as the ref items that are possible
+ in the subquery either belong to views or to the parent select.
+ For such case we need to refer to the reference and not to the original
+ item.
+ */
Item *item= (Item*) select_lex->item_list.head();
- if (item->type() != REF_ITEM ||
- ((Item_ref*)item)->ref_type() != Item_ref::VIEW_REF)
- item= item->real_item();
if (select_lex->table_list.elements)
{