List:Commits« Previous MessageNext Message »
From:gluh Date:March 20 2006 1:41pm
Subject:bk commit into 5.1 tree (gluh:1.2190) BUG#14367
View as plain text  
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#14367gluh20 Mar