Fix xslt_process() to ensure that it inserts a NULL terminator after the
[PostgreSQL.git] / src / include / utils / tuplestore.h
blobcf420789040462d4b081a21ea542de5a34d059ea
1 /*-------------------------------------------------------------------------
3 * tuplestore.h
4 * Generalized routines for temporary tuple storage.
6 * This module handles temporary storage of tuples for purposes such
7 * as Materialize nodes, hashjoin batch files, etc. It is essentially
8 * a dumbed-down version of tuplesort.c; it does no sorting of tuples
9 * but can only store and regurgitate a sequence of tuples. However,
10 * because no sort is required, it is allowed to start reading the sequence
11 * before it has all been written. This is particularly useful for cursors,
12 * because it allows random access within the already-scanned portion of
13 * a query without having to process the underlying scan to completion.
14 * Also, it is possible to support multiple independent read pointers.
16 * A temporary file is used to handle the data if it exceeds the
17 * space limit specified by the caller.
19 * Beginning in Postgres 8.2, what is stored is just MinimalTuples;
20 * callers cannot expect valid system columns in regurgitated tuples.
21 * Also, we have changed the API to return tuples in TupleTableSlots,
22 * so that there is a check to prevent attempted access to system columns.
24 * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
25 * Portions Copyright (c) 1994, Regents of the University of California
27 * $PostgreSQL$
29 *-------------------------------------------------------------------------
31 #ifndef TUPLESTORE_H
32 #define TUPLESTORE_H
34 #include "executor/tuptable.h"
37 /* Tuplestorestate is an opaque type whose details are not known outside
38 * tuplestore.c.
40 typedef struct Tuplestorestate Tuplestorestate;
43 * Currently we only need to store MinimalTuples, but it would be easy
44 * to support the same behavior for IndexTuples and/or bare Datums.
47 extern Tuplestorestate *tuplestore_begin_heap(bool randomAccess,
48 bool interXact,
49 int maxKBytes);
51 extern void tuplestore_set_eflags(Tuplestorestate *state, int eflags);
53 extern void tuplestore_puttupleslot(Tuplestorestate *state,
54 TupleTableSlot *slot);
55 extern void tuplestore_puttuple(Tuplestorestate *state, HeapTuple tuple);
56 extern void tuplestore_putvalues(Tuplestorestate *state, TupleDesc tdesc,
57 Datum *values, bool *isnull);
59 /* tuplestore_donestoring() used to be required, but is no longer used */
60 #define tuplestore_donestoring(state) ((void) 0)
62 extern int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags);
64 extern void tuplestore_select_read_pointer(Tuplestorestate *state, int ptr);
66 extern void tuplestore_copy_read_pointer(Tuplestorestate *state,
67 int srcptr, int destptr);
69 extern void tuplestore_trim(Tuplestorestate *state);
71 extern bool tuplestore_in_memory(Tuplestorestate *state);
73 extern bool tuplestore_gettupleslot(Tuplestorestate *state, bool forward,
74 bool copy, TupleTableSlot *slot);
75 extern bool tuplestore_advance(Tuplestorestate *state, bool forward);
77 extern bool tuplestore_ateof(Tuplestorestate *state);
79 extern void tuplestore_rescan(Tuplestorestate *state);
81 extern void tuplestore_clear(Tuplestorestate *state);
83 extern void tuplestore_end(Tuplestorestate *state);
85 #endif /* TUPLESTORE_H */