1
0
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:
Heikki Linnakangas
2013-11-20 16:09:14 +02:00
parent b21de4e7b3
commit 04965ad40e
6 changed files with 77 additions and 128 deletions

View File

@ -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)