From 42c0cd33a2b473e74401630a525df0c1f5b67e75 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Wed, 6 Aug 1997 07:02:49 +0000
Subject: [PATCH] I think I finally got psort working for all cases.

---
 src/backend/utils/sort/psort.c | 18 ++++++++++--------
 src/include/utils/psort.h      |  4 ++--
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/backend/utils/sort/psort.c b/src/backend/utils/sort/psort.c
index df40b0809a1..05a6d8ee494 100644
--- a/src/backend/utils/sort/psort.c
+++ b/src/backend/utils/sort/psort.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.8 1997/08/06 05:38:38 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/psort.c,v 1.9 1997/08/06 07:02:48 momjian Exp $
  *
  * NOTES
  *      Sorts the first relation into the second relation.
@@ -123,7 +123,7 @@ psort_begin(Sort *node, int nkeys, ScanKey key)
     PS(node)->BytesRead = 0;
     PS(node)->BytesWritten = 0;
     PS(node)->treeContext.tupDesc =
-    ExecGetTupType(outerPlan((Plan *)node));
+	ExecGetTupType(outerPlan((Plan *)node));
     PS(node)->treeContext.nKeys = nkeys;
     PS(node)->treeContext.scanKeys = key;
     PS(node)->treeContext.sortMem = SortMem * 1024;
@@ -276,7 +276,7 @@ initialrun(Sort *node, bool *empty)
 
     tp = PS(node)->Tape;
     
-    if ((bool)createrun(node, tp->tp_file, empty) != false) {
+    if ((bool)createrun(node, NULL, empty) != false) {
 	if (! PS(node)->using_tape_files)
 	    inittapes(node);
 	extrapasses = 0;
@@ -307,7 +307,7 @@ initialrun(Sort *node, bool *empty)
 	}					/* D3 */
 	if (extrapasses)
 	    if (--extrapasses) {
-		dumptuples(node);
+		dumptuples(tp->tp_file, node);
 		ENDRUN(tp->tp_file);
 		continue;
 	    } else
@@ -360,9 +360,11 @@ createrun(Sort *node, FILE *file, bool *empty)
 	    }
 	    lasttuple = tup = gettuple(&PS(node)->Tuples, &junk,
 				       &PS(node)->treeContext);
-	    if (! PS(node)->using_tape_files)
+	    if (! PS(node)->using_tape_files) {
 		inittapes(node);
-	    PUTTUP(node, tup, PS(node)->Tape->tp_file);
+		file = PS(node)->Tape->tp_file; /* was NULL */
+	    }
+	    PUTTUP(node, tup, file);
 	    TRACEOUT(createrun, tup);
 	}
 	if (LACKMEM(node))
@@ -400,7 +402,7 @@ createrun(Sort *node, FILE *file, bool *empty)
 	FREE(lasttuple);
 	TRACEMEM(createrun);
     }
-    dumptuples(node);
+    dumptuples(file, node);
     if (PS(node)->using_tape_files)
 	ENDRUN(file);
     /* delimit the end of the run */
@@ -561,7 +563,7 @@ merge(Sort *node, struct tape *dest)
  * dumptuples	- stores all the tuples in tree into file
  */
 void
-dumptuples(Sort *node)
+dumptuples(FILE *file, Sort *node)
 {
     register struct	leftist	*tp;
     register struct	leftist	*newp;
diff --git a/src/include/utils/psort.h b/src/include/utils/psort.h
index 93e72061d08..c6c6c29fb91 100644
--- a/src/include/utils/psort.h
+++ b/src/include/utils/psort.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: psort.h,v 1.5 1997/08/06 05:38:46 momjian Exp $
+ * $Id: psort.h,v 1.6 1997/08/06 07:02:49 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -104,7 +104,7 @@ extern HeapTuple tuplecopy(HeapTuple tup);
 extern FILE *mergeruns(Sort *node);
 extern void merge(Sort *node, struct tape *dest);
 
-extern void dumptuples(Sort *node);
+extern void dumptuples(FILE *file, Sort *node);
 extern HeapTuple psort_grabtuple(Sort *node);
 extern void psort_markpos(Sort *node);
 extern void psort_restorepos(Sort *node);
-- 
GitLab