Build column mapping for grouping sets in all required cases.
The previous coding frequently failed to fail because for one it's unusual to have rollup clauses with one column, and for another sometimes the wrong mapping didn't cause obvious problems. Author: Jeevan Chalke Reviewed-By: Andrew Gierth Discussion: CAM2+6=W=9=hQOipH0HAPbkun3Z3TFWij_EiHue0_6UX=oR=1kw@mail.gmail.com Backpatch: 9.5, where grouping sets were introduced
This commit is contained in:
parent
cf80ddee57
commit
144666f65b
@ -2401,13 +2401,8 @@ build_grouping_chain(PlannerInfo *root,
|
||||
* Prepare the grpColIdx for the real Agg node first, because we may need
|
||||
* it for sorting
|
||||
*/
|
||||
if (list_length(rollup_groupclauses) > 1)
|
||||
{
|
||||
Assert(rollup_lists && llast(rollup_lists));
|
||||
|
||||
top_grpColIdx =
|
||||
remap_groupColIdx(root, llast(rollup_groupclauses));
|
||||
}
|
||||
if (parse->groupingSets)
|
||||
top_grpColIdx = remap_groupColIdx(root, llast(rollup_groupclauses));
|
||||
|
||||
/*
|
||||
* If we need a Sort operation on the input, generate that.
|
||||
|
@ -587,4 +587,27 @@ select array(select row(v.a,s1.*) from (select two,four, count(*) from onek grou
|
||||
{"(2,0,0,250)","(2,0,2,250)","(2,0,,500)","(2,1,1,250)","(2,1,3,250)","(2,1,,500)","(2,,0,250)","(2,,1,250)","(2,,2,250)","(2,,3,250)","(2,,,1000)"}
|
||||
(2 rows)
|
||||
|
||||
-- Grouping on text columns
|
||||
select sum(ten) from onek group by two, rollup(four::text) order by 1;
|
||||
sum
|
||||
------
|
||||
1000
|
||||
1000
|
||||
1250
|
||||
1250
|
||||
2000
|
||||
2500
|
||||
(6 rows)
|
||||
|
||||
select sum(ten) from onek group by rollup(four::text), two order by 1;
|
||||
sum
|
||||
------
|
||||
1000
|
||||
1000
|
||||
1250
|
||||
1250
|
||||
2000
|
||||
2500
|
||||
(6 rows)
|
||||
|
||||
-- end
|
||||
|
@ -162,4 +162,8 @@ group by rollup(ten);
|
||||
select * from (values (1),(2)) v(a) left join lateral (select v.a, four, ten, count(*) from onek group by cube(four,ten)) s on true order by v.a,four,ten;
|
||||
select array(select row(v.a,s1.*) from (select two,four, count(*) from onek group by cube(two,four) order by two,four) s1) from (values (1),(2)) v(a);
|
||||
|
||||
-- Grouping on text columns
|
||||
select sum(ten) from onek group by two, rollup(four::text) order by 1;
|
||||
select sum(ten) from onek group by rollup(four::text), two order by 1;
|
||||
|
||||
-- end
|
||||
|
Loading…
x
Reference in New Issue
Block a user