While trying to construct testcases for a patch, I ran into this:

execAmi.c has a function ExecMayReturnRawTuples which indicates whether
a given plan might return tuples that come straight from a table rather
than having been projected.

InitPlan() uses this to force the addition of a junk filter to INSERT
or SELECT INTO queries that return raw tuples, with this comment:

 * Initialize the junk filter if needed.  SELECT and INSERT queries need a
 * filter if there are any junk attrs in the tlist.  INSERT and SELECT
 * INTO also need a filter if the plan may return raw disk tuples (else
 * heap_insert will be scribbling on the source relation!). UPDATE and

However, tracing through the code suggests that neither ExecInsert not
intorel_receive will modify a passed raw tuple - ExecInsert calls
ExecMaterializeSlot before heap_insert, and intorel_receive calls
ExecCopySlotTuple before heap_insert.

So is the ExecMayReturnRawTuples and corresponding ExecFilterJunk needed
at all? Or am I missing something?

-- 
Andrew (irc:RhodiumToad)

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to