summaryrefslogtreecommitdiff
path: root/sql/item_subselect.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_subselect.cc')
-rw-r--r--sql/item_subselect.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index fa398dc6e21..0b90063f9cb 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -1201,7 +1201,10 @@ Item* Item_singlerow_subselect::expr_cache_insert_transformer(uchar *thd_arg)
if (expr_cache_is_needed(thd) &&
(expr_cache= set_expr_cache(thd)))
+ {
+ set_expr_cache_stat(thd);
DBUG_RETURN(expr_cache);
+ }
DBUG_RETURN(this);
}
@@ -1497,7 +1500,10 @@ Item* Item_exists_subselect::expr_cache_insert_transformer(uchar *thd_arg)
if (substype() == EXISTS_SUBS && expr_cache_is_needed(thd) &&
(expr_cache= set_expr_cache(thd)))
+ {
+ set_expr_cache_stat(thd);
DBUG_RETURN(expr_cache);
+ }
DBUG_RETURN(this);
}
@@ -6556,3 +6562,16 @@ void subselect_table_scan_engine::cleanup()
{
}
+void Item_subselect::set_expr_cache_stat(THD *thd)
+{
+ if(!expr_cache)
+ return;
+
+ Explain_query *qw= thd->lex->explain;
+ DBUG_ASSERT(qw);
+ Explain_node *node= qw->get_node(unit->first_select()->select_number);
+ if (!node)
+ return;
+ DBUG_ASSERT(expr_cache->type() == Item::EXPR_CACHE_ITEM);
+ node->cache_stat= ((Item_cache_wrapper *)expr_cache)->set_stat(qw->mem_root);
+}