mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
item_cmpfunc.h, opt_range.cc:
Added inequality predicate to range optimization sql/opt_range.cc: Added inequality predicate to range optimization sql/item_cmpfunc.h: Added inequality predicate to range optimization
This commit is contained in:
@@ -238,7 +238,7 @@ public:
|
||||
longlong val_int();
|
||||
enum Functype functype() const { return NE_FUNC; }
|
||||
cond_result eq_cmp_result() const { return COND_FALSE; }
|
||||
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
||||
optimize_type select_optimize() const { return OPTIMIZE_KEY; }
|
||||
const char *func_name() const { return "<>"; }
|
||||
};
|
||||
|
||||
|
||||
@@ -880,10 +880,17 @@ static SEL_TREE *
|
||||
get_mm_parts(PARAM *param,Field *field, Item_func::Functype type,Item *value,
|
||||
Item_result cmp_type)
|
||||
{
|
||||
bool ne_func= FALSE;
|
||||
DBUG_ENTER("get_mm_parts");
|
||||
if (field->table != param->table)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
if (type == Item_func::NE_FUNC)
|
||||
{
|
||||
ne_func= TRUE;
|
||||
type= Item_func::LT_FUNC;
|
||||
}
|
||||
|
||||
KEY_PART *key_part = param->key_parts,*end=param->key_parts_end;
|
||||
SEL_TREE *tree=0;
|
||||
if (value &&
|
||||
@@ -913,6 +920,14 @@ get_mm_parts(PARAM *param,Field *field, Item_func::Functype type,Item *value,
|
||||
tree->keys[key_part->key]=sel_add(tree->keys[key_part->key],sel_arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (ne_func)
|
||||
{
|
||||
SEL_TREE *tree2= get_mm_parts(param, field, Item_func::GT_FUNC,
|
||||
value, cmp_type);
|
||||
if (tree2)
|
||||
tree= tree=tree_or(param,tree,tree2);
|
||||
}
|
||||
DBUG_RETURN(tree);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user