mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Use context with correct lifetime in hypothetical_dense_rank_final.
The query lifetime expression context created in
hypothetical_dense_rank_final() was buggily allocated in the calling
memory context. I (Andres) broke that in bf6c614a2f
.
Reported-By: Rajkumar Raghuwanshi
Author: Amit Langote
Discussion: https://postgr.es/m/CAKcux6kmzWmur5HhA_aU6gYVFu0RLQdgJJ+aC9SLdcOvBSrpfA@mail.gmail.com
Backpatch: 11-
This commit is contained in:
parent
3a01f68e35
commit
249126e761
@ -1310,7 +1310,15 @@ hypothetical_dense_rank_final(PG_FUNCTION_ARGS)
|
||||
osastate = (OSAPerGroupState *) PG_GETARG_POINTER(0);
|
||||
econtext = osastate->qstate->econtext;
|
||||
if (!econtext)
|
||||
osastate->qstate->econtext = econtext = CreateStandaloneExprContext();
|
||||
{
|
||||
MemoryContext oldcontext;
|
||||
|
||||
/* Make sure to we create econtext under correct parent context. */
|
||||
oldcontext = MemoryContextSwitchTo(osastate->qstate->qcontext);
|
||||
osastate->qstate->econtext = CreateStandaloneExprContext();
|
||||
econtext = osastate->qstate->econtext;
|
||||
MemoryContextSwitchTo(oldcontext);
|
||||
}
|
||||
|
||||
/* Adjust nargs to be the number of direct (or aggregated) args */
|
||||
if (nargs % 2 != 0)
|
||||
|
@ -2092,3 +2092,12 @@ SELECT variance(unique1::int4), sum(unique1::int8) FROM tenk1;
|
||||
(1 row)
|
||||
|
||||
ROLLBACK;
|
||||
-- test coverage for dense_rank
|
||||
SELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM (VALUES (1),(1),(2),(2),(3),(3)) v(x) GROUP BY (x) ORDER BY 1;
|
||||
dense_rank
|
||||
------------
|
||||
1
|
||||
1
|
||||
1
|
||||
(3 rows)
|
||||
|
||||
|
@ -925,3 +925,6 @@ EXPLAIN (COSTS OFF)
|
||||
SELECT variance(unique1::int4), sum(unique1::int8) FROM tenk1;
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
-- test coverage for dense_rank
|
||||
SELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM (VALUES (1),(1),(2),(2),(3),(3)) v(x) GROUP BY (x) ORDER BY 1;
|
||||
|
Loading…
Reference in New Issue
Block a user