1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-8229 GROUP_MIN_MAX is erroneously applied for BETWEEN in some cases

This commit is contained in:
Alexander Barkov
2015-06-25 12:51:32 +04:00
parent 1f4a89b10c
commit 42bc08b347
6 changed files with 152 additions and 24 deletions

View File

@@ -13455,13 +13455,22 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item,
if (!simple_pred(pred, args, &inv))
DBUG_RETURN(FALSE);
if (args[0] && args[1] && !args[2]) // this is a binary function
if (args[0] && args[1]) // this is a binary function or BETWEEN
{
DBUG_ASSERT(pred->is_bool_type());
Item_bool_func *bool_func= (Item_bool_func*) pred;
if (!bool_func->can_optimize_group_min_max(min_max_arg_item,
args[1]))
DBUG_RETURN(FALSE);
Field *field= min_max_arg_item->field;
if (!args[2]) // this is a binary function
{
if (!field->can_optimize_group_min_max(bool_func, args[1]))
DBUG_RETURN(FALSE);
}
else // this is BETWEEN
{
if (!field->can_optimize_group_min_max(bool_func, args[1]) ||
!field->can_optimize_group_min_max(bool_func, args[2]))
DBUG_RETURN(FALSE);
}
}
}
else