From faa5f3e00754f326eed456b9d7b36be751fd11b3 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Apr 2006 22:51:34 -0400 Subject: BUG#16002: Make partition functions that are unsigned work properly mysql-test/r/partition.result: A number of new test cases for unsigned partition functions mysql-test/r/partition_error.result: A number of new test cases for unsigned partition functions mysql-test/r/partition_range.result: A number of new test cases for unsigned partition functions mysql-test/t/partition.test: A number of new test cases for unsigned partition functions mysql-test/t/partition_error.test: A number of new test cases for unsigned partition functions mysql-test/t/partition_range.test: A number of new test cases for unsigned partition functions sql/ha_partition.cc: Error message for no partition found needs to take signed/unsigned into account when printing erroneus value sql/partition_element.h: Introduced signed_flag and max_value flag on partition elements Also list is now a list of a struct rather than simply longlong values Small rearranges of order sql/partition_info.cc: Introduced signed_flag and max_value flag on partition elements Also list is now a list of a struct rather than simply longlong values Small rearranges of order Lots of new code to handle checks of proper definition of table when partition function is unsigned sql/partition_info.h: Mostly rearrangement of code and some addition of a THD object in check_partition_info call plus a new method for comparing unsigned values sql/share/errmsg.txt: Negative values not ok for unsigned partition functions sql/sql_partition.cc: Fixed a multi-thread bug (when defining several partitioned tables in parallel) New code to generate partition syntax that takes into account sign of constants. Made function fix_fields_part_func more reusable. Fixed a number of get_partition_id functions for range and list and similar functions for partition pruning code. Unfortunately fairly much duplication of code with just small changes. sql/sql_partition.h: New function headers sql/sql_show.cc: Changed list of values for LIST partitioned tables Also fixed printing of unsigned values in INFORMATION SCHEMA for partitioned table sql/sql_table.cc: Fixed for new interface sql/sql_yacc.yy: Moved definition of struct to partition_element.h Added code to keep track of sign of constants in RANGE and LIST partitions sql/table.cc: Fixed for new interface --- sql/partition_element.h | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'sql/partition_element.h') diff --git a/sql/partition_element.h b/sql/partition_element.h index d20715d2408..7063e514901 100644 --- a/sql/partition_element.h +++ b/sql/partition_element.h @@ -36,15 +36,22 @@ enum partition_state { PART_IS_ADDED= 8 }; +typedef struct p_elem_val +{ + longlong value; + bool null_value; + bool unsigned_flag; +} part_elem_value; + class partition_element :public Sql_alloc { public: List subpartitions; - List list_val_list; + List list_val_list; ulonglong part_max_rows; ulonglong part_min_rows; + longlong range_value; char *partition_name; char *tablespace_name; - longlong range_value; char* part_comment; char* data_file_name; char* index_file_name; @@ -52,13 +59,16 @@ public: enum partition_state part_state; uint16 nodegroup_id; bool has_null_value; + bool signed_flag; + bool max_value; partition_element() - : part_max_rows(0), part_min_rows(0), partition_name(NULL), - tablespace_name(NULL), range_value(0), part_comment(NULL), + : part_max_rows(0), part_min_rows(0), range_value(0), + partition_name(NULL), tablespace_name(NULL), part_comment(NULL), data_file_name(NULL), index_file_name(NULL), - engine_type(NULL),part_state(PART_NORMAL), - nodegroup_id(UNDEF_NODEGROUP), has_null_value(FALSE) + engine_type(NULL), part_state(PART_NORMAL), + nodegroup_id(UNDEF_NODEGROUP), has_null_value(FALSE), + signed_flag(FALSE), max_value(FALSE) { subpartitions.empty(); list_val_list.empty(); -- cgit v1.2.1 From e05d2d06cb4adfe27dc4c0c4cb8f445332e9ab80 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 5 Jun 2006 14:55:22 -0400 Subject: BUG#16002: Handle unsigned integer partition functions mysql-test/r/partition.result: Added new test cases mysql-test/r/partition_error.result: Fixed test case mysql-test/t/partition.test: Added new test cases mysql-test/t/partition_error.test: Fixed test case sql/ha_partition.cc: Review fixes sql/partition_element.h: Review fixes sql/partition_info.cc: Review fixes sql/share/errmsg.txt: Review fixes sql/sql_partition.cc: Review fixes sql/sql_yacc.yy: Enabled possibility to use (MAXVALUE) as well as MAXVALUE. --- sql/partition_element.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'sql/partition_element.h') diff --git a/sql/partition_element.h b/sql/partition_element.h index 7063e514901..7818c25c2f6 100644 --- a/sql/partition_element.h +++ b/sql/partition_element.h @@ -36,6 +36,13 @@ enum partition_state { PART_IS_ADDED= 8 }; +/* + This struct is used to contain the value of an element + in the VALUES IN struct. It needs to keep knowledge of + whether it is a signed/unsigned value and whether it is + NULL or not. +*/ + typedef struct p_elem_val { longlong value; @@ -59,8 +66,8 @@ public: enum partition_state part_state; uint16 nodegroup_id; bool has_null_value; - bool signed_flag; - bool max_value; + bool signed_flag;/* Indicate whether this partition uses signed constants */ + bool max_value; /* Indicate whether this partition uses MAXVALUE */ partition_element() : part_max_rows(0), part_min_rows(0), range_value(0), -- cgit v1.2.1