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

Function BloomPageAddItem

contrib/bloom/blutils.c:317–345  ·  view source on GitHub ↗

* Add new bloom tuple to the page. Returns true if new tuple was successfully * added to the page. Returns false if it doesn't fit on the page. */

Source from the content-addressed store, hash-verified

315 * added to the page. Returns false if it doesn't fit on the page.
316 */
317bool
318BloomPageAddItem(BloomState *state, Page page, BloomTuple *tuple)
319{
320 BloomTuple *itup;
321 BloomPageOpaque opaque;
322 Pointer ptr;
323
324 /* We shouldn't be pointed to an invalid page */
325 Assert(!PageIsNew(page) && !BloomPageIsDeleted(page));
326
327 /* Does new tuple fit on the page? */
328 if (BloomPageGetFreeSpace(state, page) < state->sizeOfBloomTuple)
329 return false;
330
331 /* Copy new tuple to the end of page */
332 opaque = BloomPageGetOpaque(page);
333 itup = BloomPageGetTuple(state, page, opaque->maxoff + 1);
334 memcpy((Pointer) itup, (Pointer) tuple, state->sizeOfBloomTuple);
335
336 /* Adjust maxoff and pd_lower */
337 opaque->maxoff++;
338 ptr = (Pointer) BloomPageGetTuple(state, page, opaque->maxoff + 1);
339 ((PageHeader) page)->pd_lower = ptr - page;
340
341 /* Assert we didn't overrun available space */
342 Assert(((PageHeader) page)->pd_lower <= ((PageHeader) page)->pd_upper);
343
344 return true;
345}
346
347/*
348 * Allocate a new page (either by recycling, or by extending the index file)

Callers 2

bloomBuildCallbackFunction · 0.85
blinsertFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected