From 2c892440a7a39db0cf7684f409fb8ff41063f9be Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 8 Apr 2013 12:04:28 +0300 Subject: If a range tree has a branch that is an expensive constant, currently get_mm_tree skipped the evaluation of this constant and icorrectly proceeded. The correct behavior is to return a NULL subtree, according to the IF branch being fixed - when it evaluates the constant it returns a value, and doesn't continue further. --- sql/opt_range.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 2cab05b26ab..af47578e8e3 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -7244,8 +7244,10 @@ static SEL_TREE *get_mm_tree(RANGE_OPT_PARAM *param,COND *cond) DBUG_RETURN(tree); } /* Here when simple cond */ - if (cond->const_item() && !cond->is_expensive()) + if (cond->const_item()) { + if (cond->is_expensive()) + DBUG_RETURN(0); /* During the cond->val_int() evaluation we can come across a subselect item which may allocate memory on the thd->mem_root and assumes -- cgit v1.2.1