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

Commit844a28a

Browse files
committed
pg_lsn macro naming and type behavior revisions.
Change pg_lsn_mi so that it can return negative values when subtractingLSNs, and clean up some perhaps ill-considered macro names.
1 parent7d03a83 commit844a28a

File tree

4 files changed

+33
-30
lines changed

4 files changed

+33
-30
lines changed

‎src/backend/utils/adt/pg_lsn.c

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ pg_lsn_in(PG_FUNCTION_ARGS)
5050
off= (uint32)strtoul(str+len1+1,NULL,16);
5151
result= (XLogRecPtr) ((uint64)id <<32) |off;
5252

53-
PG_RETURN_PG_LSN(result);
53+
PG_RETURN_LSN(result);
5454
}
5555

5656
Datum
5757
pg_lsn_out(PG_FUNCTION_ARGS)
5858
{
59-
XLogRecPtrlsn= (XLogRecPtr)PG_GETARG_PG_LSN(0);
59+
XLogRecPtrlsn= (XLogRecPtr)PG_GETARG_LSN(0);
6060
charbuf[MAXPG_LSNLEN+1];
6161
char*result;
6262
uint32id,off;
@@ -77,13 +77,13 @@ pg_lsn_recv(PG_FUNCTION_ARGS)
7777
XLogRecPtrresult;
7878

7979
result=pq_getmsgint64(buf);
80-
PG_RETURN_PG_LSN(result);
80+
PG_RETURN_LSN(result);
8181
}
8282

8383
Datum
8484
pg_lsn_send(PG_FUNCTION_ARGS)
8585
{
86-
XLogRecPtrlsn= (XLogRecPtr)PG_GETARG_PG_LSN(0);
86+
XLogRecPtrlsn= (XLogRecPtr)PG_GETARG_LSN(0);
8787
StringInfoDatabuf;
8888

8989
pq_begintypsend(&buf);
@@ -99,53 +99,53 @@ pg_lsn_send(PG_FUNCTION_ARGS)
9999
Datum
100100
pg_lsn_eq(PG_FUNCTION_ARGS)
101101
{
102-
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_PG_LSN(0);
103-
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_PG_LSN(1);
102+
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_LSN(0);
103+
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_LSN(1);
104104

105105
PG_RETURN_BOOL(lsn1==lsn2);
106106
}
107107

108108
Datum
109109
pg_lsn_ne(PG_FUNCTION_ARGS)
110110
{
111-
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_PG_LSN(0);
112-
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_PG_LSN(1);
111+
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_LSN(0);
112+
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_LSN(1);
113113

114114
PG_RETURN_BOOL(lsn1!=lsn2);
115115
}
116116

117117
Datum
118118
pg_lsn_lt(PG_FUNCTION_ARGS)
119119
{
120-
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_PG_LSN(0);
121-
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_PG_LSN(1);
120+
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_LSN(0);
121+
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_LSN(1);
122122

123123
PG_RETURN_BOOL(lsn1<lsn2);
124124
}
125125

126126
Datum
127127
pg_lsn_gt(PG_FUNCTION_ARGS)
128128
{
129-
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_PG_LSN(0);
130-
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_PG_LSN(1);
129+
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_LSN(0);
130+
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_LSN(1);
131131

132132
PG_RETURN_BOOL(lsn1>lsn2);
133133
}
134134

135135
Datum
136136
pg_lsn_le(PG_FUNCTION_ARGS)
137137
{
138-
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_PG_LSN(0);
139-
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_PG_LSN(1);
138+
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_LSN(0);
139+
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_LSN(1);
140140

141141
PG_RETURN_BOOL(lsn1 <=lsn2);
142142
}
143143

144144
Datum
145145
pg_lsn_ge(PG_FUNCTION_ARGS)
146146
{
147-
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_PG_LSN(0);
148-
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_PG_LSN(1);
147+
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_LSN(0);
148+
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_LSN(1);
149149

150150
PG_RETURN_BOOL(lsn1 >=lsn2);
151151
}
@@ -158,19 +158,18 @@ pg_lsn_ge(PG_FUNCTION_ARGS)
158158
Datum
159159
pg_lsn_mi(PG_FUNCTION_ARGS)
160160
{
161-
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_PG_LSN(0);
162-
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_PG_LSN(1);
161+
XLogRecPtrlsn1= (XLogRecPtr)PG_GETARG_LSN(0);
162+
XLogRecPtrlsn2= (XLogRecPtr)PG_GETARG_LSN(1);
163163
charbuf[256];
164164
Datumresult;
165165

166-
/*Negative results are not allowed. */
166+
/*Output could be as large as plus or minus 2^63 - 1. */
167167
if (lsn1<lsn2)
168-
ereport(ERROR,
169-
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
170-
errmsg("transaction log location out of range")));
168+
snprintf(buf,sizeofbuf,"-"UINT64_FORMAT,lsn2-lsn1);
169+
else
170+
snprintf(buf,sizeofbuf,UINT64_FORMAT,lsn1-lsn2);
171171

172172
/* Convert to numeric. */
173-
snprintf(buf,sizeofbuf,UINT64_FORMAT,lsn1-lsn2);
174173
result=DirectFunctionCall3(numeric_in,
175174
CStringGetDatum(buf),
176175
ObjectIdGetDatum(0),

‎src/include/fmgr.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ extern struct varlena *pg_detoast_datum_packed(struct varlena * datum);
230230
#definePG_GETARG_CHAR(n) DatumGetChar(PG_GETARG_DATUM(n))
231231
#definePG_GETARG_BOOL(n) DatumGetBool(PG_GETARG_DATUM(n))
232232
#definePG_GETARG_OID(n) DatumGetObjectId(PG_GETARG_DATUM(n))
233-
#definePG_GETARG_PG_LSN(n)DatumGetPgLsn(PG_GETARG_DATUM(n))
233+
#definePG_GETARG_LSN(n)DatumGetLSN(PG_GETARG_DATUM(n))
234234
#definePG_GETARG_POINTER(n) DatumGetPointer(PG_GETARG_DATUM(n))
235235
#definePG_GETARG_CSTRING(n) DatumGetCString(PG_GETARG_DATUM(n))
236236
#definePG_GETARG_NAME(n) DatumGetName(PG_GETARG_DATUM(n))
@@ -303,7 +303,7 @@ extern struct varlena *pg_detoast_datum_packed(struct varlena * datum);
303303
#definePG_RETURN_CHAR(x) return CharGetDatum(x)
304304
#definePG_RETURN_BOOL(x) return BoolGetDatum(x)
305305
#definePG_RETURN_OID(x) return ObjectIdGetDatum(x)
306-
#definePG_RETURN_PG_LSN(x) returnPgLsnGetDatum(x)
306+
#definePG_RETURN_LSN(x) returnLSNGetDatum(x)
307307
#definePG_RETURN_POINTER(x) return PointerGetDatum(x)
308308
#definePG_RETURN_CSTRING(x) return CStringGetDatum(x)
309309
#definePG_RETURN_NAME(x) return NameGetDatum(x)

‎src/include/postgres.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -484,18 +484,18 @@ typedef Datum *DatumPtr;
484484
#defineObjectIdGetDatum(X) ((Datum) SET_4_BYTES(X))
485485

486486
/*
487-
*DatumGetPgLsn
487+
*DatumGetLSN
488488
*Returns PostgreSQL log sequence number of a datum.
489489
*/
490490

491-
#defineDatumGetPgLsn(X) ((XLogRecPtr) GET_8_BYTES(X))
491+
#defineDatumGetLSN(X) ((XLogRecPtr) GET_8_BYTES(X))
492492

493493
/*
494-
*PG_LSNGetDatum
494+
*LSNGetDatum
495495
*Returns datum representation for a PostgreSQL log sequence number.
496496
*/
497497

498-
#definePgLsnGetDatum(X) ((Datum) SET_8_BYTES(X))
498+
#defineLSNGetDatum(X) ((Datum) SET_8_BYTES(X))
499499

500500
/*
501501
* DatumGetTransactionId

‎src/test/regress/expected/pg_lsn.out

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ SELECT '0/16AE7F8' > pg_lsn '0/16AE7F7';
5353
(1 row)
5454

5555
SELECT '0/16AE7F7'::pg_lsn - '0/16AE7F8'::pg_lsn; -- No negative results
56-
ERROR: transaction log location out of range
56+
?column?
57+
----------
58+
-1
59+
(1 row)
60+
5761
SELECT '0/16AE7F8'::pg_lsn - '0/16AE7F7'::pg_lsn; -- correct
5862
?column?
5963
----------

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp