Commit 967e8a37 authored by Tom Lane's avatar Tom Lane

Fix nodeUnique to behave correctly when reversing direction after reaching

either end of subplan results.  This prevents misbehavior of cursors
on SELECT DISTINCT ... queries.  Per bug report 1-Feb-02.
parent 6ba8af9d
......@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/nodeUnique.c,v 1.37 2003/01/10 23:54:24 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/executor/nodeUnique.c,v 1.38 2003/02/02 19:08:57 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -56,6 +56,11 @@ ExecUnique(UniqueState *node)
/*
* now loop, returning only non-duplicate tuples. We assume that the
* tuples arrive in sorted order so we can detect duplicates easily.
*
* We return the first tuple from each group of duplicates (or the
* last tuple of each group, when moving backwards). At either end
* of the subplan, clear priorTuple so that we correctly return the
* first/last tuple when reversing direction.
*/
for (;;)
{
......@@ -64,10 +69,16 @@ ExecUnique(UniqueState *node)
*/
slot = ExecProcNode(outerPlan);
if (TupIsNull(slot))
{
/* end of subplan; reset in case we change direction */
if (node->priorTuple != NULL)
heap_freetuple(node->priorTuple);
node->priorTuple = NULL;
return NULL;
}
/*
* Always return the first tuple from the subplan.
* Always return the first/last tuple from the subplan.
*/
if (node->priorTuple == NULL)
break;
......
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