MCPcopy Create free account
hub / github.com/apache/cloudberry / blbuild

Function blbuild

contrib/bloom/blinsert.c:120–158  ·  view source on GitHub ↗

* Build a new bloom index. */

Source from the content-addressed store, hash-verified

118 * Build a new bloom index.
119 */
120IndexBuildResult *
121blbuild(Relation heap, Relation index, IndexInfo *indexInfo)
122{
123 IndexBuildResult *result;
124 double reltuples;
125 BloomBuildState buildstate;
126
127 if (RelationGetNumberOfBlocks(index) != 0)
128 elog(ERROR, "index \"%s\" already contains data",
129 RelationGetRelationName(index));
130
131 /* Initialize the meta page */
132 BloomInitMetapage(index);
133
134 /* Initialize the bloom build state */
135 memset(&buildstate, 0, sizeof(buildstate));
136 initBloomState(&buildstate.blstate, index);
137 buildstate.tmpCtx = AllocSetContextCreate(CurrentMemoryContext,
138 "Bloom build temporary context",
139 ALLOCSET_DEFAULT_SIZES);
140 initCachedPage(&buildstate);
141
142 /* Do the heap scan */
143 reltuples = table_index_build_scan(heap, index, indexInfo, true, true,
144 bloomBuildCallback, (void *) &buildstate,
145 NULL);
146
147 /* Flush last page if needed (it will be, unless heap was empty) */
148 if (buildstate.count > 0)
149 flushCachedPage(index, &buildstate);
150
151 MemoryContextDelete(buildstate.tmpCtx);
152
153 result = (IndexBuildResult *) palloc(sizeof(IndexBuildResult));
154 result->heap_tuples = reltuples;
155 result->index_tuples = buildstate.indtuples;
156
157 return result;
158}
159
160/*
161 * Build an empty bloom index in the initialization fork.

Callers

nothing calls this directly

Calls 6

BloomInitMetapageFunction · 0.85
initBloomStateFunction · 0.85
initCachedPageFunction · 0.85
table_index_build_scanFunction · 0.85
flushCachedPageFunction · 0.85
pallocFunction · 0.50

Tested by

no test coverage detected