diff options
Diffstat (limited to 'sql/item_subselect.cc')
-rw-r--r-- | sql/item_subselect.cc | 19 |
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); +} |