• Tom Lane's avatar
    Fix check_srf_call_placement() to handle VALUES cases correctly. · d43a619c
    Tom Lane authored
    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 a4c35ea1.
    
    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
    d43a619c
parse_node.h 11.6 KB