mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
BUG#18198: Partition function handling
Review fixes
This commit is contained in:
46
sql/item.h
46
sql/item.h
@@ -807,26 +807,10 @@ public:
|
|||||||
below should be defined in the new Item class.
|
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)
|
virtual bool check_partition_func_processor(byte *int_arg)
|
||||||
{
|
{
|
||||||
*(int *)int_arg= PF_UNSAFE;
|
*(int *)int_arg= 0;
|
||||||
return 0;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Item *equal_fields_propagator(byte * arg) { return this; }
|
virtual Item *equal_fields_propagator(byte * arg) { return this; }
|
||||||
@@ -1126,8 +1110,7 @@ public:
|
|||||||
Item::maybe_null= TRUE;
|
Item::maybe_null= TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
bool fix_fields(THD *, Item **);
|
bool fix_fields(THD *, Item **);
|
||||||
|
|
||||||
enum Type type() const;
|
enum Type type() const;
|
||||||
@@ -1174,7 +1157,7 @@ public:
|
|||||||
Item_num() {} /* Remove gcc warning */
|
Item_num() {} /* Remove gcc warning */
|
||||||
virtual Item_num *neg()= 0;
|
virtual Item_num *neg()= 0;
|
||||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
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))
|
#define NO_CACHED_FIELD_INDEX ((uint)(-1))
|
||||||
@@ -1310,7 +1293,7 @@ public:
|
|||||||
bool collect_item_field_processor(byte * arg);
|
bool collect_item_field_processor(byte * arg);
|
||||||
bool find_item_in_field_list_processor(byte *arg);
|
bool find_item_in_field_list_processor(byte *arg);
|
||||||
bool register_field_in_read_map(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();
|
void cleanup();
|
||||||
bool result_as_longlong()
|
bool result_as_longlong()
|
||||||
{
|
{
|
||||||
@@ -1358,7 +1341,7 @@ public:
|
|||||||
bool is_null() { return 1; }
|
bool is_null() { return 1; }
|
||||||
void print(String *str) { str->append(STRING_WITH_LEN("NULL")); }
|
void print(String *str) { str->append(STRING_WITH_LEN("NULL")); }
|
||||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
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
|
class Item_null_result :public Item_null
|
||||||
@@ -1372,7 +1355,7 @@ public:
|
|||||||
save_in_field(result_field, no_conversions);
|
save_in_field(result_field, no_conversions);
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
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 */
|
/* Item represents one placeholder ('?') of prepared statement */
|
||||||
@@ -1664,7 +1647,7 @@ public:
|
|||||||
void print(String *str) { str->append(func_name); }
|
void print(String *str) { str->append(func_name); }
|
||||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
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 @@ public:
|
|||||||
void print(String *str);
|
void print(String *str);
|
||||||
// to prevent drop fixed flag (no need parent cleanup call)
|
// to prevent drop fixed flag (no need parent cleanup call)
|
||||||
void cleanup() {}
|
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 @@ public:
|
|||||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||||
void print(String *str) { str->append(func_name); }
|
void print(String *str) { str->append(func_name); }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
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 @@ public:
|
|||||||
{ max_length=19;}
|
{ max_length=19;}
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
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
|
class Item_empty_string :public Item_string
|
||||||
@@ -1796,7 +1779,7 @@ public:
|
|||||||
}
|
}
|
||||||
enum_field_types field_type() const { return int_field_type; }
|
enum_field_types field_type() const { return int_field_type; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
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 @@ public:
|
|||||||
void cleanup() {}
|
void cleanup() {}
|
||||||
bool eq(const Item *item, bool binary_cmp) const;
|
bool eq(const Item *item, bool binary_cmp) const;
|
||||||
virtual Item *safe_charset_converter(CHARSET_INFO *tocs);
|
virtual Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_binary_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2049,7 +2031,7 @@ public:
|
|||||||
Item *new_item();
|
Item *new_item();
|
||||||
virtual Item *real_item() { return ref; }
|
virtual Item *real_item() { return ref; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg)
|
||||||
{ *(int *)int_arg= PF_UNSAFE; return 0; }
|
{ *(int *)int_arg= 0; return FALSE; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
|
@@ -240,8 +240,7 @@ public:
|
|||||||
}
|
}
|
||||||
Item *neg_transformer(THD *thd);
|
Item *neg_transformer(THD *thd);
|
||||||
virtual Item *negated_item();
|
virtual Item *negated_item();
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_not :public Item_bool_func
|
class Item_func_not :public Item_bool_func
|
||||||
@@ -252,8 +251,7 @@ public:
|
|||||||
enum Functype functype() const { return NOT_FUNC; }
|
enum Functype functype() const { return NOT_FUNC; }
|
||||||
const char *func_name() const { return "not"; }
|
const char *func_name() const { return "not"; }
|
||||||
Item *neg_transformer(THD *thd);
|
Item *neg_transformer(THD *thd);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_maxmin_subselect;
|
class Item_maxmin_subselect;
|
||||||
@@ -468,8 +466,7 @@ public:
|
|||||||
bool is_bool_func() { return 1; }
|
bool is_bool_func() { return 1; }
|
||||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||||
uint decimal_precision() const { return 1; }
|
uint decimal_precision() const { return 1; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -481,8 +478,7 @@ public:
|
|||||||
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
||||||
const char *func_name() const { return "strcmp"; }
|
const char *func_name() const { return "strcmp"; }
|
||||||
void print(String *str) { Item_func::print(str); }
|
void print(String *str) { Item_func::print(str); }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -545,7 +541,7 @@ public:
|
|||||||
const char *func_name() const { return "ifnull"; }
|
const char *func_name() const { return "ifnull"; }
|
||||||
Field *tmp_table_field(TABLE *table);
|
Field *tmp_table_field(TABLE *table);
|
||||||
uint decimal_precision() const;
|
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 @@ public:
|
|||||||
void print(String *str) { Item_func::print(str); }
|
void print(String *str) { Item_func::print(str); }
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
bool is_null();
|
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 @@ public:
|
|||||||
void print(String *str);
|
void print(String *str);
|
||||||
Item *find_item(String *str);
|
Item *find_item(String *str);
|
||||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -981,8 +976,7 @@ public:
|
|||||||
bool nulls_in_row();
|
bool nulls_in_row();
|
||||||
bool is_bool_func() { return 1; }
|
bool is_bool_func() { return 1; }
|
||||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Functions used by where clause */
|
/* Functions used by where clause */
|
||||||
@@ -1024,7 +1018,7 @@ public:
|
|||||||
optimize_type select_optimize() const { return OPTIMIZE_NULL; }
|
optimize_type select_optimize() const { return OPTIMIZE_NULL; }
|
||||||
Item *neg_transformer(THD *thd);
|
Item *neg_transformer(THD *thd);
|
||||||
CHARSET_INFO *compare_collation() { return args[0]->collation.collation; }
|
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 */
|
/* Functions used by HAVING for rewriting IN subquery */
|
||||||
@@ -1047,7 +1041,7 @@ public:
|
|||||||
table_map used_tables() const
|
table_map used_tables() const
|
||||||
{ return used_tables_cache | RAND_TABLE_BIT; }
|
{ return used_tables_cache | RAND_TABLE_BIT; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
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 @@ public:
|
|||||||
void print(String *str);
|
void print(String *str);
|
||||||
CHARSET_INFO *compare_collation() { return args[0]->collation.collation; }
|
CHARSET_INFO *compare_collation() { return args[0]->collation.collation; }
|
||||||
void top_level_item() { abort_on_null=1; }
|
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 @@ public:
|
|||||||
const char *func_name() const { return "like"; }
|
const char *func_name() const { return "like"; }
|
||||||
bool fix_fields(THD *thd, Item **ref);
|
bool fix_fields(THD *thd, Item **ref);
|
||||||
void cleanup();
|
void cleanup();
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef USE_REGEX
|
#ifdef USE_REGEX
|
||||||
@@ -1133,8 +1126,7 @@ public:
|
|||||||
const char *func_name() const { return "regexp"; }
|
const char *func_name() const { return "regexp"; }
|
||||||
void print(String *str) { print_op(str); }
|
void print(String *str) { print_op(str); }
|
||||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_binary_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@@ -1191,8 +1183,7 @@ public:
|
|||||||
Item *transform(Item_transformer transformer, byte *arg);
|
Item *transform(Item_transformer transformer, byte *arg);
|
||||||
void traverse_cond(Cond_traverser, void *arg, traverse_order order);
|
void traverse_cond(Cond_traverser, void *arg, traverse_order order);
|
||||||
void neg_arguments(THD *thd);
|
void neg_arguments(THD *thd);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -247,7 +247,7 @@ public:
|
|||||||
void fix_num_length_and_dec();
|
void fix_num_length_and_dec();
|
||||||
void find_num_type();
|
void find_num_type();
|
||||||
String *str_op(String *str) { DBUG_ASSERT(0); return 0; }
|
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 print(String *str) { print_op(str); }
|
||||||
void find_num_type();
|
void find_num_type();
|
||||||
String *str_op(String *str) { DBUG_ASSERT(0); return 0; }
|
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 @@ public:
|
|||||||
{ max_length=args[0]->max_length; unsigned_flag=0; }
|
{ max_length=args[0]->max_length; unsigned_flag=0; }
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
uint decimal_precision() const { return args[0]->decimal_precision(); }
|
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 @@ public:
|
|||||||
void fix_length_and_dec() {};
|
void fix_length_and_dec() {};
|
||||||
const char *func_name() const { return "decimal_typecast"; }
|
const char *func_name() const { return "decimal_typecast"; }
|
||||||
void print(String *);
|
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 @@ public:
|
|||||||
const char *func_name() const { return "DIV"; }
|
const char *func_name() const { return "DIV"; }
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void print(String *str) { print_op(str); }
|
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 @@ public:
|
|||||||
Item_func_exp(Item *a) :Item_dec_func(a) {}
|
Item_func_exp(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "exp"; }
|
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 @@ public:
|
|||||||
Item_func_ln(Item *a) :Item_dec_func(a) {}
|
Item_func_ln(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "ln"; }
|
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 @@ public:
|
|||||||
Item_func_log(Item *a,Item *b) :Item_dec_func(a,b) {}
|
Item_func_log(Item *a,Item *b) :Item_dec_func(a,b) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "log"; }
|
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 @@ public:
|
|||||||
Item_func_log2(Item *a) :Item_dec_func(a) {}
|
Item_func_log2(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "log2"; }
|
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 @@ public:
|
|||||||
Item_func_log10(Item *a) :Item_dec_func(a) {}
|
Item_func_log10(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "log10"; }
|
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 @@ public:
|
|||||||
Item_func_sqrt(Item *a) :Item_dec_func(a) {}
|
Item_func_sqrt(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "sqrt"; }
|
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 @@ public:
|
|||||||
Item_func_pow(Item *a,Item *b) :Item_dec_func(a,b) {}
|
Item_func_pow(Item *a,Item *b) :Item_dec_func(a,b) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "pow"; }
|
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 @@ public:
|
|||||||
Item_func_acos(Item *a) :Item_dec_func(a) {}
|
Item_func_acos(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "acos"; }
|
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
|
class Item_func_asin :public Item_dec_func
|
||||||
@@ -567,7 +567,7 @@ public:
|
|||||||
Item_func_asin(Item *a) :Item_dec_func(a) {}
|
Item_func_asin(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "asin"; }
|
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
|
class Item_func_atan :public Item_dec_func
|
||||||
@@ -577,7 +577,7 @@ public:
|
|||||||
Item_func_atan(Item *a,Item *b) :Item_dec_func(a,b) {}
|
Item_func_atan(Item *a,Item *b) :Item_dec_func(a,b) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "atan"; }
|
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
|
class Item_func_cos :public Item_dec_func
|
||||||
@@ -586,7 +586,7 @@ public:
|
|||||||
Item_func_cos(Item *a) :Item_dec_func(a) {}
|
Item_func_cos(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "cos"; }
|
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
|
class Item_func_sin :public Item_dec_func
|
||||||
@@ -595,7 +595,7 @@ public:
|
|||||||
Item_func_sin(Item *a) :Item_dec_func(a) {}
|
Item_func_sin(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "sin"; }
|
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
|
class Item_func_tan :public Item_dec_func
|
||||||
@@ -604,7 +604,7 @@ public:
|
|||||||
Item_func_tan(Item *a) :Item_dec_func(a) {}
|
Item_func_tan(Item *a) :Item_dec_func(a) {}
|
||||||
double val_real();
|
double val_real();
|
||||||
const char *func_name() const { return "tan"; }
|
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
|
class Item_func_integer :public Item_int_func
|
||||||
@@ -681,7 +681,7 @@ public:
|
|||||||
Item_func_sign(Item *a) :Item_int_func(a) {}
|
Item_func_sign(Item *a) :Item_int_func(a) {}
|
||||||
const char *func_name() const { return "sign"; }
|
const char *func_name() const { return "sign"; }
|
||||||
longlong val_int();
|
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 @@ public:
|
|||||||
const char *func_name() const { return name; }
|
const char *func_name() const { return name; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{ decimals= NOT_FIXED_DEC; max_length= float_length(decimals); }
|
{ 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 @@ public:
|
|||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
enum Item_result result_type () const { return cmp_type; }
|
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
|
class Item_func_min :public Item_func_min_max
|
||||||
@@ -740,8 +740,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "length"; }
|
const char *func_name() const { return "length"; }
|
||||||
void fix_length_and_dec() { max_length=10; }
|
void fix_length_and_dec() { max_length=10; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_bit_length :public Item_func_length
|
class Item_func_bit_length :public Item_func_length
|
||||||
@@ -761,8 +760,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "char_length"; }
|
const char *func_name() const { return "char_length"; }
|
||||||
void fix_length_and_dec() { max_length=10; }
|
void fix_length_and_dec() { max_length=10; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_coercibility :public Item_int_func
|
class Item_func_coercibility :public Item_int_func
|
||||||
@@ -786,8 +784,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -812,8 +809,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "ascii"; }
|
const char *func_name() const { return "ascii"; }
|
||||||
void fix_length_and_dec() { max_length=3; }
|
void fix_length_and_dec() { max_length=3; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_ord :public Item_int_func
|
class Item_func_ord :public Item_int_func
|
||||||
@@ -823,8 +819,7 @@ public:
|
|||||||
Item_func_ord(Item *a) :Item_int_func(a) {}
|
Item_func_ord(Item *a) :Item_int_func(a) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "ord"; }
|
const char *func_name() const { return "ord"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_find_in_set :public Item_int_func
|
class Item_func_find_in_set :public Item_int_func
|
||||||
@@ -838,8 +833,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "find_in_set"; }
|
const char *func_name() const { return "find_in_set"; }
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Base class for all bit functions: '~', '|', '^', '&', '>>', '<<' */
|
/* Base class for all bit functions: '~', '|', '^', '&', '>>', '<<' */
|
||||||
@@ -851,7 +845,7 @@ public:
|
|||||||
Item_func_bit(Item *a) :Item_int_func(a) {}
|
Item_func_bit(Item *a) :Item_int_func(a) {}
|
||||||
void fix_length_and_dec() { unsigned_flag= 1; }
|
void fix_length_and_dec() { unsigned_flag= 1; }
|
||||||
void print(String *str) { print_op(str); }
|
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
|
class Item_func_bit_or :public Item_func_bit
|
||||||
@@ -877,7 +871,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "bit_count"; }
|
const char *func_name() const { return "bit_count"; }
|
||||||
void fix_length_and_dec() { max_length=2; }
|
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
|
class Item_func_shift_left :public Item_func_bit
|
||||||
@@ -1314,7 +1308,7 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "inet_aton"; }
|
const char *func_name() const { return "inet_aton"; }
|
||||||
void fix_length_and_dec() { decimals = 0; max_length = 21; maybe_null=1;}
|
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; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -47,8 +47,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "md5"; }
|
const char *func_name() const { return "md5"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -89,8 +88,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "concat"; }
|
const char *func_name() const { return "concat"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_concat_ws :public Item_str_func
|
class Item_func_concat_ws :public Item_str_func
|
||||||
@@ -111,8 +109,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "reverse"; }
|
const char *func_name() const { return "reverse"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -150,8 +147,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
Item_str_conv(Item *item) :Item_str_func(item) {}
|
Item_str_conv(Item *item) :Item_str_func(item) {}
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_binary_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -419,8 +415,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "soundex"; }
|
const char *func_name() const { return "soundex"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -528,8 +523,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "rpad"; }
|
const char *func_name() const { return "rpad"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -542,8 +536,7 @@ public:
|
|||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "lpad"; }
|
const char *func_name() const { return "lpad"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -558,8 +551,7 @@ public:
|
|||||||
collation.set(default_charset());
|
collation.set(default_charset());
|
||||||
max_length= 64;
|
max_length= 64;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -576,8 +568,7 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=args[0]->max_length*2*collation.collation->mbmaxlen;
|
max_length=args[0]->max_length*2*collation.collation->mbmaxlen;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_binary_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_unhex :public Item_str_func
|
class Item_func_unhex :public Item_str_func
|
||||||
@@ -593,8 +584,7 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=(1+args[0]->max_length)/2;
|
max_length=(1+args[0]->max_length)/2;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_binary_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -618,8 +608,7 @@ public:
|
|||||||
}
|
}
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
const char *func_name() const { return "cast_as_binary"; }
|
const char *func_name() const { return "cast_as_binary"; }
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -659,7 +648,7 @@ public:
|
|||||||
String* val_str(String* str);
|
String* val_str(String* str);
|
||||||
const char *func_name() const { return "inet_ntoa"; }
|
const char *func_name() const { return "inet_ntoa"; }
|
||||||
void fix_length_and_dec() { decimals = 0; max_length=3*8+7; }
|
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
|
class Item_func_quote :public Item_str_func
|
||||||
@@ -674,7 +663,7 @@ public:
|
|||||||
collation.set(args[0]->collation);
|
collation.set(args[0]->collation);
|
||||||
max_length= args[0]->max_length * 2 + 2;
|
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
|
class Item_func_conv_charset :public Item_str_func
|
||||||
@@ -775,8 +764,7 @@ public:
|
|||||||
const char *func_name() const { return "crc32"; }
|
const char *func_name() const { return "crc32"; }
|
||||||
void fix_length_and_dec() { max_length=10; }
|
void fix_length_and_dec() { max_length=10; }
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_uncompressed_length : public Item_int_func
|
class Item_func_uncompressed_length : public Item_int_func
|
||||||
|
@@ -39,7 +39,7 @@ public:
|
|||||||
{
|
{
|
||||||
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ public:
|
|||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
enum_monotonicity_info get_monotonicity_info() const;
|
enum_monotonicity_info get_monotonicity_info() const;
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ public:
|
|||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ public:
|
|||||||
max_length=3*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=3*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -161,7 +161,7 @@ public:
|
|||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@ public:
|
|||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ public:
|
|||||||
max_length=1*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=1*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ public:
|
|||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -225,7 +225,7 @@ public:
|
|||||||
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=2*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_yearweek :public Item_int_func
|
class Item_func_yearweek :public Item_int_func
|
||||||
@@ -240,7 +240,7 @@ public:
|
|||||||
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=6*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -257,7 +257,7 @@ public:
|
|||||||
max_length=4*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=4*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -287,7 +287,7 @@ public:
|
|||||||
max_length=1*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=1*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_dayname :public Item_func_weekday
|
class Item_func_dayname :public Item_func_weekday
|
||||||
@@ -320,7 +320,7 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=10*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=10*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -335,7 +335,7 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=10*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=10*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -545,7 +545,7 @@ public:
|
|||||||
Item_func_from_days(Item *a) :Item_date(a) {}
|
Item_func_from_days(Item *a) :Item_date(a) {}
|
||||||
const char *func_name() const { return "from_days"; }
|
const char *func_name() const { return "from_days"; }
|
||||||
bool get_date(TIME *res, uint fuzzy_date);
|
bool get_date(TIME *res, uint fuzzy_date);
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -563,7 +563,7 @@ public:
|
|||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
uint format_length(const String *format);
|
uint format_length(const String *format);
|
||||||
bool eq(const Item *item, bool binary_cmp) const;
|
bool eq(const Item *item, bool binary_cmp) const;
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -582,7 +582,7 @@ class Item_func_from_unixtime :public Item_date_func
|
|||||||
const char *func_name() const { return "from_unixtime"; }
|
const char *func_name() const { return "from_unixtime"; }
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
bool get_date(TIME *res, uint fuzzy_date);
|
bool get_date(TIME *res, uint fuzzy_date);
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -651,7 +651,7 @@ public:
|
|||||||
return tmp_table_field_from_field_type(table, 0);
|
return tmp_table_field_from_field_type(table, 0);
|
||||||
}
|
}
|
||||||
bool result_as_longlong() { return TRUE; }
|
bool result_as_longlong() { return TRUE; }
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -674,7 +674,7 @@ public:
|
|||||||
bool get_date(TIME *res, uint fuzzy_date);
|
bool get_date(TIME *res, uint fuzzy_date);
|
||||||
bool eq(const Item *item, bool binary_cmp) const;
|
bool eq(const Item *item, bool binary_cmp) const;
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -692,8 +692,7 @@ class Item_extract :public Item_int_func
|
|||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
bool eq(const Item *item, bool binary_cmp) const;
|
bool eq(const Item *item, bool binary_cmp) const;
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -730,7 +729,7 @@ public:
|
|||||||
max_length=args[0]->max_length;
|
max_length=args[0]->max_length;
|
||||||
maybe_null= 1;
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -750,8 +749,7 @@ public:
|
|||||||
String *val_str(String *a);
|
String *val_str(String *a);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
{ return safe_for_single_char_collation(int_arg); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -831,7 +829,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool result_as_longlong() { return TRUE; }
|
bool result_as_longlong() { return TRUE; }
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -854,7 +852,7 @@ public:
|
|||||||
}
|
}
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
const char *func_name() const { return "add_time"; }
|
const char *func_name() const { return "add_time"; }
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_timediff :public Item_str_func
|
class Item_func_timediff :public Item_str_func
|
||||||
@@ -894,7 +892,7 @@ public:
|
|||||||
{
|
{
|
||||||
return tmp_table_field_from_field_type(table, 0);
|
return tmp_table_field_from_field_type(table, 0);
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_func_microsecond :public Item_int_func
|
class Item_func_microsecond :public Item_int_func
|
||||||
@@ -908,7 +906,7 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -926,7 +924,7 @@ public:
|
|||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -973,7 +971,7 @@ public:
|
|||||||
{
|
{
|
||||||
return tmp_table_field_from_field_type(table, 1);
|
return tmp_table_field_from_field_type(table, 1);
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(byte *int_arg) { return 0;}
|
bool check_partition_func_processor(byte *int_arg) { return FALSE;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -42,8 +42,7 @@ public:
|
|||||||
Item_func_xml_extractvalue(Item *a,Item *b) :Item_xml_str_func(a,b) {}
|
Item_func_xml_extractvalue(Item *a,Item *b) :Item_xml_str_func(a,b) {}
|
||||||
const char *func_name() const { return "extractvalue"; }
|
const char *func_name() const { return "extractvalue"; }
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
bool check_partition_func_processor(byte *int_arg)
|
bool check_partition_func_processor(byte *int_arg) { return FALSE; }
|
||||||
{ return safe_for_single_char_collation(int_arg);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -718,25 +718,26 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
|
|||||||
uint i, tot_partitions;
|
uint i, tot_partitions;
|
||||||
bool result= TRUE;
|
bool result= TRUE;
|
||||||
char *same_name;
|
char *same_name;
|
||||||
int part_expression_ok= PF_SAFE;
|
|
||||||
DBUG_ENTER("partition_info::check_partition_info");
|
DBUG_ENTER("partition_info::check_partition_info");
|
||||||
|
|
||||||
pf_collation_allowed= PF_SAFE;
|
|
||||||
spf_collation_allowed= PF_SAFE;
|
|
||||||
if (check_partition_function)
|
if (check_partition_function)
|
||||||
{
|
{
|
||||||
|
int part_expression_ok= 1;
|
||||||
|
int pf_collation_allowed= 1;
|
||||||
|
int spf_collation_allowed= 1;
|
||||||
|
|
||||||
if (part_type != HASH_PARTITION || !list_of_part_fields)
|
if (part_type != HASH_PARTITION || !list_of_part_fields)
|
||||||
{
|
{
|
||||||
part_expr->walk(&Item::check_partition_func_processor, 0,
|
part_expr->walk(&Item::check_partition_func_processor, 0,
|
||||||
(byte*)(&part_expression_ok));
|
(byte*)(&part_expression_ok));
|
||||||
pf_collation_allowed= (char)part_expression_ok;
|
pf_collation_allowed= part_expression_ok;
|
||||||
part_expression_ok= PF_SAFE;
|
part_expression_ok= 1;
|
||||||
if (is_sub_partitioned() && !list_of_subpart_fields)
|
if (is_sub_partitioned() && !list_of_subpart_fields)
|
||||||
{
|
{
|
||||||
subpart_expr->walk(&Item::check_partition_func_processor, 0,
|
subpart_expr->walk(&Item::check_partition_func_processor, 0,
|
||||||
(byte*)(&part_expression_ok));
|
(byte*)(&part_expression_ok));
|
||||||
}
|
}
|
||||||
spf_collation_allowed= (char)part_expression_ok;
|
spf_collation_allowed= part_expression_ok;
|
||||||
}
|
}
|
||||||
if (!pf_collation_allowed ||
|
if (!pf_collation_allowed ||
|
||||||
!spf_collation_allowed)
|
!spf_collation_allowed)
|
||||||
|
@@ -188,8 +188,6 @@ public:
|
|||||||
bool is_auto_partitioned;
|
bool is_auto_partitioned;
|
||||||
bool from_openfrm;
|
bool from_openfrm;
|
||||||
bool has_null_value;
|
bool has_null_value;
|
||||||
char pf_collation_allowed;
|
|
||||||
char spf_collation_allowed;
|
|
||||||
|
|
||||||
|
|
||||||
partition_info()
|
partition_info()
|
||||||
@@ -219,9 +217,7 @@ public:
|
|||||||
list_of_part_fields(FALSE), list_of_subpart_fields(FALSE),
|
list_of_part_fields(FALSE), list_of_subpart_fields(FALSE),
|
||||||
linear_hash_ind(FALSE), fixed(FALSE),
|
linear_hash_ind(FALSE), fixed(FALSE),
|
||||||
is_auto_partitioned(FALSE), from_openfrm(FALSE),
|
is_auto_partitioned(FALSE), from_openfrm(FALSE),
|
||||||
has_null_value(FALSE),
|
has_null_value(FALSE)
|
||||||
pf_collation_allowed(0),
|
|
||||||
spf_collation_allowed(0)
|
|
||||||
{
|
{
|
||||||
all_fields_in_PF.clear_all();
|
all_fields_in_PF.clear_all();
|
||||||
all_fields_in_PPF.clear_all();
|
all_fields_in_PPF.clear_all();
|
||||||
|
@@ -1376,7 +1376,7 @@ static uint32 get_part_id_from_linear_hash(longlong hash_value, uint mask,
|
|||||||
Check that partition function do not contain any forbidden
|
Check that partition function do not contain any forbidden
|
||||||
character sets and collations.
|
character sets and collations.
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
check_part_func_collation()
|
check_part_func_fields()
|
||||||
part_info Partition info
|
part_info Partition info
|
||||||
ptr Array of Field pointers
|
ptr Array of Field pointers
|
||||||
RETURN VALUES
|
RETURN VALUES
|
||||||
@@ -1384,19 +1384,24 @@ static uint32 get_part_id_from_linear_hash(longlong hash_value, uint mask,
|
|||||||
TRUE Error
|
TRUE Error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool check_part_func_collation(int collation_allowed,
|
static bool check_part_func_fields(Field **ptr)
|
||||||
Field **ptr)
|
|
||||||
{
|
{
|
||||||
Field *field;
|
Field *field;
|
||||||
while ((field= *(ptr++)))
|
while ((field= *(ptr++)))
|
||||||
{
|
{
|
||||||
if (field->result_type() == STRING_RESULT)
|
/*
|
||||||
|
For CHAR/VARCHAR fields we need to take special precautions.
|
||||||
|
Binary collation with CHAR is automatically supported. Other
|
||||||
|
types need some kind of standardisation function handling
|
||||||
|
*/
|
||||||
|
if (field->type() == MYSQL_TYPE_STRING ||
|
||||||
|
field->type() == MYSQL_TYPE_VARCHAR)
|
||||||
{
|
{
|
||||||
CHARSET_INFO *cs= ((Field_str*)field)->charset();
|
CHARSET_INFO *cs= ((Field_str*)field)->charset();
|
||||||
if (use_strnxfrm(cs) ||
|
if (field->type() == MYSQL_TYPE_STRING &&
|
||||||
(collation_allowed == PF_SAFE_BINARY_COLLATION &&
|
cs->state & MY_CS_BINSORT)
|
||||||
(!(cs->state & MY_CS_BINSORT))))
|
return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1548,13 +1553,9 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (((part_info->pf_collation_allowed != PF_SAFE) &&
|
if ((check_part_func_fields(part_info->part_field_array)) ||
|
||||||
check_part_func_collation(part_info->pf_collation_allowed,
|
|
||||||
part_info->part_field_array)) ||
|
|
||||||
(part_info->is_sub_partitioned() &&
|
(part_info->is_sub_partitioned() &&
|
||||||
part_info->spf_collation_allowed != PF_SAFE &&
|
check_part_func_fields(part_info->subpart_field_array)))
|
||||||
check_part_func_collation(part_info->spf_collation_allowed,
|
|
||||||
part_info->subpart_field_array)))
|
|
||||||
{
|
{
|
||||||
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
|
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
|
||||||
goto end;
|
goto end;
|
||||||
|
@@ -3619,7 +3619,7 @@ part_bit_expr:
|
|||||||
{
|
{
|
||||||
Item *part_expr= $1;
|
Item *part_expr= $1;
|
||||||
bool not_corr_func;
|
bool not_corr_func;
|
||||||
bool part_expression_ok= TRUE;
|
int part_expression_ok= 1;
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
THD *thd= YYTHD;
|
THD *thd= YYTHD;
|
||||||
longlong item_value;
|
longlong item_value;
|
||||||
|
Reference in New Issue
Block a user