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

Commitb33428d

Browse files
committed
Various utils for WAL
1 parentdeee783 commitb33428d

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/*-------------------------------------------------------------------------
2+
*
3+
* xlog.c
4+
*
5+
*
6+
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
7+
* Portions Copyright (c) 1994, Regents of the University of California
8+
*
9+
*-------------------------------------------------------------------------
10+
*/
11+
12+
#include"postgres.h"
13+
14+
#include"access/xlog.h"
15+
#include"access/xact.h"
16+
17+
#ifdefXLOG
18+
19+
/*
20+
* Check if specified heap tuple was inserted by given
21+
* xaction/command and return
22+
*
23+
* - -1 if not
24+
* - 0 if there is no tuple at all
25+
* - 1 if yes
26+
*/
27+
int
28+
XLogIsOwnerOfTuple(RelFileNodehnode,ItemPointeriptr,
29+
TransactionIdxid,CommandIdcid)
30+
{
31+
Relationreln;
32+
Bufferbuffer;
33+
Pagepage;
34+
ItemIdlp;
35+
HeapTupleHeaderhtup;
36+
37+
reln=XLogOpenRelation(false,RM_HEAP_ID,hnode);
38+
if (!RelationIsValid(reln))
39+
return(0);
40+
41+
buffer=ReadBuffer(reln,ItemPointerGetBlockNumber(iptr));
42+
if (!BufferIsValid(buffer))
43+
return(0);
44+
45+
LockBuffer(buffer,BUFFER_LOCK_SHARE);
46+
page= (Page)BufferGetPage(buffer);
47+
if (PageIsNew((PageHeader)page)||
48+
ItemPointerGetOffsetNumber(iptr)>PageGetMaxOffsetNumber(page))
49+
{
50+
UnlockAndReleaseBuffer(buffer);
51+
return(0);
52+
}
53+
lp=PageGetItemId(page,ItemPointerGetOffsetNumber(iptr));
54+
if (!ItemIdIsUsed(lp)||ItemIdDeleted(lp))
55+
{
56+
UnlockAndReleaseBuffer(buffer);
57+
return(0);
58+
}
59+
60+
htup= (HeapTupleHeader)PageGetItem(page,lp);
61+
62+
if (PageGetSUI(page)!=ThisStartUpID||htup->t_xmin!=xid||htup->t_cmin!=cid)
63+
{
64+
UnlockAndReleaseBuffer(buffer);
65+
return(-1);
66+
}
67+
68+
UnlockAndReleaseBuffer(buffer);
69+
return(1);
70+
}
71+
72+
/*
73+
* Check if exists valid (inserted by not aborted xaction) heap tuple
74+
* for given item pointer
75+
*/
76+
bool
77+
XLogIsValidTuple(RelFileNodehnode,ItemPointeriptr)
78+
{
79+
Relationreln;
80+
Bufferbuffer;
81+
Pagepage;
82+
ItemIdlp;
83+
HeapTupleHeaderhtup;
84+
85+
reln=XLogOpenRelation(false,RM_HEAP_ID,hnode);
86+
if (!RelationIsValid(reln))
87+
return(false);
88+
89+
buffer=ReadBuffer(reln,ItemPointerGetBlockNumber(iptr));
90+
if (!BufferIsValid(buffer))
91+
return(false);
92+
93+
LockBuffer(buffer,BUFFER_LOCK_SHARE);
94+
page= (Page)BufferGetPage(buffer);
95+
if (PageIsNew((PageHeader)page)||
96+
ItemPointerGetOffsetNumber(iptr)>PageGetMaxOffsetNumber(page))
97+
{
98+
UnlockAndReleaseBuffer(buffer);
99+
return(false);
100+
}
101+
lp=PageGetItemId(page,ItemPointerGetOffsetNumber(iptr));
102+
if (!ItemIdIsUsed(lp)||ItemIdDeleted(lp))
103+
{
104+
UnlockAndReleaseBuffer(buffer);
105+
return(false);
106+
}
107+
108+
htup= (HeapTupleHeader)PageGetItem(page,lp);
109+
110+
if (XLogIsAborted(PageGetSUI(page),htup->t_xmin))
111+
{
112+
UnlockAndReleaseBuffer(buffer);
113+
return(false);
114+
}
115+
116+
UnlockAndReleaseBuffer(buffer);
117+
return(true);
118+
}
119+
120+
#endif

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp