summaryrefslogtreecommitdiff
path: root/sql/item_func.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_func.h')
-rw-r--r--sql/item_func.h61
1 files changed, 25 insertions, 36 deletions
diff --git a/sql/item_func.h b/sql/item_func.h
index 47ba86d02e3..6b43ebaccbe 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -46,7 +46,8 @@ public:
SP_TOUCHES_FUNC,SP_CROSSES_FUNC,SP_WITHIN_FUNC,
SP_CONTAINS_FUNC,SP_OVERLAPS_FUNC,
SP_STARTPOINT,SP_ENDPOINT,SP_EXTERIORRING,
- SP_POINTN,SP_GEOMETRYN,SP_INTERIORRINGN};
+ SP_POINTN,SP_GEOMETRYN,SP_INTERIORRINGN,
+ NOT_FUNC, NOT_ALL_FUNC};
enum optimize_type { OPTIMIZE_NONE,OPTIMIZE_KEY,OPTIMIZE_OP, OPTIMIZE_NULL };
enum Type type() const { return FUNC_ITEM; }
virtual enum Functype functype() const { return UNKNOWN_FUNC; }
@@ -124,6 +125,7 @@ public:
virtual void split_sum_func(Item **ref_pointer_array, List<Item> &fields);
void print(String *str);
void print_op(String *str);
+ void print_args(String *str, uint from);
void fix_num_length_and_dec();
inline bool get_arg0_date(TIME *ltime, uint fuzzy_date)
{
@@ -214,6 +216,7 @@ public:
longlong val_int() { return args[0]->val_int(); }
void fix_length_and_dec()
{ max_length=args[0]->max_length; unsigned_flag=0; }
+ void print(String *str);
};
@@ -225,6 +228,7 @@ public:
longlong val_int() { return args[0]->val_int(); }
void fix_length_and_dec()
{ max_length=args[0]->max_length; unsigned_flag=1; }
+ void print(String *str);
};
@@ -606,6 +610,7 @@ public:
const char *func_name() const { return "locate"; }
longlong val_int();
void fix_length_and_dec();
+ void print(String *str);
};
@@ -662,6 +667,7 @@ public:
longlong val_int();
const char *func_name() const { return "|"; }
void fix_length_and_dec() { unsigned_flag=1; }
+ void print(String *str) { print_op(str); }
};
class Item_func_bit_and :public Item_int_func
@@ -671,6 +677,7 @@ public:
longlong val_int();
const char *func_name() const { return "&"; }
void fix_length_and_dec() { unsigned_flag=1; }
+ void print(String *str) { print_op(str); }
};
class Item_func_bit_count :public Item_int_func
@@ -689,6 +696,7 @@ public:
longlong val_int();
const char *func_name() const { return "<<"; }
void fix_length_and_dec() { unsigned_flag=1; }
+ void print(String *str) { print_op(str); }
};
class Item_func_shift_right :public Item_int_func
@@ -697,6 +705,7 @@ public:
Item_func_shift_right(Item *a,Item *b) :Item_int_func(a,b) {}
longlong val_int();
const char *func_name() const { return ">>"; }
+ void print(String *str) { print_op(str); }
};
class Item_func_bit_neg :public Item_int_func
@@ -727,6 +736,7 @@ class Item_func_benchmark :public Item_int_func
longlong val_int();
const char *func_name() const { return "benchmark"; }
void fix_length_and_dec() { max_length=1; maybe_null=0; }
+ void print(String *str);
};
@@ -971,20 +981,18 @@ public:
class Item_func_match :public Item_real_func
{
public:
- List<Item> fields;
- String value;
- TABLE *table;
- Item_func_match *master;
- FT_INFO * ft_handler;
- Item *concat;
- byte *record;
- uint key, mode;
+ uint key, flags;
bool join_key;
+ DTCollation cmp_collation;
+ FT_INFO *ft_handler;
+ TABLE *table;
+ Item_func_match *master; // for master-slave optimization
+ Item *concat; // Item_func_concat_ws
+ String value; // value of concat
+ String search_value; // key_item()'s value converted to cmp_collation
- Item_func_match(List<Item> &a, Item *b): Item_real_func(b),
- fields(a), table(0), master(0), ft_handler(0),
- concat(0), key(0), join_key(0)
- {}
+ Item_func_match(List<Item> &a, uint b): Item_real_func(a), key(0), flags(b),
+ join_key(0), ft_handler(0), table(0), master(0), concat(0) { }
~Item_func_match()
{
if (!master && ft_handler)
@@ -999,37 +1007,17 @@ public:
delete concat;
}
enum Functype functype() const { return FT_FUNC; }
+ const char *func_name() const { return "match"; }
void update_used_tables() {}
table_map not_null_tables() const { return 0; }
bool fix_fields(THD *thd, struct st_table_list *tlist, Item **ref);
bool eq(const Item *, bool binary_cmp) const;
longlong val_int() { return val()!=0.0; }
double val();
+ void print(String *str);
bool fix_index();
void init_search(bool no_order);
-
- bool walk(Item_processor processor, byte *arg);
-};
-
-
-class Item_func_match_nl :public Item_func_match
-{
-public:
- Item_func_match_nl(List<Item> &a, Item *b)
- :Item_func_match(a,b)
- { mode=FT_NL; }
- const char *func_name() const { return "match_nl"; }
-};
-
-
-class Item_func_match_bool :public Item_func_match
-{
-public:
- Item_func_match_bool(List<Item> &a, Item *b)
- :Item_func_match(a,b)
- { mode=FT_BOOL; }
- const char *func_name() const { return "match_bool"; }
};
@@ -1040,6 +1028,7 @@ public:
longlong val_int();
const char *func_name() const { return "^"; }
void fix_length_xor_dec() { unsigned_flag=1; }
+ void print(String *str) { print_op(str); }
};
class Item_func_is_free_lock :public Item_int_func
@@ -1048,7 +1037,7 @@ class Item_func_is_free_lock :public Item_int_func
public:
Item_func_is_free_lock(Item *a) :Item_int_func(a) {}
longlong val_int();
- const char *func_name() const { return "check_lock"; }
+ const char *func_name() const { return "is_free_lock"; }
void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;}
};