Commit 42817571 authored by unknown's avatar unknown

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
parent 637607f0
...@@ -238,7 +238,7 @@ class Item_func_ne :public Item_bool_rowready_func2 ...@@ -238,7 +238,7 @@ class Item_func_ne :public Item_bool_rowready_func2
longlong val_int(); longlong val_int();
enum Functype functype() const { return NE_FUNC; } enum Functype functype() const { return NE_FUNC; }
cond_result eq_cmp_result() const { return COND_FALSE; } 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 "<>"; } const char *func_name() const { return "<>"; }
}; };
......
...@@ -880,10 +880,17 @@ static SEL_TREE * ...@@ -880,10 +880,17 @@ static SEL_TREE *
get_mm_parts(PARAM *param,Field *field, Item_func::Functype type,Item *value, get_mm_parts(PARAM *param,Field *field, Item_func::Functype type,Item *value,
Item_result cmp_type) Item_result cmp_type)
{ {
bool ne_func= FALSE;
DBUG_ENTER("get_mm_parts"); DBUG_ENTER("get_mm_parts");
if (field->table != param->table) if (field->table != param->table)
DBUG_RETURN(0); 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; KEY_PART *key_part = param->key_parts,*end=param->key_parts_end;
SEL_TREE *tree=0; SEL_TREE *tree=0;
if (value && if (value &&
...@@ -913,6 +920,14 @@ get_mm_parts(PARAM *param,Field *field, Item_func::Functype type,Item *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); 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); DBUG_RETURN(tree);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment