* 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. */
| 315 | * added to the page. Returns false if it doesn't fit on the page. |
| 316 | */ |
| 317 | bool |
| 318 | BloomPageAddItem(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) |
no outgoing calls
no test coverage detected