]> granicus.if.org Git - postgresql/commitdiff
I think I finally got psort working for all cases.
authorBruce Momjian <bruce@momjian.us>
Wed, 6 Aug 1997 07:02:49 +0000 (07:02 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 6 Aug 1997 07:02:49 +0000 (07:02 +0000)
src/backend/utils/sort/psort.c
src/include/utils/psort.h

index df40b0809a1904c58d86fdcea1c2be0f28a278b9..05a6d8ee4944b03ce63c4ac6d3253fc955091c81 100644 (file)
@@ -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;
index 93e72061d08d2852d3e9064bda7d475a07cece81..c6c6c29fb917a8299586064693e99a00c4777182 100644 (file)
@@ -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);