Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8e42d5a

Browse files
author
Artur Zakirov
committed
Some fixes
1 parentc1df4cc commit8e42d5a

File tree

11 files changed

+971
-552
lines changed

11 files changed

+971
-552
lines changed

‎Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# contrib/rum/Makefile
22

33
MODULE_big = rum
4-
OBJS = rumutil.o ruminsert.o$(WIN32RES)
4+
OBJS = ginarrayproc.o ginbtree.o ginbulk.o gindatapage.o\
5+
ginentrypage.o ginfast.o ginget.o gininsert.o\
6+
ginscan.o ginutil.o ginvacuum.o ginxlog.o$(WIN32RES)
57

68
EXTENSION = rum
79
DATA = rum--1.0.sql

‎ginbtree.c

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ ginTraverseLock(Buffer buffer, bool searchMode)
2929
intaccess=GIN_SHARE;
3030

3131
LockBuffer(buffer,GIN_SHARE);
32-
page=BufferGetPage(buffer);
32+
page=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
3333
if (GinPageIsLeaf(page))
3434
{
3535
if (searchMode== FALSE)
@@ -74,8 +74,6 @@ ginPrepareFindLeafPage(GinBtree btree, BlockNumber blkno)
7474
GinBtreeStack*
7575
ginReFindLeafPage(GinBtreebtree,GinBtreeStack*stack)
7676
{
77-
boolfound= false;
78-
7977
while (stack->parent)
8078
{
8179
GinBtreeStack*ptr;
@@ -91,14 +89,13 @@ ginReFindLeafPage(GinBtree btree, GinBtreeStack *stack)
9189
stack=stack->parent;
9290
pfree(ptr);
9391

94-
page=BufferGetPage(stack->buffer);
92+
page=BufferGetPage(stack->buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
9593
maxoff=GinPageGetOpaque(page)->maxoff;
9694

9795
if (ginCompareItemPointers(
9896
&(((PostingItem*)GinDataPageGetItem(page,maxoff-1))->key),
9997
btree->items+btree->curitem) >=0)
10098
{
101-
found= true;
10299
break;
103100
}
104101
}
@@ -128,7 +125,7 @@ ginFindLeafPage(GinBtree btree, GinBtreeStack *stack)
128125

129126
stack->off=InvalidOffsetNumber;
130127

131-
page=BufferGetPage(stack->buffer);
128+
page=BufferGetPage(stack->buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
132129

133130
if (isfirst)
134131
{
@@ -154,7 +151,8 @@ ginFindLeafPage(GinBtree btree, GinBtreeStack *stack)
154151

155152
stack->buffer=ginStepRight(stack->buffer,btree->index,access);
156153
stack->blkno=rightlink;
157-
page=BufferGetPage(stack->buffer);
154+
page=BufferGetPage(stack->buffer,NULL,NULL,
155+
BGP_NO_SNAPSHOT_TEST);
158156
}
159157

160158
if (GinPageIsLeaf(page))/* we found, return locked page */
@@ -205,7 +203,7 @@ Buffer
205203
ginStepRight(Bufferbuffer,Relationindex,intlockmode)
206204
{
207205
Buffernextbuffer;
208-
Pagepage=BufferGetPage(buffer);
206+
Pagepage=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
209207
boolisLeaf=GinPageIsLeaf(page);
210208
boolisData=GinPageIsData(page);
211209
BlockNumberblkno=GinPageGetOpaque(page)->rightlink;
@@ -215,7 +213,7 @@ ginStepRight(Buffer buffer, Relation index, int lockmode)
215213
UnlockReleaseBuffer(buffer);
216214

217215
/* Sanity check that the page we stepped to is of similar kind. */
218-
page=BufferGetPage(nextbuffer);
216+
page=BufferGetPage(nextbuffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
219217
if (isLeaf!=GinPageIsLeaf(page)||isData!=GinPageIsData(page))
220218
elog(ERROR,"right sibling of GIN page is of different type");
221219

@@ -289,7 +287,7 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack,
289287
}
290288
root->off=InvalidOffsetNumber;
291289

292-
page=BufferGetPage(root->buffer);
290+
page=BufferGetPage(root->buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
293291
Assert(!GinPageIsLeaf(page));
294292

295293
/* check trivial case */
@@ -307,7 +305,7 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack,
307305
{
308306
buffer=ReadBuffer(btree->index,blkno);
309307
LockBuffer(buffer,GIN_EXCLUSIVE);
310-
page=BufferGetPage(buffer);
308+
page=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
311309
if (GinPageIsLeaf(page))
312310
elog(ERROR,"Lost path");
313311

@@ -322,7 +320,7 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack,
322320
break;
323321
}
324322
buffer=ginStepRight(buffer,btree->index,GIN_EXCLUSIVE);
325-
page=BufferGetPage(buffer);
323+
page=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
326324
}
327325

328326
if (blkno!=InvalidBlockNumber)
@@ -372,7 +370,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
372370
XLogRecData*rdata;
373371
BlockNumbersavedRightLink;
374372

375-
page=BufferGetPage(stack->buffer);
373+
page=BufferGetPage(stack->buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
376374
savedRightLink=GinPageGetOpaque(page)->rightlink;
377375

378376
if (btree->isEnoughSpace(btree,stack->buffer,stack->off))
@@ -386,7 +384,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
386384
{
387385
XLogRecPtrrecptr;
388386

389-
recptr=XLogInsert(RM_GIN_ID,XLOG_GIN_INSERT,rdata);
387+
recptr=XLogInsert(RM_GIN_ID,XLOG_GIN_INSERT);
390388
PageSetLSN(page,recptr);
391389
}
392390

@@ -432,9 +430,12 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
432430
((ginxlogSplit*) (rdata->data))->isRootSplit= TRUE;
433431
((ginxlogSplit*) (rdata->data))->rrlink=InvalidBlockNumber;
434432

435-
page=BufferGetPage(stack->buffer);
436-
lpage=BufferGetPage(lbuffer);
437-
rpage=BufferGetPage(rbuffer);
433+
page=BufferGetPage(stack->buffer,NULL,NULL,
434+
BGP_NO_SNAPSHOT_TEST);
435+
lpage=BufferGetPage(lbuffer,NULL,NULL,
436+
BGP_NO_SNAPSHOT_TEST);
437+
rpage=BufferGetPage(rbuffer,NULL,NULL,
438+
BGP_NO_SNAPSHOT_TEST);
438439

439440
GinPageGetOpaque(rpage)->rightlink=InvalidBlockNumber;
440441
GinPageGetOpaque(newlpage)->rightlink=BufferGetBlockNumber(rbuffer);
@@ -454,7 +455,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
454455
{
455456
XLogRecPtrrecptr;
456457

457-
recptr=XLogInsert(RM_GIN_ID,XLOG_GIN_SPLIT,rdata);
458+
recptr=XLogInsert(RM_GIN_ID,XLOG_GIN_SPLIT);
458459
PageSetLSN(page,recptr);
459460
PageSetLSN(lpage,recptr);
460461
PageSetLSN(rpage,recptr);
@@ -484,8 +485,10 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
484485
((ginxlogSplit*) (rdata->data))->isRootSplit= FALSE;
485486
((ginxlogSplit*) (rdata->data))->rrlink=savedRightLink;
486487

487-
lpage=BufferGetPage(stack->buffer);
488-
rpage=BufferGetPage(rbuffer);
488+
lpage=BufferGetPage(stack->buffer,NULL,NULL,
489+
BGP_NO_SNAPSHOT_TEST);
490+
rpage=BufferGetPage(rbuffer,NULL,NULL,
491+
BGP_NO_SNAPSHOT_TEST);
489492

490493
GinPageGetOpaque(rpage)->rightlink=savedRightLink;
491494
GinPageGetOpaque(newlpage)->rightlink=BufferGetBlockNumber(rbuffer);
@@ -500,7 +503,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
500503
{
501504
XLogRecPtrrecptr;
502505

503-
recptr=XLogInsert(RM_GIN_ID,XLOG_GIN_SPLIT,rdata);
506+
recptr=XLogInsert(RM_GIN_ID,XLOG_GIN_SPLIT);
504507
PageSetLSN(lpage,recptr);
505508
PageSetLSN(rpage,recptr);
506509
}
@@ -515,7 +518,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
515518
LockBuffer(parent->buffer,GIN_EXCLUSIVE);
516519

517520
/* move right if it's needed */
518-
page=BufferGetPage(parent->buffer);
521+
page=BufferGetPage(parent->buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
519522
while ((parent->off=btree->findChildPtr(btree,page,stack->blkno,parent->off))==InvalidOffsetNumber)
520523
{
521524
BlockNumberrightlink=GinPageGetOpaque(page)->rightlink;
@@ -535,7 +538,8 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
535538

536539
parent->buffer=ginStepRight(parent->buffer,btree->index,GIN_EXCLUSIVE);
537540
parent->blkno=rightlink;
538-
page=BufferGetPage(parent->buffer);
541+
page=BufferGetPage(parent->buffer,NULL,NULL,
542+
BGP_NO_SNAPSHOT_TEST);
539543
}
540544

541545
UnlockReleaseBuffer(stack->buffer);

‎gindatapage.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@ dataLocateItem(GinBtree btree, GinBtreeStack *stack)
357357
maxoff;
358358
PostingItem*pitem=NULL;
359359
intresult;
360-
Pagepage=BufferGetPage(stack->buffer);
360+
Pagepage=BufferGetPage(stack->buffer,NULL,NULL,
361+
BGP_NO_SNAPSHOT_TEST);
361362

362363
Assert(!GinPageIsLeaf(page));
363364
Assert(GinPageIsData(page));
@@ -489,7 +490,8 @@ findInLeafPage(GinBtree btree, Page page, OffsetNumber *offset,
489490
staticbool
490491
dataLocateLeafItem(GinBtreebtree,GinBtreeStack*stack)
491492
{
492-
Pagepage=BufferGetPage(stack->buffer);
493+
Pagepage=BufferGetPage(stack->buffer,NULL,NULL,
494+
BGP_NO_SNAPSHOT_TEST);
493495
ItemPointerDataiptr;
494496
Pointerptr;
495497

@@ -620,7 +622,7 @@ GinPageDeletePostingItem(Page page, OffsetNumber offset)
620622
staticbool
621623
dataIsEnoughSpace(GinBtreebtree,Bufferbuf,OffsetNumberoff)
622624
{
623-
Pagepage=BufferGetPage(buf);
625+
Pagepage=BufferGetPage(buf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
624626

625627
Assert(GinPageIsData(page));
626628
Assert(!btree->isDelete);
@@ -699,7 +701,7 @@ dataPrepareData(GinBtree btree, Page page, OffsetNumber off)
699701
staticvoid
700702
dataPlaceToPage(GinBtreebtree,Bufferbuf,OffsetNumberoff,XLogRecData**prdata)
701703
{
702-
Pagepage=BufferGetPage(buf);
704+
Pagepage=BufferGetPage(buf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
703705
Form_pg_attributeattr=btree->ginstate->addAttrs[btree->entryAttnum-1];
704706

705707
/* these must be static so they can be returned to caller */
@@ -886,8 +888,9 @@ dataSplitPageLeaf(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off,
886888
Sizetotalsize=0,prevTotalsize;
887889
Pointerptr,copyPtr;
888890
Pagepage;
889-
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf));
890-
Pagerpage=BufferGetPage(rbuf);
891+
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf,NULL,NULL,
892+
BGP_NO_SNAPSHOT_TEST));
893+
Pagerpage=BufferGetPage(rbuf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
891894
SizepageSize=PageGetPageSize(lpage);
892895
SizemaxItemSize=0;
893896
DatumaddInfo=0;
@@ -1127,11 +1130,12 @@ dataSplitPageInternal(GinBtree btree, Buffer lbuf, Buffer rbuf,
11271130
char*ptr;
11281131
OffsetNumberseparator;
11291132
ItemPointerbound;
1130-
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf));
1133+
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf,NULL,NULL,
1134+
BGP_NO_SNAPSHOT_TEST));
11311135
ItemPointerDataoldbound=*GinDataPageGetRightBound(lpage);
11321136
intsizeofitem=GinSizeOfDataPageItem(lpage);
11331137
OffsetNumbermaxoff=GinPageGetOpaque(lpage)->maxoff;
1134-
Pagerpage=BufferGetPage(rbuf);
1138+
Pagerpage=BufferGetPage(rbuf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
11351139
SizepageSize=PageGetPageSize(lpage);
11361140
SizefreeSpace;
11371141
uint32nCopied=1;
@@ -1249,7 +1253,7 @@ static Page
12491253
dataSplitPage(GinBtreebtree,Bufferlbuf,Bufferrbuf,OffsetNumberoff,
12501254
XLogRecData**prdata)
12511255
{
1252-
if (GinPageIsLeaf(BufferGetPage(lbuf)))
1256+
if (GinPageIsLeaf(BufferGetPage(lbuf,NULL,NULL,BGP_NO_SNAPSHOT_TEST)))
12531257
returndataSplitPageLeaf(btree,lbuf,rbuf,off,prdata);
12541258
else
12551259
returndataSplitPageInternal(btree,lbuf,rbuf,off,prdata);
@@ -1304,9 +1308,9 @@ updateItemIndexes(Page page, OffsetNumber attnum, GinState *ginstate)
13041308
void
13051309
ginDataFillRoot(GinBtreebtree,Bufferroot,Bufferlbuf,Bufferrbuf)
13061310
{
1307-
Pagepage=BufferGetPage(root),
1308-
lpage=BufferGetPage(lbuf),
1309-
rpage=BufferGetPage(rbuf);
1311+
Pagepage=BufferGetPage(root,NULL,NULL,BGP_NO_SNAPSHOT_TEST),
1312+
lpage=BufferGetPage(lbuf,NULL,NULL,BGP_NO_SNAPSHOT_TEST),
1313+
rpage=BufferGetPage(rbuf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
13101314
PostingItemli,
13111315
ri;
13121316

‎ginentrypage.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ entryLocateEntry(GinBtree btree, GinBtreeStack *stack)
136136
maxoff;
137137
IndexTupleitup=NULL;
138138
intresult;
139-
Pagepage=BufferGetPage(stack->buffer);
139+
Pagepage=BufferGetPage(stack->buffer,NULL,NULL,
140+
BGP_NO_SNAPSHOT_TEST);
140141

141142
Assert(!GinPageIsLeaf(page));
142143
Assert(!GinPageIsData(page));
@@ -207,7 +208,8 @@ entryLocateEntry(GinBtree btree, GinBtreeStack *stack)
207208
staticbool
208209
entryLocateLeafEntry(GinBtreebtree,GinBtreeStack*stack)
209210
{
210-
Pagepage=BufferGetPage(stack->buffer);
211+
Pagepage=BufferGetPage(stack->buffer,NULL,NULL,
212+
BGP_NO_SNAPSHOT_TEST);
211213
OffsetNumberlow,
212214
high;
213215

@@ -321,7 +323,7 @@ static bool
321323
entryIsEnoughSpace(GinBtreebtree,Bufferbuf,OffsetNumberoff)
322324
{
323325
Sizeitupsz=0;
324-
Pagepage=BufferGetPage(buf);
326+
Pagepage=BufferGetPage(buf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
325327

326328
Assert(btree->entry);
327329
Assert(!GinPageIsData(page));
@@ -377,7 +379,7 @@ entryPreparePage(GinBtree btree, Page page, OffsetNumber off)
377379
staticvoid
378380
entryPlaceToPage(GinBtreebtree,Bufferbuf,OffsetNumberoff,XLogRecData**prdata)
379381
{
380-
Pagepage=BufferGetPage(buf);
382+
Pagepage=BufferGetPage(buf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
381383
OffsetNumberplaced;
382384

383385
/* these must be static so they can be returned to caller */
@@ -443,8 +445,9 @@ entrySplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogR
443445
IndexTupleitup,
444446
leftrightmost=NULL;
445447
Pagepage;
446-
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf));
447-
Pagerpage=BufferGetPage(rbuf);
448+
Pagelpage=PageGetTempPageCopy(BufferGetPage(lbuf,NULL,NULL,
449+
BGP_NO_SNAPSHOT_TEST));
450+
Pagerpage=BufferGetPage(rbuf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
448451
SizepageSize=PageGetPageSize(lpage);
449452

450453
/* these must be static so they can be returned to caller */
@@ -551,7 +554,7 @@ ginPageGetLinkItup(Buffer buf)
551554
{
552555
IndexTupleitup,
553556
nitup;
554-
Pagepage=BufferGetPage(buf);
557+
Pagepage=BufferGetPage(buf,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
555558

556559
itup=getRightMostTuple(page);
557560
nitup=GinFormInteriorTuple(itup,page,BufferGetBlockNumber(buf));
@@ -569,7 +572,7 @@ ginEntryFillRoot(GinBtree btree, Buffer root, Buffer lbuf, Buffer rbuf)
569572
Pagepage;
570573
IndexTupleitup;
571574

572-
page=BufferGetPage(root);
575+
page=BufferGetPage(root,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
573576

574577
itup=ginPageGetLinkItup(lbuf);
575578
if (PageAddItem(page, (Item)itup,IndexTupleSize(itup),InvalidOffsetNumber, false, false)==InvalidOffsetNumber)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp