diff options
Diffstat (limited to 'src/backend/access/gin/ginget.c')
-rw-r--r-- | src/backend/access/gin/ginget.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index acbdc5fe7f2..2a3991f1d12 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -124,18 +124,16 @@ static void scanPostingTree(Relation index, GinScanEntry scanEntry, BlockNumber rootPostingTree) { - GinPostingTreeScan *gdi; + GinBtreeStack *stack; Buffer buffer; Page page; /* Descend to the leftmost leaf page */ - gdi = ginPrepareScanPostingTree(index, rootPostingTree, TRUE); - - buffer = ginScanBeginPostingTree(gdi); + stack = ginScanBeginPostingTree(index, rootPostingTree); + buffer = stack->buffer; IncrBufferRefCount(buffer); /* prevent unpin in freeGinBtreeStack */ - freeGinBtreeStack(gdi->stack); - pfree(gdi); + freeGinBtreeStack(stack); /* * Loop iterates through all leaf pages of posting tree @@ -376,8 +374,7 @@ restartScanEntry: ginPrepareEntryScan(&btreeEntry, entry->attnum, entry->queryKey, entry->queryCategory, ginstate); - btreeEntry.searchMode = TRUE; - stackEntry = ginFindLeafPage(&btreeEntry, NULL); + stackEntry = ginFindLeafPage(&btreeEntry, GIN_ROOT_BLKNO, true); page = BufferGetPage(stackEntry->buffer); needUnlock = TRUE; @@ -427,7 +424,7 @@ restartScanEntry: if (GinIsPostingTree(itup)) { BlockNumber rootPostingTree = GinGetPostingTree(itup); - GinPostingTreeScan *gdi; + GinBtreeStack *stack; Page page; /* @@ -439,9 +436,9 @@ restartScanEntry: */ LockBuffer(stackEntry->buffer, GIN_UNLOCK); needUnlock = FALSE; - gdi = ginPrepareScanPostingTree(ginstate->index, rootPostingTree, TRUE); - entry->buffer = ginScanBeginPostingTree(gdi); + stack = ginScanBeginPostingTree(ginstate->index, rootPostingTree); + entry->buffer = stack->buffer; /* * We keep buffer pinned because we need to prevent deletion of @@ -451,7 +448,7 @@ restartScanEntry: IncrBufferRefCount(entry->buffer); page = BufferGetPage(entry->buffer); - entry->predictNumberResult = gdi->stack->predictNumber * GinPageGetOpaque(page)->maxoff; + entry->predictNumberResult = stack->predictNumber * GinPageGetOpaque(page)->maxoff; /* * Keep page content in memory to prevent durable page locking @@ -463,8 +460,7 @@ restartScanEntry: GinPageGetOpaque(page)->maxoff * sizeof(ItemPointerData)); LockBuffer(entry->buffer, GIN_UNLOCK); - freeGinBtreeStack(gdi->stack); - pfree(gdi); + freeGinBtreeStack(stack); entry->isFinished = FALSE; } else if (GinGetNPosting(itup) > 0) |