Commit 670b6573 authored by unknown's avatar unknown
Browse files

BUG#18198: Partition function handling

Review fixes


sql/item.h:
  Review fixes
sql/item_cmpfunc.h:
  Review fixes
sql/item_func.h:
  Review fixes
sql/item_strfunc.h:
  Review fixes
sql/item_timefunc.h:
  Review fixes
sql/item_xmlfunc.h:
  Review fixes
sql/partition_info.cc:
  Review fixes
sql/partition_info.h:
  Review fixes
sql/sql_partition.cc:
  Review fixes
sql/sql_yacc.yy:
  Review fixes
parent f8a91e31
Loading
Loading
Loading
Loading
+14 −32
Original line number Diff line number Diff line
@@ -807,26 +807,10 @@ class Item {
    below should be defined in the new Item class.
  */

#define PF_SAFE_BINARY_COLLATION 3
#define PF_SAFE_SINGLE_CHAR_COLLATION 2
#define PF_SAFE 1
#define PF_UNSAFE 0
  bool safe_for_binary_collation(byte *int_arg)
  {
    if (*(int *)int_arg != PF_UNSAFE)
      *(int*)int_arg= PF_SAFE_BINARY_COLLATION;
    return 0;
  }
  bool safe_for_single_char_collation(byte *int_arg)
  {
    if (*(int*)int_arg == PF_SAFE)
      *(int*)int_arg= PF_SAFE_SINGLE_CHAR_COLLATION;
    return 0;
  }
  virtual bool check_partition_func_processor(byte *int_arg)
  {
    *(int *)int_arg= PF_UNSAFE;
    return 0;
    *(int *)int_arg= 0;
    return FALSE;
  }

  virtual Item *equal_fields_propagator(byte * arg) { return this; }
@@ -1126,8 +1110,7 @@ class Item_name_const : public Item
    Item::maybe_null= TRUE;
  }

  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
  bool fix_fields(THD *, Item **);

  enum Type type() const;
@@ -1174,7 +1157,7 @@ class Item_num: public Item
  Item_num() {}                               /* Remove gcc warning */
  virtual Item_num *neg()= 0;
  Item *safe_charset_converter(CHARSET_INFO *tocs);
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE;}
};

#define NO_CACHED_FIELD_INDEX ((uint)(-1))
@@ -1310,7 +1293,7 @@ class Item_field :public Item_ident
  bool collect_item_field_processor(byte * arg);
  bool find_item_in_field_list_processor(byte *arg);
  bool register_field_in_read_map(byte *arg);
  bool check_partition_func_processor(byte *int_arg) { return 0; }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
  void cleanup();
  bool result_as_longlong()
  {
@@ -1358,7 +1341,7 @@ class Item_null :public Item
  bool is_null() { return 1; }
  void print(String *str) { str->append(STRING_WITH_LEN("NULL")); }
  Item *safe_charset_converter(CHARSET_INFO *tocs);
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE;}
};

class Item_null_result :public Item_null
@@ -1372,7 +1355,7 @@ class Item_null_result :public Item_null
    save_in_field(result_field, no_conversions);
  }
  bool check_partition_func_processor(byte *int_arg)
  { *(int *)int_arg= PF_UNSAFE; return 0; }
  { *(int *)int_arg= 0; return FALSE; }
};  

/* Item represents one placeholder ('?') of prepared statement */
@@ -1664,7 +1647,7 @@ class Item_static_float_func :public Item_float
  void print(String *str) { str->append(func_name); }
  Item *safe_charset_converter(CHARSET_INFO *tocs);
  bool check_partition_func_processor(byte *int_arg)
  { *(int *)int_arg= PF_UNSAFE; return 0; }
  { *(int *)int_arg= 0; return FALSE; }
};


@@ -1742,7 +1725,7 @@ class Item_string :public Item
  void print(String *str);
  // to prevent drop fixed flag (no need parent cleanup call)
  void cleanup() {}
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE;}
};


@@ -1758,7 +1741,7 @@ class Item_static_string_func :public Item_string
  Item *safe_charset_converter(CHARSET_INFO *tocs);
  void print(String *str) { str->append(func_name); }
  bool check_partition_func_processor(byte *int_arg)
  { *(int *)int_arg= PF_UNSAFE; return 0; }
  { *(int *)int_arg= 0; return FALSE; }
};


@@ -1772,7 +1755,7 @@ class Item_datetime :public Item_string
  { max_length=19;}
  enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
  bool check_partition_func_processor(byte *int_arg)
  { *(int *)int_arg= PF_UNSAFE; return 0; }
  { *(int *)int_arg= 0; return FALSE; }
};

class Item_empty_string :public Item_string
@@ -1796,7 +1779,7 @@ class Item_return_int :public Item_int
  }
  enum_field_types field_type() const { return int_field_type; }
  bool check_partition_func_processor(byte *int_arg)
  { *(int *)int_arg= PF_UNSAFE; return 0; }
  { *(int *)int_arg= 0; return FALSE; }
};


@@ -1820,8 +1803,7 @@ class Item_hex_string: public Item
  void cleanup() {}
  bool eq(const Item *item, bool binary_cmp) const;
  virtual Item *safe_charset_converter(CHARSET_INFO *tocs);
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_binary_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -2049,7 +2031,7 @@ class Item_int_with_ref :public Item_int
  Item *new_item();
  virtual Item *real_item() { return ref; }
  bool check_partition_func_processor(byte *int_arg)
  { *(int *)int_arg= PF_UNSAFE; return 0; }
  { *(int *)int_arg= 0; return FALSE; }
};

#ifdef MYSQL_SERVER
+14 −23
Original line number Diff line number Diff line
@@ -240,8 +240,7 @@ class Item_bool_rowready_func2 :public Item_bool_func2
  }
  Item *neg_transformer(THD *thd);
  virtual Item *negated_item();
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_not :public Item_bool_func
@@ -252,8 +251,7 @@ class Item_func_not :public Item_bool_func
  enum Functype functype() const { return NOT_FUNC; }
  const char *func_name() const { return "not"; }
  Item *neg_transformer(THD *thd);
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_maxmin_subselect;
@@ -468,8 +466,7 @@ class Item_func_between :public Item_func_opt_neg
  bool is_bool_func() { return 1; }
  CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
  uint decimal_precision() const { return 1; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -481,8 +478,7 @@ class Item_func_strcmp :public Item_bool_func2
  optimize_type select_optimize() const { return OPTIMIZE_NONE; }
  const char *func_name() const { return "strcmp"; }
  void print(String *str) { Item_func::print(str); }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -545,7 +541,7 @@ class Item_func_ifnull :public Item_func_coalesce
  const char *func_name() const { return "ifnull"; }
  Field *tmp_table_field(TABLE *table);
  uint decimal_precision() const;
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -586,7 +582,7 @@ class Item_func_nullif :public Item_bool_func2
  void print(String *str) { Item_func::print(str); }
  table_map not_null_tables() const { return 0; }
  bool is_null();
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -629,8 +625,7 @@ class Item_func_case :public Item_func
  void print(String *str);
  Item *find_item(String *str);
  CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -981,8 +976,7 @@ class Item_func_in :public Item_func_opt_neg
  bool nulls_in_row();
  bool is_bool_func() { return 1; }
  CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

/* Functions used by where clause */
@@ -1024,7 +1018,7 @@ class Item_func_isnull :public Item_bool_func
  optimize_type select_optimize() const { return OPTIMIZE_NULL; }
  Item *neg_transformer(THD *thd);
  CHARSET_INFO *compare_collation() { return args[0]->collation.collation; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

/* Functions used by HAVING for rewriting IN subquery */
@@ -1047,7 +1041,7 @@ class Item_is_not_null_test :public Item_func_isnull
  table_map used_tables() const
    { return used_tables_cache | RAND_TABLE_BIT; }
  bool check_partition_func_processor(byte *int_arg)
  { *(int *)int_arg= PF_UNSAFE; return 0; }
  { *(int *)int_arg= 0; return FALSE; }
};


@@ -1070,7 +1064,7 @@ class Item_func_isnotnull :public Item_bool_func
  void print(String *str);
  CHARSET_INFO *compare_collation() { return args[0]->collation.collation; }
  void top_level_item() { abort_on_null=1; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -1109,8 +1103,7 @@ class Item_func_like :public Item_bool_func2
  const char *func_name() const { return "like"; }
  bool fix_fields(THD *thd, Item **ref);
  void cleanup();
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

#ifdef USE_REGEX
@@ -1133,8 +1126,7 @@ class Item_func_regex :public Item_bool_func
  const char *func_name() const { return "regexp"; }
  void print(String *str) { print_op(str); }
  CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_binary_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

#else
@@ -1191,8 +1183,7 @@ class Item_cond :public Item_bool_func
  Item *transform(Item_transformer transformer, byte *arg);
  void traverse_cond(Cond_traverser, void *arg, traverse_order order);
  void neg_arguments(THD *thd);
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg); }
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


+30 −36
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ class Item_func_num1: public Item_func_numhybrid
  void fix_num_length_and_dec();
  void find_num_type();
  String *str_op(String *str) { DBUG_ASSERT(0); return 0; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -260,7 +260,7 @@ class Item_num_op :public Item_func_numhybrid
  void print(String *str) { print_op(str); }
  void find_num_type();
  String *str_op(String *str) { DBUG_ASSERT(0); return 0; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -311,7 +311,7 @@ class Item_func_signed :public Item_int_func
  { max_length=args[0]->max_length; unsigned_flag=0; }
  void print(String *str);
  uint decimal_precision() const { return args[0]->decimal_precision(); }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -345,7 +345,7 @@ class Item_decimal_typecast :public Item_func
  void fix_length_and_dec() {};
  const char *func_name() const { return "decimal_typecast"; }
  void print(String *);
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -414,7 +414,7 @@ class Item_func_int_div :public Item_int_func
  const char *func_name() const { return "DIV"; }
  void fix_length_and_dec();
  void print(String *str) { print_op(str); }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -487,7 +487,7 @@ class Item_func_exp :public Item_dec_func
  Item_func_exp(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "exp"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -497,7 +497,7 @@ class Item_func_ln :public Item_dec_func
  Item_func_ln(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "ln"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -508,7 +508,7 @@ class Item_func_log :public Item_dec_func
  Item_func_log(Item *a,Item *b) :Item_dec_func(a,b) {}
  double val_real();
  const char *func_name() const { return "log"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -518,7 +518,7 @@ class Item_func_log2 :public Item_dec_func
  Item_func_log2(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "log2"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -528,7 +528,7 @@ class Item_func_log10 :public Item_dec_func
  Item_func_log10(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "log10"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -538,7 +538,7 @@ class Item_func_sqrt :public Item_dec_func
  Item_func_sqrt(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "sqrt"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -548,7 +548,7 @@ class Item_func_pow :public Item_dec_func
  Item_func_pow(Item *a,Item *b) :Item_dec_func(a,b) {}
  double val_real();
  const char *func_name() const { return "pow"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -558,7 +558,7 @@ class Item_func_acos :public Item_dec_func
  Item_func_acos(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "acos"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_asin :public Item_dec_func
@@ -567,7 +567,7 @@ class Item_func_asin :public Item_dec_func
  Item_func_asin(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "asin"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_atan :public Item_dec_func
@@ -577,7 +577,7 @@ class Item_func_atan :public Item_dec_func
  Item_func_atan(Item *a,Item *b) :Item_dec_func(a,b) {}
  double val_real();
  const char *func_name() const { return "atan"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_cos :public Item_dec_func
@@ -586,7 +586,7 @@ class Item_func_cos :public Item_dec_func
  Item_func_cos(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "cos"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_sin :public Item_dec_func
@@ -595,7 +595,7 @@ class Item_func_sin :public Item_dec_func
  Item_func_sin(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "sin"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_tan :public Item_dec_func
@@ -604,7 +604,7 @@ class Item_func_tan :public Item_dec_func
  Item_func_tan(Item *a) :Item_dec_func(a) {}
  double val_real();
  const char *func_name() const { return "tan"; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_integer :public Item_int_func
@@ -681,7 +681,7 @@ class Item_func_sign :public Item_int_func
  Item_func_sign(Item *a) :Item_int_func(a) {}
  const char *func_name() const { return "sign"; }
  longlong val_int();
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -696,7 +696,7 @@ class Item_func_units :public Item_real_func
  const char *func_name() const { return name; }
  void fix_length_and_dec()
  { decimals= NOT_FIXED_DEC; max_length= float_length(decimals); }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -714,7 +714,7 @@ class Item_func_min_max :public Item_func
  my_decimal *val_decimal(my_decimal *);
  void fix_length_and_dec();
  enum Item_result result_type () const { return cmp_type; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_min :public Item_func_min_max
@@ -740,8 +740,7 @@ class Item_func_length :public Item_int_func
  longlong val_int();
  const char *func_name() const { return "length"; }
  void fix_length_and_dec() { max_length=10; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_bit_length :public Item_func_length
@@ -761,8 +760,7 @@ class Item_func_char_length :public Item_int_func
  longlong val_int();
  const char *func_name() const { return "char_length"; }
  void fix_length_and_dec() { max_length=10; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_coercibility :public Item_int_func
@@ -786,8 +784,7 @@ class Item_func_locate :public Item_int_func
  longlong val_int();
  void fix_length_and_dec();
  void print(String *str);
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -812,8 +809,7 @@ class Item_func_ascii :public Item_int_func
  longlong val_int();
  const char *func_name() const { return "ascii"; }
  void fix_length_and_dec() { max_length=3; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_ord :public Item_int_func
@@ -823,8 +819,7 @@ class Item_func_ord :public Item_int_func
  Item_func_ord(Item *a) :Item_int_func(a) {}
  longlong val_int();
  const char *func_name() const { return "ord"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_find_in_set :public Item_int_func
@@ -838,8 +833,7 @@ class Item_func_find_in_set :public Item_int_func
  longlong val_int();
  const char *func_name() const { return "find_in_set"; }
  void fix_length_and_dec();
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

/* Base class for all bit functions: '~', '|', '^', '&', '>>', '<<' */
@@ -851,7 +845,7 @@ class Item_func_bit: public Item_int_func
  Item_func_bit(Item *a) :Item_int_func(a) {}
  void fix_length_and_dec() { unsigned_flag= 1; }
  void print(String *str) { print_op(str); }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_bit_or :public Item_func_bit
@@ -877,7 +871,7 @@ class Item_func_bit_count :public Item_int_func
  longlong val_int();
  const char *func_name() const { return "bit_count"; }
  void fix_length_and_dec() { max_length=2; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_shift_left :public Item_func_bit
@@ -1314,7 +1308,7 @@ class Item_func_inet_aton : public Item_int_func
   longlong val_int();
   const char *func_name() const { return "inet_aton"; }
   void fix_length_and_dec() { decimals = 0; max_length = 21; maybe_null=1;}
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


+14 −26
Original line number Diff line number Diff line
@@ -47,8 +47,7 @@ class Item_func_md5 :public Item_str_func
  String *val_str(String *);
  void fix_length_and_dec();
  const char *func_name() const { return "md5"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -89,8 +88,7 @@ class Item_func_concat :public Item_str_func
  String *val_str(String *);
  void fix_length_and_dec();
  const char *func_name() const { return "concat"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_concat_ws :public Item_str_func
@@ -111,8 +109,7 @@ class Item_func_reverse :public Item_str_func
  String *val_str(String *);
  void fix_length_and_dec();
  const char *func_name() const { return "reverse"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -150,8 +147,7 @@ class Item_str_conv :public Item_str_func
public:
  Item_str_conv(Item *item) :Item_str_func(item) {}
  String *val_str(String *);
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_binary_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -419,8 +415,7 @@ class Item_func_soundex :public Item_str_func
  String *val_str(String *);
  void fix_length_and_dec();
  const char *func_name() const { return "soundex"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -528,8 +523,7 @@ class Item_func_rpad :public Item_str_func
  String *val_str(String *);
  void fix_length_and_dec();
  const char *func_name() const { return "rpad"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -542,8 +536,7 @@ class Item_func_lpad :public Item_str_func
  String *val_str(String *);
  void fix_length_and_dec();
  const char *func_name() const { return "lpad"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -558,8 +551,7 @@ class Item_func_conv :public Item_str_func
    collation.set(default_charset());
    max_length= 64;
  }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -576,8 +568,7 @@ class Item_func_hex :public Item_str_func
    decimals=0;
    max_length=args[0]->max_length*2*collation.collation->mbmaxlen;
  }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_binary_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_unhex :public Item_str_func
@@ -593,8 +584,7 @@ class Item_func_unhex :public Item_str_func
    decimals=0;
    max_length=(1+args[0]->max_length)/2;
  }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_binary_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -618,8 +608,7 @@ class Item_func_binary :public Item_str_func
  }
  void print(String *str);
  const char *func_name() const { return "cast_as_binary"; }
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};


@@ -659,7 +648,7 @@ class Item_func_inet_ntoa : public Item_str_func
  String* val_str(String* str);
  const char *func_name() const { return "inet_ntoa"; }
  void fix_length_and_dec() { decimals = 0; max_length=3*8+7; }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_quote :public Item_str_func
@@ -674,7 +663,7 @@ class Item_func_quote :public Item_str_func
    collation.set(args[0]->collation);
    max_length= args[0]->max_length * 2 + 2;
  }
  bool check_partition_func_processor(byte *int_arg) { return 0;}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_conv_charset :public Item_str_func
@@ -775,8 +764,7 @@ class Item_func_crc32 :public Item_int_func
  const char *func_name() const { return "crc32"; }
  void fix_length_and_dec() { max_length=10; }
  longlong val_int();
  bool check_partition_func_processor(byte *int_arg)
  { return safe_for_single_char_collation(int_arg);}
  bool check_partition_func_processor(byte *int_arg) { return FALSE; }
};

class Item_func_uncompressed_length : public Item_int_func
+30 −32

File changed.

Preview size limit exceeded, changes collapsed.

Loading