+1
−0
+8
−1
+54
−11
Loading
The cause of the bug was the use of end_write_group instead of end_write
in the case when ORDER BY required a temporary table, which didn't take
into account the fact that loose index scan already computes the result
of MIN/MAX aggregate functions (and performs grouping).
The solution is to call end_write instead of end_write_group and to add
the MIN/MAX functions to the list of regular functions so that their
values are inserted into the temporary table.
mysql-test/r/group_min_max.result:
Test for BUG#14920
mysql-test/t/group_min_max.test:
Test for BUG#14920
sql/sql_class.cc:
Added new member to TMP_TABLE_PARAM.
sql/sql_class.h:
Added new member to TMP_TABLE_PARAM.
sql/sql_select.cc:
Enable result rows generated by loose index scan being written into
a temporary table. The change is necessary because loose index
scan already computes the result of GROUP BY and the MIN/MAX aggregate
functions. This is realized by three changes:
- create_tmp_table allocates space for aggregate functions in the
list of regular functions,
- use end_write instead of end_write group,
- copy the pointers to the MIN/MAX aggregate functions to the list
of regular functions TMP_TABLE_PARAM::items_to_copy.
sql/sql_select.h:
New parameter to create_tmp_table.