@@ -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
5656Datum
5757pg_lsn_out (PG_FUNCTION_ARGS )
5858{
59- XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
59+ XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_LSN (0 );
6060 char buf [MAXPG_LSNLEN + 1 ];
6161 char * result ;
6262 uint32 id , off ;
@@ -77,13 +77,13 @@ pg_lsn_recv(PG_FUNCTION_ARGS)
7777 XLogRecPtr result ;
7878
7979 result = pq_getmsgint64 (buf );
80- PG_RETURN_PG_LSN (result );
80+ PG_RETURN_LSN (result );
8181}
8282
8383Datum
8484pg_lsn_send (PG_FUNCTION_ARGS )
8585{
86- XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
86+ XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_LSN (0 );
8787 StringInfoData buf ;
8888
8989 pq_begintypsend (& buf );
@@ -99,53 +99,53 @@ pg_lsn_send(PG_FUNCTION_ARGS)
9999Datum
100100pg_lsn_eq (PG_FUNCTION_ARGS )
101101{
102- XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
103- XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_PG_LSN (1 );
102+ XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_LSN (0 );
103+ XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_LSN (1 );
104104
105105 PG_RETURN_BOOL (lsn1 == lsn2 );
106106}
107107
108108Datum
109109pg_lsn_ne (PG_FUNCTION_ARGS )
110110{
111- XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
112- XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_PG_LSN (1 );
111+ XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_LSN (0 );
112+ XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_LSN (1 );
113113
114114 PG_RETURN_BOOL (lsn1 != lsn2 );
115115}
116116
117117Datum
118118pg_lsn_lt (PG_FUNCTION_ARGS )
119119{
120- XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
121- XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_PG_LSN (1 );
120+ XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_LSN (0 );
121+ XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_LSN (1 );
122122
123123 PG_RETURN_BOOL (lsn1 < lsn2 );
124124}
125125
126126Datum
127127pg_lsn_gt (PG_FUNCTION_ARGS )
128128{
129- XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
130- XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_PG_LSN (1 );
129+ XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_LSN (0 );
130+ XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_LSN (1 );
131131
132132 PG_RETURN_BOOL (lsn1 > lsn2 );
133133}
134134
135135Datum
136136pg_lsn_le (PG_FUNCTION_ARGS )
137137{
138- XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
139- XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_PG_LSN (1 );
138+ XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_LSN (0 );
139+ XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_LSN (1 );
140140
141141 PG_RETURN_BOOL (lsn1 <= lsn2 );
142142}
143143
144144Datum
145145pg_lsn_ge (PG_FUNCTION_ARGS )
146146{
147- XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
148- XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_PG_LSN (1 );
147+ XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_LSN (0 );
148+ XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_LSN (1 );
149149
150150 PG_RETURN_BOOL (lsn1 >= lsn2 );
151151}
@@ -158,19 +158,18 @@ pg_lsn_ge(PG_FUNCTION_ARGS)
158158Datum
159159pg_lsn_mi (PG_FUNCTION_ARGS )
160160{
161- XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
162- XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_PG_LSN (1 );
161+ XLogRecPtr lsn1 = (XLogRecPtr ) PG_GETARG_LSN (0 );
162+ XLogRecPtr lsn2 = (XLogRecPtr ) PG_GETARG_LSN (1 );
163163 char buf [256 ];
164164 Datum result ;
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 , sizeof buf , "-" UINT64_FORMAT , lsn2 - lsn1 );
169+ else
170+ snprintf ( buf , sizeof buf , UINT64_FORMAT , lsn1 - lsn2 );
171171
172172 /* Convert to numeric. */
173- snprintf (buf , sizeof buf , UINT64_FORMAT , lsn1 - lsn2 );
174173 result = DirectFunctionCall3 (numeric_in ,
175174 CStringGetDatum (buf ),
176175 ObjectIdGetDatum (0 ),
0 commit comments