Below is the list of changes that have just been committed into a local
5.1 repository of gluh. When gluh 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
1.2190 06/03/20 17:41:45 gluh@stripped +4 -0
Bug#14367 Partitions: crash if utf8 column
use part_info->item_free_list instead of thd->free_list during partition
function parsing
sql/sql_partition.cc
1.51 06/03/20 17:41:38 gluh@stripped +3 -0
Bug#14367 Partitions: crash if utf8 column
use part_info->item_free_list instead of thd->free_list during partition
function parsing
sql/item.cc
1.174 06/03/20 17:41:38 gluh@stripped +4 -1
Bug#14367 Partitions: crash if utf8 column
create copy of string in current mem_root to avoid memory leak
mysql-test/t/partition.test
1.28 06/03/20 17:41:38 gluh@stripped +9 -0
Bug#14367 Partitions: crash if utf8 column
test case
mysql-test/r/partition.result
1.25 06/03/20 17:41:38 gluh@stripped +5 -0
Bug#14367 Partitions: crash if utf8 column
test case
# 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: gluh
# Host: eagle.intranet.mysql.r18.ru
# Root: /home/gluh/MySQL/Merge/5.1-new
--- 1.173/sql/item.cc Wed Mar 8 01:06:47 2006
+++ 1.174/sql/item.cc Mon Mar 20 17:41:38 2006
@@ -647,6 +647,7 @@ Item *Item_string::safe_charset_converte
{
Item_string *conv;
uint conv_errors;
+ char *ptr;
String tmp, cstr, *ostr= val_str(&tmp);
cstr.copy(ostr->ptr(), ostr->length(), ostr->charset(), tocs,
&conv_errors);
if (conv_errors || !(conv= new Item_string(cstr.ptr(), cstr.length(),
@@ -661,7 +662,9 @@ Item *Item_string::safe_charset_converte
*/
return NULL;
}
- conv->str_value.copy();
+ if (!(ptr= current_thd->memdup(cstr.ptr(), cstr.length() + 1 )))
+ return NULL;
+ conv->str_value.set(ptr, cstr.length(), cstr.charset());
/* Ensure that no one is going to change the result string */
conv->str_value.mark_as_const();
return conv;
--- 1.24/mysql-test/r/partition.result Thu Mar 16 15:21:08 2006
+++ 1.25/mysql-test/r/partition.result Mon Mar 20 17:41:38 2006
@@ -557,4 +557,9 @@ t2 CREATE TABLE `t2` (
PRIMARY KEY (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='no comment' PARTITION BY KEY (a)
drop table t2;
+create table t1 (s1 char(2) character set utf8)
+partition by list (case when s1 > 'cz' then 1 else 2 end)
+(partition p1 values in (1),
+partition p2 values in (2));
+drop table t1;
End of 5.1 tests
--- 1.27/mysql-test/t/partition.test Thu Mar 16 15:21:08 2006
+++ 1.28/mysql-test/t/partition.test Mon Mar 20 17:41:38 2006
@@ -714,4 +714,13 @@ show create table t2;
drop table t2;
+#
+# Bug#14367: Partitions: crash if utf8 column
+#
+create table t1 (s1 char(2) character set utf8)
+partition by list (case when s1 > 'cz' then 1 else 2 end)
+(partition p1 values in (1),
+ partition p2 values in (2));
+drop table t1;
+
--echo End of 5.1 tests
--- 1.50/sql/sql_partition.cc Thu Mar 16 15:21:08 2006
+++ 1.51/sql/sql_partition.cc Mon Mar 20 17:41:38 2006
@@ -1710,6 +1710,7 @@ bool fix_partition_func(THD *thd, const
char* db_name;
partition_info *part_info= table->part_info;
ulong save_set_query_id= thd->set_query_id;
+ Item *thd_free_list= thd->free_list;
DBUG_ENTER("fix_partition_func");
if (part_info->fixed)
@@ -1744,6 +1745,7 @@ bool fix_partition_func(THD *thd, const
DBUG_RETURN(TRUE);
}
}
+ thd->free_list= part_info->item_free_list;
if (part_info->is_sub_partitioned())
{
DBUG_ASSERT(part_info->subpart_type == HASH_PARTITION);
@@ -1853,6 +1855,7 @@ bool fix_partition_func(THD *thd, const
set_up_range_analysis_info(part_info);
result= FALSE;
end:
+ thd->free_list= thd_free_list;
thd->set_query_id= save_set_query_id;
DBUG_PRINT("info", ("thd->set_query_id: %d", thd->set_query_id));
DBUG_RETURN(result);
| Thread |
|---|
| • bk commit into 5.1 tree (gluh:1.2190) BUG#14367 | gluh | 20 Mar |