]> granicus.if.org Git - postgresql/commitdiff
Remove no-longer-needed loop in ExecGather().
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 22 Jan 2017 16:47:38 +0000 (11:47 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 22 Jan 2017 16:47:38 +0000 (11:47 -0500)
Coverity complained quite properly that commit ea15e1867 had introduced
unreachable code into ExecGather(); to wit, it was no longer possible to
iterate the final for-loop more or less than once.  So remove the for().

In passing, clean up a couple of comments, and make better use of a local
variable.

src/backend/executor/nodeGather.c

index 45aa1132d92271e9a65c9beeacfe7e2196af2d13..a1a3561d48c101e80cd3fcbefc279f3d6e5a5ab1 100644 (file)
@@ -135,8 +135,8 @@ ExecGather(GatherState *node)
        /*
         * Initialize the parallel context and workers on first execution. We do
         * this on first execution rather than during node initialization, as it
-        * needs to allocate large dynamic segment, so it is better to do if it is
-        * really needed.
+        * needs to allocate a large dynamic segment, so it is better to do it
+        * only if it is really needed.
         */
        if (!node->initialized)
        {
@@ -201,32 +201,23 @@ ExecGather(GatherState *node)
         * any previous tuple returned by a TupleQueueReader; to make sure we
         * don't leave a dangling pointer around, clear the working slot first.
         */
-       ExecClearTuple(node->funnel_slot);
+       ExecClearTuple(fslot);
        econtext = node->ps.ps_ExprContext;
        ResetExprContext(econtext);
 
-       /* Get and return the next tuple, projecting if necessary. */
-       for (;;)
-       {
-               /*
-                * Get next tuple, either from one of our workers, or by running the
-                * plan ourselves.
-                */
-               slot = gather_getnext(node);
-               if (TupIsNull(slot))
-                       return NULL;
-
-               /*
-                * form the result tuple using ExecProject(), and return it --- unless
-                * the projection produces an empty set, in which case we must loop
-                * back around for another tuple
-                */
-               econtext->ecxt_outertuple = slot;
-
-               return ExecProject(node->ps.ps_ProjInfo);
-       }
+       /*
+        * Get next tuple, either from one of our workers, or by running the plan
+        * ourselves.
+        */
+       slot = gather_getnext(node);
+       if (TupIsNull(slot))
+               return NULL;
 
-       return slot;
+       /*
+        * Form the result tuple using ExecProject(), and return it.
+        */
+       econtext->ecxt_outertuple = slot;
+       return ExecProject(node->ps.ps_ProjInfo);
 }
 
 /* ----------------------------------------------------------------