* _bitmap_log_lovitem() -- log adding a new lov item to a lov page. */
| 983 | * _bitmap_log_lovitem() -- log adding a new lov item to a lov page. |
| 984 | */ |
| 985 | void |
| 986 | _bitmap_log_lovitem(Relation rel, ForkNumber fork, Buffer lovBuffer, OffsetNumber offset, |
| 987 | BMLOVItem lovItem, Buffer metabuf, bool is_new_lov_blkno) |
| 988 | { |
| 989 | Page lovPage = BufferGetPage(lovBuffer); |
| 990 | |
| 991 | xl_bm_lovitem xlLovItem; |
| 992 | XLogRecPtr recptr; |
| 993 | |
| 994 | Assert(BufferGetBlockNumber(lovBuffer) > 0); |
| 995 | |
| 996 | xlLovItem.bm_node = rel->rd_node; |
| 997 | xlLovItem.bm_fork = fork; |
| 998 | xlLovItem.bm_lov_blkno = BufferGetBlockNumber(lovBuffer); |
| 999 | xlLovItem.bm_lov_offset = offset; |
| 1000 | memcpy(&(xlLovItem.bm_lovItem), lovItem, sizeof(BMLOVItemData)); |
| 1001 | xlLovItem.bm_is_new_lov_blkno = is_new_lov_blkno; |
| 1002 | |
| 1003 | XLogBeginInsert(); |
| 1004 | XLogRegisterData((char*)&xlLovItem, sizeof(xl_bm_lovitem)); |
| 1005 | XLogRegisterBuffer(0, lovBuffer, REGBUF_STANDARD); |
| 1006 | |
| 1007 | if (is_new_lov_blkno) |
| 1008 | XLogRegisterBuffer(1, metabuf, 0); |
| 1009 | |
| 1010 | recptr = XLogInsert(RM_BITMAP_ID, |
| 1011 | XLOG_BITMAP_INSERT_LOVITEM); |
| 1012 | |
| 1013 | if (is_new_lov_blkno) |
| 1014 | { |
| 1015 | Page metapage = BufferGetPage(metabuf); |
| 1016 | |
| 1017 | PageSetLSN(metapage, recptr); |
| 1018 | } |
| 1019 | |
| 1020 | PageSetLSN(lovPage, recptr); |
| 1021 | |
| 1022 | elog(DEBUG1, "Insert a new lovItem at (blockno, offset): (%d,%d)", |
| 1023 | BufferGetBlockNumber(lovBuffer), offset); |
| 1024 | } |
| 1025 | |
| 1026 | /* |
| 1027 | * _bitmap_log_bitmapwords() -- log new bitmap words to be inserted. |
no test coverage detected