mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug#25376: Incomplete setup of ORDER BY clause results in a wrong result.
Functions over sum functions wasn't set up correctly for the ORDER BY clause which leads to a wrong order of the result set. The split_sum_func() function is called now for each ORDER BY item that contains a sum function to set it up correctly. mysql-test/t/order_by.test: Added a test case for bug#25376: Incomplete setup of ORDER BY clause results in a wrong result. mysql-test/r/order_by.result: Added a test case for bug#25376: Incomplete setup of ORDER BY clause results in a wrong result. sql/sql_select.cc: Bug#25376: Incomplete setup of ORDER BY clause results in a wrong result. The split_sum_func() function is called now for each ORDER BY item that contains a sum function to set it up correctly.
This commit is contained in:
@ -926,3 +926,11 @@ NULL
|
||||
2
|
||||
3
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
create table t1 (a int, b int, c int);
|
||||
insert into t1 values (1,2,3), (9,8,3), (19,4,3), (1,4,9);
|
||||
select a,(sum(b)/sum(c)) as ratio from t1 group by a order by sum(b)/sum(c) asc;
|
||||
a ratio
|
||||
1 0.5000
|
||||
19 1.3333
|
||||
9 2.6667
|
||||
drop table t1;
|
||||
|
@ -640,3 +640,11 @@ SELECT t2.b FROM t1 LEFT JOIN (t2, t3 LEFT JOIN t4 ON t3.a=t4.a)
|
||||
ON (t1.a=t2.a AND t1.b=t3.b) order by t2.b;
|
||||
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
|
||||
#
|
||||
# Bug#25376: Incomplete setup of ORDER BY clause results in a wrong result.
|
||||
#
|
||||
create table t1 (a int, b int, c int);
|
||||
insert into t1 values (1,2,3), (9,8,3), (19,4,3), (1,4,9);
|
||||
select a,(sum(b)/sum(c)) as ratio from t1 group by a order by sum(b)/sum(c) asc;
|
||||
drop table t1;
|
||||
|
@ -455,6 +455,17 @@ JOIN::prepare(Item ***rref_pointer_array,
|
||||
|
||||
select_lex->fix_prepare_information(thd, &conds, &having);
|
||||
|
||||
if (order)
|
||||
{
|
||||
ORDER *ord;
|
||||
for (ord= order; ord; ord= ord->next)
|
||||
{
|
||||
Item *item= *ord->item;
|
||||
if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM)
|
||||
item->split_sum_func(thd, ref_pointer_array, all_fields);
|
||||
}
|
||||
}
|
||||
|
||||
if (having && having->with_sum_func)
|
||||
having->split_sum_func2(thd, ref_pointer_array, all_fields,
|
||||
&having, TRUE);
|
||||
|
Reference in New Issue
Block a user