diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 1999-10-17 22:15:09 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 1999-10-17 22:15:09 +0000 |
| commit | 26c48b5e8cffafaf3b8acf345ca9fd8a1e408a54 (patch) | |
| tree | cbcf32d78330eb3414abed1117b0a54090302a97 /src/include/utils/tuplesort.h | |
| parent | 59ed74e60bb3c1ad2b83ebacbb49f74517d8764e (diff) | |
| download | postgresql-26c48b5e8cffafaf3b8acf345ca9fd8a1e408a54.tar.gz | |
Final stage of psort reconstruction work: replace psort.c with
a generalized module 'tuplesort.c' that can sort either HeapTuples or
IndexTuples, and is not tied to execution of a Sort node. Clean up
memory leakages in sorting, and replace nbtsort.c's private implementation
of mergesorting with calls to tuplesort.c.
Diffstat (limited to 'src/include/utils/tuplesort.h')
| -rw-r--r-- | src/include/utils/tuplesort.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h new file mode 100644 index 0000000000..7c5a320989 --- /dev/null +++ b/src/include/utils/tuplesort.h @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------- + * + * tuplesort.h + * Generalized tuple sorting routines. + * + * This module handles sorting of either heap tuples or index tuples + * (and could fairly easily support other kinds of sortable objects, + * if necessary). It works efficiently for both small and large amounts + * of data. Small amounts are sorted in-memory using qsort(). Large + * amounts are sorted using temporary files and a standard external sort + * algorithm. + * + * Copyright (c) 1994, Regents of the University of California + * + * $Id: tuplesort.h,v 1.1 1999/10/17 22:15:09 tgl Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef TUPLESORT_H +#define TUPLESORT_H + +#include "access/htup.h" +#include "access/itup.h" +#include "access/skey.h" +#include "access/tupdesc.h" +#include "utils/rel.h" + +/* Tuplesortstate is an opaque type whose details are not known outside tuplesort.c. */ + +typedef struct Tuplesortstate Tuplesortstate; + +/* + * We provide two different interfaces to what is essentially the same + * code: one for sorting HeapTuples and one for sorting IndexTuples. + * They differ primarily in the way that the sort key information is + * supplied. + */ + +extern Tuplesortstate *tuplesort_begin_heap(TupleDesc tupDesc, + int nkeys, ScanKey keys, + bool randomAccess); +extern Tuplesortstate *tuplesort_begin_index(Relation indexRel, + bool enforceUnique, + bool randomAccess); + +extern void tuplesort_puttuple(Tuplesortstate *state, void *tuple); + +extern void tuplesort_performsort(Tuplesortstate *state); + +extern void *tuplesort_gettuple(Tuplesortstate *state, bool forward, + bool *should_free); +#define tuplesort_getheaptuple(state, forward, should_free) \ + ((HeapTuple) tuplesort_gettuple(state, forward, should_free)) +#define tuplesort_getindextuple(state, forward, should_free) \ + ((IndexTuple) tuplesort_gettuple(state, forward, should_free)) + +extern void tuplesort_end(Tuplesortstate *state); + +/* + * These routines may only be called if randomAccess was specified 'true'. + * Backwards scan in gettuple is likewise only allowed if randomAccess. + */ + +extern void tuplesort_rescan(Tuplesortstate *state); +extern void tuplesort_markpos(Tuplesortstate *state); +extern void tuplesort_restorepos(Tuplesortstate *state); + +#endif /* TUPLESORT_H */ |
