mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05: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 bf6c614a2f2. 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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user