summaryrefslogtreecommitdiff
path: root/sql/opt_range.cc
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2017-02-17 13:37:18 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2017-02-17 13:37:18 +0100
commitd1a37eab2b353a0475da26fd4157a37e76fa4808 (patch)
tree999c24fa33f90f50b1ed674e6788ac1ce678d058 /sql/opt_range.cc
parent29d78dbb44ee9890b6bc28873344f20fc9157928 (diff)
downloadmariadb-git-bb-5.5-MDEV-9455.tar.gz
MDEV-9455: [ERROR] mysqld got signal 11bb-5.5-MDEV-9455
Switch MEM_ROOT to non-prune_partitions() during optimizing subselect.
Diffstat (limited to 'sql/opt_range.cc')
-rw-r--r--sql/opt_range.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 7f159016ff8..25a9e729a8b 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -7500,8 +7500,15 @@ static SEL_TREE *get_mm_tree(RANGE_OPT_PARAM *param,COND *cond)
if (cond_func->functype() == Item_func::BETWEEN ||
cond_func->functype() == Item_func::IN_FUNC)
inv= ((Item_func_opt_neg *) cond_func)->negated;
- else if (cond_func->select_optimize() == Item_func::OPTIMIZE_NONE)
- DBUG_RETURN(0);
+ else
+ {
+ MEM_ROOT *tmp_root= param->mem_root;
+ param->thd->mem_root= param->old_root;
+ Item_func::optimize_type opt_res= cond_func->select_optimize();
+ param->thd->mem_root= tmp_root;
+ if (opt_res == Item_func::OPTIMIZE_NONE)
+ DBUG_RETURN(0);
+ }
param->cond= cond;