From a920d0df863a7598384ab2cb18d94e9597aa5538 Mon Sep 17 00:00:00 2001 From: "holyfoot@deer.(none)" <> Date: Sun, 5 Mar 2006 20:48:31 +0400 Subject: [PATCH] bug #15745 (COUNT(DISTINCT CONCAT(x,y)) returns wrong result --- mysql-test/r/distinct.result | 21 +++++++++++++++++++++ mysql-test/t/distinct.test | 24 ++++++++++++++++++++++++ sql/item_sum.cc | 6 +++--- 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/distinct.result b/mysql-test/r/distinct.result index 00436019f85..a6ad95570f8 100644 --- a/mysql-test/r/distinct.result +++ b/mysql-test/r/distinct.result @@ -512,3 +512,24 @@ id IFNULL(dsc, '-') 2 line number two 3 line number three drop table t1; +CREATE TABLE t1 ( +ID int(11) NOT NULL auto_increment, +x varchar(20) default NULL, +y decimal(10,0) default NULL, +PRIMARY KEY (ID), +KEY (y) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES +(1,'ba','-1'), +(2,'ba','1150'), +(306,'ba','-1'), +(307,'ba','1150'), +(611,'ba','-1'), +(612,'ba','1150'); +select count(distinct x,y) from t1; +count(distinct x,y) +2 +select count(distinct concat(x,y)) from t1; +count(distinct concat(x,y)) +2 +drop table t1; diff --git a/mysql-test/t/distinct.test b/mysql-test/t/distinct.test index 6483284633f..45bd0c7a51c 100644 --- a/mysql-test/t/distinct.test +++ b/mysql-test/t/distinct.test @@ -358,3 +358,27 @@ select distinct id, IFNULL(dsc, '-') from t1; drop table t1; # End of 4.1 tests + + +# +# Bug #15745 ( COUNT(DISTINCT CONCAT(x,y)) returns wrong result) +# +CREATE TABLE t1 ( + ID int(11) NOT NULL auto_increment, + x varchar(20) default NULL, + y decimal(10,0) default NULL, + PRIMARY KEY (ID), + KEY (y) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +INSERT INTO t1 VALUES +(1,'ba','-1'), +(2,'ba','1150'), +(306,'ba','-1'), +(307,'ba','1150'), +(611,'ba','-1'), +(612,'ba','1150'); + +select count(distinct x,y) from t1; +select count(distinct concat(x,y)) from t1; +drop table t1; diff --git a/sql/item_sum.cc b/sql/item_sum.cc index a3a25ec8d6f..804adcd022d 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -2541,9 +2541,9 @@ bool Item_sum_count_distinct::setup(THD *thd) Field *f= *field; enum enum_field_types type= f->type(); tree_key_length+= f->pack_length(); - if (!f->binary() && (type == MYSQL_TYPE_STRING || - type == MYSQL_TYPE_VAR_STRING || - type == MYSQL_TYPE_VARCHAR)) + if ((type == MYSQL_TYPE_VARCHAR) || + !f->binary() && (type == MYSQL_TYPE_STRING || + type == MYSQL_TYPE_VAR_STRING)) { all_binary= FALSE; break;