@@ -108,6 +108,185 @@ SELECT ''::text AS five, unique1, unique2, stringu1
108
108
| 904 | 793 | UIAAAA
109
109
(5 rows)
110
110
111
+ -- Test null limit and offset. The planner would discard a simple null
112
+ -- constant, so to ensure executor is exercised, do this:
113
+ select * from int8_tbl limit (case when random() < 0.5 then null::bigint end);
114
+ q1 | q2
115
+ ------------------+-------------------
116
+ 123 | 456
117
+ 123 | 4567890123456789
118
+ 4567890123456789 | 123
119
+ 4567890123456789 | 4567890123456789
120
+ 4567890123456789 | -4567890123456789
121
+ (5 rows)
122
+
123
+ select * from int8_tbl offset (case when random() < 0.5 then null::bigint end);
124
+ q1 | q2
125
+ ------------------+-------------------
126
+ 123 | 456
127
+ 123 | 4567890123456789
128
+ 4567890123456789 | 123
129
+ 4567890123456789 | 4567890123456789
130
+ 4567890123456789 | -4567890123456789
131
+ (5 rows)
132
+
133
+ -- Test assorted cases involving backwards fetch from a LIMIT plan node
134
+ begin;
135
+ declare c1 cursor for select * from int8_tbl limit 10;
136
+ fetch all in c1;
137
+ q1 | q2
138
+ ------------------+-------------------
139
+ 123 | 456
140
+ 123 | 4567890123456789
141
+ 4567890123456789 | 123
142
+ 4567890123456789 | 4567890123456789
143
+ 4567890123456789 | -4567890123456789
144
+ (5 rows)
145
+
146
+ fetch 1 in c1;
147
+ q1 | q2
148
+ ----+----
149
+ (0 rows)
150
+
151
+ fetch backward 1 in c1;
152
+ q1 | q2
153
+ ------------------+-------------------
154
+ 4567890123456789 | -4567890123456789
155
+ (1 row)
156
+
157
+ fetch backward all in c1;
158
+ q1 | q2
159
+ ------------------+------------------
160
+ 4567890123456789 | 4567890123456789
161
+ 4567890123456789 | 123
162
+ 123 | 4567890123456789
163
+ 123 | 456
164
+ (4 rows)
165
+
166
+ fetch backward 1 in c1;
167
+ q1 | q2
168
+ ----+----
169
+ (0 rows)
170
+
171
+ fetch all in c1;
172
+ q1 | q2
173
+ ------------------+-------------------
174
+ 123 | 456
175
+ 123 | 4567890123456789
176
+ 4567890123456789 | 123
177
+ 4567890123456789 | 4567890123456789
178
+ 4567890123456789 | -4567890123456789
179
+ (5 rows)
180
+
181
+ declare c2 cursor for select * from int8_tbl limit 3;
182
+ fetch all in c2;
183
+ q1 | q2
184
+ ------------------+------------------
185
+ 123 | 456
186
+ 123 | 4567890123456789
187
+ 4567890123456789 | 123
188
+ (3 rows)
189
+
190
+ fetch 1 in c2;
191
+ q1 | q2
192
+ ----+----
193
+ (0 rows)
194
+
195
+ fetch backward 1 in c2;
196
+ q1 | q2
197
+ ------------------+-----
198
+ 4567890123456789 | 123
199
+ (1 row)
200
+
201
+ fetch backward all in c2;
202
+ q1 | q2
203
+ -----+------------------
204
+ 123 | 4567890123456789
205
+ 123 | 456
206
+ (2 rows)
207
+
208
+ fetch backward 1 in c2;
209
+ q1 | q2
210
+ ----+----
211
+ (0 rows)
212
+
213
+ fetch all in c2;
214
+ q1 | q2
215
+ ------------------+------------------
216
+ 123 | 456
217
+ 123 | 4567890123456789
218
+ 4567890123456789 | 123
219
+ (3 rows)
220
+
221
+ declare c3 cursor for select * from int8_tbl offset 3;
222
+ fetch all in c3;
223
+ q1 | q2
224
+ ------------------+-------------------
225
+ 4567890123456789 | 4567890123456789
226
+ 4567890123456789 | -4567890123456789
227
+ (2 rows)
228
+
229
+ fetch 1 in c3;
230
+ q1 | q2
231
+ ----+----
232
+ (0 rows)
233
+
234
+ fetch backward 1 in c3;
235
+ q1 | q2
236
+ ------------------+-------------------
237
+ 4567890123456789 | -4567890123456789
238
+ (1 row)
239
+
240
+ fetch backward all in c3;
241
+ q1 | q2
242
+ ------------------+------------------
243
+ 4567890123456789 | 4567890123456789
244
+ (1 row)
245
+
246
+ fetch backward 1 in c3;
247
+ q1 | q2
248
+ ----+----
249
+ (0 rows)
250
+
251
+ fetch all in c3;
252
+ q1 | q2
253
+ ------------------+-------------------
254
+ 4567890123456789 | 4567890123456789
255
+ 4567890123456789 | -4567890123456789
256
+ (2 rows)
257
+
258
+ declare c4 cursor for select * from int8_tbl offset 10;
259
+ fetch all in c4;
260
+ q1 | q2
261
+ ----+----
262
+ (0 rows)
263
+
264
+ fetch 1 in c4;
265
+ q1 | q2
266
+ ----+----
267
+ (0 rows)
268
+
269
+ fetch backward 1 in c4;
270
+ q1 | q2
271
+ ----+----
272
+ (0 rows)
273
+
274
+ fetch backward all in c4;
275
+ q1 | q2
276
+ ----+----
277
+ (0 rows)
278
+
279
+ fetch backward 1 in c4;
280
+ q1 | q2
281
+ ----+----
282
+ (0 rows)
283
+
284
+ fetch all in c4;
285
+ q1 | q2
286
+ ----+----
287
+ (0 rows)
288
+
289
+ rollback;
111
290
-- Stress test for variable LIMIT in conjunction with bounded-heap sorting
112
291
SELECT
113
292
(SELECT n
0 commit comments