55 memcpy(page, buildstate->
data.
data, BLCKSZ);
66 memset(buildstate->
data.
data, 0, BLCKSZ);
68 buildstate->
count = 0;
76 bool *isnull,
bool tupleIsAlive,
void *
state)
104 elog(
ERROR,
"could not add new bloom tuple to empty page");
129 elog(
ERROR,
"index \"%s\" already contains data",
136 memset(&buildstate, 0,
sizeof(buildstate));
139 "Bloom build temporary context",
149 if (buildstate.count > 0)
182 (
char *) metapage,
true);
218 "Bloom insert temporary context",
285 nStart = metaData->
nStart;
288 if (nStart < metaData->nEnd &&
305 if (nStart >= metaData->
nEnd)
322 metaData->
nStart = nStart;
349 elog(
ERROR,
"could not add new bloom tuple to empty page");
#define BLOOM_METAPAGE_BLKNO
#define BUFFER_LOCK_UNLOCK
#define BloomPageIsDeleted(page)
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
IndexBuildResult * blbuild(Relation heap, Relation index, IndexInfo *indexInfo)
void initBloomState(BloomState *state, Relation index)
Buffer BloomNewBuffer(Relation index)
struct SMgrRelationData * rd_smgr
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
void MemoryContextReset(MemoryContext context)
void ReleaseBuffer(Buffer buffer)
#define BUFFER_LOCK_EXCLUSIVE
Page GenericXLogRegisterBuffer(GenericXLogState *state, Buffer buffer, int flags)
bool blinsert(Relation index, Datum *values, bool *isnull, ItemPointer ht_ctid, Relation heapRel, IndexUniqueCheck checkUnique, bool indexUnchanged, IndexInfo *indexInfo)
void UnlockReleaseBuffer(Buffer buffer)
void BloomInitPage(Page page, uint16 flags)
static void flushCachedPage(Relation index, BloomBuildState *buildstate)
static double table_index_build_scan(Relation table_rel, Relation index_rel, struct IndexInfo *index_info, bool allow_sync, bool progress, IndexBuildCallback callback, void *callback_state, TableScanDesc scan)
#define ALLOCSET_DEFAULT_SIZES
RelFileNodeBackend smgr_rnode
void smgrwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
bool BloomPageAddItem(BloomState *state, Page page, BloomTuple *tuple)
#define RelationGetRelationName(relation)
MemoryContext CurrentMemoryContext
FreeBlockNumberArray notFullPage
#define BufferGetPage(buffer)
#define BloomPageGetMeta(page)
void LockBuffer(Buffer buffer, int mode)
#define RelationGetNumberOfBlocks(reln)
static void initCachedPage(BloomBuildState *buildstate)
#define Assert(condition)
void BloomFillMetapage(Relation index, Page metaPage)
BloomTuple * BloomFormTuple(BloomState *state, ItemPointer iptr, Datum *values, bool *isnull)
XLogRecPtr GenericXLogFinish(GenericXLogState *state)
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
#define InvalidBlockNumber
void PageSetChecksumInplace(Page page, BlockNumber blkno)
void blbuildempty(Relation index)
static Datum values[MAXATTR]
BlockNumber BufferGetBlockNumber(Buffer buffer)
XLogRecPtr log_newpage(RelFileNode *rnode, ForkNumber forkNum, BlockNumber blkno, Page page, bool page_std)
#define BUFFER_LOCK_SHARE
void GenericXLogAbort(GenericXLogState *state)
#define CHECK_FOR_INTERRUPTS()
void smgrimmedsync(SMgrRelation reln, ForkNumber forknum)
#define GENERIC_XLOG_FULL_IMAGE
GenericXLogState * GenericXLogStart(Relation relation)
static void bloomBuildCallback(Relation index, ItemPointer tid, Datum *values, bool *isnull, bool tupleIsAlive, void *state)
void BloomInitMetapage(Relation index)