Commit 0a8b9d3b authored by Tom Lane's avatar Tom Lane

Remove no-longer-needed loop in ExecGather().

Coverity complained quite properly that commit ea15e186 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.
parent 8f164e1e
...@@ -135,8 +135,8 @@ ExecGather(GatherState *node) ...@@ -135,8 +135,8 @@ ExecGather(GatherState *node)
/* /*
* Initialize the parallel context and workers on first execution. We do * Initialize the parallel context and workers on first execution. We do
* this on first execution rather than during node initialization, as it * 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 * needs to allocate a large dynamic segment, so it is better to do it
* really needed. * only if it is really needed.
*/ */
if (!node->initialized) if (!node->initialized)
{ {
...@@ -201,32 +201,23 @@ ExecGather(GatherState *node) ...@@ -201,32 +201,23 @@ ExecGather(GatherState *node)
* any previous tuple returned by a TupleQueueReader; to make sure we * any previous tuple returned by a TupleQueueReader; to make sure we
* don't leave a dangling pointer around, clear the working slot first. * don't leave a dangling pointer around, clear the working slot first.
*/ */
ExecClearTuple(node->funnel_slot); ExecClearTuple(fslot);
econtext = node->ps.ps_ExprContext; econtext = node->ps.ps_ExprContext;
ResetExprContext(econtext); 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.
/* */
* Get next tuple, either from one of our workers, or by running the slot = gather_getnext(node);
* plan ourselves. if (TupIsNull(slot))
*/ return NULL;
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);
}
return slot; /*
* Form the result tuple using ExecProject(), and return it.
*/
econtext->ecxt_outertuple = slot;
return ExecProject(node->ps.ps_ProjInfo);
} }
/* ---------------------------------------------------------------- /* ----------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment