]> granicus.if.org Git - postgresql/commitdiff
Improve ExecModifyTable comments.
authorRobert Haas <rhaas@postgresql.org>
Thu, 3 Aug 2017 16:47:00 +0000 (12:47 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 3 Aug 2017 16:47:00 +0000 (12:47 -0400)
Some of these comments wrongly implied that only an AFTER ROW trigger
will cause a 'wholerow' attribute to be present for a foreign table,
but a BEFORE ROW trigger can have the same effect.  Others implied
that it would always be present for a foreign table, but that's not
true either.

Etsuro Fujita and Robert Haas

Discussion: http://postgr.es/m/10026bc7-1403-ef85-9e43-c6100c1cc0e3@lab.ntt.co.jp

src/backend/executor/nodeModifyTable.c

index 435aed3b8bc40ec83d9add17edcd02da0a8a6e79..30add8e3c7ade769317985fa3c4fbb9c16439230 100644 (file)
@@ -1696,7 +1696,7 @@ ExecModifyTable(PlanState *pstate)
                                 * the old relation tuple.
                                 *
                                 * Foreign table updates have a wholerow attribute when the
-                                * relation has an AFTER ROW trigger.  Note that the wholerow
+                                * relation has a row-level trigger.  Note that the wholerow
                                 * attribute does not carry system columns.  Foreign table
                                 * triggers miss seeing those, except that we know enough here
                                 * to set t_tableOid.  Quite separately from this, the FDW may
@@ -2182,8 +2182,11 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
        /*
         * Initialize the junk filter(s) if needed.  INSERT queries need a filter
         * if there are any junk attrs in the tlist.  UPDATE and DELETE always
-        * need a filter, since there's always a junk 'ctid' or 'wholerow'
-        * attribute present --- no need to look first.
+        * need a filter, since there's always at least one junk attribute present
+        * --- no need to look first.  Typically, this will be a 'ctid' or
+        * 'wholerow' attribute, but in the case of a foreign data wrapper it
+        * might be a set of junk attributes sufficient to identify the remote
+        * row.
         *
         * If there are multiple result relations, each one needs its own junk
         * filter.  Note multiple rels are only possible for UPDATE/DELETE, so we
@@ -2251,7 +2254,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
                                        else if (relkind == RELKIND_FOREIGN_TABLE)
                                        {
                                                /*
-                                                * When there is an AFTER trigger, there should be a
+                                                * When there is a row-level trigger, there should be a
                                                 * wholerow attribute.
                                                 */
                                                j->jf_junkAttNo = ExecFindJunkAttribute(j, "wholerow");