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

Commit694e3d1

Browse files
committed
Further code review for pg_lsn data type.
Change input function error messages to be more consistent with what isdone elsewhere. Remove a bunch of redundant type casts, so that thecompiler will warn us if we screw up. Don't pass LSNs by value onplatforms where a Datum is only 32 bytes, per buildfarm. Move macrosfor packing and unpacking LSNs to pg_lsn.h so that we can includeaccess/xlogdefs.h, to avoid an unsatisfied dependency on XLogRecPtr.
1 parent844a28a commit694e3d1

File tree

6 files changed

+32
-41
lines changed

6 files changed

+32
-41
lines changed

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

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,25 @@ pg_lsn_in(PG_FUNCTION_ARGS)
3838
if (len1<1||len1>MAXPG_LSNCOMPONENT||str[len1]!='/')
3939
ereport(ERROR,
4040
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
41-
errmsg("invalid input syntax fortransaction log location: \"%s\"",str)));
41+
errmsg("invalid input syntax fortype pg_lsn: \"%s\"",str)));
4242
len2=strspn(str+len1+1,"0123456789abcdefABCDEF");
4343
if (len2<1||len2>MAXPG_LSNCOMPONENT||str[len1+1+len2]!='\0')
4444
ereport(ERROR,
4545
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
46-
errmsg("invalid input syntax fortransaction log location: \"%s\"",str)));
46+
errmsg("invalid input syntax fortype pg_lsn: \"%s\"",str)));
4747

4848
/* Decode result. */
4949
id= (uint32)strtoul(str,NULL,16);
5050
off= (uint32)strtoul(str+len1+1,NULL,16);
51-
result= (XLogRecPtr) ((uint64)id <<32) |off;
51+
result= ((uint64)id <<32) |off;
5252

5353
PG_RETURN_LSN(result);
5454
}
5555

5656
Datum
5757
pg_lsn_out(PG_FUNCTION_ARGS)
5858
{
59-
XLogRecPtrlsn=(XLogRecPtr)PG_GETARG_LSN(0);
59+
XLogRecPtrlsn=PG_GETARG_LSN(0);
6060
charbuf[MAXPG_LSNLEN+1];
6161
char*result;
6262
uint32id,off;
@@ -83,7 +83,7 @@ pg_lsn_recv(PG_FUNCTION_ARGS)
8383
Datum
8484
pg_lsn_send(PG_FUNCTION_ARGS)
8585
{
86-
XLogRecPtrlsn=(XLogRecPtr)PG_GETARG_LSN(0);
86+
XLogRecPtrlsn=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_LSN(0);
103-
XLogRecPtrlsn2=(XLogRecPtr)PG_GETARG_LSN(1);
102+
XLogRecPtrlsn1=PG_GETARG_LSN(0);
103+
XLogRecPtrlsn2=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_LSN(0);
112-
XLogRecPtrlsn2=(XLogRecPtr)PG_GETARG_LSN(1);
111+
XLogRecPtrlsn1=PG_GETARG_LSN(0);
112+
XLogRecPtrlsn2=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_LSN(0);
121-
XLogRecPtrlsn2=(XLogRecPtr)PG_GETARG_LSN(1);
120+
XLogRecPtrlsn1=PG_GETARG_LSN(0);
121+
XLogRecPtrlsn2=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_LSN(0);
130-
XLogRecPtrlsn2=(XLogRecPtr)PG_GETARG_LSN(1);
129+
XLogRecPtrlsn1=PG_GETARG_LSN(0);
130+
XLogRecPtrlsn2=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_LSN(0);
139-
XLogRecPtrlsn2=(XLogRecPtr)PG_GETARG_LSN(1);
138+
XLogRecPtrlsn1=PG_GETARG_LSN(0);
139+
XLogRecPtrlsn2=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_LSN(0);
148-
XLogRecPtrlsn2=(XLogRecPtr)PG_GETARG_LSN(1);
147+
XLogRecPtrlsn1=PG_GETARG_LSN(0);
148+
XLogRecPtrlsn2=PG_GETARG_LSN(1);
149149

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

‎src/include/catalog/pg_type.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ DESCR("UUID datatype");
578578
DATA(insertOID=2951 (_uuidPGNSPPGUID-1fbAft \054029500array_inarray_outarray_recvarray_send--array_typanalyzeixf0-100_null__null__null_ ));
579579

580580
/* pg_lsn */
581-
DATA(insertOID=3220 (pg_lsnPGNSPPGUID8tbUtt \054003221pg_lsn_inpg_lsn_outpg_lsn_recvpg_lsn_send---dpf0-100_null__null__null_ ));
581+
DATA(insertOID=3220 (pg_lsnPGNSPPGUID8FLOAT8PASSBYVALbUtt \054003221pg_lsn_inpg_lsn_outpg_lsn_recvpg_lsn_send---dpf0-100_null__null__null_ ));
582582
DESCR("PostgreSQL LSN datatype");
583583
DATA(insertOID=3221 (_pg_lsnPGNSPPGUID-1fbAft \054032200array_inarray_outarray_recvarray_send--array_typanalyzedxf0-100_null__null__null_ ));
584584

‎src/include/fmgr.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,6 @@ 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_LSN(n) DatumGetLSN(PG_GETARG_DATUM(n))
234233
#definePG_GETARG_POINTER(n) DatumGetPointer(PG_GETARG_DATUM(n))
235234
#definePG_GETARG_CSTRING(n) DatumGetCString(PG_GETARG_DATUM(n))
236235
#definePG_GETARG_NAME(n) DatumGetName(PG_GETARG_DATUM(n))
@@ -303,7 +302,6 @@ extern struct varlena *pg_detoast_datum_packed(struct varlena * datum);
303302
#definePG_RETURN_CHAR(x) return CharGetDatum(x)
304303
#definePG_RETURN_BOOL(x) return BoolGetDatum(x)
305304
#definePG_RETURN_OID(x) return ObjectIdGetDatum(x)
306-
#definePG_RETURN_LSN(x) return LSNGetDatum(x)
307305
#definePG_RETURN_POINTER(x) return PointerGetDatum(x)
308306
#definePG_RETURN_CSTRING(x) return CStringGetDatum(x)
309307
#definePG_RETURN_NAME(x) return NameGetDatum(x)

‎src/include/postgres.h

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -483,20 +483,6 @@ typedef Datum *DatumPtr;
483483

484484
#defineObjectIdGetDatum(X) ((Datum) SET_4_BYTES(X))
485485

486-
/*
487-
* DatumGetLSN
488-
*Returns PostgreSQL log sequence number of a datum.
489-
*/
490-
491-
#defineDatumGetLSN(X) ((XLogRecPtr) GET_8_BYTES(X))
492-
493-
/*
494-
* LSNGetDatum
495-
*Returns datum representation for a PostgreSQL log sequence number.
496-
*/
497-
498-
#defineLSNGetDatum(X) ((Datum) SET_8_BYTES(X))
499-
500486
/*
501487
* DatumGetTransactionId
502488
*Returns transaction identifier value of a datum.

‎src/include/utils/pg_lsn.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#definePG_LSN_H
1717

1818
#include"fmgr.h"
19+
#include"access/xlogdefs.h"
1920

2021
externDatumpg_lsn_in(PG_FUNCTION_ARGS);
2122
externDatumpg_lsn_out(PG_FUNCTION_ARGS);
@@ -31,4 +32,10 @@ extern Datum pg_lsn_ge(PG_FUNCTION_ARGS);
3132

3233
externDatumpg_lsn_mi(PG_FUNCTION_ARGS);
3334

35+
#defineDatumGetLSN(X) ((XLogRecPtr) DatumGetInt64(X))
36+
#defineLSNGetDatum(X) (Int64GetDatum((int64) (X)))
37+
38+
#definePG_GETARG_LSN(n) DatumGetLSN(PG_GETARG_DATUM(n))
39+
#definePG_RETURN_LSN(x) return LSNGetDatum(x)
40+
3441
#endif/* PG_LSN_H */

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ INSERT INTO PG_LSN_TBL VALUES ('0/0');
77
INSERT INTO PG_LSN_TBL VALUES ('FFFFFFFF/FFFFFFFF');
88
-- Incorrect input
99
INSERT INTO PG_LSN_TBL VALUES ('G/0');
10-
ERROR: invalid input syntax fortransaction log location: "G/0"
10+
ERROR: invalid input syntax fortype pg_lsn: "G/0"
1111
LINE 1: INSERT INTO PG_LSN_TBL VALUES ('G/0');
1212
^
1313
INSERT INTO PG_LSN_TBL VALUES ('-1/0');
14-
ERROR: invalid input syntax fortransaction log location: "-1/0"
14+
ERROR: invalid input syntax fortype pg_lsn: "-1/0"
1515
LINE 1: INSERT INTO PG_LSN_TBL VALUES ('-1/0');
1616
^
1717
INSERT INTO PG_LSN_TBL VALUES (' 0/12345678');
18-
ERROR: invalid input syntax fortransaction log location: " 0/12345678"
18+
ERROR: invalid input syntax fortype pg_lsn: " 0/12345678"
1919
LINE 1: INSERT INTO PG_LSN_TBL VALUES (' 0/12345678');
2020
^
2121
INSERT INTO PG_LSN_TBL VALUES ('ABCD/');
22-
ERROR: invalid input syntax fortransaction log location: "ABCD/"
22+
ERROR: invalid input syntax fortype pg_lsn: "ABCD/"
2323
LINE 1: INSERT INTO PG_LSN_TBL VALUES ('ABCD/');
2424
^
2525
INSERT INTO PG_LSN_TBL VALUES ('/ABCD');
26-
ERROR: invalid input syntax fortransaction log location: "/ABCD"
26+
ERROR: invalid input syntax fortype pg_lsn: "/ABCD"
2727
LINE 1: INSERT INTO PG_LSN_TBL VALUES ('/ABCD');
2828
^
2929
DROP TABLE PG_LSN_TBL;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp