Re: Weird behaviour of ROLLUP/GROUPING
Guillaume Lelarge <guillaume@lelarge.info>
From: Guillaume Lelarge <guillaume@lelarge.info>
To: Andrew Gierth <andrew@tao11.riddles.org.uk>
Cc: PostgreSQL General <pgsql-general@postgresql.org>
Date: 2019-01-16T17:05:39Z
Lists: pgsql-general
Le mer. 16 janv. 2019 à 17:40, Andrew Gierth <andrew@tao11.riddles.org.uk> a écrit : > >>>>> "Andrew" == Andrew Gierth <andrew@tao11.riddles.org.uk> writes: > >>>>> "Guillaume" == Guillaume Lelarge <guillaume@lelarge.info> writes: > > Guillaume> CASE grouping(to_char(b, 'MMYYYY')) > > Guillaume> ERROR: arguments to GROUPING must be grouping expressions of > the > Guillaume> associated query level > Guillaume> LINE 3: CASE grouping(to_char(b, 'MMYYYY')) WHEN 1 THEN 'some > date' ... > > Guillaume> AFAICT, both queries should behave the same, though their > Guillaume> actual behaviours are quite opposite. Working fine for the > Guillaume> first, erroring out on the second. > > Guillaume> Does anyone has any idea what's going on here? > > Andrew> Not yet. But I will find out, since it seems to be a bug. > > It is definitely a bug, to do with assignment of collations. It > specifically happens when you use GROUPING which contains any > subexpression of a collatable type, inside a CASE expr WHEN clause, > since that assigns collations to the expression much earlier in parsing > than the rest of the query, so the code that validates GROUPING ends up > trying to compare an expression which has had collations assigned to it > to one which has not, and so it thinks they differ. > > I will see about fixing this, somehow. > > Thanks a lot. -- Guillaume.
Commits
-
Postpone aggregate checks until after collation is assigned.
- d16d45387095 12.0 landed
- 174fab993414 9.4.21 landed
- 91448e7dcc1f 9.5.16 landed
- 624046abe23f 9.6.12 landed
- 409230a721cf 10.7 landed
- e74d8c5085aa 11.2 landed