You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
154681: sql: fix sorting in jsonb_path_query logic test with inverted index r=ZhouXing19 a=ZhouXing19
Previously, rows are only sorted by PK, thus rows with the same PK are returned in indeterministic order. This PR is to fix it.
Fixes: #154648.
Release note: None
Co-authored-by: ZhouXing19 <[email protected]>
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') FROM json_tab ORDER BY a;
204
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') as jpq FROM json_tab ORDER BY a, jpq;
205
205
----
206
206
11 {"x": {"y": {"z": "y"}}}
207
207
11 {"x": {"y": {"z": ["y", "yuu"]}}}
208
208
209
209
query IT
210
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "y")') ORDER BY a;
210
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "y")') ORDER BY a, jpq;
211
211
----
212
212
11 {"x": {"y": {"z": "y"}}}
213
213
11 {"x": {"y": {"z": ["y", "yuu"]}}}
214
214
215
215
# Path exists but the final value doesn't match any row.
216
216
query IT
217
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "z")') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "z")') ORDER BY a;
217
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "z")') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "z")') ORDER BY a, jpq;
218
218
----
219
219
220
220
query IT
221
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') FROM json_tab ORDER BY a;
221
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') as jpq FROM json_tab ORDER BY a, jpq;
222
222
----
223
223
12 {"x": {"y": {"ztrue": true}}}
224
224
12 {"x": {"y": {"ztrue": [true, "y1"]}}}
225
225
226
226
query IT
227
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.ztrue == true)') ORDER BY a;
227
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.ztrue == true)') ORDER BY a, jpq;
228
228
----
229
229
12 {"x": {"y": {"ztrue": true}}}
230
230
12 {"x": {"y": {"ztrue": [true, "y1"]}}}
231
231
232
232
# Path exists but the final value doesn't match any row.
233
233
query IT
234
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == false)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.ztrue == false)') ORDER BY a;
234
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == false)') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.ztrue == false)') ORDER BY a, jpq;
235
235
----
236
236
237
237
query IT
238
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zfalse == false)') FROM json_tab ORDER BY a;
238
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zfalse == false)') as jpq FROM json_tab ORDER BY a, jpq;
239
239
----
240
240
13 {"x": {"y": {"zfalse": false}}}
241
241
13 {"x": {"y": {"zfalse": [false, "y1"]}}}
242
242
243
243
query IT
244
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zfalse == false)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zfalse == false)') ORDER BY a;
244
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zfalse == false)') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zfalse == false)') ORDER BY a, jpq;
245
245
----
246
246
13 {"x": {"y": {"zfalse": false}}}
247
247
13 {"x": {"y": {"zfalse": [false, "y1"]}}}
248
248
249
249
# Path exists but the final value doesn't match any row.
250
250
query IT
251
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zfalse == true)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zfalse == true)') ORDER BY a;
251
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zfalse == true)') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zfalse == true)') ORDER BY a, jpq;
252
252
----
253
253
254
254
query IT
255
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zint == 10)') FROM json_tab ORDER BY a;
255
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zint == 10)') as jpq FROM json_tab ORDER BY a, jpq;
256
256
----
257
257
14 {"x": {"y": {"zint": 10}}}
258
258
14 {"x": {"y": {"zint": [10, "y1"]}}}
259
259
260
260
query IT
261
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zint == 10)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zint == 10)') ORDER BY a;
261
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zint == 10)') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zint == 10)') ORDER BY a, jpq;
262
262
----
263
263
14 {"x": {"y": {"zint": 10}}}
264
264
14 {"x": {"y": {"zint": [10, "y1"]}}}
265
265
266
266
# Path exists but the final value doesn't match any row.
267
267
query IT
268
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zint == 12)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zint == 12)') ORDER BY a;
268
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.zint == 12)') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.zint == 12)') ORDER BY a, jpq;
269
269
----
270
270
271
271
query IT
272
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.znull == null)') FROM json_tab ORDER BY a;
272
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.znull == null)') as jpq FROM json_tab ORDER BY a, jpq;
273
273
----
274
274
15 {"x": {"y": {"znull": null}}}
275
275
15 {"x": {"y": {"znull": [null, "y1"]}}}
276
276
277
277
query IT
278
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.znull == null)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.znull == null)') ORDER BY a;
278
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.znull == null)') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.znull == null)') ORDER BY a, jpq;
279
279
----
280
280
15 {"x": {"y": {"znull": null}}}
281
281
15 {"x": {"y": {"znull": [null, "y1"]}}}
@@ -305,7 +305,7 @@ SELECT a, jsonb_path_exists(b, '$.lllaaann.dddooo == 123123') FROM json_tab ORDE
305
305
306
306
# Result from this query is different from PG, tracked by #154588.
307
307
query IT
308
-
SELECT a, jsonb_path_query(b, '$.lllaaann.dddooo == 123123') FROM json_tab@primary WHERE jsonb_path_exists(b, '$.lllaaann.dddooo == 123123') ORDER BY a;
308
+
SELECT a, jsonb_path_query(b, '$.lllaaann.dddooo == 123123') as jpq FROM json_tab@primary WHERE jsonb_path_exists(b, '$.lllaaann.dddooo == 123123') ORDER BY a, jpq;
309
309
----
310
310
1 null
311
311
2 null
@@ -344,7 +344,7 @@ SELECT a, jsonb_path_exists(b, '$.a.b like_regex "hi.*"') FROM json_tab ORDER BY
344
344
345
345
# Result from this query is different from PG, tracked by #154589.
346
346
query IT
347
-
SELECT a, jsonb_path_query(b, '$.a.b like_regex "hi.*"') FROM json_tab@primary WHERE jsonb_path_exists(b, '$.a.b like_regex "hi.*"') ORDER BY a;
347
+
SELECT a, jsonb_path_query(b, '$.a.b like_regex "hi.*"') as jpq FROM json_tab@primary WHERE jsonb_path_exists(b, '$.a.b like_regex "hi.*"') ORDER BY a, jpq;
348
348
----
349
349
1 null
350
350
2 null
@@ -364,14 +364,14 @@ SELECT a, jsonb_path_query(b, '$.a.b like_regex "hi.*"') FROM json_tab@primary W
364
364
365
365
# For jsonb_path expression that we don't support for index acceleration, returns error.
366
366
statement error index "foo_inv" is inverted and cannot be used for this query
367
-
SELECT a, jsonb_path_query(b, '$.a.b like_regex "hi.*"') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b like_regex "hi.*"') ORDER BY a;
367
+
SELECT a, jsonb_path_query(b, '$.a.b like_regex "hi.*"') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b like_regex "hi.*"') ORDER BY a, jpq;
368
368
369
369
statement error index "foo_inv" is inverted and cannot be used for this query
370
-
SELECT a, jsonb_path_query(b, '$.lllaaann.dddooo == 123123') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.lllaaann.dddooo == 123123') ORDER BY a;
370
+
SELECT a, jsonb_path_query(b, '$.lllaaann.dddooo == 123123') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.lllaaann.dddooo == 123123') ORDER BY a, jpq;
371
371
372
372
# Result from this query is different from PG, tracked by #154588.
373
373
query IT
374
-
SELECT a, jsonb_path_query(b, '$.lllaaann.dddooo == 123123') FROM json_tab@primary WHERE jsonb_path_exists(b, '$.lllaaann.dddooo == 123123') ORDER BY a;
374
+
SELECT a, jsonb_path_query(b, '$.lllaaann.dddooo == 123123') as jpq FROM json_tab@primary WHERE jsonb_path_exists(b, '$.lllaaann.dddooo == 123123') ORDER BY a, jpq;
375
375
----
376
376
1 null
377
377
2 null
@@ -391,35 +391,35 @@ SELECT a, jsonb_path_query(b, '$.lllaaann.dddooo == 123123') FROM json_tab@prima
391
391
392
392
# Without json_path_exists in the filter, hinted inverted index will not work.
393
393
statement error index "foo_inv" is inverted and cannot be used for this query
394
-
SELECT jsonb_path_query(b, '$.a.b') FROM json_tab@foo_inv ORDER BY a;
394
+
SELECT jsonb_path_query(b, '$.a.b') as jpq FROM json_tab@foo_inv ORDER BY a, jpq;
395
395
396
396
# Multiple jsonb_path_exists in the filter. For all select clause to be
397
397
# accelerated by the inverted index, use OR to concatenate the jsonb_path_exists
398
398
# filters with the same json path expressions.
399
399
query ITT
400
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")'), jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') FROM json_tab ORDER BY a;
400
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') as jpq1, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') as jpq2 FROM json_tab ORDER BY a, jpq1, jpq2;
401
401
----
402
402
11 {"x": {"y": {"z": "y"}}} NULL
403
403
11 {"x": {"y": {"z": ["y", "yuu"]}}} NULL
404
404
12 NULL {"x": {"y": {"ztrue": true}}}
405
405
12 NULL {"x": {"y": {"ztrue": [true, "y1"]}}}
406
406
407
407
query ITT
408
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")'), jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "y")') ORDER BY a;
408
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') as jpq1, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') as jpq2 FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "y")') ORDER BY a, jpq1, jpq2;
409
409
----
410
410
11 {"x": {"y": {"z": "y"}}} NULL
411
411
11 {"x": {"y": {"z": ["y", "yuu"]}}} NULL
412
412
413
413
query ITT
414
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")'), jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "y")') OR jsonb_path_exists(b, '$.a.b ? (@.x.y.ztrue == true)') ORDER BY a;
414
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') as jpq1, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') as jpq2 FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b ? (@.x.y.z == "y")') OR jsonb_path_exists(b, '$.a.b ? (@.x.y.ztrue == true)') ORDER BY a, jpq1, jpq2;
415
415
----
416
416
11 {"x": {"y": {"z": "y"}}} NULL
417
417
11 {"x": {"y": {"z": ["y", "yuu"]}}} NULL
418
418
12 NULL {"x": {"y": {"ztrue": true}}}
419
419
12 NULL {"x": {"y": {"ztrue": [true, "y1"]}}}
420
420
421
421
query ITT
422
-
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")'), jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') FROM json_tab ORDER BY a;
422
+
SELECT a, jsonb_path_query(b, '$.a.b ? (@.x.y.z == "y")') as jpq1, jsonb_path_query(b, '$.a.b ? (@.x.y.ztrue == true)') as jpq2 FROM json_tab ORDER BY a, jpq1, jpq2;
SELECT a, jsonb_path_query(b, '$.a.d') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.d') ORDER BY a;
448
+
SELECT a, jsonb_path_query(b, '$.a.d') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.d') ORDER BY a, jpq;
449
449
----
450
450
3 "e"
451
451
6 "e"
452
452
10 "e"
453
453
454
454
query ITT
455
-
SELECT a, jsonb_path_query(b, '$.a.b'), jsonb_path_query(b, '$.a.d') FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b') AND jsonb_path_exists(b, '$.a.d') ORDER BY a;
455
+
SELECT a, jsonb_path_query(b, '$.a.b'), jsonb_path_query(b, '$.a.d') as jpq FROM json_tab@foo_inv WHERE jsonb_path_exists(b, '$.a.b') AND jsonb_path_exists(b, '$.a.d') ORDER BY a, jpq;
0 commit comments