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.
This commit is contained in:
parent
69559b9213
commit
385de8743a
@ -7244,8 +7244,10 @@ static SEL_TREE *get_mm_tree(RANGE_OPT_PARAM *param,COND *cond)
|
|||||||
DBUG_RETURN(tree);
|
DBUG_RETURN(tree);
|
||||||
}
|
}
|
||||||
/* Here when simple cond */
|
/* 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
|
During the cond->val_int() evaluation we can come across a subselect
|
||||||
item which may allocate memory on the thd->mem_root and assumes
|
item which may allocate memory on the thd->mem_root and assumes
|
||||||
|
Loading…
x
Reference in New Issue
Block a user