1/*-------------------------------------------------------------------------
2 *
3 * sharedtuplestore.h
4 * Simple mechanism for sharing tuples between backends.
5 *
6 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * src/include/utils/sharedtuplestore.h
10 *
11 *-------------------------------------------------------------------------
12 */
13#ifndef SHAREDTUPLESTORE_H
14#define SHAREDTUPLESTORE_H
15
16#include "access/htup.h"
17#include "storage/fd.h"
18#include "storage/sharedfileset.h"
19
20struct SharedTuplestore;
21typedef struct SharedTuplestore SharedTuplestore;
22
23struct SharedTuplestoreAccessor;
24typedef struct SharedTuplestoreAccessor SharedTuplestoreAccessor;
25
26/*
27 * A flag indicating that the tuplestore will only be scanned once, so backing
28 * files can be unlinked early.
29 */
30#define SHARED_TUPLESTORE_SINGLE_PASS 0x01
31
32extern size_t sts_estimate(int participants);
33
34extern SharedTuplestoreAccessor *sts_initialize(SharedTuplestore *sts,
35 int participants,
36 int my_participant_number,
37 size_t meta_data_size,
38 int flags,
39 SharedFileSet *fileset,
40 const char *name);
41
42extern SharedTuplestoreAccessor *sts_attach(SharedTuplestore *sts,
43 int my_participant_number,
44 SharedFileSet *fileset);
45
46extern void sts_end_write(SharedTuplestoreAccessor *accessor);
47
48extern void sts_reinitialize(SharedTuplestoreAccessor *accessor);
49
50extern void sts_begin_parallel_scan(SharedTuplestoreAccessor *accessor);
51
52extern void sts_end_parallel_scan(SharedTuplestoreAccessor *accessor);
53
54extern void sts_puttuple(SharedTuplestoreAccessor *accessor,
55 void *meta_data,
56 MinimalTuple tuple);
57
58extern MinimalTuple sts_parallel_scan_next(SharedTuplestoreAccessor *accessor,
59 void *meta_data);
60
61#endif /* SHAREDTUPLESTORE_H */
62