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

Commit77724f3

Browse files
committed
merge
2 parentsc4fa3b0 +2b8a0ae commit77724f3

File tree

8 files changed

+1043
-74
lines changed

8 files changed

+1043
-74
lines changed

‎rum.h

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,21 @@ typedef struct
299299
#defineRumPageGetIndexes(page) \
300300
((RumDataLeafItemIndex *)(RumDataPageGetData(page) + RumDataPageSize))
301301

302+
/*
303+
* Macros to handle generic XLOG
304+
*/
305+
#defineRumGenericXLogStart(index,isbuild) \
306+
(!(isbuild) ? GenericXLogStart(index) : NULL)
307+
308+
#defineRumGenericXLogRegisterBuffer(state,buffer,flags,isbuild) \
309+
(!(isbuild) ? GenericXLogRegisterBuffer(state, buffer, flags) : \
310+
BufferGetPage(buffer))
311+
312+
#defineRumGenericXLogFinish(state,isbuild) \
313+
(!(isbuild) ? GenericXLogFinish(state) : 0)
314+
315+
#defineRumGenericXLogAbort(state,isbuild) \
316+
(!(isbuild) ? GenericXLogAbort(state) : (void) 0)
302317

303318
/*
304319
* Storage type for RUM's reloptions
@@ -341,6 +356,7 @@ typedef struct RumConfig
341356
typedefstructRumState
342357
{
343358
Relationindex;
359+
boolisBuild;
344360
booloneCol;/* true if single-column index */
345361
booluseAlternativeOrder;
346362
AttrNumberattrnOrderByColumn;
@@ -385,24 +401,16 @@ typedef struct RumState
385401
OidsupportCollation[INDEX_MAX_KEYS];
386402
}RumState;
387403

388-
/* XLog stuff */
389-
390-
#defineRUM_NDELETE_AT_ONCE 16
391-
typedefstructrumxlogDeleteListPages
392-
{
393-
int32ndeleted;
394-
BlockNumbertoDelete[RUM_NDELETE_AT_ONCE];
395-
}rumxlogDeleteListPages;
396-
397-
398404
/* rumutil.c */
399405
externbytea*rumoptions(Datumreloptions,boolvalidate);
400406
externDatumrumhandler(PG_FUNCTION_ARGS);
401407
externvoidinitRumState(RumState*state,Relationindex);
402408
externBufferRumNewBuffer(Relationindex);
403-
externvoidRumInitBuffer(GenericXLogState*state,Bufferbuffer,uint32flags);
409+
externvoidRumInitBuffer(GenericXLogState*state,Bufferbuffer,uint32flags,
410+
boolisBuild);
404411
externvoidRumInitPage(Pagepage,uint32f,SizepageSize);
405-
externvoidRumInitMetabuffer(GenericXLogState*state,BuffermetaBuffer);
412+
externvoidRumInitMetabuffer(GenericXLogState*state,BuffermetaBuffer,
413+
boolisBuild);
406414
externintrumCompareEntries(RumState*rumstate,OffsetNumberattnum,
407415
Datuma,RumNullCategorycategorya,
408416
Datumb,RumNullCategorycategoryb);
@@ -419,7 +427,8 @@ extern Datum rumtuple_get_key(RumState * rumstate, IndexTuple tuple,
419427
RumNullCategory*category);
420428

421429
externvoidrumGetStats(Relationindex,GinStatsData*stats);
422-
externvoidrumUpdateStats(Relationindex,constGinStatsData*stats);
430+
externvoidrumUpdateStats(Relationindex,constGinStatsData*stats,
431+
boolisBuild);
423432

424433
/* ruminsert.c */
425434
externIndexBuildResult*rumbuild(Relationheap,Relationindex,
@@ -467,7 +476,6 @@ typedef struct RumBtreeData
467476
Relationindex;
468477
RumState*rumstate;
469478
boolfullScan;
470-
boolisBuild;
471479
ScanDirectionscanDirection;
472480

473481
BlockNumberrightblkno;

‎rumbtree.c

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -399,11 +399,12 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
399399

400400
if (btree->isEnoughSpace(btree,stack->buffer,stack->off))
401401
{
402-
state=GenericXLogStart(index);
403-
page=GenericXLogRegisterBuffer(state,stack->buffer,0);
402+
state=RumGenericXLogStart(index,btree->rumstate->isBuild);
403+
page=RumGenericXLogRegisterBuffer(state,stack->buffer,0,
404+
btree->rumstate->isBuild);
404405

405406
btree->placeToPage(btree,page,stack->off);
406-
GenericXLogFinish(state);
407+
RumGenericXLogFinish(state,btree->rumstate->isBuild);
407408

408409
LockBuffer(stack->buffer,RUM_UNLOCK);
409410
freeRumBtreeStack(stack);
@@ -430,11 +431,13 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
430431
{
431432
Bufferlbuffer;
432433

433-
state=GenericXLogStart(index);
434+
state=RumGenericXLogStart(index,btree->rumstate->isBuild);
434435

435-
page=GenericXLogRegisterBuffer(state,stack->buffer,0);
436-
rpage=GenericXLogRegisterBuffer(state,rbuffer,
437-
GENERIC_XLOG_FULL_IMAGE);
436+
page=RumGenericXLogRegisterBuffer(state,stack->buffer,0,
437+
btree->rumstate->isBuild);
438+
rpage=RumGenericXLogRegisterBuffer(state,rbuffer,
439+
GENERIC_XLOG_FULL_IMAGE,
440+
btree->rumstate->isBuild);
438441

439442
/*
440443
* newlpage is a pointer to memory page, it doesn't associate
@@ -448,8 +451,9 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
448451
* pointer on root to left and right page
449452
*/
450453
lbuffer=RumNewBuffer(btree->index);
451-
lpage=GenericXLogRegisterBuffer(state,lbuffer,
452-
GENERIC_XLOG_FULL_IMAGE);
454+
lpage=RumGenericXLogRegisterBuffer(state,lbuffer,
455+
GENERIC_XLOG_FULL_IMAGE,
456+
btree->rumstate->isBuild);
453457

454458
RumPageGetOpaque(rpage)->rightlink=InvalidBlockNumber;
455459
RumPageGetOpaque(newlpage)->leftlink=InvalidBlockNumber;
@@ -462,7 +466,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
462466
btree->fillRoot(btree,stack->buffer,lbuffer,rbuffer,
463467
page,lpage,rpage);
464468

465-
GenericXLogFinish(state);
469+
RumGenericXLogFinish(state,btree->rumstate->isBuild);
466470

467471
UnlockReleaseBuffer(rbuffer);
468472
UnlockReleaseBuffer(lbuffer);
@@ -485,10 +489,12 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
485489
{
486490
/* split non-root page */
487491

488-
state=GenericXLogStart(index);
492+
state=RumGenericXLogStart(index,btree->rumstate->isBuild);
489493

490-
lpage=GenericXLogRegisterBuffer(state,stack->buffer,0);
491-
rpage=GenericXLogRegisterBuffer(state,rbuffer,0);
494+
lpage=RumGenericXLogRegisterBuffer(state,stack->buffer,0,
495+
btree->rumstate->isBuild);
496+
rpage=RumGenericXLogRegisterBuffer(state,rbuffer,0,
497+
btree->rumstate->isBuild);
492498

493499
/*
494500
* newlpage is a pointer to memory page, it doesn't associate
@@ -504,7 +510,7 @@ rumInsertValue(Relation index, RumBtree btree, RumBtreeStack * stack,
504510

505511
PageRestoreTempPage(newlpage,lpage);
506512

507-
GenericXLogFinish(state);
513+
RumGenericXLogFinish(state,btree->rumstate->isBuild);
508514

509515
UnlockReleaseBuffer(rbuffer);
510516
}

‎rumdatapage.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,7 +1254,8 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
12541254
* we suppose that during index creation table scaned from begin to end,
12551255
* so ItemPointers are monotonically increased..
12561256
*/
1257-
if (btree->isBuild&&RumPageRightMost(newlPage))
1257+
if (btree->rumstate&&btree->rumstate->isBuild
1258+
&&RumPageRightMost(newlPage))
12581259
separator=freeSpace /sizeofitem;
12591260
else
12601261
separator=maxoff /2;
@@ -1464,7 +1465,6 @@ rumPrepareDataScan(RumBtree btree, Relation index, OffsetNumber attnum, RumState
14641465
btree->searchMode= FALSE;
14651466
btree->isDelete= FALSE;
14661467
btree->fullScan= FALSE;
1467-
btree->isBuild= FALSE;
14681468
btree->scanDirection=ForwardScanDirection;
14691469

14701470
btree->entryAttnum=attnum;

‎rumentrypage.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,6 @@ rumPrepareEntryScan(RumBtree btree, OffsetNumber attnum,
552552
btree->isData= FALSE;
553553
btree->searchMode= FALSE;
554554
btree->fullScan= FALSE;
555-
btree->isBuild= FALSE;
556555

557556
btree->entryAttnum=attnum;
558557
btree->entryKey=key;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp