mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Remove no-longer-needed loop in ExecGather().
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.
This commit is contained in:
@ -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)
|
|||||||
* 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
|
* Form the result tuple using ExecProject(), and return it.
|
||||||
* 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);
|
||||||
econtext->ecxt_outertuple = slot;
|
|
||||||
|
|
||||||
return ExecProject(node->ps.ps_ProjInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
return slot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user