git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6ba8af9)
Fix nodeUnique to behave correctly when reversing direction after reaching
Sun, 2 Feb 2003 19:08:57 +0000 (19:08 +0000)
Sun, 2 Feb 2003 19:08:57 +0000 (19:08 +0000)
either end of subplan results. This prevents misbehavior of cursors
on SELECT DISTINCT ... queries. Per bug report 1-Feb-02.


diff --git a/src/backend/executor/nodeUnique.c b/src/backend/executor/nodeUnique.c
index 7a0ccb0b14c8ce01b8bc3f77fc8dd5a4f08051ec..fb012a5cc4018fca22465c0a7b68e6d5d765e860 100644 (file)
--- a/src/backend/executor/nodeUnique.c
+++ b/src/backend/executor/nodeUnique.c
@@ -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;
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /