mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Further GIN refactoring.
Merge some functions that were always called together. Makes the code little bit more readable.
This commit is contained in:
@ -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)
|
||||
|
Reference in New Issue
Block a user