diff options
author | unknown <sergefp@mysql.com> | 2005-07-12 17:44:30 +0000 |
---|---|---|
committer | unknown <sergefp@mysql.com> | 2005-07-12 17:44:30 +0000 |
commit | 338259ad3dcb75cbbf20cf78f61b997d943e9664 (patch) | |
tree | 1750263eec438215239c73e252374b16442fbf5c | |
parent | 9d9ef52dbef834cdc4af1ce76b851259cb33a8c3 (diff) | |
parent | 6c9d93eba62f40c0ba35dcc55e32063a7911451e (diff) | |
download | mariadb-git-338259ad3dcb75cbbf20cf78f61b997d943e9664.tar.gz |
Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/psergey/mysql-5.0-bug11821-merge
-rw-r--r-- | mysql-test/r/subselect.result | 6 | ||||
-rw-r--r-- | mysql-test/t/subselect.test | 8 | ||||
-rw-r--r-- | sql/item.cc | 8 |
3 files changed, 20 insertions, 2 deletions
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 400a2be01f1..693146c869e 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -2837,3 +2837,9 @@ WHERE select_id = 0 OR select_id = 1); values_id 1 DROP TABLE t1, t2; +create table t1 (fld enum('0','1')); +insert into t1 values ('1'); +select * from (select max(fld) from t1) as foo; +max(fld) +1 +drop table t1; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 1e4930d385d..ecb3432753d 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -1859,3 +1859,11 @@ WHERE values_id IN (SELECT values_id FROM t2 WHERE select_id = 0 OR select_id = 1); DROP TABLE t1, t2; + +# BUG#11821 : Select from subselect using aggregate function on an enum +# segfaults: +create table t1 (fld enum('0','1')); +insert into t1 values ('1'); +select * from (select max(fld) from t1) as foo; +drop table t1; + diff --git a/sql/item.cc b/sql/item.cc index e53c1ebf734..4679b62643e 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -5421,9 +5421,13 @@ void Item_type_holder::get_full_info(Item *item) if (fld_type == MYSQL_TYPE_ENUM || fld_type == MYSQL_TYPE_SET) { + if (item->type() == Item::SUM_FUNC_ITEM && + (((Item_sum*)item)->sum_func() == Item_sum::MAX_FUNC || + ((Item_sum*)item)->sum_func() == Item_sum::MIN_FUNC)) + item = ((Item_sum*)item)->args[0]; /* - We can have enum/set type after merging only if we have one enum/set - field and number of NULL fields + We can have enum/set type after merging only if we have one enum|set + field (or MIN|MAX(enum|set field)) and number of NULL fields */ DBUG_ASSERT((enum_set_typelib && get_real_type(item) == MYSQL_TYPE_NULL) || |