From 2a621e275bb1763a228d6f0af657c841e2d521bd Mon Sep 17 00:00:00 2001 From: "gluh@gluh.mysql.r18.ru" <> Date: Tue, 5 Oct 2004 17:02:09 +0400 Subject: [PATCH] Fix for bug #5555: "GROUP BY enum_field" returns incorrect results --- mysql-test/r/func_group.result | 26 ++++++++++++++++++++++++++ mysql-test/t/func_group.test | 24 ++++++++++++++++++++++++ sql/ha_heap.cc | 8 ++------ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result index 011a47874c2..c25f89d4df3 100644 --- a/mysql-test/r/func_group.result +++ b/mysql-test/r/func_group.result @@ -693,3 +693,29 @@ SELECT MIN(a) FROM t1 WHERE a < 0; MIN(a) NULL DROP TABLE t1; +CREATE TABLE t1 ( +id int(10) unsigned NOT NULL auto_increment, +val enum('one','two','three') NOT NULL default 'one', +PRIMARY KEY (id) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +INSERT INTO t1 VALUES +(1,'one'),(2,'two'),(3,'three'),(4,'one'),(5,'two'); +select val, count(*) from t1 group by val; +val count(*) +one 2 +two 2 +three 1 +drop table t1; +CREATE TABLE t1 ( +id int(10) unsigned NOT NULL auto_increment, +val set('one','two','three') NOT NULL default 'one', +PRIMARY KEY (id) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +INSERT INTO t1 VALUES +(1,'one'),(2,'two'),(3,'three'),(4,'one'),(5,'two'); +select val, count(*) from t1 group by val; +val count(*) +one 2 +two 2 +three 1 +drop table t1; diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test index 7f48f2b92bd..3e001961f90 100644 --- a/mysql-test/t/func_group.test +++ b/mysql-test/t/func_group.test @@ -431,6 +431,30 @@ SELECT MIN(a) FROM t1 WHERE a < 0; DROP TABLE t1; +# +# Bug #5555 GROUP BY enum_field" returns incorrect results +# + +CREATE TABLE t1 ( + id int(10) unsigned NOT NULL auto_increment, + val enum('one','two','three') NOT NULL default 'one', + PRIMARY KEY (id) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +INSERT INTO t1 VALUES +(1,'one'),(2,'two'),(3,'three'),(4,'one'),(5,'two'); + +select val, count(*) from t1 group by val; +drop table t1; +CREATE TABLE t1 ( + id int(10) unsigned NOT NULL auto_increment, + val set('one','two','three') NOT NULL default 'one', + PRIMARY KEY (id) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +INSERT INTO t1 VALUES +(1,'one'),(2,'two'),(3,'three'),(4,'one'),(5,'two'); +select val, count(*) from t1 group by val; +drop table t1; diff --git a/sql/ha_heap.cc b/sql/ha_heap.cc index 5be51ec8494..9344bfc0c8c 100644 --- a/sql/ha_heap.cc +++ b/sql/ha_heap.cc @@ -428,12 +428,8 @@ int ha_heap::create(const char *name, TABLE *table_arg, seg->type= field->key_type(); else { - if (!f_is_packed(flag) && - f_packtype(flag) == (int) FIELD_TYPE_DECIMAL && - !(field->charset() == &my_charset_bin)) - seg->type= (int) HA_KEYTYPE_TEXT; - else - seg->type= (int) HA_KEYTYPE_BINARY; + if ((seg->type = field->key_type()) != (int) HA_KEYTYPE_TEXT) + seg->type= HA_KEYTYPE_BINARY; } seg->start= (uint) key_part->offset; seg->length= (uint) key_part->length;