@@ -50,13 +50,13 @@ pg_lsn_in(PG_FUNCTION_ARGS)
50
50
off = (uint32 ) strtoul (str + len1 + 1 , NULL , 16 );
51
51
result = (XLogRecPtr ) ((uint64 ) id << 32 ) | off ;
52
52
53
- PG_RETURN_PG_LSN (result );
53
+ PG_RETURN_LSN (result );
54
54
}
55
55
56
56
Datum
57
57
pg_lsn_out (PG_FUNCTION_ARGS )
58
58
{
59
- XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
59
+ XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_LSN (0 );
60
60
char buf [MAXPG_LSNLEN + 1 ];
61
61
char * result ;
62
62
uint32 id , off ;
@@ -77,13 +77,13 @@ pg_lsn_recv(PG_FUNCTION_ARGS)
77
77
XLogRecPtr result ;
78
78
79
79
result = pq_getmsgint64 (buf );
80
- PG_RETURN_PG_LSN (result );
80
+ PG_RETURN_LSN (result );
81
81
}
82
82
83
83
Datum
84
84
pg_lsn_send (PG_FUNCTION_ARGS )
85
85
{
86
- XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_PG_LSN (0 );
86
+ XLogRecPtr lsn = (XLogRecPtr ) PG_GETARG_LSN (0 );
87
87
StringInfoData buf ;
88
88
89
89
pq_begintypsend (& buf );
@@ -99,53 +99,53 @@ pg_lsn_send(PG_FUNCTION_ARGS)
99
99
Datum
100
100
pg_lsn_eq (PG_FUNCTION_ARGS )
101
101
{
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 );
104
104
105
105
PG_RETURN_BOOL (lsn1 == lsn2 );
106
106
}
107
107
108
108
Datum
109
109
pg_lsn_ne (PG_FUNCTION_ARGS )
110
110
{
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 );
113
113
114
114
PG_RETURN_BOOL (lsn1 != lsn2 );
115
115
}
116
116
117
117
Datum
118
118
pg_lsn_lt (PG_FUNCTION_ARGS )
119
119
{
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 );
122
122
123
123
PG_RETURN_BOOL (lsn1 < lsn2 );
124
124
}
125
125
126
126
Datum
127
127
pg_lsn_gt (PG_FUNCTION_ARGS )
128
128
{
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 );
131
131
132
132
PG_RETURN_BOOL (lsn1 > lsn2 );
133
133
}
134
134
135
135
Datum
136
136
pg_lsn_le (PG_FUNCTION_ARGS )
137
137
{
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 );
140
140
141
141
PG_RETURN_BOOL (lsn1 <= lsn2 );
142
142
}
143
143
144
144
Datum
145
145
pg_lsn_ge (PG_FUNCTION_ARGS )
146
146
{
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 );
149
149
150
150
PG_RETURN_BOOL (lsn1 >= lsn2 );
151
151
}
@@ -158,19 +158,18 @@ pg_lsn_ge(PG_FUNCTION_ARGS)
158
158
Datum
159
159
pg_lsn_mi (PG_FUNCTION_ARGS )
160
160
{
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 );
163
163
char buf [256 ];
164
164
Datum result ;
165
165
166
- /* Negative results are not allowed . */
166
+ /* Output could be as large as plus or minus 2^63 - 1 . */
167
167
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 );
171
171
172
172
/* Convert to numeric. */
173
- snprintf (buf , sizeof buf , UINT64_FORMAT , lsn1 - lsn2 );
174
173
result = DirectFunctionCall3 (numeric_in ,
175
174
CStringGetDatum (buf ),
176
175
ObjectIdGetDatum (0 ),
0 commit comments