Below is the list of changes that have just been committed into a local
5.1 repository of hf. When hf does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-06-25 14:28:30+05:00, holyfoot@hfmain.(none) +7 -0
Merge bk@stripped:mysql-5.1-opt
into mysql.com:/home/hf/work/27084/my51-27084
MERGE: 1.2469.78.1
mysql-test/r/partition.result@stripped, 2007-06-25 14:27:19+05:00, holyfoot@hfmain.(none)
+10 -10
merging
MERGE: 1.58.1.1
mysql-test/t/partition.test@stripped, 2007-06-25 14:27:52+05:00, holyfoot@hfmain.(none) +15
-15
merging
MERGE: 1.52.1.1
sql/item_cmpfunc.cc@stripped, 2007-06-25 14:22:22+05:00, holyfoot@hfmain.(none) +0 -0
Auto merged
MERGE: 1.257.1.1
sql/item_cmpfunc.h@stripped, 2007-06-25 14:22:22+05:00, holyfoot@hfmain.(none) +0 -0
Auto merged
MERGE: 1.157.1.7
sql/sql_partition.cc@stripped, 2007-06-25 14:28:25+05:00, holyfoot@hfmain.(none) +0 -0
SCCS merged
MERGE: 1.100.1.1
sql/sql_partition.h@stripped, 2007-06-25 14:22:22+05:00, holyfoot@hfmain.(none) +0 -0
Auto merged
MERGE: 1.13.1.2
sql/table.cc@stripped, 2007-06-25 14:22:22+05:00, holyfoot@hfmain.(none) +0 -0
Auto merged
MERGE: 1.281.1.1
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: holyfoot
# Host: hfmain.(none)
# Root: /home/hf/work/27084/my51-27084/RESYNC
--- 1.284/sql/item_cmpfunc.cc 2007-06-25 14:28:36 +05:00
+++ 1.285/sql/item_cmpfunc.cc 2007-06-25 14:28:36 +05:00
@@ -2586,6 +2586,21 @@ void Item_func_case::print(String *str)
str->append(STRING_WITH_LEN("end)"));
}
+
+void Item_func_case::cleanup()
+{
+ uint i;
+ DBUG_ENTER("Item_func_case::cleanup");
+ Item_func::cleanup();
+ for (i= 0; i <= (uint)DECIMAL_RESULT; i++)
+ {
+ delete cmp_items[i];
+ cmp_items[i]= 0;
+ }
+ DBUG_VOID_RETURN;
+}
+
+
/*
Coalesce - return first not NULL argument.
*/
--- 1.158/sql/item_cmpfunc.h 2007-06-25 14:28:36 +05:00
+++ 1.159/sql/item_cmpfunc.h 2007-06-25 14:28:36 +05:00
@@ -35,12 +35,19 @@ class Arg_comparator: public Sql_alloc
Item_bool_func2 *owner;
Arg_comparator *comparators; // used only for compare_row()
double precision;
-
+ /* Fields used in DATE/DATETIME comparison. */
+ THD *thd;
+ enum_field_types a_type, b_type; // Types of a and b items
+ Item *a_cache, *b_cache; // Cached values of a and b items
+ bool is_nulls_eq; // TRUE <=> compare for the EQUAL_FUNC
+ enum enum_date_cmp_type { CMP_DATE_DFLT= 0, CMP_DATE_WITH_DATE,
+ CMP_DATE_WITH_STR, CMP_STR_WITH_DATE };
public:
DTCollation cmp_collation;
- Arg_comparator() {};
- Arg_comparator(Item **a1, Item **a2): a(a1), b(a2) {};
+ Arg_comparator(): thd(0), a_cache(0), b_cache(0) {};
+ Arg_comparator(Item **a1, Item **a2): a(a1), b(a2), thd(0),
+ a_cache(0), b_cache(0) {};
int set_compare_func(Item_bool_func2 *owner, Item_result type);
inline int set_compare_func(Item_bool_func2 *owner_arg)
@@ -48,14 +55,10 @@ public:
return set_compare_func(owner_arg, item_cmp_type((*a)->result_type(),
(*b)->result_type()));
}
- inline int set_cmp_func(Item_bool_func2 *owner_arg,
+ int set_cmp_func(Item_bool_func2 *owner_arg,
Item **a1, Item **a2,
- Item_result type)
- {
- a= a1;
- b= a2;
- return set_compare_func(owner_arg, type);
- }
+ Item_result type);
+
inline int set_cmp_func(Item_bool_func2 *owner_arg,
Item **a1, Item **a2)
{
@@ -83,7 +86,12 @@ public:
int compare_e_row(); // compare args[0] & args[1]
int compare_real_fixed();
int compare_e_real_fixed();
+ int compare_datetime(); // compare args[0] & args[1] as DATETIMEs
+ static enum enum_date_cmp_type can_compare_as_dates(Item *a, Item *b,
+ ulonglong *const_val_arg);
+
+ void set_datetime_cmp_func(Item **a1, Item **b1);
static arg_cmp_func comparator_matrix [5][2];
friend class Item_func;
@@ -333,7 +341,7 @@ public:
bool is_bool_func() { return 1; }
CHARSET_INFO *compare_collation() { return cmp.cmp_collation.collation; }
uint decimal_precision() const { return 1; }
- void top_level_item() { abort_on_null=1; }
+ void top_level_item() { abort_on_null= TRUE; }
friend class Arg_comparator;
};
@@ -347,8 +355,8 @@ public:
}
Item *neg_transformer(THD *thd);
virtual Item *negated_item();
- bool check_partition_func_processor(byte *int_arg) {return FALSE;}
- bool subst_argument_checker(byte **arg) { return TRUE; }
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
+ bool subst_argument_checker(uchar **arg) { return TRUE; }
};
class Item_func_not :public Item_bool_func
@@ -359,7 +367,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
void print(String *str);
};
@@ -563,7 +571,8 @@ public:
negated= !negated;
return this;
}
- bool subst_argument_checker(byte **arg) { return TRUE; }
+ bool eq(const Item *item, bool binary_cmp) const;
+ bool subst_argument_checker(uchar **arg) { return TRUE; }
};
@@ -573,8 +582,12 @@ class Item_func_between :public Item_fun
public:
Item_result cmp_type;
String value0,value1,value2;
+ /* TRUE <=> arguments will be compared as dates. */
+ bool compare_as_dates;
+ /* Comparators used for DATE/DATETIME comparison. */
+ Arg_comparator ge_cmp, le_cmp;
Item_func_between(Item *a, Item *b, Item *c)
- :Item_func_opt_neg(a, b, c) {}
+ :Item_func_opt_neg(a, b, c), compare_as_dates(FALSE) {}
longlong val_int();
optimize_type select_optimize() const { return OPTIMIZE_KEY; }
enum Functype functype() const { return BETWEEN; }
@@ -585,7 +598,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
@@ -597,7 +610,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
@@ -660,7 +673,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
@@ -701,7 +714,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
/* Functions to handle the optimized IN */
@@ -726,7 +739,7 @@ public:
count(elements), used_count(elements) {}
virtual ~in_vector() {}
virtual void set(uint pos,Item *item)=0;
- virtual byte *get_value(Item *item)=0;
+ virtual uchar *get_value(Item *item)=0;
void sort()
{
qsort2(base,used_count,size,compare,collation);
@@ -769,7 +782,7 @@ public:
in_string(uint elements,qsort2_cmp cmp_func, CHARSET_INFO *cs);
~in_string();
void set(uint pos,Item *item);
- byte *get_value(Item *item);
+ uchar *get_value(Item *item);
Item* create_item()
{
return new Item_string(collation);
@@ -785,6 +798,7 @@ public:
class in_longlong :public in_vector
{
+protected:
/*
Here we declare a temporary variable (tmp) of the same type as the
elements of this vector. tmp is used in finding if a given value is in
@@ -798,7 +812,7 @@ class in_longlong :public in_vector
public:
in_longlong(uint elements);
void set(uint pos,Item *item);
- byte *get_value(Item *item);
+ uchar *get_value(Item *item);
Item* create_item()
{
@@ -819,13 +833,37 @@ public:
friend int cmp_longlong(void *cmp_arg, packed_longlong *a,packed_longlong *b);
};
+
+/*
+ Class to represent a vector of constant DATE/DATETIME values.
+ Values are obtained with help of the get_datetime_value() function.
+ If the left item is a constant one then its value is cached in the
+ lval_cache variable.
+*/
+class in_datetime :public in_longlong
+{
+public:
+ THD *thd;
+ /* An item used to issue warnings. */
+ Item *warn_item;
+ /* Cache for the left item. */
+ Item *lval_cache;
+
+ in_datetime(Item *warn_item_arg, uint elements)
+ :in_longlong(elements), thd(current_thd), warn_item(warn_item_arg),
+ lval_cache(0) {};
+ void set(uint pos,Item *item);
+ uchar *get_value(Item *item);
+ friend int cmp_longlong(void *cmp_arg, packed_longlong *a,packed_longlong *b);
+};
+
class in_double :public in_vector
{
double tmp;
public:
in_double(uint elements);
void set(uint pos,Item *item);
- byte *get_value(Item *item);
+ uchar *get_value(Item *item);
Item *create_item()
{
return new Item_float(0.0);
@@ -844,7 +882,7 @@ class in_decimal :public in_vector
public:
in_decimal(uint elements);
void set(uint pos, Item *item);
- byte *get_value(Item *item);
+ uchar *get_value(Item *item);
Item *create_item()
{
return new Item_decimal(0, FALSE);
@@ -951,6 +989,30 @@ public:
cmp_item *make_same();
};
+/*
+ Compare items in the DATETIME context.
+ Values are obtained with help of the get_datetime_value() function.
+ If the left item is a constant one then its value is cached in the
+ lval_cache variable.
+*/
+class cmp_item_datetime :public cmp_item
+{
+ ulonglong value;
+public:
+ THD *thd;
+ /* Item used for issuing warnings. */
+ Item *warn_item;
+ /* Cache for the left item. */
+ Item *lval_cache;
+
+ cmp_item_datetime(Item *warn_item_arg)
+ :thd(current_thd), warn_item(warn_item_arg), lval_cache(0) {}
+ void store_value(Item *item);
+ int cmp(Item *arg);
+ int compare(cmp_item *ci);
+ cmp_item *make_same();
+};
+
class cmp_item_real :public cmp_item
{
double value;
@@ -985,32 +1047,6 @@ public:
};
-class cmp_item_row :public cmp_item
-{
- cmp_item **comparators;
- uint n;
-public:
- cmp_item_row(): comparators(0), n(0) {}
- ~cmp_item_row();
- void store_value(Item *item);
- int cmp(Item *arg);
- int compare(cmp_item *arg);
- cmp_item *make_same();
- void store_value_by_template(cmp_item *tmpl, Item *);
-};
-
-
-class in_row :public in_vector
-{
- cmp_item_row tmp;
-public:
- in_row(uint elements, Item *);
- ~in_row();
- void set(uint pos,Item *item);
- byte *get_value(Item *item);
- Item_result result_type() { return ROW_RESULT; }
-};
-
/*
cmp_item for optimized IN with row (right part string, which never
be changed)
@@ -1105,7 +1141,7 @@ public:
void print(String *str);
Item *find_item(String *str);
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
- bool check_partition_func_processor(byte *bool_arg) { return FALSE;}
+ bool check_partition_func_processor(uchar *bool_arg) { return FALSE;}
void cleanup();
};
@@ -1139,7 +1175,7 @@ public:
*/
bool arg_types_compatible;
Item_result left_result_type;
- cmp_item *cmp_items[5]; /* One cmp_item for each result type */
+ cmp_item *cmp_items[6]; /* One cmp_item for each result type */
DTCollation cmp_collation;
Item_func_in(List<Item> &list)
@@ -1160,7 +1196,7 @@ public:
Item_int_func::cleanup();
delete array;
array= 0;
- for (i= 0; i <= (uint)DECIMAL_RESULT; i++)
+ for (i= 0; i <= (uint)DECIMAL_RESULT + 1; i++)
{
delete cmp_items[i];
cmp_items[i]= 0;
@@ -1175,7 +1211,36 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
+};
+
+class cmp_item_row :public cmp_item
+{
+ cmp_item **comparators;
+ uint n;
+public:
+ cmp_item_row(): comparators(0), n(0) {}
+ ~cmp_item_row();
+ void store_value(Item *item);
+ inline void alloc_comparators();
+ int cmp(Item *arg);
+ int compare(cmp_item *arg);
+ cmp_item *make_same();
+ void store_value_by_template(cmp_item *tmpl, Item *);
+ friend void Item_func_in::fix_length_and_dec();
+};
+
+
+class in_row :public in_vector
+{
+ cmp_item_row tmp;
+public:
+ in_row(uint elements, Item *);
+ ~in_row();
+ void set(uint pos,Item *item);
+ uchar *get_value(Item *item);
+ friend void Item_func_in::fix_length_and_dec();
+ Item_result result_type() { return ROW_RESULT; }
};
/* Functions used by where clause */
@@ -1218,7 +1283,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
/* Functions used by HAVING for rewriting IN subquery */
@@ -1245,7 +1310,7 @@ public:
*/
table_map used_tables() const
{ return used_tables_cache | RAND_TABLE_BIT; }
- bool check_partition_func_processor(byte *int_arg) {return TRUE;}
+ bool check_partition_func_processor(uchar *int_arg) {return TRUE;}
};
@@ -1268,7 +1333,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
@@ -1307,7 +1372,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
#ifdef USE_REGEX
@@ -1330,7 +1395,7 @@ public:
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 FALSE;}
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
};
#else
@@ -1383,14 +1448,14 @@ public:
COND **conds);
void top_level_item() { abort_on_null=1; }
void copy_andor_arguments(THD *thd, Item_cond *item);
- bool walk(Item_processor processor, bool walk_subquery, byte *arg);
- Item *transform(Item_transformer transformer, byte *arg);
+ bool walk(Item_processor processor, bool walk_subquery, uchar *arg);
+ Item *transform(Item_transformer transformer, uchar *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 FALSE;}
- bool subst_argument_checker(byte **arg) { return TRUE; }
- Item *compile(Item_analyzer analyzer, byte **arg_p,
- Item_transformer transformer, byte *arg_t);
+ bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
+ bool subst_argument_checker(uchar **arg) { return TRUE; }
+ Item *compile(Item_analyzer analyzer, uchar **arg_p,
+ Item_transformer transformer, uchar *arg_t);
};
@@ -1499,8 +1564,8 @@ public:
void fix_length_and_dec();
bool fix_fields(THD *thd, Item **ref);
void update_used_tables();
- bool walk(Item_processor processor, bool walk_subquery, byte *arg);
- Item *transform(Item_transformer transformer, byte *arg);
+ bool walk(Item_processor processor, bool walk_subquery, uchar *arg);
+ Item *transform(Item_transformer transformer, uchar *arg);
void print(String *str);
CHARSET_INFO *compare_collation()
{ return fields.head()->collation.collation; }
--- 1.293/sql/table.cc 2007-06-25 14:28:36 +05:00
+++ 1.294/sql/table.cc 2007-06-25 14:28:36 +05:00
@@ -1589,21 +1589,30 @@ int open_table_from_share(THD *thd, TABL
thd->set_n_backup_active_arena(&part_func_arena, &backup_arena);
thd->stmt_arena= &part_func_arena;
bool tmp;
+ bool work_part_info_used;
tmp= mysql_unpack_partition(thd, share->partition_info,
share->partition_info_len,
share->part_state,
share->part_state_len,
outparam, is_create_table,
- share->default_part_db_type);
+ share->default_part_db_type,
+ &work_part_info_used);
outparam->part_info->is_auto_partitioned= share->auto_partitioned;
DBUG_PRINT("info", ("autopartitioned: %u", share->auto_partitioned));
- if (!tmp)
+ /* we should perform the fix_partition_func in either local or
+ caller's arena depending on work_part_info_used value
+ */
+ if (!tmp && !work_part_info_used)
tmp= fix_partition_func(thd, outparam, is_create_table);
thd->stmt_arena= backup_stmt_arena_ptr;
thd->restore_active_arena(&part_func_arena, &backup_arena);
if (!tmp)
+ {
+ if (work_part_info_used)
+ tmp= fix_partition_func(thd, outparam, is_create_table);
outparam->part_info->item_free_list= part_func_arena.free_list;
+ }
if (tmp)
{
if (is_create_table)
--- 1.66/mysql-test/r/partition.result 2007-06-25 14:28:36 +05:00
+++ 1.67/mysql-test/r/partition.result 2007-06-25 14:28:36 +05:00
@@ -1267,4 +1267,14 @@ ALTER TABLE general_log PARTITION BY RAN
ERROR HY000: Incorrect usage of PARTITION and log table
ALTER TABLE general_log ENGINE = CSV;
SET GLOBAL general_log = default;
+CREATE TABLE `t1` ( `a` varchar(1)) ENGINE=MyISAM
+PARTITION BY LIST (CASE a WHEN 'a' THEN 1
+WHEN 'b' THEN 2
+WHEN 'c' THEN 3
+END) (
+PARTITION a VALUES IN (1),
+PARTITION b VALUES IN (2),
+PARTITION c VALUES IN (3)
+);
+DROP TABLE t1;
End of 5.1 tests
--- 1.60/mysql-test/t/partition.test 2007-06-25 14:28:36 +05:00
+++ 1.61/mysql-test/t/partition.test 2007-06-25 14:28:36 +05:00
@@ -1494,4 +1494,19 @@ ALTER TABLE general_log PARTITION BY RAN
ALTER TABLE general_log ENGINE = CSV;
SET GLOBAL general_log = default;
+#
+# Bug #27084 partitioning by list seems failing when using case
+#
+CREATE TABLE `t1` ( `a` varchar(1)) ENGINE=MyISAM
+ PARTITION BY LIST (CASE a WHEN 'a' THEN 1
+ WHEN 'b' THEN 2
+ WHEN 'c' THEN 3
+ END) (
+ PARTITION a VALUES IN (1),
+ PARTITION b VALUES IN (2),
+ PARTITION c VALUES IN (3)
+);
+
+DROP TABLE t1;
+
--echo End of 5.1 tests
--- 1.108/sql/sql_partition.cc 2007-06-25 14:28:36 +05:00
+++ 1.109/sql/sql_partition.cc 2007-06-25 14:28:36 +05:00
@@ -3663,6 +3663,8 @@ void get_partition_set(const TABLE *tabl
table Table object of partitioned table
create_table_ind Is it called from CREATE TABLE
default_db_type What is the default engine of the table
+ work_part_info_used Flag is raised if we don't create new
+ part_info, but used thd->work_part_info
RETURN VALUE
TRUE Error
@@ -3683,7 +3685,8 @@ bool mysql_unpack_partition(THD *thd,
const char *part_buf, uint part_info_len,
const char *part_state, uint part_state_len,
TABLE* table, bool is_create_table_ind,
- handlerton *default_db_type)
+ handlerton *default_db_type,
+ bool *work_part_info_used)
{
bool result= TRUE;
partition_info *part_info;
@@ -3698,6 +3701,7 @@ bool mysql_unpack_partition(THD *thd,
Lex_input_stream lip(thd, part_buf, part_info_len);
lex_start(thd);
+ *work_part_info_used= false;
/*
We need to use the current SELECT_LEX since I need to keep the
Name_resolution_context object which is referenced from the
@@ -3782,6 +3786,7 @@ bool mysql_unpack_partition(THD *thd,
thd->free_items();
part_info= thd->work_part_info;
table->s->version= 0UL;
+ *work_part_info_used= true;
}
}
table->part_info= part_info;
--- 1.14/sql/sql_partition.h 2007-06-25 14:28:36 +05:00
+++ 1.15/sql/sql_partition.h 2007-06-25 14:28:36 +05:00
@@ -56,11 +56,11 @@ bool check_reorganise_list(partition_inf
partition_info *old_part_info,
List<char> list_part_names);
handler *get_ha_partition(partition_info *part_info);
-int get_parts_for_update(const byte *old_data, byte *new_data,
- const byte *rec0, partition_info *part_info,
+int get_parts_for_update(const uchar *old_data, uchar *new_data,
+ const uchar *rec0, partition_info *part_info,
uint32 *old_part_id, uint32 *new_part_id,
longlong *func_value);
-int get_part_for_delete(const byte *buf, const byte *rec0,
+int get_part_for_delete(const uchar *buf, const uchar *rec0,
partition_info *part_info, uint32 *part_id);
void prune_partition_set(const TABLE *table, part_id_range *part_spec);
bool check_partition_info(partition_info *part_info,handlerton **eng_type,
@@ -70,16 +70,16 @@ char *generate_partition_syntax(partitio
uint *buf_length, bool use_sql_alloc,
bool show_partition_options);
bool partition_key_modified(TABLE *table, const MY_BITMAP *fields);
-void get_partition_set(const TABLE *table, byte *buf, const uint index,
+void get_partition_set(const TABLE *table, uchar *buf, const uint index,
const key_range *key_spec,
part_id_range *part_spec);
-void get_full_part_id_from_key(const TABLE *table, byte *buf,
+void get_full_part_id_from_key(const TABLE *table, uchar *buf,
KEY *key_info,
const key_range *key_spec,
part_id_range *part_spec);
-bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
+bool mysql_unpack_partition(THD *thd, const char *part_buf,
uint part_info_len,
- uchar *part_state, uint part_state_len,
+ const char *part_state, uint part_state_len,
TABLE *table, bool is_create_table_ind,
handlerton *default_db_type,
bool *work_part_info_used);
@@ -202,7 +202,7 @@ typedef struct st_partition_iter
typedef int (*get_partitions_in_range_iter)(partition_info *part_info,
bool is_subpart,
- char *min_val, char *max_val,
+ uchar *min_val, uchar *max_val,
uint flags,
PARTITION_ITERATOR *part_iter);
| Thread |
|---|
| • bk commit into 5.1 tree (holyfoot:1.2513) | holyfoot | 25 Jun |