From: Date: August 14 2008 9:59pm Subject: bzr push into mysql-5.0-bugteam branch (epotemkin:2660 to 2661) Bug#38195 List-Archive: http://lists.mysql.com/commits/51666 X-Bug: 38195 Message-Id: <20080814195943.1941553AE0@moonbone.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 2661 Evgeny Potemkin 2008-08-14 Fixed failing test case for the bug#38195. modified: mysql-test/r/group_min_max.result mysql-test/t/group_min_max.test 2660 Evgeny Potemkin 2008-08-13 Bug#38195: Incorrect handling of aggregate functions when loose index scan is used causes server crash. When the loose index scan access method is used values of aggregated functions are precomputed by it. Aggregation of such functions shouldn't be performed in this case and functions should be treated as normal ones. The create_tmp_table function wasn't taking this into account and this led to a crash if a query has MIN/MAX aggregate functions and employs temporary table and loose index scan. Now the JOIN::exec and the create_tmp_table functions treat MIN/MAX aggregate functions as normal ones when the loose index scan is used. modified: mysql-test/r/group_min_max.result mysql-test/t/group_min_max.test sql/sql_select.cc === modified file 'mysql-test/r/group_min_max.result' --- a/mysql-test/r/group_min_max.result 2008-08-13 18:24:55 +0000 +++ b/mysql-test/r/group_min_max.result 2008-08-14 19:55:18 +0000 @@ -2355,7 +2355,7 @@ a MIN(b) MAX(b) AVG(b) DROP TABLE t1; create table t1 (a int, b int, primary key (a,b), key `index` (a,b)) engine=MyISAM; insert into t1 (a,b) values (0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7), -(0,8),(0,9),(0,10),(0,11),(0,12),(0,13); +(0,8),(0,9),(0,10),(0,11); insert into t1 (a,b) select a, max(b)+1 from t1 where a = 0 group by a; select * from t1; a b @@ -2372,11 +2372,9 @@ a b 0 10 0 11 0 12 -0 13 -0 14 explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range PRIMARY,index PRIMARY 4 NULL 6 Using where; Using index for group-by; Using temporary +1 SIMPLE t1 range PRIMARY,index PRIMARY 4 NULL 5 Using where; Using index for group-by; Using temporary Warnings: Note 1003 select sql_buffer_result `test`.`t1`.`a` AS `a`,(max(`test`.`t1`.`b`) + 1) AS `max(b)+1` from `test`.`t1` where (`test`.`t1`.`a` = 0) group by `test`.`t1`.`a` drop table t1; === modified file 'mysql-test/t/group_min_max.test' --- a/mysql-test/t/group_min_max.test 2008-08-13 18:24:55 +0000 +++ b/mysql-test/t/group_min_max.test 2008-08-14 19:55:18 +0000 @@ -923,7 +923,7 @@ DROP TABLE t1; # create table t1 (a int, b int, primary key (a,b), key `index` (a,b)) engine=MyISAM; insert into t1 (a,b) values (0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7), -(0,8),(0,9),(0,10),(0,11),(0,12),(0,13); +(0,8),(0,9),(0,10),(0,11); insert into t1 (a,b) select a, max(b)+1 from t1 where a = 0 group by a; select * from t1; explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a;