|
13 | 13 |
|
14 | 14 | #include"postgres.h"
|
15 | 15 |
|
| 16 | +#include"access/generic_xlog.h" |
16 | 17 | #include"access/heapam_xlog.h"
|
17 | 18 | #include"catalog/index.h"
|
18 | 19 | #include"miscadmin.h"
|
@@ -75,38 +76,42 @@ createPostingTree(RumState *rumstate, OffsetNumber attnum, Relation index,
|
75 | 76 |
|
76 | 77 | MarkBufferDirty(buffer);
|
77 | 78 |
|
78 |
| -// if (RelationNeedsWAL(index)) |
79 |
| -// { |
80 |
| -// XLogRecPtrrecptr; |
81 |
| -// XLogRecData rdata[2]; |
82 |
| -// rumxlogCreatePostingTree data; |
83 |
| -// |
84 |
| -// data.node = index->rd_node; |
85 |
| -// data.blkno = blkno; |
86 |
| -// data.nitem = nitems; |
87 |
| -// |
88 |
| -// if (rumstate->addAttrs[attnum - 1]) |
89 |
| -// { |
90 |
| -// data.typlen = rumstate->addAttrs[attnum - 1]->attlen; |
91 |
| -// data.typalign = rumstate->addAttrs[attnum - 1]->attalign; |
92 |
| -// data.typbyval = rumstate->addAttrs[attnum - 1]->attbyval; |
93 |
| -// data.typstorage = rumstate->addAttrs[attnum - 1]->attstorage; |
94 |
| -// } |
95 |
| -// |
96 |
| -// rdata[0].buffer = InvalidBuffer; |
97 |
| -// rdata[0].data = (char *) &data; |
98 |
| -// rdata[0].len = MAXALIGN(sizeof(rumxlogCreatePostingTree)); |
99 |
| -// rdata[0].next = &rdata[1]; |
100 |
| -// |
101 |
| -// memcpy(pageCopy, page, BLCKSZ); |
102 |
| -// rdata[1].buffer = InvalidBuffer; |
103 |
| -// rdata[1].data = RumDataPageGetData(pageCopy); |
104 |
| -// rdata[1].len = RumDataPageSize - RumPageGetOpaque(pageCopy)->freespace; |
105 |
| -// rdata[1].next = NULL; |
106 |
| -// |
107 |
| -// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_PTREE, rdata); |
108 |
| -// PageSetLSN(page, recptr); |
109 |
| -// } |
| 79 | +if (RelationNeedsWAL(index)) |
| 80 | +{ |
| 81 | +XLogRecPtrrecptr; |
| 82 | +XLogRecDatardata[2]; |
| 83 | +rumxlogCreatePostingTreedata; |
| 84 | +GenericXLogState*state; |
| 85 | + |
| 86 | +state=GenericXLogStart(index); |
| 87 | +GenericXLogFinish(state); |
| 88 | + |
| 89 | +data.node=index->rd_node; |
| 90 | +data.blkno=blkno; |
| 91 | +data.nitem=nitems; |
| 92 | + |
| 93 | +if (rumstate->addAttrs[attnum-1]) |
| 94 | +{ |
| 95 | +data.typlen=rumstate->addAttrs[attnum-1]->attlen; |
| 96 | +data.typalign=rumstate->addAttrs[attnum-1]->attalign; |
| 97 | +data.typbyval=rumstate->addAttrs[attnum-1]->attbyval; |
| 98 | +data.typstorage=rumstate->addAttrs[attnum-1]->attstorage; |
| 99 | +} |
| 100 | + |
| 101 | +rdata[0].buffer=InvalidBuffer; |
| 102 | +rdata[0].data= (char*)&data; |
| 103 | +rdata[0].len=MAXALIGN(sizeof(rumxlogCreatePostingTree)); |
| 104 | +rdata[0].next=&rdata[1]; |
| 105 | + |
| 106 | +memcpy(pageCopy,page,BLCKSZ); |
| 107 | +rdata[1].buffer=InvalidBuffer; |
| 108 | +rdata[1].data=RumDataPageGetData(pageCopy); |
| 109 | +rdata[1].len=RumDataPageSize-RumPageGetOpaque(pageCopy)->freespace; |
| 110 | +rdata[1].next=NULL; |
| 111 | + |
| 112 | +recptr=XLogInsert(RM_GIN_ID,XLOG_GIN_CREATE_PTREE,rdata); |
| 113 | +PageSetLSN(page,recptr); |
| 114 | +} |
110 | 115 |
|
111 | 116 | UnlockReleaseBuffer(buffer);
|
112 | 117 |
|
@@ -654,25 +659,18 @@ rumbuild(Relation heap, Relation index, struct IndexInfo *indexInfo)
|
654 | 659 | RumInitBuffer(RootBuffer,RUM_LEAF);
|
655 | 660 | MarkBufferDirty(RootBuffer);
|
656 | 661 |
|
657 |
| -// if (RelationNeedsWAL(index)) |
658 |
| -// { |
659 |
| -// XLogRecPtrrecptr; |
660 |
| -// XLogRecData rdata; |
661 |
| -// Pagepage; |
662 |
| -// |
663 |
| -// rdata.buffer = InvalidBuffer; |
664 |
| -// rdata.data = (char *) &(index->rd_node); |
665 |
| -// rdata.len = sizeof(RelFileNode); |
666 |
| -// rdata.next = NULL; |
667 |
| -// |
668 |
| -// recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_INDEX, &rdata); |
669 |
| -// |
670 |
| -// page = BufferGetPage(RootBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); |
671 |
| -// PageSetLSN(page, recptr); |
672 |
| -// |
673 |
| -// page = BufferGetPage(MetaBuffer, NULL, NULL, BGP_NO_SNAPSHOT_TEST); |
674 |
| -// PageSetLSN(page, recptr); |
675 |
| -// } |
| 662 | +if (RelationNeedsWAL(index)) |
| 663 | +{ |
| 664 | +GenericXLogState*state; |
| 665 | + |
| 666 | +state=GenericXLogStart(index); |
| 667 | +GenericXLogRegisterBuffer(state,RootBuffer,GENERIC_XLOG_FULL_IMAGE); |
| 668 | +GenericXLogFinish(state); |
| 669 | + |
| 670 | +state=GenericXLogStart(index); |
| 671 | +GenericXLogRegisterBuffer(state,MetaBuffer,GENERIC_XLOG_FULL_IMAGE); |
| 672 | +GenericXLogFinish(state); |
| 673 | +} |
676 | 674 |
|
677 | 675 | UnlockReleaseBuffer(MetaBuffer);
|
678 | 676 | UnlockReleaseBuffer(RootBuffer);
|
|