diff options
Diffstat (limited to 'src/backend/access/gin/ginentrypage.c')
-rw-r--r-- | src/backend/access/gin/ginentrypage.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/backend/access/gin/ginentrypage.c b/src/backend/access/gin/ginentrypage.c index a22fd32d9da..ec0114e7d39 100644 --- a/src/backend/access/gin/ginentrypage.c +++ b/src/backend/access/gin/ginentrypage.c @@ -570,8 +570,7 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR Size lsize = 0, size; char *ptr; - IndexTuple itup, - leftrightmost = NULL; + IndexTuple itup; Page page; Page lpage = PageGetTempPageCopy(BufferGetPage(lbuf)); Page rpage = BufferGetPage(rbuf); @@ -635,7 +634,6 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR } else { - leftrightmost = itup; lsize += MAXALIGN(IndexTupleSize(itup)) + sizeof(ItemIdData); } @@ -645,11 +643,6 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR ptr += MAXALIGN(IndexTupleSize(itup)); } - btree->entry = GinFormInteriorTuple(leftrightmost, lpage, - BufferGetBlockNumber(lbuf)); - - btree->rightblkno = BufferGetBlockNumber(rbuf); - data.node = btree->index->rd_node; data.rootBlkno = InvalidBlockNumber; data.lblkno = BufferGetBlockNumber(lbuf); @@ -674,19 +667,20 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR } /* - * return newly allocated rightmost tuple + * Prepare the state in 'btree' for inserting a downlink for given buffer. */ -IndexTuple -ginPageGetLinkItup(Buffer buf) +static void +entryPrepareDownlink(GinBtree btree, Buffer lbuf) { - IndexTuple itup, - nitup; - Page page = BufferGetPage(buf); + Page lpage = BufferGetPage(lbuf); + IndexTuple itup; - itup = getRightMostTuple(page); - nitup = GinFormInteriorTuple(itup, page, BufferGetBlockNumber(buf)); + itup = getRightMostTuple(lpage); - return nitup; + btree->entry = GinFormInteriorTuple(itup, + lpage, + BufferGetBlockNumber(lbuf)); + btree->rightblkno = GinPageGetOpaque(lpage)->rightlink; } /* @@ -696,17 +690,21 @@ ginPageGetLinkItup(Buffer buf) void ginEntryFillRoot(GinBtree btree, Buffer root, Buffer lbuf, Buffer rbuf) { - Page page; + Page page = BufferGetPage(root); + Page lpage = BufferGetPage(lbuf); + Page rpage = BufferGetPage(rbuf); IndexTuple itup; - page = BufferGetPage(root); - - itup = ginPageGetLinkItup(lbuf); + itup = GinFormInteriorTuple(getRightMostTuple(lpage), + lpage, + BufferGetBlockNumber(lbuf)); if (PageAddItem(page, (Item) itup, IndexTupleSize(itup), InvalidOffsetNumber, false, false) == InvalidOffsetNumber) elog(ERROR, "failed to add item to index root page"); pfree(itup); - itup = ginPageGetLinkItup(rbuf); + itup = GinFormInteriorTuple(getRightMostTuple(rpage), + rpage, + BufferGetBlockNumber(rbuf)); if (PageAddItem(page, (Item) itup, IndexTupleSize(itup), InvalidOffsetNumber, false, false) == InvalidOffsetNumber) elog(ERROR, "failed to add item to index root page"); pfree(itup); @@ -736,6 +734,7 @@ ginPrepareEntryScan(GinBtree btree, OffsetNumber attnum, btree->placeToPage = entryPlaceToPage; btree->splitPage = entrySplitPage; btree->fillRoot = ginEntryFillRoot; + btree->prepareDownlink = entryPrepareDownlink; btree->isData = FALSE; btree->fullScan = FALSE; |