Consistently use "superuser" instead of "super user"
[pgsql.git] / src / test / regress / expected / jsonb_jsonpath.out
blob508ddd797ed59e40c51d3d7417b5e396ea4a27b2
1 select jsonb '{"a": 12}' @? '$';
2  ?column? 
3 ----------
4  t
5 (1 row)
7 select jsonb '{"a": 12}' @? '1';
8  ?column? 
9 ----------
10  t
11 (1 row)
13 select jsonb '{"a": 12}' @? '$.a.b';
14  ?column? 
15 ----------
16  f
17 (1 row)
19 select jsonb '{"a": 12}' @? '$.b';
20  ?column? 
21 ----------
22  f
23 (1 row)
25 select jsonb '{"a": 12}' @? '$.a + 2';
26  ?column? 
27 ----------
28  t
29 (1 row)
31 select jsonb '{"a": 12}' @? '$.b + 2';
32  ?column? 
33 ----------
35 (1 row)
37 select jsonb '{"a": {"a": 12}}' @? '$.a.a';
38  ?column? 
39 ----------
40  t
41 (1 row)
43 select jsonb '{"a": {"a": 12}}' @? '$.*.a';
44  ?column? 
45 ----------
46  t
47 (1 row)
49 select jsonb '{"b": {"a": 12}}' @? '$.*.a';
50  ?column? 
51 ----------
52  t
53 (1 row)
55 select jsonb '{"b": {"a": 12}}' @? '$.*.b';
56  ?column? 
57 ----------
58  f
59 (1 row)
61 select jsonb '{"b": {"a": 12}}' @? 'strict $.*.b';
62  ?column? 
63 ----------
65 (1 row)
67 select jsonb '{}' @? '$.*';
68  ?column? 
69 ----------
70  f
71 (1 row)
73 select jsonb '{"a": 1}' @? '$.*';
74  ?column? 
75 ----------
76  t
77 (1 row)
79 select jsonb '{"a": {"b": 1}}' @? 'lax $.**{1}';
80  ?column? 
81 ----------
82  t
83 (1 row)
85 select jsonb '{"a": {"b": 1}}' @? 'lax $.**{2}';
86  ?column? 
87 ----------
88  t
89 (1 row)
91 select jsonb '{"a": {"b": 1}}' @? 'lax $.**{3}';
92  ?column? 
93 ----------
94  f
95 (1 row)
97 select jsonb '[]' @? '$[*]';
98  ?column? 
99 ----------
101 (1 row)
103 select jsonb '[1]' @? '$[*]';
104  ?column? 
105 ----------
107 (1 row)
109 select jsonb '[1]' @? '$[1]';
110  ?column? 
111 ----------
113 (1 row)
115 select jsonb '[1]' @? 'strict $[1]';
116  ?column? 
117 ----------
119 (1 row)
121 select jsonb_path_query('[1]', 'strict $[1]');
122 ERROR:  jsonpath array subscript is out of bounds
123 select jsonb_path_query('[1]', 'strict $[1]', silent => true);
124  jsonb_path_query 
125 ------------------
126 (0 rows)
128 select jsonb '[1]' @? 'lax $[10000000000000000]';
129  ?column? 
130 ----------
132 (1 row)
134 select jsonb '[1]' @? 'strict $[10000000000000000]';
135  ?column? 
136 ----------
138 (1 row)
140 select jsonb_path_query('[1]', 'lax $[10000000000000000]');
141 ERROR:  jsonpath array subscript is out of integer range
142 select jsonb_path_query('[1]', 'strict $[10000000000000000]');
143 ERROR:  jsonpath array subscript is out of integer range
144 select jsonb '[1]' @? '$[0]';
145  ?column? 
146 ----------
148 (1 row)
150 select jsonb '[1]' @? '$[0.3]';
151  ?column? 
152 ----------
154 (1 row)
156 select jsonb '[1]' @? '$[0.5]';
157  ?column? 
158 ----------
160 (1 row)
162 select jsonb '[1]' @? '$[0.9]';
163  ?column? 
164 ----------
166 (1 row)
168 select jsonb '[1]' @? '$[1.2]';
169  ?column? 
170 ----------
172 (1 row)
174 select jsonb '[1]' @? 'strict $[1.2]';
175  ?column? 
176 ----------
178 (1 row)
180 select jsonb '{"a": [1,2,3], "b": [3,4,5]}' @? '$ ? (@.a[*] >  @.b[*])';
181  ?column? 
182 ----------
184 (1 row)
186 select jsonb '{"a": [1,2,3], "b": [3,4,5]}' @? '$ ? (@.a[*] >= @.b[*])';
187  ?column? 
188 ----------
190 (1 row)
192 select jsonb '{"a": [1,2,3], "b": [3,4,"5"]}' @? '$ ? (@.a[*] >= @.b[*])';
193  ?column? 
194 ----------
196 (1 row)
198 select jsonb '{"a": [1,2,3], "b": [3,4,"5"]}' @? 'strict $ ? (@.a[*] >= @.b[*])';
199  ?column? 
200 ----------
202 (1 row)
204 select jsonb '{"a": [1,2,3], "b": [3,4,null]}' @? '$ ? (@.a[*] >= @.b[*])';
205  ?column? 
206 ----------
208 (1 row)
210 select jsonb '1' @? '$ ? ((@ == "1") is unknown)';
211  ?column? 
212 ----------
214 (1 row)
216 select jsonb '1' @? '$ ? ((@ == 1) is unknown)';
217  ?column? 
218 ----------
220 (1 row)
222 select jsonb '[{"a": 1}, {"a": 2}]' @? '$[0 to 1] ? (@.a > 1)';
223  ?column? 
224 ----------
226 (1 row)
228 select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'lax $[*].a', silent => false);
229  jsonb_path_exists 
230 -------------------
232 (1 row)
234 select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'lax $[*].a', silent => true);
235  jsonb_path_exists 
236 -------------------
238 (1 row)
240 select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'strict $[*].a', silent => false);
241 ERROR:  jsonpath member accessor can only be applied to an object
242 select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'strict $[*].a', silent => true);
243  jsonb_path_exists 
244 -------------------
246 (1 row)
248 select jsonb_path_query('1', 'lax $.a');
249  jsonb_path_query 
250 ------------------
251 (0 rows)
253 select jsonb_path_query('1', 'strict $.a');
254 ERROR:  jsonpath member accessor can only be applied to an object
255 select jsonb_path_query('1', 'strict $.*');
256 ERROR:  jsonpath wildcard member accessor can only be applied to an object
257 select jsonb_path_query('1', 'strict $.a', silent => true);
258  jsonb_path_query 
259 ------------------
260 (0 rows)
262 select jsonb_path_query('1', 'strict $.*', silent => true);
263  jsonb_path_query 
264 ------------------
265 (0 rows)
267 select jsonb_path_query('[]', 'lax $.a');
268  jsonb_path_query 
269 ------------------
270 (0 rows)
272 select jsonb_path_query('[]', 'strict $.a');
273 ERROR:  jsonpath member accessor can only be applied to an object
274 select jsonb_path_query('[]', 'strict $.a', silent => true);
275  jsonb_path_query 
276 ------------------
277 (0 rows)
279 select jsonb_path_query('{}', 'lax $.a');
280  jsonb_path_query 
281 ------------------
282 (0 rows)
284 select jsonb_path_query('{}', 'strict $.a');
285 ERROR:  JSON object does not contain key "a"
286 select jsonb_path_query('{}', 'strict $.a', silent => true);
287  jsonb_path_query 
288 ------------------
289 (0 rows)
291 select jsonb_path_query('1', 'strict $[1]');
292 ERROR:  jsonpath array accessor can only be applied to an array
293 select jsonb_path_query('1', 'strict $[*]');
294 ERROR:  jsonpath wildcard array accessor can only be applied to an array
295 select jsonb_path_query('[]', 'strict $[1]');
296 ERROR:  jsonpath array subscript is out of bounds
297 select jsonb_path_query('[]', 'strict $["a"]');
298 ERROR:  jsonpath array subscript is not a single numeric value
299 select jsonb_path_query('1', 'strict $[1]', silent => true);
300  jsonb_path_query 
301 ------------------
302 (0 rows)
304 select jsonb_path_query('1', 'strict $[*]', silent => true);
305  jsonb_path_query 
306 ------------------
307 (0 rows)
309 select jsonb_path_query('[]', 'strict $[1]', silent => true);
310  jsonb_path_query 
311 ------------------
312 (0 rows)
314 select jsonb_path_query('[]', 'strict $["a"]', silent => true);
315  jsonb_path_query 
316 ------------------
317 (0 rows)
319 select jsonb_path_query('{"a": 12, "b": {"a": 13}}', '$.a');
320  jsonb_path_query 
321 ------------------
322  12
323 (1 row)
325 select jsonb_path_query('{"a": 12, "b": {"a": 13}}', '$.b');
326  jsonb_path_query 
327 ------------------
328  {"a": 13}
329 (1 row)
331 select jsonb_path_query('{"a": 12, "b": {"a": 13}}', '$.*');
332  jsonb_path_query 
333 ------------------
334  12
335  {"a": 13}
336 (2 rows)
338 select jsonb_path_query('{"a": 12, "b": {"a": 13}}', 'lax $.*.a');
339  jsonb_path_query 
340 ------------------
341  13
342 (1 row)
344 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[*].a');
345  jsonb_path_query 
346 ------------------
347  13
348 (1 row)
350 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[*].*');
351  jsonb_path_query 
352 ------------------
353  13
354  14
355 (2 rows)
357 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0].a');
358  jsonb_path_query 
359 ------------------
360 (0 rows)
362 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[1].a');
363  jsonb_path_query 
364 ------------------
365  13
366 (1 row)
368 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[2].a');
369  jsonb_path_query 
370 ------------------
371 (0 rows)
373 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0,1].a');
374  jsonb_path_query 
375 ------------------
376  13
377 (1 row)
379 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0 to 10].a');
380  jsonb_path_query 
381 ------------------
382  13
383 (1 row)
385 select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0 to 10 / 0].a');
386 ERROR:  division by zero
387 select jsonb_path_query('[12, {"a": 13}, {"b": 14}, "ccc", true]', '$[2.5 - 1 to $.size() - 2]');
388  jsonb_path_query 
389 ------------------
390  {"a": 13}
391  {"b": 14}
392  "ccc"
393 (3 rows)
395 select jsonb_path_query('1', 'lax $[0]');
396  jsonb_path_query 
397 ------------------
399 (1 row)
401 select jsonb_path_query('1', 'lax $[*]');
402  jsonb_path_query 
403 ------------------
405 (1 row)
407 select jsonb_path_query('[1]', 'lax $[0]');
408  jsonb_path_query 
409 ------------------
411 (1 row)
413 select jsonb_path_query('[1]', 'lax $[*]');
414  jsonb_path_query 
415 ------------------
417 (1 row)
419 select jsonb_path_query('[1,2,3]', 'lax $[*]');
420  jsonb_path_query 
421 ------------------
425 (3 rows)
427 select jsonb_path_query('[1,2,3]', 'strict $[*].a');
428 ERROR:  jsonpath member accessor can only be applied to an object
429 select jsonb_path_query('[1,2,3]', 'strict $[*].a', silent => true);
430  jsonb_path_query 
431 ------------------
432 (0 rows)
434 select jsonb_path_query('[]', '$[last]');
435  jsonb_path_query 
436 ------------------
437 (0 rows)
439 select jsonb_path_query('[]', '$[last ? (exists(last))]');
440  jsonb_path_query 
441 ------------------
442 (0 rows)
444 select jsonb_path_query('[]', 'strict $[last]');
445 ERROR:  jsonpath array subscript is out of bounds
446 select jsonb_path_query('[]', 'strict $[last]', silent => true);
447  jsonb_path_query 
448 ------------------
449 (0 rows)
451 select jsonb_path_query('[1]', '$[last]');
452  jsonb_path_query 
453 ------------------
455 (1 row)
457 select jsonb_path_query('[1,2,3]', '$[last]');
458  jsonb_path_query 
459 ------------------
461 (1 row)
463 select jsonb_path_query('[1,2,3]', '$[last - 1]');
464  jsonb_path_query 
465 ------------------
467 (1 row)
469 select jsonb_path_query('[1,2,3]', '$[last ? (@.type() == "number")]');
470  jsonb_path_query 
471 ------------------
473 (1 row)
475 select jsonb_path_query('[1,2,3]', '$[last ? (@.type() == "string")]');
476 ERROR:  jsonpath array subscript is not a single numeric value
477 select jsonb_path_query('[1,2,3]', '$[last ? (@.type() == "string")]', silent => true);
478  jsonb_path_query 
479 ------------------
480 (0 rows)
482 select * from jsonb_path_query('{"a": 10}', '$');
483  jsonb_path_query 
484 ------------------
485  {"a": 10}
486 (1 row)
488 select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)');
489 ERROR:  could not find jsonpath variable "value"
490 select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '1');
491 ERROR:  "vars" argument is not an object
492 DETAIL:  Jsonpath parameters should be encoded as key-value pairs of "vars" object.
493 select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '[{"value" : 13}]');
494 ERROR:  "vars" argument is not an object
495 DETAIL:  Jsonpath parameters should be encoded as key-value pairs of "vars" object.
496 select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '{"value" : 13}');
497  jsonb_path_query 
498 ------------------
499  {"a": 10}
500 (1 row)
502 select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '{"value" : 8}');
503  jsonb_path_query 
504 ------------------
505 (0 rows)
507 select * from jsonb_path_query('{"a": 10}', '$.a ? (@ < $value)', '{"value" : 13}');
508  jsonb_path_query 
509 ------------------
510  10
511 (1 row)
513 select * from jsonb_path_query('[10,11,12,13,14,15]', '$[*] ? (@ < $value)', '{"value" : 13}');
514  jsonb_path_query 
515 ------------------
516  10
517  11
518  12
519 (3 rows)
521 select * from jsonb_path_query('[10,11,12,13,14,15]', '$[0,1] ? (@ < $x.value)', '{"x": {"value" : 13}}');
522  jsonb_path_query 
523 ------------------
524  10
525  11
526 (2 rows)
528 select * from jsonb_path_query('[10,11,12,13,14,15]', '$[0 to 2] ? (@ < $value)', '{"value" : 15}');
529  jsonb_path_query 
530 ------------------
531  10
532  11
533  12
534 (3 rows)
536 select * from jsonb_path_query('[1,"1",2,"2",null]', '$[*] ? (@ == "1")');
537  jsonb_path_query 
538 ------------------
539  "1"
540 (1 row)
542 select * from jsonb_path_query('[1,"1",2,"2",null]', '$[*] ? (@ == $value)', '{"value" : "1"}');
543  jsonb_path_query 
544 ------------------
545  "1"
546 (1 row)
548 select * from jsonb_path_query('[1,"1",2,"2",null]', '$[*] ? (@ == $value)', '{"value" : null}');
549  jsonb_path_query 
550 ------------------
551  null
552 (1 row)
554 select * from jsonb_path_query('[1, "2", null]', '$[*] ? (@ != null)');
555  jsonb_path_query 
556 ------------------
558  "2"
559 (2 rows)
561 select * from jsonb_path_query('[1, "2", null]', '$[*] ? (@ == null)');
562  jsonb_path_query 
563 ------------------
564  null
565 (1 row)
567 select * from jsonb_path_query('{}', '$ ? (@ == @)');
568  jsonb_path_query 
569 ------------------
570 (0 rows)
572 select * from jsonb_path_query('[]', 'strict $ ? (@ == @)');
573  jsonb_path_query 
574 ------------------
575 (0 rows)
577 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**');
578  jsonb_path_query 
579 ------------------
580  {"a": {"b": 1}}
581  {"b": 1}
583 (3 rows)
585 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0}');
586  jsonb_path_query 
587 ------------------
588  {"a": {"b": 1}}
589 (1 row)
591 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0 to last}');
592  jsonb_path_query 
593 ------------------
594  {"a": {"b": 1}}
595  {"b": 1}
597 (3 rows)
599 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1}');
600  jsonb_path_query 
601 ------------------
602  {"b": 1}
603 (1 row)
605 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1 to last}');
606  jsonb_path_query 
607 ------------------
608  {"b": 1}
610 (2 rows)
612 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{2}');
613  jsonb_path_query 
614 ------------------
616 (1 row)
618 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{2 to last}');
619  jsonb_path_query 
620 ------------------
622 (1 row)
624 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{3 to last}');
625  jsonb_path_query 
626 ------------------
627 (0 rows)
629 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{last}');
630  jsonb_path_query 
631 ------------------
633 (1 row)
635 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**.b ? (@ > 0)');
636  jsonb_path_query 
637 ------------------
639 (1 row)
641 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0}.b ? (@ > 0)');
642  jsonb_path_query 
643 ------------------
644 (0 rows)
646 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1}.b ? (@ > 0)');
647  jsonb_path_query 
648 ------------------
650 (1 row)
652 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0 to last}.b ? (@ > 0)');
653  jsonb_path_query 
654 ------------------
656 (1 row)
658 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1 to last}.b ? (@ > 0)');
659  jsonb_path_query 
660 ------------------
662 (1 row)
664 select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1 to 2}.b ? (@ > 0)');
665  jsonb_path_query 
666 ------------------
668 (1 row)
670 select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**.b ? (@ > 0)');
671  jsonb_path_query 
672 ------------------
674 (1 row)
676 select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{0}.b ? (@ > 0)');
677  jsonb_path_query 
678 ------------------
679 (0 rows)
681 select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{1}.b ? (@ > 0)');
682  jsonb_path_query 
683 ------------------
684 (0 rows)
686 select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{0 to last}.b ? (@ > 0)');
687  jsonb_path_query 
688 ------------------
690 (1 row)
692 select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{1 to last}.b ? (@ > 0)');
693  jsonb_path_query 
694 ------------------
696 (1 row)
698 select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{1 to 2}.b ? (@ > 0)');
699  jsonb_path_query 
700 ------------------
702 (1 row)
704 select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{2 to 3}.b ? (@ > 0)');
705  jsonb_path_query 
706 ------------------
708 (1 row)
710 select jsonb '{"a": {"b": 1}}' @? '$.**.b ? ( @ > 0)';
711  ?column? 
712 ----------
714 (1 row)
716 select jsonb '{"a": {"b": 1}}' @? '$.**{0}.b ? ( @ > 0)';
717  ?column? 
718 ----------
720 (1 row)
722 select jsonb '{"a": {"b": 1}}' @? '$.**{1}.b ? ( @ > 0)';
723  ?column? 
724 ----------
726 (1 row)
728 select jsonb '{"a": {"b": 1}}' @? '$.**{0 to last}.b ? ( @ > 0)';
729  ?column? 
730 ----------
732 (1 row)
734 select jsonb '{"a": {"b": 1}}' @? '$.**{1 to last}.b ? ( @ > 0)';
735  ?column? 
736 ----------
738 (1 row)
740 select jsonb '{"a": {"b": 1}}' @? '$.**{1 to 2}.b ? ( @ > 0)';
741  ?column? 
742 ----------
744 (1 row)
746 select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**.b ? ( @ > 0)';
747  ?column? 
748 ----------
750 (1 row)
752 select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{0}.b ? ( @ > 0)';
753  ?column? 
754 ----------
756 (1 row)
758 select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{1}.b ? ( @ > 0)';
759  ?column? 
760 ----------
762 (1 row)
764 select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{0 to last}.b ? ( @ > 0)';
765  ?column? 
766 ----------
768 (1 row)
770 select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{1 to last}.b ? ( @ > 0)';
771  ?column? 
772 ----------
774 (1 row)
776 select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{1 to 2}.b ? ( @ > 0)';
777  ?column? 
778 ----------
780 (1 row)
782 select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{2 to 3}.b ? ( @ > 0)';
783  ?column? 
784 ----------
786 (1 row)
788 select jsonb_path_query('{"g": {"x": 2}}', '$.g ? (exists (@.x))');
789  jsonb_path_query 
790 ------------------
791  {"x": 2}
792 (1 row)
794 select jsonb_path_query('{"g": {"x": 2}}', '$.g ? (exists (@.y))');
795  jsonb_path_query 
796 ------------------
797 (0 rows)
799 select jsonb_path_query('{"g": {"x": 2}}', '$.g ? (exists (@.x ? (@ >= 2) ))');
800  jsonb_path_query 
801 ------------------
802  {"x": 2}
803 (1 row)
805 select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'lax $.g ? (exists (@.x))');
806  jsonb_path_query 
807 ------------------
808  {"x": 2}
809 (1 row)
811 select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'lax $.g ? (exists (@.x + "3"))');
812  jsonb_path_query 
813 ------------------
814 (0 rows)
816 select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'lax $.g ? ((exists (@.x + "3")) is unknown)');
817  jsonb_path_query 
818 ------------------
819  {"x": 2}
820  {"y": 3}
821 (2 rows)
823 select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g[*] ? (exists (@.x))');
824  jsonb_path_query 
825 ------------------
826  {"x": 2}
827 (1 row)
829 select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g[*] ? ((exists (@.x)) is unknown)');
830  jsonb_path_query 
831 ------------------
832  {"y": 3}
833 (1 row)
835 select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g ? (exists (@[*].x))');
836  jsonb_path_query 
837 ------------------
838 (0 rows)
840 select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g ? ((exists (@[*].x)) is unknown)');
841    jsonb_path_query   
842 ----------------------
843  [{"x": 2}, {"y": 3}]
844 (1 row)
846 --test ternary logic
847 select
848         x, y,
849         jsonb_path_query(
850                 '[true, false, null]',
851                 '$[*] ? (@ == true  &&  ($x == true && $y == true) ||
852                                  @ == false && !($x == true && $y == true) ||
853                                  @ == null  &&  ($x == true && $y == true) is unknown)',
854                 jsonb_build_object('x', x, 'y', y)
855         ) as "x && y"
856 from
857         (values (jsonb 'true'), ('false'), ('"null"')) x(x),
858         (values (jsonb 'true'), ('false'), ('"null"')) y(y);
859    x    |   y    | x && y 
860 --------+--------+--------
861  true   | true   | true
862  true   | false  | false
863  true   | "null" | null
864  false  | true   | false
865  false  | false  | false
866  false  | "null" | false
867  "null" | true   | null
868  "null" | false  | false
869  "null" | "null" | null
870 (9 rows)
872 select
873         x, y,
874         jsonb_path_query(
875                 '[true, false, null]',
876                 '$[*] ? (@ == true  &&  ($x == true || $y == true) ||
877                                  @ == false && !($x == true || $y == true) ||
878                                  @ == null  &&  ($x == true || $y == true) is unknown)',
879                 jsonb_build_object('x', x, 'y', y)
880         ) as "x || y"
881 from
882         (values (jsonb 'true'), ('false'), ('"null"')) x(x),
883         (values (jsonb 'true'), ('false'), ('"null"')) y(y);
884    x    |   y    | x || y 
885 --------+--------+--------
886  true   | true   | true
887  true   | false  | true
888  true   | "null" | true
889  false  | true   | true
890  false  | false  | false
891  false  | "null" | null
892  "null" | true   | true
893  "null" | false  | null
894  "null" | "null" | null
895 (9 rows)
897 select jsonb '{"a": 1, "b":1}' @? '$ ? (@.a == @.b)';
898  ?column? 
899 ----------
901 (1 row)
903 select jsonb '{"c": {"a": 1, "b":1}}' @? '$ ? (@.a == @.b)';
904  ?column? 
905 ----------
907 (1 row)
909 select jsonb '{"c": {"a": 1, "b":1}}' @? '$.c ? (@.a == @.b)';
910  ?column? 
911 ----------
913 (1 row)
915 select jsonb '{"c": {"a": 1, "b":1}}' @? '$.c ? ($.c.a == @.b)';
916  ?column? 
917 ----------
919 (1 row)
921 select jsonb '{"c": {"a": 1, "b":1}}' @? '$.* ? (@.a == @.b)';
922  ?column? 
923 ----------
925 (1 row)
927 select jsonb '{"a": 1, "b":1}' @? '$.** ? (@.a == @.b)';
928  ?column? 
929 ----------
931 (1 row)
933 select jsonb '{"c": {"a": 1, "b":1}}' @? '$.** ? (@.a == @.b)';
934  ?column? 
935 ----------
937 (1 row)
939 select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == 1 + 1)');
940  jsonb_path_query 
941 ------------------
942  {"a": 2, "b": 1}
943 (1 row)
945 select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == (1 + 1))');
946  jsonb_path_query 
947 ------------------
948  {"a": 2, "b": 1}
949 (1 row)
951 select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == @.b + 1)');
952  jsonb_path_query 
953 ------------------
954  {"a": 2, "b": 1}
955 (1 row)
957 select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == (@.b + 1))');
958  jsonb_path_query 
959 ------------------
960  {"a": 2, "b": 1}
961 (1 row)
963 select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == - 1)';
964  ?column? 
965 ----------
967 (1 row)
969 select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == -1)';
970  ?column? 
971 ----------
973 (1 row)
975 select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == -@.b)';
976  ?column? 
977 ----------
979 (1 row)
981 select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == - @.b)';
982  ?column? 
983 ----------
985 (1 row)
987 select jsonb '{"c": {"a": 0, "b":1}}' @? '$.** ? (@.a == 1 - @.b)';
988  ?column? 
989 ----------
991 (1 row)
993 select jsonb '{"c": {"a": 2, "b":1}}' @? '$.** ? (@.a == 1 - - @.b)';
994  ?column? 
995 ----------
997 (1 row)
999 select jsonb '{"c": {"a": 0, "b":1}}' @? '$.** ? (@.a == 1 - +@.b)';
1000  ?column? 
1001 ----------
1003 (1 row)
1005 select jsonb '[1,2,3]' @? '$ ? (+@[*] > +2)';
1006  ?column? 
1007 ----------
1009 (1 row)
1011 select jsonb '[1,2,3]' @? '$ ? (+@[*] > +3)';
1012  ?column? 
1013 ----------
1015 (1 row)
1017 select jsonb '[1,2,3]' @? '$ ? (-@[*] < -2)';
1018  ?column? 
1019 ----------
1021 (1 row)
1023 select jsonb '[1,2,3]' @? '$ ? (-@[*] < -3)';
1024  ?column? 
1025 ----------
1027 (1 row)
1029 select jsonb '1' @? '$ ? ($ > 0)';
1030  ?column? 
1031 ----------
1033 (1 row)
1035 -- arithmetic errors
1036 select jsonb_path_query('[1,2,0,3]', '$[*] ? (2 / @ > 0)');
1037  jsonb_path_query 
1038 ------------------
1042 (3 rows)
1044 select jsonb_path_query('[1,2,0,3]', '$[*] ? ((2 / @ > 0) is unknown)');
1045  jsonb_path_query 
1046 ------------------
1048 (1 row)
1050 select jsonb_path_query('0', '1 / $');
1051 ERROR:  division by zero
1052 select jsonb_path_query('0', '1 / $ + 2');
1053 ERROR:  division by zero
1054 select jsonb_path_query('0', '-(3 + 1 % $)');
1055 ERROR:  division by zero
1056 select jsonb_path_query('1', '$ + "2"');
1057 ERROR:  right operand of jsonpath operator + is not a single numeric value
1058 select jsonb_path_query('[1, 2]', '3 * $');
1059 ERROR:  right operand of jsonpath operator * is not a single numeric value
1060 select jsonb_path_query('"a"', '-$');
1061 ERROR:  operand of unary jsonpath operator - is not a numeric value
1062 select jsonb_path_query('[1,"2",3]', '+$');
1063 ERROR:  operand of unary jsonpath operator + is not a numeric value
1064 select jsonb_path_query('1', '$ + "2"', silent => true);
1065  jsonb_path_query 
1066 ------------------
1067 (0 rows)
1069 select jsonb_path_query('[1, 2]', '3 * $', silent => true);
1070  jsonb_path_query 
1071 ------------------
1072 (0 rows)
1074 select jsonb_path_query('"a"', '-$', silent => true);
1075  jsonb_path_query 
1076 ------------------
1077 (0 rows)
1079 select jsonb_path_query('[1,"2",3]', '+$', silent => true);
1080  jsonb_path_query 
1081 ------------------
1083 (1 row)
1085 select jsonb '["1",2,0,3]' @? '-$[*]';
1086  ?column? 
1087 ----------
1089 (1 row)
1091 select jsonb '[1,"2",0,3]' @? '-$[*]';
1092  ?column? 
1093 ----------
1095 (1 row)
1097 select jsonb '["1",2,0,3]' @? 'strict -$[*]';
1098  ?column? 
1099 ----------
1101 (1 row)
1103 select jsonb '[1,"2",0,3]' @? 'strict -$[*]';
1104  ?column? 
1105 ----------
1107 (1 row)
1109 -- unwrapping of operator arguments in lax mode
1110 select jsonb_path_query('{"a": [2]}', 'lax $.a * 3');
1111  jsonb_path_query 
1112 ------------------
1114 (1 row)
1116 select jsonb_path_query('{"a": [2]}', 'lax $.a + 3');
1117  jsonb_path_query 
1118 ------------------
1120 (1 row)
1122 select jsonb_path_query('{"a": [2, 3, 4]}', 'lax -$.a');
1123  jsonb_path_query 
1124 ------------------
1125  -2
1126  -3
1127  -4
1128 (3 rows)
1130 -- should fail
1131 select jsonb_path_query('{"a": [1, 2]}', 'lax $.a * 3');
1132 ERROR:  left operand of jsonpath operator * is not a single numeric value
1133 select jsonb_path_query('{"a": [1, 2]}', 'lax $.a * 3', silent => true);
1134  jsonb_path_query 
1135 ------------------
1136 (0 rows)
1138 -- extension: boolean expressions
1139 select jsonb_path_query('2', '$ > 1');
1140  jsonb_path_query 
1141 ------------------
1142  true
1143 (1 row)
1145 select jsonb_path_query('2', '$ <= 1');
1146  jsonb_path_query 
1147 ------------------
1148  false
1149 (1 row)
1151 select jsonb_path_query('2', '$ == "2"');
1152  jsonb_path_query 
1153 ------------------
1154  null
1155 (1 row)
1157 select jsonb '2' @? '$ == "2"';
1158  ?column? 
1159 ----------
1161 (1 row)
1163 select jsonb '2' @@ '$ > 1';
1164  ?column? 
1165 ----------
1167 (1 row)
1169 select jsonb '2' @@ '$ <= 1';
1170  ?column? 
1171 ----------
1173 (1 row)
1175 select jsonb '2' @@ '$ == "2"';
1176  ?column? 
1177 ----------
1179 (1 row)
1181 select jsonb '2' @@ '1';
1182  ?column? 
1183 ----------
1185 (1 row)
1187 select jsonb '{}' @@ '$';
1188  ?column? 
1189 ----------
1191 (1 row)
1193 select jsonb '[]' @@ '$';
1194  ?column? 
1195 ----------
1197 (1 row)
1199 select jsonb '[1,2,3]' @@ '$[*]';
1200  ?column? 
1201 ----------
1203 (1 row)
1205 select jsonb '[]' @@ '$[*]';
1206  ?column? 
1207 ----------
1209 (1 row)
1211 select jsonb_path_match('[[1, true], [2, false]]', 'strict $[*] ? (@[0] > $x) [1]', '{"x": 1}');
1212  jsonb_path_match 
1213 ------------------
1215 (1 row)
1217 select jsonb_path_match('[[1, true], [2, false]]', 'strict $[*] ? (@[0] < $x) [1]', '{"x": 2}');
1218  jsonb_path_match 
1219 ------------------
1221 (1 row)
1223 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'lax exists($[*].a)', silent => false);
1224  jsonb_path_match 
1225 ------------------
1227 (1 row)
1229 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'lax exists($[*].a)', silent => true);
1230  jsonb_path_match 
1231 ------------------
1233 (1 row)
1235 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'strict exists($[*].a)', silent => false);
1236  jsonb_path_match 
1237 ------------------
1239 (1 row)
1241 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'strict exists($[*].a)', silent => true);
1242  jsonb_path_match 
1243 ------------------
1245 (1 row)
1247 select jsonb_path_query('[null,1,true,"a",[],{}]', '$.type()');
1248  jsonb_path_query 
1249 ------------------
1250  "array"
1251 (1 row)
1253 select jsonb_path_query('[null,1,true,"a",[],{}]', 'lax $.type()');
1254  jsonb_path_query 
1255 ------------------
1256  "array"
1257 (1 row)
1259 select jsonb_path_query('[null,1,true,"a",[],{}]', '$[*].type()');
1260  jsonb_path_query 
1261 ------------------
1262  "null"
1263  "number"
1264  "boolean"
1265  "string"
1266  "array"
1267  "object"
1268 (6 rows)
1270 select jsonb_path_query('null', 'null.type()');
1271  jsonb_path_query 
1272 ------------------
1273  "null"
1274 (1 row)
1276 select jsonb_path_query('null', 'true.type()');
1277  jsonb_path_query 
1278 ------------------
1279  "boolean"
1280 (1 row)
1282 select jsonb_path_query('null', '(123).type()');
1283  jsonb_path_query 
1284 ------------------
1285  "number"
1286 (1 row)
1288 select jsonb_path_query('null', '"123".type()');
1289  jsonb_path_query 
1290 ------------------
1291  "string"
1292 (1 row)
1294 select jsonb_path_query('{"a": 2}', '($.a - 5).abs() + 10');
1295  jsonb_path_query 
1296 ------------------
1297  13
1298 (1 row)
1300 select jsonb_path_query('{"a": 2.5}', '-($.a * $.a).floor() % 4.3');
1301  jsonb_path_query 
1302 ------------------
1303  -1.7
1304 (1 row)
1306 select jsonb_path_query('[1, 2, 3]', '($[*] > 2) ? (@ == true)');
1307  jsonb_path_query 
1308 ------------------
1309  true
1310 (1 row)
1312 select jsonb_path_query('[1, 2, 3]', '($[*] > 3).type()');
1313  jsonb_path_query 
1314 ------------------
1315  "boolean"
1316 (1 row)
1318 select jsonb_path_query('[1, 2, 3]', '($[*].a > 3).type()');
1319  jsonb_path_query 
1320 ------------------
1321  "boolean"
1322 (1 row)
1324 select jsonb_path_query('[1, 2, 3]', 'strict ($[*].a > 3).type()');
1325  jsonb_path_query 
1326 ------------------
1327  "null"
1328 (1 row)
1330 select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'strict $[*].size()');
1331 ERROR:  jsonpath item method .size() can only be applied to an array
1332 select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'strict $[*].size()', silent => true);
1333  jsonb_path_query 
1334 ------------------
1335 (0 rows)
1337 select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'lax $[*].size()');
1338  jsonb_path_query 
1339 ------------------
1349 (9 rows)
1351 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].abs()');
1352  jsonb_path_query 
1353 ------------------
1357  3.4
1358  5.6
1359 (5 rows)
1361 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].floor()');
1362  jsonb_path_query 
1363 ------------------
1366  -2
1367  -4
1369 (5 rows)
1371 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling()');
1372  jsonb_path_query 
1373 ------------------
1376  -2
1377  -3
1379 (5 rows)
1381 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling().abs()');
1382  jsonb_path_query 
1383 ------------------
1389 (5 rows)
1391 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling().abs().type()');
1392  jsonb_path_query 
1393 ------------------
1394  "number"
1395  "number"
1396  "number"
1397  "number"
1398  "number"
1399 (5 rows)
1401 select jsonb_path_query('[{},1]', '$[*].keyvalue()');
1402 ERROR:  jsonpath item method .keyvalue() can only be applied to an object
1403 select jsonb_path_query('[{},1]', '$[*].keyvalue()', silent => true);
1404  jsonb_path_query 
1405 ------------------
1406 (0 rows)
1408 select jsonb_path_query('{}', '$.keyvalue()');
1409  jsonb_path_query 
1410 ------------------
1411 (0 rows)
1413 select jsonb_path_query('{"a": 1, "b": [1, 2], "c": {"a": "bbb"}}', '$.keyvalue()');
1414                jsonb_path_query               
1415 ----------------------------------------------
1416  {"id": 0, "key": "a", "value": 1}
1417  {"id": 0, "key": "b", "value": [1, 2]}
1418  {"id": 0, "key": "c", "value": {"a": "bbb"}}
1419 (3 rows)
1421 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', '$[*].keyvalue()');
1422                jsonb_path_query                
1423 -----------------------------------------------
1424  {"id": 12, "key": "a", "value": 1}
1425  {"id": 12, "key": "b", "value": [1, 2]}
1426  {"id": 72, "key": "c", "value": {"a": "bbb"}}
1427 (3 rows)
1429 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'strict $.keyvalue()');
1430 ERROR:  jsonpath item method .keyvalue() can only be applied to an object
1431 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'lax $.keyvalue()');
1432                jsonb_path_query                
1433 -----------------------------------------------
1434  {"id": 12, "key": "a", "value": 1}
1435  {"id": 12, "key": "b", "value": [1, 2]}
1436  {"id": 72, "key": "c", "value": {"a": "bbb"}}
1437 (3 rows)
1439 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'strict $.keyvalue().a');
1440 ERROR:  jsonpath item method .keyvalue() can only be applied to an object
1441 select jsonb '{"a": 1, "b": [1, 2]}' @? 'lax $.keyvalue()';
1442  ?column? 
1443 ----------
1445 (1 row)
1447 select jsonb '{"a": 1, "b": [1, 2]}' @? 'lax $.keyvalue().key';
1448  ?column? 
1449 ----------
1451 (1 row)
1453 select jsonb_path_query('null', '$.double()');
1454 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1455 select jsonb_path_query('true', '$.double()');
1456 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1457 select jsonb_path_query('null', '$.double()', silent => true);
1458  jsonb_path_query 
1459 ------------------
1460 (0 rows)
1462 select jsonb_path_query('true', '$.double()', silent => true);
1463  jsonb_path_query 
1464 ------------------
1465 (0 rows)
1467 select jsonb_path_query('[]', '$.double()');
1468  jsonb_path_query 
1469 ------------------
1470 (0 rows)
1472 select jsonb_path_query('[]', 'strict $.double()');
1473 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1474 select jsonb_path_query('{}', '$.double()');
1475 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1476 select jsonb_path_query('[]', 'strict $.double()', silent => true);
1477  jsonb_path_query 
1478 ------------------
1479 (0 rows)
1481 select jsonb_path_query('{}', '$.double()', silent => true);
1482  jsonb_path_query 
1483 ------------------
1484 (0 rows)
1486 select jsonb_path_query('1.23', '$.double()');
1487  jsonb_path_query 
1488 ------------------
1489  1.23
1490 (1 row)
1492 select jsonb_path_query('"1.23"', '$.double()');
1493  jsonb_path_query 
1494 ------------------
1495  1.23
1496 (1 row)
1498 select jsonb_path_query('"1.23aaa"', '$.double()');
1499 ERROR:  string argument of jsonpath item method .double() is not a valid representation of a double precision number
1500 select jsonb_path_query('1e1000', '$.double()');
1501 ERROR:  numeric argument of jsonpath item method .double() is out of range for type double precision
1502 select jsonb_path_query('"nan"', '$.double()');
1503 ERROR:  string argument of jsonpath item method .double() is not a valid representation of a double precision number
1504 select jsonb_path_query('"NaN"', '$.double()');
1505 ERROR:  string argument of jsonpath item method .double() is not a valid representation of a double precision number
1506 select jsonb_path_query('"inf"', '$.double()');
1507 ERROR:  string argument of jsonpath item method .double() is not a valid representation of a double precision number
1508 select jsonb_path_query('"-inf"', '$.double()');
1509 ERROR:  string argument of jsonpath item method .double() is not a valid representation of a double precision number
1510 select jsonb_path_query('"inf"', '$.double()', silent => true);
1511  jsonb_path_query 
1512 ------------------
1513 (0 rows)
1515 select jsonb_path_query('"-inf"', '$.double()', silent => true);
1516  jsonb_path_query 
1517 ------------------
1518 (0 rows)
1520 select jsonb_path_query('{}', '$.abs()');
1521 ERROR:  jsonpath item method .abs() can only be applied to a numeric value
1522 select jsonb_path_query('true', '$.floor()');
1523 ERROR:  jsonpath item method .floor() can only be applied to a numeric value
1524 select jsonb_path_query('"1.2"', '$.ceiling()');
1525 ERROR:  jsonpath item method .ceiling() can only be applied to a numeric value
1526 select jsonb_path_query('{}', '$.abs()', silent => true);
1527  jsonb_path_query 
1528 ------------------
1529 (0 rows)
1531 select jsonb_path_query('true', '$.floor()', silent => true);
1532  jsonb_path_query 
1533 ------------------
1534 (0 rows)
1536 select jsonb_path_query('"1.2"', '$.ceiling()', silent => true);
1537  jsonb_path_query 
1538 ------------------
1539 (0 rows)
1541 select jsonb_path_query('["", "a", "abc", "abcabc"]', '$[*] ? (@ starts with "abc")');
1542  jsonb_path_query 
1543 ------------------
1544  "abc"
1545  "abcabc"
1546 (2 rows)
1548 select jsonb_path_query('["", "a", "abc", "abcabc"]', 'strict $ ? (@[*] starts with "abc")');
1549       jsonb_path_query      
1550 ----------------------------
1551  ["", "a", "abc", "abcabc"]
1552 (1 row)
1554 select jsonb_path_query('["", "a", "abd", "abdabc"]', 'strict $ ? (@[*] starts with "abc")');
1555  jsonb_path_query 
1556 ------------------
1557 (0 rows)
1559 select jsonb_path_query('["abc", "abcabc", null, 1]', 'strict $ ? (@[*] starts with "abc")');
1560  jsonb_path_query 
1561 ------------------
1562 (0 rows)
1564 select jsonb_path_query('["abc", "abcabc", null, 1]', 'strict $ ? ((@[*] starts with "abc") is unknown)');
1565       jsonb_path_query      
1566 ----------------------------
1567  ["abc", "abcabc", null, 1]
1568 (1 row)
1570 select jsonb_path_query('[[null, 1, "abc", "abcabc"]]', 'lax $ ? (@[*] starts with "abc")');
1571       jsonb_path_query      
1572 ----------------------------
1573  [null, 1, "abc", "abcabc"]
1574 (1 row)
1576 select jsonb_path_query('[[null, 1, "abd", "abdabc"]]', 'lax $ ? ((@[*] starts with "abc") is unknown)');
1577       jsonb_path_query      
1578 ----------------------------
1579  [null, 1, "abd", "abdabc"]
1580 (1 row)
1582 select jsonb_path_query('[null, 1, "abd", "abdabc"]', 'lax $[*] ? ((@ starts with "abc") is unknown)');
1583  jsonb_path_query 
1584 ------------------
1585  null
1587 (2 rows)
1589 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c")');
1590  jsonb_path_query 
1591 ------------------
1592  "abc"
1593  "abdacb"
1594 (2 rows)
1596 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "i")');
1597  jsonb_path_query 
1598 ------------------
1599  "abc"
1600  "aBdC"
1601  "abdacb"
1602 (3 rows)
1604 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "m")');
1605  jsonb_path_query 
1606 ------------------
1607  "abc"
1608  "abdacb"
1609  "adc\nabc"
1610 (3 rows)
1612 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "s")');
1613  jsonb_path_query 
1614 ------------------
1615  "abc"
1616  "abdacb"
1617  "ab\nadc"
1618 (3 rows)
1620 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "q")');
1621  jsonb_path_query 
1622 ------------------
1623  "a\\b"
1624  "^a\\b$"
1625 (2 rows)
1627 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "")');
1628  jsonb_path_query 
1629 ------------------
1630  "a\b"
1631 (1 row)
1633 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "q")');
1634  jsonb_path_query 
1635 ------------------
1636  "^a\\b$"
1637 (1 row)
1639 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "q")');
1640  jsonb_path_query 
1641 ------------------
1642 (0 rows)
1644 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "iq")');
1645  jsonb_path_query 
1646 ------------------
1647  "^a\\b$"
1648 (1 row)
1650 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "")');
1651  jsonb_path_query 
1652 ------------------
1653  "a\b"
1654 (1 row)
1656 select jsonb_path_query('null', '$.datetime()');
1657 ERROR:  jsonpath item method .datetime() can only be applied to a string
1658 select jsonb_path_query('true', '$.datetime()');
1659 ERROR:  jsonpath item method .datetime() can only be applied to a string
1660 select jsonb_path_query('1', '$.datetime()');
1661 ERROR:  jsonpath item method .datetime() can only be applied to a string
1662 select jsonb_path_query('[]', '$.datetime()');
1663  jsonb_path_query 
1664 ------------------
1665 (0 rows)
1667 select jsonb_path_query('[]', 'strict $.datetime()');
1668 ERROR:  jsonpath item method .datetime() can only be applied to a string
1669 select jsonb_path_query('{}', '$.datetime()');
1670 ERROR:  jsonpath item method .datetime() can only be applied to a string
1671 select jsonb_path_query('"bogus"', '$.datetime()');
1672 ERROR:  datetime format is not recognized: "bogus"
1673 HINT:  Use a datetime template argument to specify the input data format.
1674 select jsonb_path_query('"12:34"', '$.datetime("aaa")');
1675 ERROR:  invalid datetime format separator: "a"
1676 select jsonb_path_query('"aaaa"', '$.datetime("HH24")');
1677 ERROR:  invalid value "aa" for "HH24"
1678 DETAIL:  Value must be an integer.
1679 select jsonb '"10-03-2017"' @? '$.datetime("dd-mm-yyyy")';
1680  ?column? 
1681 ----------
1683 (1 row)
1685 select jsonb_path_query('"10-03-2017"', '$.datetime("dd-mm-yyyy")');
1686  jsonb_path_query 
1687 ------------------
1688  "2017-03-10"
1689 (1 row)
1691 select jsonb_path_query('"10-03-2017"', '$.datetime("dd-mm-yyyy").type()');
1692  jsonb_path_query 
1693 ------------------
1694  "date"
1695 (1 row)
1697 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy")');
1698 ERROR:  trailing characters remain in input string after datetime format
1699 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy").type()');
1700 ERROR:  trailing characters remain in input string after datetime format
1701 select jsonb_path_query('"10-03-2017 12:34"', '       $.datetime("dd-mm-yyyy HH24:MI").type()');
1702        jsonb_path_query        
1703 -------------------------------
1704  "timestamp without time zone"
1705 (1 row)
1707 select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM").type()');
1708       jsonb_path_query      
1709 ----------------------------
1710  "timestamp with time zone"
1711 (1 row)
1713 select jsonb_path_query('"12:34:56"', '$.datetime("HH24:MI:SS").type()');
1714      jsonb_path_query     
1715 --------------------------
1716  "time without time zone"
1717 (1 row)
1719 select jsonb_path_query('"12:34:56 +05:20"', '$.datetime("HH24:MI:SS TZH:TZM").type()');
1720    jsonb_path_query    
1721 -----------------------
1722  "time with time zone"
1723 (1 row)
1725 select jsonb_path_query('"10-03-2017T12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
1726    jsonb_path_query    
1727 -----------------------
1728  "2017-03-10T12:34:56"
1729 (1 row)
1731 select jsonb_path_query('"10-03-2017t12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
1732 ERROR:  unmatched format character "T"
1733 select jsonb_path_query('"10-03-2017 12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
1734 ERROR:  unmatched format character "T"
1735 set time zone '+00';
1736 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI")');
1737    jsonb_path_query    
1738 -----------------------
1739  "2017-03-10T12:34:00"
1740 (1 row)
1742 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
1743 ERROR:  input string is too short for datetime format
1744 select jsonb_path_query('"10-03-2017 12:34 +05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
1745       jsonb_path_query       
1746 -----------------------------
1747  "2017-03-10T12:34:00+05:00"
1748 (1 row)
1750 select jsonb_path_query('"10-03-2017 12:34 -05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
1751       jsonb_path_query       
1752 -----------------------------
1753  "2017-03-10T12:34:00-05:00"
1754 (1 row)
1756 select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
1757       jsonb_path_query       
1758 -----------------------------
1759  "2017-03-10T12:34:00+05:20"
1760 (1 row)
1762 select jsonb_path_query('"10-03-2017 12:34 -05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
1763       jsonb_path_query       
1764 -----------------------------
1765  "2017-03-10T12:34:00-05:20"
1766 (1 row)
1768 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI")');
1769  jsonb_path_query 
1770 ------------------
1771  "12:34:00"
1772 (1 row)
1774 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI TZH")');
1775 ERROR:  input string is too short for datetime format
1776 select jsonb_path_query('"12:34 +05"', '$.datetime("HH24:MI TZH")');
1777  jsonb_path_query 
1778 ------------------
1779  "12:34:00+05:00"
1780 (1 row)
1782 select jsonb_path_query('"12:34 -05"', '$.datetime("HH24:MI TZH")');
1783  jsonb_path_query 
1784 ------------------
1785  "12:34:00-05:00"
1786 (1 row)
1788 select jsonb_path_query('"12:34 +05:20"', '$.datetime("HH24:MI TZH:TZM")');
1789  jsonb_path_query 
1790 ------------------
1791  "12:34:00+05:20"
1792 (1 row)
1794 select jsonb_path_query('"12:34 -05:20"', '$.datetime("HH24:MI TZH:TZM")');
1795  jsonb_path_query 
1796 ------------------
1797  "12:34:00-05:20"
1798 (1 row)
1800 set time zone '+10';
1801 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI")');
1802    jsonb_path_query    
1803 -----------------------
1804  "2017-03-10T12:34:00"
1805 (1 row)
1807 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
1808 ERROR:  input string is too short for datetime format
1809 select jsonb_path_query('"10-03-2017 12:34 +05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
1810       jsonb_path_query       
1811 -----------------------------
1812  "2017-03-10T12:34:00+05:00"
1813 (1 row)
1815 select jsonb_path_query('"10-03-2017 12:34 -05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
1816       jsonb_path_query       
1817 -----------------------------
1818  "2017-03-10T12:34:00-05:00"
1819 (1 row)
1821 select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
1822       jsonb_path_query       
1823 -----------------------------
1824  "2017-03-10T12:34:00+05:20"
1825 (1 row)
1827 select jsonb_path_query('"10-03-2017 12:34 -05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
1828       jsonb_path_query       
1829 -----------------------------
1830  "2017-03-10T12:34:00-05:20"
1831 (1 row)
1833 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI")');
1834  jsonb_path_query 
1835 ------------------
1836  "12:34:00"
1837 (1 row)
1839 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI TZH")');
1840 ERROR:  input string is too short for datetime format
1841 select jsonb_path_query('"12:34 +05"', '$.datetime("HH24:MI TZH")');
1842  jsonb_path_query 
1843 ------------------
1844  "12:34:00+05:00"
1845 (1 row)
1847 select jsonb_path_query('"12:34 -05"', '$.datetime("HH24:MI TZH")');
1848  jsonb_path_query 
1849 ------------------
1850  "12:34:00-05:00"
1851 (1 row)
1853 select jsonb_path_query('"12:34 +05:20"', '$.datetime("HH24:MI TZH:TZM")');
1854  jsonb_path_query 
1855 ------------------
1856  "12:34:00+05:20"
1857 (1 row)
1859 select jsonb_path_query('"12:34 -05:20"', '$.datetime("HH24:MI TZH:TZM")');
1860  jsonb_path_query 
1861 ------------------
1862  "12:34:00-05:20"
1863 (1 row)
1865 set time zone default;
1866 select jsonb_path_query('"2017-03-10"', '$.datetime().type()');
1867  jsonb_path_query 
1868 ------------------
1869  "date"
1870 (1 row)
1872 select jsonb_path_query('"2017-03-10"', '$.datetime()');
1873  jsonb_path_query 
1874 ------------------
1875  "2017-03-10"
1876 (1 row)
1878 select jsonb_path_query('"2017-03-10 12:34:56"', '$.datetime().type()');
1879        jsonb_path_query        
1880 -------------------------------
1881  "timestamp without time zone"
1882 (1 row)
1884 select jsonb_path_query('"2017-03-10 12:34:56"', '$.datetime()');
1885    jsonb_path_query    
1886 -----------------------
1887  "2017-03-10T12:34:56"
1888 (1 row)
1890 select jsonb_path_query('"2017-03-10 12:34:56+3"', '$.datetime().type()');
1891       jsonb_path_query      
1892 ----------------------------
1893  "timestamp with time zone"
1894 (1 row)
1896 select jsonb_path_query('"2017-03-10 12:34:56+3"', '$.datetime()');
1897       jsonb_path_query       
1898 -----------------------------
1899  "2017-03-10T12:34:56+03:00"
1900 (1 row)
1902 select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime().type()');
1903       jsonb_path_query      
1904 ----------------------------
1905  "timestamp with time zone"
1906 (1 row)
1908 select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime()');
1909       jsonb_path_query       
1910 -----------------------------
1911  "2017-03-10T12:34:56+03:10"
1912 (1 row)
1914 select jsonb_path_query('"2017-03-10T12:34:56+3:10"', '$.datetime()');
1915       jsonb_path_query       
1916 -----------------------------
1917  "2017-03-10T12:34:56+03:10"
1918 (1 row)
1920 select jsonb_path_query('"2017-03-10t12:34:56+3:10"', '$.datetime()');
1921 ERROR:  datetime format is not recognized: "2017-03-10t12:34:56+3:10"
1922 HINT:  Use a datetime template argument to specify the input data format.
1923 select jsonb_path_query('"12:34:56"', '$.datetime().type()');
1924      jsonb_path_query     
1925 --------------------------
1926  "time without time zone"
1927 (1 row)
1929 select jsonb_path_query('"12:34:56"', '$.datetime()');
1930  jsonb_path_query 
1931 ------------------
1932  "12:34:56"
1933 (1 row)
1935 select jsonb_path_query('"12:34:56+3"', '$.datetime().type()');
1936    jsonb_path_query    
1937 -----------------------
1938  "time with time zone"
1939 (1 row)
1941 select jsonb_path_query('"12:34:56+3"', '$.datetime()');
1942  jsonb_path_query 
1943 ------------------
1944  "12:34:56+03:00"
1945 (1 row)
1947 select jsonb_path_query('"12:34:56+3:10"', '$.datetime().type()');
1948    jsonb_path_query    
1949 -----------------------
1950  "time with time zone"
1951 (1 row)
1953 select jsonb_path_query('"12:34:56+3:10"', '$.datetime()');
1954  jsonb_path_query 
1955 ------------------
1956  "12:34:56+03:10"
1957 (1 row)
1959 set time zone '+00';
1960 -- date comparison
1961 select jsonb_path_query(
1962         '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
1963         '$[*].datetime() ? (@ == "10.03.2017".datetime("dd.mm.yyyy"))');
1964 ERROR:  cannot convert value from date to timestamptz without time zone usage
1965 HINT:  Use *_tz() function for time zone support.
1966 select jsonb_path_query(
1967         '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
1968         '$[*].datetime() ? (@ >= "10.03.2017".datetime("dd.mm.yyyy"))');
1969 ERROR:  cannot convert value from date to timestamptz without time zone usage
1970 HINT:  Use *_tz() function for time zone support.
1971 select jsonb_path_query(
1972         '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
1973         '$[*].datetime() ? (@ <  "10.03.2017".datetime("dd.mm.yyyy"))');
1974 ERROR:  cannot convert value from date to timestamptz without time zone usage
1975 HINT:  Use *_tz() function for time zone support.
1976 select jsonb_path_query_tz(
1977         '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
1978         '$[*].datetime() ? (@ == "10.03.2017".datetime("dd.mm.yyyy"))');
1979      jsonb_path_query_tz     
1980 -----------------------------
1981  "2017-03-10"
1982  "2017-03-10T00:00:00"
1983  "2017-03-10T03:00:00+03:00"
1984 (3 rows)
1986 select jsonb_path_query_tz(
1987         '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
1988         '$[*].datetime() ? (@ >= "10.03.2017".datetime("dd.mm.yyyy"))');
1989      jsonb_path_query_tz     
1990 -----------------------------
1991  "2017-03-10"
1992  "2017-03-11"
1993  "2017-03-10T00:00:00"
1994  "2017-03-10T12:34:56"
1995  "2017-03-10T03:00:00+03:00"
1996 (5 rows)
1998 select jsonb_path_query_tz(
1999         '["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
2000         '$[*].datetime() ? (@ <  "10.03.2017".datetime("dd.mm.yyyy"))');
2001      jsonb_path_query_tz     
2002 -----------------------------
2003  "2017-03-09"
2004  "2017-03-10T01:02:03+04:00"
2005 (2 rows)
2007 -- time comparison
2008 select jsonb_path_query(
2009         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
2010         '$[*].datetime() ? (@ == "12:35".datetime("HH24:MI"))');
2011 ERROR:  cannot convert value from time to timetz without time zone usage
2012 HINT:  Use *_tz() function for time zone support.
2013 select jsonb_path_query(
2014         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
2015         '$[*].datetime() ? (@ >= "12:35".datetime("HH24:MI"))');
2016 ERROR:  cannot convert value from time to timetz without time zone usage
2017 HINT:  Use *_tz() function for time zone support.
2018 select jsonb_path_query(
2019         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
2020         '$[*].datetime() ? (@ <  "12:35".datetime("HH24:MI"))');
2021 ERROR:  cannot convert value from time to timetz without time zone usage
2022 HINT:  Use *_tz() function for time zone support.
2023 select jsonb_path_query_tz(
2024         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
2025         '$[*].datetime() ? (@ == "12:35".datetime("HH24:MI"))');
2026  jsonb_path_query_tz 
2027 ---------------------
2028  "12:35:00"
2029  "12:35:00+00:00"
2030 (2 rows)
2032 select jsonb_path_query_tz(
2033         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
2034         '$[*].datetime() ? (@ >= "12:35".datetime("HH24:MI"))');
2035  jsonb_path_query_tz 
2036 ---------------------
2037  "12:35:00"
2038  "12:36:00"
2039  "12:35:00+00:00"
2040 (3 rows)
2042 select jsonb_path_query_tz(
2043         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
2044         '$[*].datetime() ? (@ <  "12:35".datetime("HH24:MI"))');
2045  jsonb_path_query_tz 
2046 ---------------------
2047  "12:34:00"
2048  "12:35:00+01:00"
2049  "13:35:00+01:00"
2050 (3 rows)
2052 -- timetz comparison
2053 select jsonb_path_query(
2054         '["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
2055         '$[*].datetime() ? (@ == "12:35 +1".datetime("HH24:MI TZH"))');
2056 ERROR:  cannot convert value from time to timetz without time zone usage
2057 HINT:  Use *_tz() function for time zone support.
2058 select jsonb_path_query(
2059         '["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
2060         '$[*].datetime() ? (@ >= "12:35 +1".datetime("HH24:MI TZH"))');
2061 ERROR:  cannot convert value from time to timetz without time zone usage
2062 HINT:  Use *_tz() function for time zone support.
2063 select jsonb_path_query(
2064         '["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
2065         '$[*].datetime() ? (@ <  "12:35 +1".datetime("HH24:MI TZH"))');
2066 ERROR:  cannot convert value from time to timetz without time zone usage
2067 HINT:  Use *_tz() function for time zone support.
2068 select jsonb_path_query_tz(
2069         '["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
2070         '$[*].datetime() ? (@ == "12:35 +1".datetime("HH24:MI TZH"))');
2071  jsonb_path_query_tz 
2072 ---------------------
2073  "12:35:00+01:00"
2074 (1 row)
2076 select jsonb_path_query_tz(
2077         '["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
2078         '$[*].datetime() ? (@ >= "12:35 +1".datetime("HH24:MI TZH"))');
2079  jsonb_path_query_tz 
2080 ---------------------
2081  "12:35:00+01:00"
2082  "12:36:00+01:00"
2083  "12:35:00-02:00"
2084  "11:35:00"
2085  "12:35:00"
2086 (5 rows)
2088 select jsonb_path_query_tz(
2089         '["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
2090         '$[*].datetime() ? (@ <  "12:35 +1".datetime("HH24:MI TZH"))');
2091  jsonb_path_query_tz 
2092 ---------------------
2093  "12:34:00+01:00"
2094  "12:35:00+02:00"
2095  "10:35:00"
2096 (3 rows)
2098 -- timestamp comparison
2099 select jsonb_path_query(
2100         '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2101         '$[*].datetime() ? (@ == "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
2102 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
2103 HINT:  Use *_tz() function for time zone support.
2104 select jsonb_path_query(
2105         '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2106         '$[*].datetime() ? (@ >= "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
2107 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
2108 HINT:  Use *_tz() function for time zone support.
2109 select jsonb_path_query(
2110         '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2111         '$[*].datetime() ? (@ < "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
2112 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
2113 HINT:  Use *_tz() function for time zone support.
2114 select jsonb_path_query_tz(
2115         '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2116         '$[*].datetime() ? (@ == "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
2117      jsonb_path_query_tz     
2118 -----------------------------
2119  "2017-03-10T12:35:00"
2120  "2017-03-10T13:35:00+01:00"
2121 (2 rows)
2123 select jsonb_path_query_tz(
2124         '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2125         '$[*].datetime() ? (@ >= "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
2126      jsonb_path_query_tz     
2127 -----------------------------
2128  "2017-03-10T12:35:00"
2129  "2017-03-10T12:36:00"
2130  "2017-03-10T13:35:00+01:00"
2131  "2017-03-10T12:35:00-01:00"
2132  "2017-03-11"
2133 (5 rows)
2135 select jsonb_path_query_tz(
2136         '["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2137         '$[*].datetime() ? (@ < "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
2138      jsonb_path_query_tz     
2139 -----------------------------
2140  "2017-03-10T12:34:00"
2141  "2017-03-10T12:35:00+01:00"
2142  "2017-03-10"
2143 (3 rows)
2145 -- timestamptz comparison
2146 select jsonb_path_query(
2147         '["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2148         '$[*].datetime() ? (@ == "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
2149 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
2150 HINT:  Use *_tz() function for time zone support.
2151 select jsonb_path_query(
2152         '["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2153         '$[*].datetime() ? (@ >= "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
2154 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
2155 HINT:  Use *_tz() function for time zone support.
2156 select jsonb_path_query(
2157         '["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2158         '$[*].datetime() ? (@ < "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
2159 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
2160 HINT:  Use *_tz() function for time zone support.
2161 select jsonb_path_query_tz(
2162         '["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2163         '$[*].datetime() ? (@ == "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
2164      jsonb_path_query_tz     
2165 -----------------------------
2166  "2017-03-10T12:35:00+01:00"
2167  "2017-03-10T11:35:00"
2168 (2 rows)
2170 select jsonb_path_query_tz(
2171         '["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2172         '$[*].datetime() ? (@ >= "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
2173      jsonb_path_query_tz     
2174 -----------------------------
2175  "2017-03-10T12:35:00+01:00"
2176  "2017-03-10T12:36:00+01:00"
2177  "2017-03-10T12:35:00-02:00"
2178  "2017-03-10T11:35:00"
2179  "2017-03-10T12:35:00"
2180  "2017-03-11"
2181 (6 rows)
2183 select jsonb_path_query_tz(
2184         '["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
2185         '$[*].datetime() ? (@ < "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
2186      jsonb_path_query_tz     
2187 -----------------------------
2188  "2017-03-10T12:34:00+01:00"
2189  "2017-03-10T12:35:00+02:00"
2190  "2017-03-10T10:35:00"
2191  "2017-03-10"
2192 (4 rows)
2194 -- overflow during comparison
2195 select jsonb_path_query('"1000000-01-01"', '$.datetime() > "2020-01-01 12:00:00".datetime()'::jsonpath);
2196  jsonb_path_query 
2197 ------------------
2198  true
2199 (1 row)
2201 set time zone default;
2202 -- jsonpath operators
2203 SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*]');
2204  jsonb_path_query 
2205 ------------------
2206  {"a": 1}
2207  {"a": 2}
2208 (2 rows)
2210 SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*] ? (@.a > 10)');
2211  jsonb_path_query 
2212 ------------------
2213 (0 rows)
2215 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a');
2216 ERROR:  JSON object does not contain key "a"
2217 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a');
2218  jsonb_path_query_array 
2219 ------------------------
2220  [1, 2]
2221 (1 row)
2223 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ == 1)');
2224  jsonb_path_query_array 
2225 ------------------------
2226  [1]
2227 (1 row)
2229 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 10)');
2230  jsonb_path_query_array 
2231 ------------------------
2232  []
2233 (1 row)
2235 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 1, "max": 4}');
2236  jsonb_path_query_array 
2237 ------------------------
2238  [2, 3]
2239 (1 row)
2241 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 3, "max": 4}');
2242  jsonb_path_query_array 
2243 ------------------------
2244  []
2245 (1 row)
2247 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a');
2248 ERROR:  JSON object does not contain key "a"
2249 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a', silent => true);
2250  jsonb_path_query_first 
2251 ------------------------
2253 (1 row)
2255 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a');
2256  jsonb_path_query_first 
2257 ------------------------
2259 (1 row)
2261 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ == 1)');
2262  jsonb_path_query_first 
2263 ------------------------
2265 (1 row)
2267 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 10)');
2268  jsonb_path_query_first 
2269 ------------------------
2271 (1 row)
2273 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 1, "max": 4}');
2274  jsonb_path_query_first 
2275 ------------------------
2277 (1 row)
2279 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 3, "max": 4}');
2280  jsonb_path_query_first 
2281 ------------------------
2283 (1 row)
2285 SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*].a ? (@ > 1)';
2286  ?column? 
2287 ----------
2289 (1 row)
2291 SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*] ? (@.a > 2)';
2292  ?column? 
2293 ----------
2295 (1 row)
2297 SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 1)');
2298  jsonb_path_exists 
2299 -------------------
2301 (1 row)
2303 SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 1, "max": 4}');
2304  jsonb_path_exists 
2305 -------------------
2307 (1 row)
2309 SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 3, "max": 4}');
2310  jsonb_path_exists 
2311 -------------------
2313 (1 row)
2315 SELECT jsonb_path_match('true', '$', silent => false);
2316  jsonb_path_match 
2317 ------------------
2319 (1 row)
2321 SELECT jsonb_path_match('false', '$', silent => false);
2322  jsonb_path_match 
2323 ------------------
2325 (1 row)
2327 SELECT jsonb_path_match('null', '$', silent => false);
2328  jsonb_path_match 
2329 ------------------
2331 (1 row)
2333 SELECT jsonb_path_match('1', '$', silent => true);
2334  jsonb_path_match 
2335 ------------------
2337 (1 row)
2339 SELECT jsonb_path_match('1', '$', silent => false);
2340 ERROR:  single boolean result is expected
2341 SELECT jsonb_path_match('"a"', '$', silent => false);
2342 ERROR:  single boolean result is expected
2343 SELECT jsonb_path_match('{}', '$', silent => false);
2344 ERROR:  single boolean result is expected
2345 SELECT jsonb_path_match('[true]', '$', silent => false);
2346 ERROR:  single boolean result is expected
2347 SELECT jsonb_path_match('{}', 'lax $.a', silent => false);
2348 ERROR:  single boolean result is expected
2349 SELECT jsonb_path_match('{}', 'strict $.a', silent => false);
2350 ERROR:  JSON object does not contain key "a"
2351 SELECT jsonb_path_match('{}', 'strict $.a', silent => true);
2352  jsonb_path_match 
2353 ------------------
2355 (1 row)
2357 SELECT jsonb_path_match('[true, true]', '$[*]', silent => false);
2358 ERROR:  single boolean result is expected
2359 SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 1';
2360  ?column? 
2361 ----------
2363 (1 row)
2365 SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 2';
2366  ?column? 
2367 ----------
2369 (1 row)
2371 SELECT jsonb_path_match('[{"a": 1}, {"a": 2}]', '$[*].a > 1');
2372  jsonb_path_match 
2373 ------------------
2375 (1 row)
2377 -- test string comparison (Unicode codepoint collation)
2378 WITH str(j, num) AS
2380         SELECT jsonb_build_object('s', s), num
2381         FROM unnest('{"", "a", "ab", "abc", "abcd", "b", "A", "AB", "ABC", "ABc", "ABcD", "B"}'::text[]) WITH ORDINALITY AS a(s, num)
2383 SELECT
2384         s1.j, s2.j,
2385         jsonb_path_query_first(s1.j, '$.s < $s', vars => s2.j) lt,
2386         jsonb_path_query_first(s1.j, '$.s <= $s', vars => s2.j) le,
2387         jsonb_path_query_first(s1.j, '$.s == $s', vars => s2.j) eq,
2388         jsonb_path_query_first(s1.j, '$.s >= $s', vars => s2.j) ge,
2389         jsonb_path_query_first(s1.j, '$.s > $s', vars => s2.j) gt
2390 FROM str s1, str s2
2391 ORDER BY s1.num, s2.num;
2392        j       |       j       |  lt   |  le   |  eq   |  ge   |  gt   
2393 ---------------+---------------+-------+-------+-------+-------+-------
2394  {"s": ""}     | {"s": ""}     | false | true  | true  | true  | false
2395  {"s": ""}     | {"s": "a"}    | true  | true  | false | false | false
2396  {"s": ""}     | {"s": "ab"}   | true  | true  | false | false | false
2397  {"s": ""}     | {"s": "abc"}  | true  | true  | false | false | false
2398  {"s": ""}     | {"s": "abcd"} | true  | true  | false | false | false
2399  {"s": ""}     | {"s": "b"}    | true  | true  | false | false | false
2400  {"s": ""}     | {"s": "A"}    | true  | true  | false | false | false
2401  {"s": ""}     | {"s": "AB"}   | true  | true  | false | false | false
2402  {"s": ""}     | {"s": "ABC"}  | true  | true  | false | false | false
2403  {"s": ""}     | {"s": "ABc"}  | true  | true  | false | false | false
2404  {"s": ""}     | {"s": "ABcD"} | true  | true  | false | false | false
2405  {"s": ""}     | {"s": "B"}    | true  | true  | false | false | false
2406  {"s": "a"}    | {"s": ""}     | false | false | false | true  | true
2407  {"s": "a"}    | {"s": "a"}    | false | true  | true  | true  | false
2408  {"s": "a"}    | {"s": "ab"}   | true  | true  | false | false | false
2409  {"s": "a"}    | {"s": "abc"}  | true  | true  | false | false | false
2410  {"s": "a"}    | {"s": "abcd"} | true  | true  | false | false | false
2411  {"s": "a"}    | {"s": "b"}    | true  | true  | false | false | false
2412  {"s": "a"}    | {"s": "A"}    | false | false | false | true  | true
2413  {"s": "a"}    | {"s": "AB"}   | false | false | false | true  | true
2414  {"s": "a"}    | {"s": "ABC"}  | false | false | false | true  | true
2415  {"s": "a"}    | {"s": "ABc"}  | false | false | false | true  | true
2416  {"s": "a"}    | {"s": "ABcD"} | false | false | false | true  | true
2417  {"s": "a"}    | {"s": "B"}    | false | false | false | true  | true
2418  {"s": "ab"}   | {"s": ""}     | false | false | false | true  | true
2419  {"s": "ab"}   | {"s": "a"}    | false | false | false | true  | true
2420  {"s": "ab"}   | {"s": "ab"}   | false | true  | true  | true  | false
2421  {"s": "ab"}   | {"s": "abc"}  | true  | true  | false | false | false
2422  {"s": "ab"}   | {"s": "abcd"} | true  | true  | false | false | false
2423  {"s": "ab"}   | {"s": "b"}    | true  | true  | false | false | false
2424  {"s": "ab"}   | {"s": "A"}    | false | false | false | true  | true
2425  {"s": "ab"}   | {"s": "AB"}   | false | false | false | true  | true
2426  {"s": "ab"}   | {"s": "ABC"}  | false | false | false | true  | true
2427  {"s": "ab"}   | {"s": "ABc"}  | false | false | false | true  | true
2428  {"s": "ab"}   | {"s": "ABcD"} | false | false | false | true  | true
2429  {"s": "ab"}   | {"s": "B"}    | false | false | false | true  | true
2430  {"s": "abc"}  | {"s": ""}     | false | false | false | true  | true
2431  {"s": "abc"}  | {"s": "a"}    | false | false | false | true  | true
2432  {"s": "abc"}  | {"s": "ab"}   | false | false | false | true  | true
2433  {"s": "abc"}  | {"s": "abc"}  | false | true  | true  | true  | false
2434  {"s": "abc"}  | {"s": "abcd"} | true  | true  | false | false | false
2435  {"s": "abc"}  | {"s": "b"}    | true  | true  | false | false | false
2436  {"s": "abc"}  | {"s": "A"}    | false | false | false | true  | true
2437  {"s": "abc"}  | {"s": "AB"}   | false | false | false | true  | true
2438  {"s": "abc"}  | {"s": "ABC"}  | false | false | false | true  | true
2439  {"s": "abc"}  | {"s": "ABc"}  | false | false | false | true  | true
2440  {"s": "abc"}  | {"s": "ABcD"} | false | false | false | true  | true
2441  {"s": "abc"}  | {"s": "B"}    | false | false | false | true  | true
2442  {"s": "abcd"} | {"s": ""}     | false | false | false | true  | true
2443  {"s": "abcd"} | {"s": "a"}    | false | false | false | true  | true
2444  {"s": "abcd"} | {"s": "ab"}   | false | false | false | true  | true
2445  {"s": "abcd"} | {"s": "abc"}  | false | false | false | true  | true
2446  {"s": "abcd"} | {"s": "abcd"} | false | true  | true  | true  | false
2447  {"s": "abcd"} | {"s": "b"}    | true  | true  | false | false | false
2448  {"s": "abcd"} | {"s": "A"}    | false | false | false | true  | true
2449  {"s": "abcd"} | {"s": "AB"}   | false | false | false | true  | true
2450  {"s": "abcd"} | {"s": "ABC"}  | false | false | false | true  | true
2451  {"s": "abcd"} | {"s": "ABc"}  | false | false | false | true  | true
2452  {"s": "abcd"} | {"s": "ABcD"} | false | false | false | true  | true
2453  {"s": "abcd"} | {"s": "B"}    | false | false | false | true  | true
2454  {"s": "b"}    | {"s": ""}     | false | false | false | true  | true
2455  {"s": "b"}    | {"s": "a"}    | false | false | false | true  | true
2456  {"s": "b"}    | {"s": "ab"}   | false | false | false | true  | true
2457  {"s": "b"}    | {"s": "abc"}  | false | false | false | true  | true
2458  {"s": "b"}    | {"s": "abcd"} | false | false | false | true  | true
2459  {"s": "b"}    | {"s": "b"}    | false | true  | true  | true  | false
2460  {"s": "b"}    | {"s": "A"}    | false | false | false | true  | true
2461  {"s": "b"}    | {"s": "AB"}   | false | false | false | true  | true
2462  {"s": "b"}    | {"s": "ABC"}  | false | false | false | true  | true
2463  {"s": "b"}    | {"s": "ABc"}  | false | false | false | true  | true
2464  {"s": "b"}    | {"s": "ABcD"} | false | false | false | true  | true
2465  {"s": "b"}    | {"s": "B"}    | false | false | false | true  | true
2466  {"s": "A"}    | {"s": ""}     | false | false | false | true  | true
2467  {"s": "A"}    | {"s": "a"}    | true  | true  | false | false | false
2468  {"s": "A"}    | {"s": "ab"}   | true  | true  | false | false | false
2469  {"s": "A"}    | {"s": "abc"}  | true  | true  | false | false | false
2470  {"s": "A"}    | {"s": "abcd"} | true  | true  | false | false | false
2471  {"s": "A"}    | {"s": "b"}    | true  | true  | false | false | false
2472  {"s": "A"}    | {"s": "A"}    | false | true  | true  | true  | false
2473  {"s": "A"}    | {"s": "AB"}   | true  | true  | false | false | false
2474  {"s": "A"}    | {"s": "ABC"}  | true  | true  | false | false | false
2475  {"s": "A"}    | {"s": "ABc"}  | true  | true  | false | false | false
2476  {"s": "A"}    | {"s": "ABcD"} | true  | true  | false | false | false
2477  {"s": "A"}    | {"s": "B"}    | true  | true  | false | false | false
2478  {"s": "AB"}   | {"s": ""}     | false | false | false | true  | true
2479  {"s": "AB"}   | {"s": "a"}    | true  | true  | false | false | false
2480  {"s": "AB"}   | {"s": "ab"}   | true  | true  | false | false | false
2481  {"s": "AB"}   | {"s": "abc"}  | true  | true  | false | false | false
2482  {"s": "AB"}   | {"s": "abcd"} | true  | true  | false | false | false
2483  {"s": "AB"}   | {"s": "b"}    | true  | true  | false | false | false
2484  {"s": "AB"}   | {"s": "A"}    | false | false | false | true  | true
2485  {"s": "AB"}   | {"s": "AB"}   | false | true  | true  | true  | false
2486  {"s": "AB"}   | {"s": "ABC"}  | true  | true  | false | false | false
2487  {"s": "AB"}   | {"s": "ABc"}  | true  | true  | false | false | false
2488  {"s": "AB"}   | {"s": "ABcD"} | true  | true  | false | false | false
2489  {"s": "AB"}   | {"s": "B"}    | true  | true  | false | false | false
2490  {"s": "ABC"}  | {"s": ""}     | false | false | false | true  | true
2491  {"s": "ABC"}  | {"s": "a"}    | true  | true  | false | false | false
2492  {"s": "ABC"}  | {"s": "ab"}   | true  | true  | false | false | false
2493  {"s": "ABC"}  | {"s": "abc"}  | true  | true  | false | false | false
2494  {"s": "ABC"}  | {"s": "abcd"} | true  | true  | false | false | false
2495  {"s": "ABC"}  | {"s": "b"}    | true  | true  | false | false | false
2496  {"s": "ABC"}  | {"s": "A"}    | false | false | false | true  | true
2497  {"s": "ABC"}  | {"s": "AB"}   | false | false | false | true  | true
2498  {"s": "ABC"}  | {"s": "ABC"}  | false | true  | true  | true  | false
2499  {"s": "ABC"}  | {"s": "ABc"}  | true  | true  | false | false | false
2500  {"s": "ABC"}  | {"s": "ABcD"} | true  | true  | false | false | false
2501  {"s": "ABC"}  | {"s": "B"}    | true  | true  | false | false | false
2502  {"s": "ABc"}  | {"s": ""}     | false | false | false | true  | true
2503  {"s": "ABc"}  | {"s": "a"}    | true  | true  | false | false | false
2504  {"s": "ABc"}  | {"s": "ab"}   | true  | true  | false | false | false
2505  {"s": "ABc"}  | {"s": "abc"}  | true  | true  | false | false | false
2506  {"s": "ABc"}  | {"s": "abcd"} | true  | true  | false | false | false
2507  {"s": "ABc"}  | {"s": "b"}    | true  | true  | false | false | false
2508  {"s": "ABc"}  | {"s": "A"}    | false | false | false | true  | true
2509  {"s": "ABc"}  | {"s": "AB"}   | false | false | false | true  | true
2510  {"s": "ABc"}  | {"s": "ABC"}  | false | false | false | true  | true
2511  {"s": "ABc"}  | {"s": "ABc"}  | false | true  | true  | true  | false
2512  {"s": "ABc"}  | {"s": "ABcD"} | true  | true  | false | false | false
2513  {"s": "ABc"}  | {"s": "B"}    | true  | true  | false | false | false
2514  {"s": "ABcD"} | {"s": ""}     | false | false | false | true  | true
2515  {"s": "ABcD"} | {"s": "a"}    | true  | true  | false | false | false
2516  {"s": "ABcD"} | {"s": "ab"}   | true  | true  | false | false | false
2517  {"s": "ABcD"} | {"s": "abc"}  | true  | true  | false | false | false
2518  {"s": "ABcD"} | {"s": "abcd"} | true  | true  | false | false | false
2519  {"s": "ABcD"} | {"s": "b"}    | true  | true  | false | false | false
2520  {"s": "ABcD"} | {"s": "A"}    | false | false | false | true  | true
2521  {"s": "ABcD"} | {"s": "AB"}   | false | false | false | true  | true
2522  {"s": "ABcD"} | {"s": "ABC"}  | false | false | false | true  | true
2523  {"s": "ABcD"} | {"s": "ABc"}  | false | false | false | true  | true
2524  {"s": "ABcD"} | {"s": "ABcD"} | false | true  | true  | true  | false
2525  {"s": "ABcD"} | {"s": "B"}    | true  | true  | false | false | false
2526  {"s": "B"}    | {"s": ""}     | false | false | false | true  | true
2527  {"s": "B"}    | {"s": "a"}    | true  | true  | false | false | false
2528  {"s": "B"}    | {"s": "ab"}   | true  | true  | false | false | false
2529  {"s": "B"}    | {"s": "abc"}  | true  | true  | false | false | false
2530  {"s": "B"}    | {"s": "abcd"} | true  | true  | false | false | false
2531  {"s": "B"}    | {"s": "b"}    | true  | true  | false | false | false
2532  {"s": "B"}    | {"s": "A"}    | false | false | false | true  | true
2533  {"s": "B"}    | {"s": "AB"}   | false | false | false | true  | true
2534  {"s": "B"}    | {"s": "ABC"}  | false | false | false | true  | true
2535  {"s": "B"}    | {"s": "ABc"}  | false | false | false | true  | true
2536  {"s": "B"}    | {"s": "ABcD"} | false | false | false | true  | true
2537  {"s": "B"}    | {"s": "B"}    | false | true  | true  | true  | false
2538 (144 rows)