diff options
Diffstat (limited to 'src/backend/access/gin/ginentrypage.c')
-rw-r--r-- | src/backend/access/gin/ginentrypage.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/backend/access/gin/ginentrypage.c b/src/backend/access/gin/ginentrypage.c index 7733028fba8..0ed0a3db7eb 100644 --- a/src/backend/access/gin/ginentrypage.c +++ b/src/backend/access/gin/ginentrypage.c @@ -486,9 +486,12 @@ entryPreparePage(GinBtree btree, Page page, OffsetNumber off) /* * Place tuple on page and fills WAL record + * + * If the tuple doesn't fit, returns false without modifying the page. */ -static void -entryPlaceToPage(GinBtree btree, Buffer buf, OffsetNumber off, XLogRecData **prdata) +static bool +entryPlaceToPage(GinBtree btree, Buffer buf, OffsetNumber off, + XLogRecData **prdata) { Page page = BufferGetPage(buf); OffsetNumber placed; @@ -498,6 +501,10 @@ entryPlaceToPage(GinBtree btree, Buffer buf, OffsetNumber off, XLogRecData **prd static XLogRecData rdata[3]; static ginxlogInsert data; + /* quick exit if it doesn't fit */ + if (!entryIsEnoughSpace(btree, buf, off)) + return false; + *prdata = rdata; data.updateBlkno = entryPreparePage(btree, page, off); @@ -543,6 +550,8 @@ entryPlaceToPage(GinBtree btree, Buffer buf, OffsetNumber off, XLogRecData **prd rdata[cnt].next = NULL; btree->entry = NULL; + + return true; } /* @@ -724,7 +733,6 @@ ginPrepareEntryScan(GinBtree btree, OffsetNumber attnum, btree->findItem = entryLocateLeafEntry; btree->findChildPtr = entryFindChildPtr; btree->getLeftMostPage = entryGetLeftMostPage; - btree->isEnoughSpace = entryIsEnoughSpace; btree->placeToPage = entryPlaceToPage; btree->splitPage = entrySplitPage; btree->fillRoot = ginEntryFillRoot; |