37#define STS_CHUNK_PAGES 4
38#define STS_CHUNK_HEADER_SIZE offsetof(SharedTuplestoreChunk, data)
39#define STS_CHUNK_DATA_SIZE (STS_CHUNK_PAGES * BLCKSZ - STS_CHUNK_HEADER_SIZE)
127 size_t meta_data_size,
142 elog(
ERROR,
"SharedTuplestore name too long");
154 for (
i = 0;
i < participants; ++
i)
244 accessor->sts->participants[
i].read_page = 0;
363 if (
accessor->sts->meta_data_size > 0)
376 size -=
accessor->sts->meta_data_size;
404 if (
accessor->sts->meta_data_size > 0)
426 if (
accessor->sts->meta_data_size > 0)
432 accessor->read_bytes +=
sizeof(size);
433 if (size >
accessor->read_buffer_size)
465 errmsg(
"unexpected chunk in shared tuplestore temporary file"),
547 errmsg(
"could not seek to block %u in shared tuplestore temporary file",
557 accessor->read_next_page = read_page +
BufFile * BufFileOpenFileSet(FileSet *fileset, const char *name, int mode, bool missing_ok)
int BufFileSeekBlock(BufFile *file, int64 blknum)
void BufFileReadExact(BufFile *file, void *ptr, size_t size)
void BufFileWrite(BufFile *file, const void *ptr, size_t size)
BufFile * BufFileCreateFileSet(FileSet *fileset, const char *name)
void BufFileClose(BufFile *file)
#define PG_USED_FOR_ASSERTS_ONLY
#define Assert(condition)
#define FLEXIBLE_ARRAY_MEMBER
int errdetail_internal(const char *fmt,...)
int errcode_for_file_access(void)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define palloc0_object(type)
MinimalTupleData * MinimalTuple
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
void LWLockInitialize(LWLock *lock, int tranche_id)
void * MemoryContextAlloc(MemoryContext context, Size size)
void * MemoryContextAllocZero(MemoryContext context, Size size)
void pfree(void *pointer)
MemoryContext CurrentMemoryContext
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
void sts_reinitialize(SharedTuplestoreAccessor *accessor)
static MinimalTuple sts_read_tuple(SharedTuplestoreAccessor *accessor, void *meta_data)
SharedTuplestoreAccessor * sts_attach(SharedTuplestore *sts, int my_participant_number, SharedFileSet *fileset)
static void sts_flush_chunk(SharedTuplestoreAccessor *accessor)
#define STS_CHUNK_HEADER_SIZE
MinimalTuple sts_parallel_scan_next(SharedTuplestoreAccessor *accessor, void *meta_data)
static void sts_filename(char *name, SharedTuplestoreAccessor *accessor, int participant)
void sts_end_write(SharedTuplestoreAccessor *accessor)
SharedTuplestoreAccessor * sts_initialize(SharedTuplestore *sts, int participants, int my_participant_number, size_t meta_data_size, int flags, SharedFileSet *fileset, const char *name)
size_t sts_estimate(int participants)
#define STS_CHUNK_DATA_SIZE
void sts_end_parallel_scan(SharedTuplestoreAccessor *accessor)
void sts_puttuple(SharedTuplestoreAccessor *accessor, void *meta_data, MinimalTuple tuple)
void sts_begin_parallel_scan(SharedTuplestoreAccessor *accessor)
SharedTuplestoreChunk * write_chunk
int read_ntuples_available
BlockNumber read_next_page
char data[FLEXIBLE_ARRAY_MEMBER]
SharedTuplestoreParticipant participants[FLEXIBLE_ARRAY_MEMBER]