mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	PL/pgSQL: Nested CALL with transactions
So far, a nested CALL or DO in PL/pgSQL would not establish a context where transaction control statements were allowed. This fixes that by handling CALL and DO specially in PL/pgSQL, passing the atomic/nonatomic execution context through and doing the required management around transaction boundaries. Reviewed-by: Tomas Vondra <tomas.vondra@2ndquadrant.com>
This commit is contained in:
		| @@ -86,6 +86,7 @@ typedef struct _SPI_plan | ||||
| 	int			magic;			/* should equal _SPI_PLAN_MAGIC */ | ||||
| 	bool		saved;			/* saved or unsaved plan? */ | ||||
| 	bool		oneshot;		/* one-shot plan? */ | ||||
| 	bool		no_snapshots;	/* let the caller handle the snapshots */ | ||||
| 	List	   *plancache_list; /* one CachedPlanSource per parsetree */ | ||||
| 	MemoryContext plancxt;		/* Context containing _SPI_plan and data */ | ||||
| 	int			cursor_options; /* Cursor options used for planning */ | ||||
|   | ||||
| @@ -20,6 +20,7 @@ typedef enum | ||||
| { | ||||
| 	PROCESS_UTILITY_TOPLEVEL,	/* toplevel interactive command */ | ||||
| 	PROCESS_UTILITY_QUERY,		/* a complete query, but not toplevel */ | ||||
| 	PROCESS_UTILITY_QUERY_NONATOMIC, /* a complete query, nonatomic execution context */ | ||||
| 	PROCESS_UTILITY_SUBCOMMAND	/* a portion of a query */ | ||||
| } ProcessUtilityContext; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user