diff options
author | unknown <mikael@dator5.(none)> | 2006-06-23 01:21:26 -0400 |
---|---|---|
committer | unknown <mikael@dator5.(none)> | 2006-06-23 01:21:26 -0400 |
commit | 604227e855b874b72541703f439b4b24f9cf142e (patch) | |
tree | 8a5d830c934165bdeafc31953e93b8856ce8e72f /sql/item.h | |
parent | 3856cdb89b3753bb56e56b2a8629a2dd8d2d3deb (diff) | |
download | mariadb-git-604227e855b874b72541703f439b4b24f9cf142e.tar.gz |
BUG#18198: Less flexibility in defining partition functions
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
mysql-test/r/partition.result:
Changed test case since no longer supported to use multicharacter collations
in comparisons
mysql-test/t/partition.test:
Changed test case since no longer supported to use multicharacter collations
in comparisons
sql/item.h:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/item_cmpfunc.h:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/item_func.h:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/item_strfunc.h:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/item_timefunc.h:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/item_xmlfunc.h:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/partition_info.cc:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/partition_info.h:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/sql_partition.cc:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
sql/sql_table.cc:
Changed test for functions if they are supported.
3 categories:
1) Fully supported
2) Supported for single character collations
3) Supported for binary collations
Diffstat (limited to 'sql/item.h')
-rw-r--r-- | sql/item.h | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/sql/item.h b/sql/item.h index a6132aba8b0..7b93db6301a 100644 --- a/sql/item.h +++ b/sql/item.h @@ -789,7 +789,7 @@ public: Check if a partition function is allowed SYNOPSIS check_partition_func_processor() - bool_arg Return argument + int_arg Return argument RETURN VALUE 0 DESCRIPTION @@ -806,8 +806,28 @@ public: whether this should be inherited to the new class. If not the function below should be defined in the new Item class. */ - virtual bool check_partition_func_processor(byte *bool_arg) - { *(bool *)bool_arg= FALSE; return 0; } + +#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; + } virtual Item *equal_fields_propagator(byte * arg) { return this; } virtual Item *set_no_const_sub(byte *arg) { return this; } @@ -1106,7 +1126,8 @@ public: Item::maybe_null= TRUE; } - bool check_partition_func_processor(byte *bool_arg) { return 0; } + bool check_partition_func_processor(byte *int_arg) + { return safe_for_single_char_collation(int_arg); } bool fix_fields(THD *, Item **); enum Type type() const; @@ -1153,7 +1174,7 @@ public: Item_num() {} /* Remove gcc warning */ virtual Item_num *neg()= 0; Item *safe_charset_converter(CHARSET_INFO *tocs); - bool check_partition_func_processor(byte *bool_arg) { return 0;} + bool check_partition_func_processor(byte *int_arg) { return 0;} }; #define NO_CACHED_FIELD_INDEX ((uint)(-1)) @@ -1289,7 +1310,7 @@ public: 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 *bool_arg) { return 0; } + bool check_partition_func_processor(byte *int_arg) { return 0; } void cleanup(); bool result_as_longlong() { @@ -1337,7 +1358,7 @@ public: 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 *bool_arg) { return 0;} + bool check_partition_func_processor(byte *int_arg) { return 0;} }; class Item_null_result :public Item_null @@ -1350,8 +1371,8 @@ public: { save_in_field(result_field, no_conversions); } - bool check_partition_func_processor(byte *bool_arg) - { *(bool *)bool_arg= FALSE; return 0; } + bool check_partition_func_processor(byte *int_arg) + { *(int *)int_arg= PF_UNSAFE; return 0; } }; /* Item represents one placeholder ('?') of prepared statement */ @@ -1642,8 +1663,8 @@ public: {} void print(String *str) { str->append(func_name); } Item *safe_charset_converter(CHARSET_INFO *tocs); - bool check_partition_func_processor(byte *bool_arg) - { *(bool *)bool_arg= FALSE; return 0; } + bool check_partition_func_processor(byte *int_arg) + { *(int *)int_arg= PF_UNSAFE; return 0; } }; @@ -1721,7 +1742,7 @@ public: void print(String *str); // to prevent drop fixed flag (no need parent cleanup call) void cleanup() {} - bool check_partition_func_processor(byte *bool_arg) { return 0;} + bool check_partition_func_processor(byte *int_arg) { return 0;} }; @@ -1736,8 +1757,8 @@ public: {} Item *safe_charset_converter(CHARSET_INFO *tocs); void print(String *str) { str->append(func_name); } - bool check_partition_func_processor(byte *bool_arg) - { *(bool *)bool_arg= FALSE; return 0; } + bool check_partition_func_processor(byte *int_arg) + { *(int *)int_arg= PF_UNSAFE; return 0; } }; @@ -1750,8 +1771,8 @@ public: &my_charset_bin) { max_length=19;} enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; } - bool check_partition_func_processor(byte *bool_arg) - { *(bool *)bool_arg= FALSE; return 0; } + bool check_partition_func_processor(byte *int_arg) + { *(int *)int_arg= PF_UNSAFE; return 0; } }; class Item_empty_string :public Item_string @@ -1774,8 +1795,8 @@ public: unsigned_flag=1; } enum_field_types field_type() const { return int_field_type; } - bool check_partition_func_processor(byte *bool_arg) - { *(bool *)bool_arg= FALSE; return 0; } + bool check_partition_func_processor(byte *int_arg) + { *(int *)int_arg= PF_UNSAFE; return 0; } }; @@ -1799,7 +1820,8 @@ public: 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 *bool_arg) { return 0;} + bool check_partition_func_processor(byte *int_arg) + { return safe_for_binary_collation(int_arg);} }; @@ -2026,8 +2048,8 @@ public: } Item *new_item(); virtual Item *real_item() { return ref; } - bool check_partition_func_processor(byte *bool_arg) - { *(bool *)bool_arg= FALSE; return 0; } + bool check_partition_func_processor(byte *int_arg) + { *(int *)int_arg= PF_UNSAFE; return 0; } }; #ifdef MYSQL_SERVER |