summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/group_by.result10
-rw-r--r--mysql-test/t/group_by.test15
-rw-r--r--sql/item_buff.cc4
3 files changed, 27 insertions, 2 deletions
diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result
index e279fca2a9d..7f78b8bda9b 100644
--- a/mysql-test/r/group_by.result
+++ b/mysql-test/r/group_by.result
@@ -741,3 +741,13 @@ SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f;
f id
20050501123000 1
DROP TABLE t1;
+CREATE TABLE t1 (id varchar(20) NOT NULL);
+INSERT INTO t1 VALUES ('trans1'), ('trans2');
+CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL);
+INSERT INTO t2 VALUES ('trans1', 'a problem');
+SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS err_comment
+FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY err_comment;
+COUNT(DISTINCT(t1.id)) err_comment
+1 NULL
+1 a problem
+DROP TABLE t1, t2;
diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test
index 382580cbd4e..694aa8d7411 100644
--- a/mysql-test/t/group_by.test
+++ b/mysql-test/t/group_by.test
@@ -565,3 +565,18 @@ INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f;
DROP TABLE t1;
+
+#
+# Test for bug #11295: GROUP BY a BLOB column with COUNT(DISTINCT column1)
+# when the BLOB column takes NULL values
+#
+
+CREATE TABLE t1 (id varchar(20) NOT NULL);
+INSERT INTO t1 VALUES ('trans1'), ('trans2');
+CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL);
+INSERT INTO t2 VALUES ('trans1', 'a problem');
+
+SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS err_comment
+ FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY err_comment;
+
+DROP TABLE t1, t2;
diff --git a/sql/item_buff.cc b/sql/item_buff.cc
index f5e77862e1d..8298ce2cfb7 100644
--- a/sql/item_buff.cc
+++ b/sql/item_buff.cc
@@ -51,8 +51,8 @@ bool Item_str_buff::cmp(void)
String *res;
bool tmp;
- res=item->val_str(&tmp_value);
- res->length(min(res->length(), value.alloced_length()));
+ if ((res=item->val_str(&tmp_value)))
+ res->length(min(res->length(), value.alloced_length()));
if (null_value != item->null_value)
{
if ((null_value= item->null_value))