List:Commits« Previous MessageNext Message »
From:kgeorge Date:March 27 2007 4:28pm
Subject:bk commit into 5.0 tree (gkodinov:1.2421) BUG#26815
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of kgeorge. When kgeorge 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-03-27 19:28:04+03:00, gkodinov@stripped +4 -0
  Bug #26815:
   When creating a temporary table the concise column type
   of a string expression is decided based on its length:
   - if its length is under 512 it is stored as either 
     varchar or char.
   - otherwise it is stored as a BLOB.
   
   There is a flag (convert_blob_length) to create_tmp_field 
   that, when >0 allows to force creation of a varchar if the
   max blob length is under convert_blob_length.
   However it must be verified that convert_blob_length 
   (settable through a SQL option in some cases) is 
   under the maximum that can be stored in a varchar column.
   While performing that check for expressions in 
   create_tmp_field_from_item the max length of the blob was
   used instead. This causes blob columns to be created in the
   heap temp table used by GROUP_CONCAT (where blobs must not
   be created in the temp table because of the constant 
   convert_blob_length that is passed to create_tmp_field() ).
   And since these blob columns are not expected in that place
   we get wrong results.
   Fixed by checking that the value of the flag variable is 
   in the limits that fit into VARCHAR instead of the max length
   of the blob column.

  mysql-test/r/func_gconcat.result@stripped, 2007-03-27 19:28:02+03:00, gkodinov@stripped +10 -0
    Bug #26815: test case

  mysql-test/t/func_gconcat.test@stripped, 2007-03-27 19:28:02+03:00, gkodinov@stripped +11 -1
    Bug #26815: test case

  sql/item_sum.cc@stripped, 2007-03-27 19:28:02+03:00, gkodinov@stripped +1 -2
    Bug #26815: wrong length was checked

  sql/sql_select.cc@stripped, 2007-03-27 19:28:02+03:00, gkodinov@stripped +1 -2
    Bug #26815: wrong length was checked

# 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:	gkodinov
# Host:	magare.gmz
# Root:	/home/kgeorge/mysql/work/B26815-5.0-opt

--- 1.201/sql/item_sum.cc	2007-03-26 09:44:03 +03:00
+++ 1.202/sql/item_sum.cc	2007-03-27 19:28:02 +03:00
@@ -417,8 +417,7 @@ Field *Item_sum::create_tmp_field(bool g
       2-byte lenght. 
     */
     if (max_length/collation.collation->mbmaxlen > 255 && 
-        max_length/collation.collation->mbmaxlen < UINT_MAX16 &&
-        convert_blob_length)
+        convert_blob_length < UINT_MAX16 && convert_blob_length)
       return new Field_varstring(convert_blob_length, maybe_null,
                                  name, table,
                                  collation.collation);

--- 1.502/sql/sql_select.cc	2007-03-26 09:44:03 +03:00
+++ 1.503/sql/sql_select.cc	2007-03-27 19:28:02 +03:00
@@ -8805,8 +8805,7 @@ static Field *create_tmp_field_from_item
       2-byte lenght. 
     */
     else if (item->max_length/item->collation.collation->mbmaxlen > 255 &&
-             item->max_length/item->collation.collation->mbmaxlen < UINT_MAX16
-             && convert_blob_length)
+             convert_blob_length < UINT_MAX16 && convert_blob_length)
       new_field= new Field_varstring(convert_blob_length, maybe_null,
                                      item->name, table,
                                      item->collation.collation);

--- 1.66/mysql-test/r/func_gconcat.result	2006-11-30 18:46:50 +02:00
+++ 1.67/mysql-test/r/func_gconcat.result	2007-03-27 19:28:02 +03:00
@@ -728,3 +728,13 @@ f2	group_concat(f1)
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa	1
 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb	2
 drop table t1;
+CREATE TABLE t1(a TEXT, b CHAR(20));
+INSERT INTO t1 VALUES ("one.1","one.1"),("two.2","two.2"),("one.3","one.3");
+SELECT GROUP_CONCAT(DISTINCT UCASE(a)) FROM t1;
+GROUP_CONCAT(DISTINCT UCASE(a))
+ONE.1,TWO.2,ONE.3
+SELECT GROUP_CONCAT(DISTINCT UCASE(b)) FROM t1;
+GROUP_CONCAT(DISTINCT UCASE(b))
+ONE.1,TWO.2,ONE.3
+DROP TABLE t1;
+End of 5.0 tests

--- 1.53/mysql-test/t/func_gconcat.test	2006-11-30 18:47:30 +02:00
+++ 1.54/mysql-test/t/func_gconcat.test	2007-03-27 19:28:02 +03:00
@@ -497,4 +497,14 @@ select f2,group_concat(f1) from t1 group
 --disable_metadata
 drop table t1;
 
-# End of 4.1 tests
+#
+# Bug #26815: Unexpected built-in function behavior: group_concat(distinct
+# substring_index())
+# 
+CREATE TABLE t1(a TEXT, b CHAR(20));
+INSERT INTO t1 VALUES ("one.1","one.1"),("two.2","two.2"),("one.3","one.3");
+SELECT GROUP_CONCAT(DISTINCT UCASE(a)) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT UCASE(b)) FROM t1;
+DROP TABLE t1;
+
+--echo End of 5.0 tests
Thread
bk commit into 5.0 tree (gkodinov:1.2421) BUG#26815kgeorge27 Mar