mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Fix check_srf_call_placement() to handle VALUES cases correctly.
INSERT ... VALUES with a single VALUES row is implemented quite differently
from the general VALUES case.  A user-visible implication of that is that
we accept SRFs in the single-row case, but not in the multi-row case.
That's a historical artifact no doubt, but in view of the lack of field
complaints, I'm not excited about fixing it right now.
However, check_srf_call_placement() needs to know about this, first because
it should throw an error in the unsupported case, and second because it
should set p_hasTargetSRFs in the single-row case (because we treat that
like a SELECT tlist).  That's an oversight in commit a4c35ea1c.
To fix, split EXPR_KIND_VALUES into two values.  So far as I can see,
this is the only place where we need to distinguish the two cases at
present; but there might be more later.
Patch by me, per report from Andres Freund.
Discussion: https://postgr.es/m/20170116081548.zg63zltblwimpfgp@alap3.anarazel.de
			
			
This commit is contained in:
		@@ -55,6 +55,7 @@ typedef enum ParseExprKind
 | 
			
		||||
	EXPR_KIND_OFFSET,			/* OFFSET */
 | 
			
		||||
	EXPR_KIND_RETURNING,		/* RETURNING */
 | 
			
		||||
	EXPR_KIND_VALUES,			/* VALUES */
 | 
			
		||||
	EXPR_KIND_VALUES_SINGLE,	/* single-row VALUES (in INSERT only) */
 | 
			
		||||
	EXPR_KIND_CHECK_CONSTRAINT, /* CHECK constraint for a table */
 | 
			
		||||
	EXPR_KIND_DOMAIN_CHECK,		/* CHECK constraint for a domain */
 | 
			
		||||
	EXPR_KIND_COLUMN_DEFAULT,	/* default value for a table column */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user