Support PG_UNICODE_FAST locale in the builtin collation provider.
[pgsql.git] / src / test / regress / expected / jsonb_jsonpath.out
blob4bcd4e91a2991426143891eda2ae9236d6610b48
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 -- any key on arrays with and without unwrapping.
1139 select jsonb_path_query('{"a": [1,2,3], "b": [3,4,5]}', '$.*');
1140  jsonb_path_query 
1141 ------------------
1142  [1, 2, 3]
1143  [3, 4, 5]
1144 (2 rows)
1146 select jsonb_path_query('[1,2,3]', '$.*');
1147  jsonb_path_query 
1148 ------------------
1149 (0 rows)
1151 select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'lax $.*');
1152  jsonb_path_query 
1153 ------------------
1154  [3, 4, 5]
1155 (1 row)
1157 select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'strict $.*');
1158 ERROR:  jsonpath wildcard member accessor can only be applied to an object
1159 select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'strict $.*', NULL, true);
1160  jsonb_path_query 
1161 ------------------
1162 (0 rows)
1164 select jsonb '{"a": [1,2,3], "b": [3,4,5]}' @? '$.*';
1165  ?column? 
1166 ----------
1168 (1 row)
1170 select jsonb '[1,2,3]' @? '$.*';
1171  ?column? 
1172 ----------
1174 (1 row)
1176 select jsonb '[1,2,3,{"b": [3,4,5]}]' @? 'lax $.*';
1177  ?column? 
1178 ----------
1180 (1 row)
1182 select jsonb '[1,2,3,{"b": [3,4,5]}]' @? 'strict $.*';
1183  ?column? 
1184 ----------
1186 (1 row)
1188 -- extension: boolean expressions
1189 select jsonb_path_query('2', '$ > 1');
1190  jsonb_path_query 
1191 ------------------
1192  true
1193 (1 row)
1195 select jsonb_path_query('2', '$ <= 1');
1196  jsonb_path_query 
1197 ------------------
1198  false
1199 (1 row)
1201 select jsonb_path_query('2', '$ == "2"');
1202  jsonb_path_query 
1203 ------------------
1204  null
1205 (1 row)
1207 select jsonb '2' @? '$ == "2"';
1208  ?column? 
1209 ----------
1211 (1 row)
1213 select jsonb '2' @@ '$ > 1';
1214  ?column? 
1215 ----------
1217 (1 row)
1219 select jsonb '2' @@ '$ <= 1';
1220  ?column? 
1221 ----------
1223 (1 row)
1225 select jsonb '2' @@ '$ == "2"';
1226  ?column? 
1227 ----------
1229 (1 row)
1231 select jsonb '2' @@ '1';
1232  ?column? 
1233 ----------
1235 (1 row)
1237 select jsonb '{}' @@ '$';
1238  ?column? 
1239 ----------
1241 (1 row)
1243 select jsonb '[]' @@ '$';
1244  ?column? 
1245 ----------
1247 (1 row)
1249 select jsonb '[1,2,3]' @@ '$[*]';
1250  ?column? 
1251 ----------
1253 (1 row)
1255 select jsonb '[]' @@ '$[*]';
1256  ?column? 
1257 ----------
1259 (1 row)
1261 select jsonb_path_match('[[1, true], [2, false]]', 'strict $[*] ? (@[0] > $x) [1]', '{"x": 1}');
1262  jsonb_path_match 
1263 ------------------
1265 (1 row)
1267 select jsonb_path_match('[[1, true], [2, false]]', 'strict $[*] ? (@[0] < $x) [1]', '{"x": 2}');
1268  jsonb_path_match 
1269 ------------------
1271 (1 row)
1273 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'lax exists($[*].a)', silent => false);
1274  jsonb_path_match 
1275 ------------------
1277 (1 row)
1279 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'lax exists($[*].a)', silent => true);
1280  jsonb_path_match 
1281 ------------------
1283 (1 row)
1285 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'strict exists($[*].a)', silent => false);
1286  jsonb_path_match 
1287 ------------------
1289 (1 row)
1291 select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'strict exists($[*].a)', silent => true);
1292  jsonb_path_match 
1293 ------------------
1295 (1 row)
1297 select jsonb_path_query('[null,1,true,"a",[],{}]', '$.type()');
1298  jsonb_path_query 
1299 ------------------
1300  "array"
1301 (1 row)
1303 select jsonb_path_query('[null,1,true,"a",[],{}]', 'lax $.type()');
1304  jsonb_path_query 
1305 ------------------
1306  "array"
1307 (1 row)
1309 select jsonb_path_query('[null,1,true,"a",[],{}]', '$[*].type()');
1310  jsonb_path_query 
1311 ------------------
1312  "null"
1313  "number"
1314  "boolean"
1315  "string"
1316  "array"
1317  "object"
1318 (6 rows)
1320 select jsonb_path_query('null', 'null.type()');
1321  jsonb_path_query 
1322 ------------------
1323  "null"
1324 (1 row)
1326 select jsonb_path_query('null', 'true.type()');
1327  jsonb_path_query 
1328 ------------------
1329  "boolean"
1330 (1 row)
1332 select jsonb_path_query('null', '(123).type()');
1333  jsonb_path_query 
1334 ------------------
1335  "number"
1336 (1 row)
1338 select jsonb_path_query('null', '"123".type()');
1339  jsonb_path_query 
1340 ------------------
1341  "string"
1342 (1 row)
1344 select jsonb_path_query('{"a": 2}', '($.a - 5).abs() + 10');
1345  jsonb_path_query 
1346 ------------------
1347  13
1348 (1 row)
1350 select jsonb_path_query('{"a": 2.5}', '-($.a * $.a).floor() % 4.3');
1351  jsonb_path_query 
1352 ------------------
1353  -1.7
1354 (1 row)
1356 select jsonb_path_query('[1, 2, 3]', '($[*] > 2) ? (@ == true)');
1357  jsonb_path_query 
1358 ------------------
1359  true
1360 (1 row)
1362 select jsonb_path_query('[1, 2, 3]', '($[*] > 3).type()');
1363  jsonb_path_query 
1364 ------------------
1365  "boolean"
1366 (1 row)
1368 select jsonb_path_query('[1, 2, 3]', '($[*].a > 3).type()');
1369  jsonb_path_query 
1370 ------------------
1371  "boolean"
1372 (1 row)
1374 select jsonb_path_query('[1, 2, 3]', 'strict ($[*].a > 3).type()');
1375  jsonb_path_query 
1376 ------------------
1377  "null"
1378 (1 row)
1380 select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'strict $[*].size()');
1381 ERROR:  jsonpath item method .size() can only be applied to an array
1382 select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'strict $[*].size()', silent => true);
1383  jsonb_path_query 
1384 ------------------
1385 (0 rows)
1387 select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'lax $[*].size()');
1388  jsonb_path_query 
1389 ------------------
1399 (9 rows)
1401 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].abs()');
1402  jsonb_path_query 
1403 ------------------
1407  3.4
1408  5.6
1409 (5 rows)
1411 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].floor()');
1412  jsonb_path_query 
1413 ------------------
1416  -2
1417  -4
1419 (5 rows)
1421 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling()');
1422  jsonb_path_query 
1423 ------------------
1426  -2
1427  -3
1429 (5 rows)
1431 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling().abs()');
1432  jsonb_path_query 
1433 ------------------
1439 (5 rows)
1441 select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling().abs().type()');
1442  jsonb_path_query 
1443 ------------------
1444  "number"
1445  "number"
1446  "number"
1447  "number"
1448  "number"
1449 (5 rows)
1451 select jsonb_path_query('[{},1]', '$[*].keyvalue()');
1452 ERROR:  jsonpath item method .keyvalue() can only be applied to an object
1453 select jsonb_path_query('[{},1]', '$[*].keyvalue()', silent => true);
1454  jsonb_path_query 
1455 ------------------
1456 (0 rows)
1458 select jsonb_path_query('{}', '$.keyvalue()');
1459  jsonb_path_query 
1460 ------------------
1461 (0 rows)
1463 select jsonb_path_query('{"a": 1, "b": [1, 2], "c": {"a": "bbb"}}', '$.keyvalue()');
1464                jsonb_path_query               
1465 ----------------------------------------------
1466  {"id": 0, "key": "a", "value": 1}
1467  {"id": 0, "key": "b", "value": [1, 2]}
1468  {"id": 0, "key": "c", "value": {"a": "bbb"}}
1469 (3 rows)
1471 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', '$[*].keyvalue()');
1472                jsonb_path_query                
1473 -----------------------------------------------
1474  {"id": 12, "key": "a", "value": 1}
1475  {"id": 12, "key": "b", "value": [1, 2]}
1476  {"id": 72, "key": "c", "value": {"a": "bbb"}}
1477 (3 rows)
1479 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'strict $.keyvalue()');
1480 ERROR:  jsonpath item method .keyvalue() can only be applied to an object
1481 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'lax $.keyvalue()');
1482                jsonb_path_query                
1483 -----------------------------------------------
1484  {"id": 12, "key": "a", "value": 1}
1485  {"id": 12, "key": "b", "value": [1, 2]}
1486  {"id": 72, "key": "c", "value": {"a": "bbb"}}
1487 (3 rows)
1489 select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'strict $.keyvalue().a');
1490 ERROR:  jsonpath item method .keyvalue() can only be applied to an object
1491 select jsonb '{"a": 1, "b": [1, 2]}' @? 'lax $.keyvalue()';
1492  ?column? 
1493 ----------
1495 (1 row)
1497 select jsonb '{"a": 1, "b": [1, 2]}' @? 'lax $.keyvalue().key';
1498  ?column? 
1499 ----------
1501 (1 row)
1503 select jsonb_path_query('null', '$.double()');
1504 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1505 select jsonb_path_query('true', '$.double()');
1506 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1507 select jsonb_path_query('null', '$.double()', silent => true);
1508  jsonb_path_query 
1509 ------------------
1510 (0 rows)
1512 select jsonb_path_query('true', '$.double()', silent => true);
1513  jsonb_path_query 
1514 ------------------
1515 (0 rows)
1517 select jsonb_path_query('[]', '$.double()');
1518  jsonb_path_query 
1519 ------------------
1520 (0 rows)
1522 select jsonb_path_query('[]', 'strict $.double()');
1523 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1524 select jsonb_path_query('{}', '$.double()');
1525 ERROR:  jsonpath item method .double() can only be applied to a string or numeric value
1526 select jsonb_path_query('[]', 'strict $.double()', silent => true);
1527  jsonb_path_query 
1528 ------------------
1529 (0 rows)
1531 select jsonb_path_query('{}', '$.double()', silent => true);
1532  jsonb_path_query 
1533 ------------------
1534 (0 rows)
1536 select jsonb_path_query('1.23', '$.double()');
1537  jsonb_path_query 
1538 ------------------
1539  1.23
1540 (1 row)
1542 select jsonb_path_query('"1.23"', '$.double()');
1543  jsonb_path_query 
1544 ------------------
1545  1.23
1546 (1 row)
1548 select jsonb_path_query('"1.23aaa"', '$.double()');
1549 ERROR:  argument "1.23aaa" of jsonpath item method .double() is invalid for type double precision
1550 select jsonb_path_query('1e1000', '$.double()');
1551 ERROR:  argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .double() is invalid for type double precision
1552 select jsonb_path_query('"nan"', '$.double()');
1553 ERROR:  NaN or Infinity is not allowed for jsonpath item method .double()
1554 select jsonb_path_query('"NaN"', '$.double()');
1555 ERROR:  NaN or Infinity is not allowed for jsonpath item method .double()
1556 select jsonb_path_query('"inf"', '$.double()');
1557 ERROR:  NaN or Infinity is not allowed for jsonpath item method .double()
1558 select jsonb_path_query('"-inf"', '$.double()');
1559 ERROR:  NaN or Infinity is not allowed for jsonpath item method .double()
1560 select jsonb_path_query('"inf"', '$.double()', silent => true);
1561  jsonb_path_query 
1562 ------------------
1563 (0 rows)
1565 select jsonb_path_query('"-inf"', '$.double()', silent => true);
1566  jsonb_path_query 
1567 ------------------
1568 (0 rows)
1570 select jsonb_path_query('{}', '$.abs()');
1571 ERROR:  jsonpath item method .abs() can only be applied to a numeric value
1572 select jsonb_path_query('true', '$.floor()');
1573 ERROR:  jsonpath item method .floor() can only be applied to a numeric value
1574 select jsonb_path_query('"1.2"', '$.ceiling()');
1575 ERROR:  jsonpath item method .ceiling() can only be applied to a numeric value
1576 select jsonb_path_query('{}', '$.abs()', silent => true);
1577  jsonb_path_query 
1578 ------------------
1579 (0 rows)
1581 select jsonb_path_query('true', '$.floor()', silent => true);
1582  jsonb_path_query 
1583 ------------------
1584 (0 rows)
1586 select jsonb_path_query('"1.2"', '$.ceiling()', silent => true);
1587  jsonb_path_query 
1588 ------------------
1589 (0 rows)
1591 select jsonb_path_query('["", "a", "abc", "abcabc"]', '$[*] ? (@ starts with "abc")');
1592  jsonb_path_query 
1593 ------------------
1594  "abc"
1595  "abcabc"
1596 (2 rows)
1598 select jsonb_path_query('["", "a", "abc", "abcabc"]', 'strict $ ? (@[*] starts with "abc")');
1599       jsonb_path_query      
1600 ----------------------------
1601  ["", "a", "abc", "abcabc"]
1602 (1 row)
1604 select jsonb_path_query('["", "a", "abd", "abdabc"]', 'strict $ ? (@[*] starts with "abc")');
1605  jsonb_path_query 
1606 ------------------
1607 (0 rows)
1609 select jsonb_path_query('["abc", "abcabc", null, 1]', 'strict $ ? (@[*] starts with "abc")');
1610  jsonb_path_query 
1611 ------------------
1612 (0 rows)
1614 select jsonb_path_query('["abc", "abcabc", null, 1]', 'strict $ ? ((@[*] starts with "abc") is unknown)');
1615       jsonb_path_query      
1616 ----------------------------
1617  ["abc", "abcabc", null, 1]
1618 (1 row)
1620 select jsonb_path_query('[[null, 1, "abc", "abcabc"]]', 'lax $ ? (@[*] starts with "abc")');
1621       jsonb_path_query      
1622 ----------------------------
1623  [null, 1, "abc", "abcabc"]
1624 (1 row)
1626 select jsonb_path_query('[[null, 1, "abd", "abdabc"]]', 'lax $ ? ((@[*] starts with "abc") is unknown)');
1627       jsonb_path_query      
1628 ----------------------------
1629  [null, 1, "abd", "abdabc"]
1630 (1 row)
1632 select jsonb_path_query('[null, 1, "abd", "abdabc"]', 'lax $[*] ? ((@ starts with "abc") is unknown)');
1633  jsonb_path_query 
1634 ------------------
1635  null
1637 (2 rows)
1639 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c")');
1640  jsonb_path_query 
1641 ------------------
1642  "abc"
1643  "abdacb"
1644 (2 rows)
1646 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "i")');
1647  jsonb_path_query 
1648 ------------------
1649  "abc"
1650  "aBdC"
1651  "abdacb"
1652 (3 rows)
1654 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "m")');
1655  jsonb_path_query 
1656 ------------------
1657  "abc"
1658  "abdacb"
1659  "adc\nabc"
1660 (3 rows)
1662 select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "s")');
1663  jsonb_path_query 
1664 ------------------
1665  "abc"
1666  "abdacb"
1667  "ab\nadc"
1668 (3 rows)
1670 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "q")');
1671  jsonb_path_query 
1672 ------------------
1673  "a\\b"
1674  "^a\\b$"
1675 (2 rows)
1677 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "")');
1678  jsonb_path_query 
1679 ------------------
1680  "a\b"
1681 (1 row)
1683 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "q")');
1684  jsonb_path_query 
1685 ------------------
1686  "^a\\b$"
1687 (1 row)
1689 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "q")');
1690  jsonb_path_query 
1691 ------------------
1692 (0 rows)
1694 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "iq")');
1695  jsonb_path_query 
1696 ------------------
1697  "^a\\b$"
1698 (1 row)
1700 select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "")');
1701  jsonb_path_query 
1702 ------------------
1703  "a\b"
1704 (1 row)
1706 select jsonb_path_query('null', '$.datetime()');
1707 ERROR:  jsonpath item method .datetime() can only be applied to a string
1708 select jsonb_path_query('true', '$.datetime()');
1709 ERROR:  jsonpath item method .datetime() can only be applied to a string
1710 select jsonb_path_query('1', '$.datetime()');
1711 ERROR:  jsonpath item method .datetime() can only be applied to a string
1712 select jsonb_path_query('[]', '$.datetime()');
1713  jsonb_path_query 
1714 ------------------
1715 (0 rows)
1717 select jsonb_path_query('[]', 'strict $.datetime()');
1718 ERROR:  jsonpath item method .datetime() can only be applied to a string
1719 select jsonb_path_query('{}', '$.datetime()');
1720 ERROR:  jsonpath item method .datetime() can only be applied to a string
1721 select jsonb_path_query('"bogus"', '$.datetime()');
1722 ERROR:  datetime format is not recognized: "bogus"
1723 HINT:  Use a datetime template argument to specify the input data format.
1724 select jsonb_path_query('"12:34"', '$.datetime("aaa")');
1725 ERROR:  invalid datetime format separator: "a"
1726 select jsonb_path_query('"aaaa"', '$.datetime("HH24")');
1727 ERROR:  invalid value "aa" for "HH24"
1728 DETAIL:  Value must be an integer.
1729 select jsonb '"10-03-2017"' @? '$.datetime("dd-mm-yyyy")';
1730  ?column? 
1731 ----------
1733 (1 row)
1735 select jsonb_path_query('"10-03-2017"', '$.datetime("dd-mm-yyyy")');
1736  jsonb_path_query 
1737 ------------------
1738  "2017-03-10"
1739 (1 row)
1741 select jsonb_path_query('"10-03-2017"', '$.datetime("dd-mm-yyyy").type()');
1742  jsonb_path_query 
1743 ------------------
1744  "date"
1745 (1 row)
1747 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy")');
1748 ERROR:  trailing characters remain in input string after datetime format
1749 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy").type()');
1750 ERROR:  trailing characters remain in input string after datetime format
1751 select jsonb_path_query('"10-03-2017 12:34"', '       $.datetime("dd-mm-yyyy HH24:MI").type()');
1752        jsonb_path_query        
1753 -------------------------------
1754  "timestamp without time zone"
1755 (1 row)
1757 select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM").type()');
1758       jsonb_path_query      
1759 ----------------------------
1760  "timestamp with time zone"
1761 (1 row)
1763 select jsonb_path_query('"12:34:56"', '$.datetime("HH24:MI:SS").type()');
1764      jsonb_path_query     
1765 --------------------------
1766  "time without time zone"
1767 (1 row)
1769 select jsonb_path_query('"12:34:56 +05:20"', '$.datetime("HH24:MI:SS TZH:TZM").type()');
1770    jsonb_path_query    
1771 -----------------------
1772  "time with time zone"
1773 (1 row)
1775 select jsonb_path_query('"10-03-2017T12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
1776    jsonb_path_query    
1777 -----------------------
1778  "2017-03-10T12:34:56"
1779 (1 row)
1781 select jsonb_path_query('"10-03-2017t12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
1782 ERROR:  unmatched format character "T"
1783 select jsonb_path_query('"10-03-2017 12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
1784 ERROR:  unmatched format character "T"
1785 -- Test .bigint()
1786 select jsonb_path_query('null', '$.bigint()');
1787 ERROR:  jsonpath item method .bigint() can only be applied to a string or numeric value
1788 select jsonb_path_query('true', '$.bigint()');
1789 ERROR:  jsonpath item method .bigint() can only be applied to a string or numeric value
1790 select jsonb_path_query('null', '$.bigint()', silent => true);
1791  jsonb_path_query 
1792 ------------------
1793 (0 rows)
1795 select jsonb_path_query('true', '$.bigint()', silent => true);
1796  jsonb_path_query 
1797 ------------------
1798 (0 rows)
1800 select jsonb_path_query('[]', '$.bigint()');
1801  jsonb_path_query 
1802 ------------------
1803 (0 rows)
1805 select jsonb_path_query('[]', 'strict $.bigint()');
1806 ERROR:  jsonpath item method .bigint() can only be applied to a string or numeric value
1807 select jsonb_path_query('{}', '$.bigint()');
1808 ERROR:  jsonpath item method .bigint() can only be applied to a string or numeric value
1809 select jsonb_path_query('[]', 'strict $.bigint()', silent => true);
1810  jsonb_path_query 
1811 ------------------
1812 (0 rows)
1814 select jsonb_path_query('{}', '$.bigint()', silent => true);
1815  jsonb_path_query 
1816 ------------------
1817 (0 rows)
1819 select jsonb_path_query('"1.23"', '$.bigint()');
1820 ERROR:  argument "1.23" of jsonpath item method .bigint() is invalid for type bigint
1821 select jsonb_path_query('"1.23aaa"', '$.bigint()');
1822 ERROR:  argument "1.23aaa" of jsonpath item method .bigint() is invalid for type bigint
1823 select jsonb_path_query('1e1000', '$.bigint()');
1824 ERROR:  argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .bigint() is invalid for type bigint
1825 select jsonb_path_query('"nan"', '$.bigint()');
1826 ERROR:  argument "nan" of jsonpath item method .bigint() is invalid for type bigint
1827 select jsonb_path_query('"NaN"', '$.bigint()');
1828 ERROR:  argument "NaN" of jsonpath item method .bigint() is invalid for type bigint
1829 select jsonb_path_query('"inf"', '$.bigint()');
1830 ERROR:  argument "inf" of jsonpath item method .bigint() is invalid for type bigint
1831 select jsonb_path_query('"-inf"', '$.bigint()');
1832 ERROR:  argument "-inf" of jsonpath item method .bigint() is invalid for type bigint
1833 select jsonb_path_query('"inf"', '$.bigint()', silent => true);
1834  jsonb_path_query 
1835 ------------------
1836 (0 rows)
1838 select jsonb_path_query('"-inf"', '$.bigint()', silent => true);
1839  jsonb_path_query 
1840 ------------------
1841 (0 rows)
1843 select jsonb_path_query('123', '$.bigint()');
1844  jsonb_path_query 
1845 ------------------
1846  123
1847 (1 row)
1849 select jsonb_path_query('"123"', '$.bigint()');
1850  jsonb_path_query 
1851 ------------------
1852  123
1853 (1 row)
1855 select jsonb_path_query('1.23', '$.bigint()');
1856  jsonb_path_query 
1857 ------------------
1859 (1 row)
1861 select jsonb_path_query('1.83', '$.bigint()');
1862  jsonb_path_query 
1863 ------------------
1865 (1 row)
1867 select jsonb_path_query('1234567890123', '$.bigint()');
1868  jsonb_path_query 
1869 ------------------
1870  1234567890123
1871 (1 row)
1873 select jsonb_path_query('"1234567890123"', '$.bigint()');
1874  jsonb_path_query 
1875 ------------------
1876  1234567890123
1877 (1 row)
1879 select jsonb_path_query('12345678901234567890', '$.bigint()');
1880 ERROR:  argument "12345678901234567890" of jsonpath item method .bigint() is invalid for type bigint
1881 select jsonb_path_query('"12345678901234567890"', '$.bigint()');
1882 ERROR:  argument "12345678901234567890" of jsonpath item method .bigint() is invalid for type bigint
1883 select jsonb_path_query('"+123"', '$.bigint()');
1884  jsonb_path_query 
1885 ------------------
1886  123
1887 (1 row)
1889 select jsonb_path_query('-123', '$.bigint()');
1890  jsonb_path_query 
1891 ------------------
1892  -123
1893 (1 row)
1895 select jsonb_path_query('"-123"', '$.bigint()');
1896  jsonb_path_query 
1897 ------------------
1898  -123
1899 (1 row)
1901 select jsonb_path_query('123', '$.bigint() * 2');
1902  jsonb_path_query 
1903 ------------------
1904  246
1905 (1 row)
1907 -- Test .boolean()
1908 select jsonb_path_query('null', '$.boolean()');
1909 ERROR:  jsonpath item method .boolean() can only be applied to a boolean, string, or numeric value
1910 select jsonb_path_query('null', '$.boolean()', silent => true);
1911  jsonb_path_query 
1912 ------------------
1913 (0 rows)
1915 select jsonb_path_query('[]', '$.boolean()');
1916  jsonb_path_query 
1917 ------------------
1918 (0 rows)
1920 select jsonb_path_query('[]', 'strict $.boolean()');
1921 ERROR:  jsonpath item method .boolean() can only be applied to a boolean, string, or numeric value
1922 select jsonb_path_query('{}', '$.boolean()');
1923 ERROR:  jsonpath item method .boolean() can only be applied to a boolean, string, or numeric value
1924 select jsonb_path_query('[]', 'strict $.boolean()', silent => true);
1925  jsonb_path_query 
1926 ------------------
1927 (0 rows)
1929 select jsonb_path_query('{}', '$.boolean()', silent => true);
1930  jsonb_path_query 
1931 ------------------
1932 (0 rows)
1934 select jsonb_path_query('1.23', '$.boolean()');
1935 ERROR:  argument "1.23" of jsonpath item method .boolean() is invalid for type boolean
1936 select jsonb_path_query('"1.23"', '$.boolean()');
1937 ERROR:  argument "1.23" of jsonpath item method .boolean() is invalid for type boolean
1938 select jsonb_path_query('"1.23aaa"', '$.boolean()');
1939 ERROR:  argument "1.23aaa" of jsonpath item method .boolean() is invalid for type boolean
1940 select jsonb_path_query('1e1000', '$.boolean()');
1941 ERROR:  argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .boolean() is invalid for type boolean
1942 select jsonb_path_query('"nan"', '$.boolean()');
1943 ERROR:  argument "nan" of jsonpath item method .boolean() is invalid for type boolean
1944 select jsonb_path_query('"NaN"', '$.boolean()');
1945 ERROR:  argument "NaN" of jsonpath item method .boolean() is invalid for type boolean
1946 select jsonb_path_query('"inf"', '$.boolean()');
1947 ERROR:  argument "inf" of jsonpath item method .boolean() is invalid for type boolean
1948 select jsonb_path_query('"-inf"', '$.boolean()');
1949 ERROR:  argument "-inf" of jsonpath item method .boolean() is invalid for type boolean
1950 select jsonb_path_query('"inf"', '$.boolean()', silent => true);
1951  jsonb_path_query 
1952 ------------------
1953 (0 rows)
1955 select jsonb_path_query('"-inf"', '$.boolean()', silent => true);
1956  jsonb_path_query 
1957 ------------------
1958 (0 rows)
1960 select jsonb_path_query('"100"', '$.boolean()');
1961 ERROR:  argument "100" of jsonpath item method .boolean() is invalid for type boolean
1962 select jsonb_path_query('true', '$.boolean()');
1963  jsonb_path_query 
1964 ------------------
1965  true
1966 (1 row)
1968 select jsonb_path_query('false', '$.boolean()');
1969  jsonb_path_query 
1970 ------------------
1971  false
1972 (1 row)
1974 select jsonb_path_query('1', '$.boolean()');
1975  jsonb_path_query 
1976 ------------------
1977  true
1978 (1 row)
1980 select jsonb_path_query('0', '$.boolean()');
1981  jsonb_path_query 
1982 ------------------
1983  false
1984 (1 row)
1986 select jsonb_path_query('-1', '$.boolean()');
1987  jsonb_path_query 
1988 ------------------
1989  true
1990 (1 row)
1992 select jsonb_path_query('100', '$.boolean()');
1993  jsonb_path_query 
1994 ------------------
1995  true
1996 (1 row)
1998 select jsonb_path_query('"1"', '$.boolean()');
1999  jsonb_path_query 
2000 ------------------
2001  true
2002 (1 row)
2004 select jsonb_path_query('"0"', '$.boolean()');
2005  jsonb_path_query 
2006 ------------------
2007  false
2008 (1 row)
2010 select jsonb_path_query('"true"', '$.boolean()');
2011  jsonb_path_query 
2012 ------------------
2013  true
2014 (1 row)
2016 select jsonb_path_query('"false"', '$.boolean()');
2017  jsonb_path_query 
2018 ------------------
2019  false
2020 (1 row)
2022 select jsonb_path_query('"TRUE"', '$.boolean()');
2023  jsonb_path_query 
2024 ------------------
2025  true
2026 (1 row)
2028 select jsonb_path_query('"FALSE"', '$.boolean()');
2029  jsonb_path_query 
2030 ------------------
2031  false
2032 (1 row)
2034 select jsonb_path_query('"yes"', '$.boolean()');
2035  jsonb_path_query 
2036 ------------------
2037  true
2038 (1 row)
2040 select jsonb_path_query('"NO"', '$.boolean()');
2041  jsonb_path_query 
2042 ------------------
2043  false
2044 (1 row)
2046 select jsonb_path_query('"T"', '$.boolean()');
2047  jsonb_path_query 
2048 ------------------
2049  true
2050 (1 row)
2052 select jsonb_path_query('"f"', '$.boolean()');
2053  jsonb_path_query 
2054 ------------------
2055  false
2056 (1 row)
2058 select jsonb_path_query('"y"', '$.boolean()');
2059  jsonb_path_query 
2060 ------------------
2061  true
2062 (1 row)
2064 select jsonb_path_query('"N"', '$.boolean()');
2065  jsonb_path_query 
2066 ------------------
2067  false
2068 (1 row)
2070 select jsonb_path_query('true', '$.boolean().type()');
2071  jsonb_path_query 
2072 ------------------
2073  "boolean"
2074 (1 row)
2076 select jsonb_path_query('123', '$.boolean().type()');
2077  jsonb_path_query 
2078 ------------------
2079  "boolean"
2080 (1 row)
2082 select jsonb_path_query('"Yes"', '$.boolean().type()');
2083  jsonb_path_query 
2084 ------------------
2085  "boolean"
2086 (1 row)
2088 select jsonb_path_query_array('[1, "yes", false]', '$[*].boolean()');
2089  jsonb_path_query_array 
2090 ------------------------
2091  [true, true, false]
2092 (1 row)
2094 -- Test .date()
2095 select jsonb_path_query('null', '$.date()');
2096 ERROR:  jsonpath item method .date() can only be applied to a string
2097 select jsonb_path_query('true', '$.date()');
2098 ERROR:  jsonpath item method .date() can only be applied to a string
2099 select jsonb_path_query('1', '$.date()');
2100 ERROR:  jsonpath item method .date() can only be applied to a string
2101 select jsonb_path_query('[]', '$.date()');
2102  jsonb_path_query 
2103 ------------------
2104 (0 rows)
2106 select jsonb_path_query('[]', 'strict $.date()');
2107 ERROR:  jsonpath item method .date() can only be applied to a string
2108 select jsonb_path_query('{}', '$.date()');
2109 ERROR:  jsonpath item method .date() can only be applied to a string
2110 select jsonb_path_query('"bogus"', '$.date()');
2111 ERROR:  date format is not recognized: "bogus"
2112 select jsonb '"2023-08-15"' @? '$.date()';
2113  ?column? 
2114 ----------
2116 (1 row)
2118 select jsonb_path_query('"2023-08-15"', '$.date()');
2119  jsonb_path_query 
2120 ------------------
2121  "2023-08-15"
2122 (1 row)
2124 select jsonb_path_query('"2023-08-15"', '$.date().type()');
2125  jsonb_path_query 
2126 ------------------
2127  "date"
2128 (1 row)
2130 select jsonb_path_query('"12:34:56"', '$.date()');
2131 ERROR:  date format is not recognized: "12:34:56"
2132 select jsonb_path_query('"12:34:56 +05:30"', '$.date()');
2133 ERROR:  date format is not recognized: "12:34:56 +05:30"
2134 select jsonb_path_query('"2023-08-15 12:34:56"', '$.date()');
2135  jsonb_path_query 
2136 ------------------
2137  "2023-08-15"
2138 (1 row)
2140 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.date()');
2141 ERROR:  cannot convert value from timestamptz to date without time zone usage
2142 HINT:  Use *_tz() function for time zone support.
2143 select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.date()'); -- should work
2144  jsonb_path_query_tz 
2145 ---------------------
2146  "2023-08-15"
2147 (1 row)
2149 select jsonb_path_query('"2023-08-15"', '$.date(2)');
2150 ERROR:  syntax error at or near "2" of jsonpath input
2151 LINE 1: select jsonb_path_query('"2023-08-15"', '$.date(2)');
2152                                                 ^
2153 -- Test .decimal()
2154 select jsonb_path_query('null', '$.decimal()');
2155 ERROR:  jsonpath item method .decimal() can only be applied to a string or numeric value
2156 select jsonb_path_query('true', '$.decimal()');
2157 ERROR:  jsonpath item method .decimal() can only be applied to a string or numeric value
2158 select jsonb_path_query('null', '$.decimal()', silent => true);
2159  jsonb_path_query 
2160 ------------------
2161 (0 rows)
2163 select jsonb_path_query('true', '$.decimal()', silent => true);
2164  jsonb_path_query 
2165 ------------------
2166 (0 rows)
2168 select jsonb_path_query('[]', '$.decimal()');
2169  jsonb_path_query 
2170 ------------------
2171 (0 rows)
2173 select jsonb_path_query('[]', 'strict $.decimal()');
2174 ERROR:  jsonpath item method .decimal() can only be applied to a string or numeric value
2175 select jsonb_path_query('{}', '$.decimal()');
2176 ERROR:  jsonpath item method .decimal() can only be applied to a string or numeric value
2177 select jsonb_path_query('[]', 'strict $.decimal()', silent => true);
2178  jsonb_path_query 
2179 ------------------
2180 (0 rows)
2182 select jsonb_path_query('{}', '$.decimal()', silent => true);
2183  jsonb_path_query 
2184 ------------------
2185 (0 rows)
2187 select jsonb_path_query('1.23', '$.decimal()');
2188  jsonb_path_query 
2189 ------------------
2190  1.23
2191 (1 row)
2193 select jsonb_path_query('"1.23"', '$.decimal()');
2194  jsonb_path_query 
2195 ------------------
2196  1.23
2197 (1 row)
2199 select jsonb_path_query('"1.23aaa"', '$.decimal()');
2200 ERROR:  argument "1.23aaa" of jsonpath item method .decimal() is invalid for type numeric
2201 select jsonb_path_query('1e1000', '$.decimal()');
2202                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              jsonb_path_query                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
2203 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2204  10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2205 (1 row)
2207 select jsonb_path_query('"nan"', '$.decimal()');
2208 ERROR:  NaN or Infinity is not allowed for jsonpath item method .decimal()
2209 select jsonb_path_query('"NaN"', '$.decimal()');
2210 ERROR:  NaN or Infinity is not allowed for jsonpath item method .decimal()
2211 select jsonb_path_query('"inf"', '$.decimal()');
2212 ERROR:  NaN or Infinity is not allowed for jsonpath item method .decimal()
2213 select jsonb_path_query('"-inf"', '$.decimal()');
2214 ERROR:  NaN or Infinity is not allowed for jsonpath item method .decimal()
2215 select jsonb_path_query('"inf"', '$.decimal()', silent => true);
2216  jsonb_path_query 
2217 ------------------
2218 (0 rows)
2220 select jsonb_path_query('"-inf"', '$.decimal()', silent => true);
2221  jsonb_path_query 
2222 ------------------
2223 (0 rows)
2225 select jsonb_path_query('123', '$.decimal()');
2226  jsonb_path_query 
2227 ------------------
2228  123
2229 (1 row)
2231 select jsonb_path_query('"123"', '$.decimal()');
2232  jsonb_path_query 
2233 ------------------
2234  123
2235 (1 row)
2237 select jsonb_path_query('12345678901234567890', '$.decimal()');
2238    jsonb_path_query   
2239 ----------------------
2240  12345678901234567890
2241 (1 row)
2243 select jsonb_path_query('"12345678901234567890"', '$.decimal()');
2244    jsonb_path_query   
2245 ----------------------
2246  12345678901234567890
2247 (1 row)
2249 select jsonb_path_query('"+12.3"', '$.decimal()');
2250  jsonb_path_query 
2251 ------------------
2252  12.3
2253 (1 row)
2255 select jsonb_path_query('-12.3', '$.decimal()');
2256  jsonb_path_query 
2257 ------------------
2258  -12.3
2259 (1 row)
2261 select jsonb_path_query('"-12.3"', '$.decimal()');
2262  jsonb_path_query 
2263 ------------------
2264  -12.3
2265 (1 row)
2267 select jsonb_path_query('12.3', '$.decimal() * 2');
2268  jsonb_path_query 
2269 ------------------
2270  24.6
2271 (1 row)
2273 select jsonb_path_query('12345.678', '$.decimal(6, 1)');
2274  jsonb_path_query 
2275 ------------------
2276  12345.7
2277 (1 row)
2279 select jsonb_path_query('12345.678', '$.decimal(6, 2)');
2280 ERROR:  argument "12345.678" of jsonpath item method .decimal() is invalid for type numeric
2281 select jsonb_path_query('1234.5678', '$.decimal(6, 2)');
2282  jsonb_path_query 
2283 ------------------
2284  1234.57
2285 (1 row)
2287 select jsonb_path_query('12345.678', '$.decimal(4, 6)');
2288 ERROR:  argument "12345.678" of jsonpath item method .decimal() is invalid for type numeric
2289 select jsonb_path_query('12345.678', '$.decimal(0, 6)');
2290 ERROR:  NUMERIC precision 0 must be between 1 and 1000
2291 select jsonb_path_query('12345.678', '$.decimal(1001, 6)');
2292 ERROR:  NUMERIC precision 1001 must be between 1 and 1000
2293 select jsonb_path_query('1234.5678', '$.decimal(+6, +2)');
2294  jsonb_path_query 
2295 ------------------
2296  1234.57
2297 (1 row)
2299 select jsonb_path_query('1234.5678', '$.decimal(+6, -2)');
2300  jsonb_path_query 
2301 ------------------
2302  1200
2303 (1 row)
2305 select jsonb_path_query('1234.5678', '$.decimal(-6, +2)');
2306 ERROR:  NUMERIC precision -6 must be between 1 and 1000
2307 select jsonb_path_query('1234.5678', '$.decimal(6, -1001)');
2308 ERROR:  NUMERIC scale -1001 must be between -1000 and 1000
2309 select jsonb_path_query('1234.5678', '$.decimal(6, 1001)');
2310 ERROR:  NUMERIC scale 1001 must be between -1000 and 1000
2311 select jsonb_path_query('-1234.5678', '$.decimal(+6, -2)');
2312  jsonb_path_query 
2313 ------------------
2314  -1200
2315 (1 row)
2317 select jsonb_path_query('0.0123456', '$.decimal(1,2)');
2318  jsonb_path_query 
2319 ------------------
2320  0.01
2321 (1 row)
2323 select jsonb_path_query('0.0012345', '$.decimal(2,4)');
2324  jsonb_path_query 
2325 ------------------
2326  0.0012
2327 (1 row)
2329 select jsonb_path_query('-0.00123456', '$.decimal(2,-4)');
2330  jsonb_path_query 
2331 ------------------
2333 (1 row)
2335 select jsonb_path_query('12.3', '$.decimal(12345678901,1)');
2336 ERROR:  precision of jsonpath item method .decimal() is out of range for type integer
2337 select jsonb_path_query('12.3', '$.decimal(1,12345678901)');
2338 ERROR:  scale of jsonpath item method .decimal() is out of range for type integer
2339 -- Test .integer()
2340 select jsonb_path_query('null', '$.integer()');
2341 ERROR:  jsonpath item method .integer() can only be applied to a string or numeric value
2342 select jsonb_path_query('true', '$.integer()');
2343 ERROR:  jsonpath item method .integer() can only be applied to a string or numeric value
2344 select jsonb_path_query('null', '$.integer()', silent => true);
2345  jsonb_path_query 
2346 ------------------
2347 (0 rows)
2349 select jsonb_path_query('true', '$.integer()', silent => true);
2350  jsonb_path_query 
2351 ------------------
2352 (0 rows)
2354 select jsonb_path_query('[]', '$.integer()');
2355  jsonb_path_query 
2356 ------------------
2357 (0 rows)
2359 select jsonb_path_query('[]', 'strict $.integer()');
2360 ERROR:  jsonpath item method .integer() can only be applied to a string or numeric value
2361 select jsonb_path_query('{}', '$.integer()');
2362 ERROR:  jsonpath item method .integer() can only be applied to a string or numeric value
2363 select jsonb_path_query('[]', 'strict $.integer()', silent => true);
2364  jsonb_path_query 
2365 ------------------
2366 (0 rows)
2368 select jsonb_path_query('{}', '$.integer()', silent => true);
2369  jsonb_path_query 
2370 ------------------
2371 (0 rows)
2373 select jsonb_path_query('"1.23"', '$.integer()');
2374 ERROR:  argument "1.23" of jsonpath item method .integer() is invalid for type integer
2375 select jsonb_path_query('"1.23aaa"', '$.integer()');
2376 ERROR:  argument "1.23aaa" of jsonpath item method .integer() is invalid for type integer
2377 select jsonb_path_query('1e1000', '$.integer()');
2378 ERROR:  argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .integer() is invalid for type integer
2379 select jsonb_path_query('"nan"', '$.integer()');
2380 ERROR:  argument "nan" of jsonpath item method .integer() is invalid for type integer
2381 select jsonb_path_query('"NaN"', '$.integer()');
2382 ERROR:  argument "NaN" of jsonpath item method .integer() is invalid for type integer
2383 select jsonb_path_query('"inf"', '$.integer()');
2384 ERROR:  argument "inf" of jsonpath item method .integer() is invalid for type integer
2385 select jsonb_path_query('"-inf"', '$.integer()');
2386 ERROR:  argument "-inf" of jsonpath item method .integer() is invalid for type integer
2387 select jsonb_path_query('"inf"', '$.integer()', silent => true);
2388  jsonb_path_query 
2389 ------------------
2390 (0 rows)
2392 select jsonb_path_query('"-inf"', '$.integer()', silent => true);
2393  jsonb_path_query 
2394 ------------------
2395 (0 rows)
2397 select jsonb_path_query('123', '$.integer()');
2398  jsonb_path_query 
2399 ------------------
2400  123
2401 (1 row)
2403 select jsonb_path_query('"123"', '$.integer()');
2404  jsonb_path_query 
2405 ------------------
2406  123
2407 (1 row)
2409 select jsonb_path_query('1.23', '$.integer()');
2410  jsonb_path_query 
2411 ------------------
2413 (1 row)
2415 select jsonb_path_query('1.83', '$.integer()');
2416  jsonb_path_query 
2417 ------------------
2419 (1 row)
2421 select jsonb_path_query('12345678901', '$.integer()');
2422 ERROR:  argument "12345678901" of jsonpath item method .integer() is invalid for type integer
2423 select jsonb_path_query('"12345678901"', '$.integer()');
2424 ERROR:  argument "12345678901" of jsonpath item method .integer() is invalid for type integer
2425 select jsonb_path_query('"+123"', '$.integer()');
2426  jsonb_path_query 
2427 ------------------
2428  123
2429 (1 row)
2431 select jsonb_path_query('-123', '$.integer()');
2432  jsonb_path_query 
2433 ------------------
2434  -123
2435 (1 row)
2437 select jsonb_path_query('"-123"', '$.integer()');
2438  jsonb_path_query 
2439 ------------------
2440  -123
2441 (1 row)
2443 select jsonb_path_query('123', '$.integer() * 2');
2444  jsonb_path_query 
2445 ------------------
2446  246
2447 (1 row)
2449 -- Test .number()
2450 select jsonb_path_query('null', '$.number()');
2451 ERROR:  jsonpath item method .number() can only be applied to a string or numeric value
2452 select jsonb_path_query('true', '$.number()');
2453 ERROR:  jsonpath item method .number() can only be applied to a string or numeric value
2454 select jsonb_path_query('null', '$.number()', silent => true);
2455  jsonb_path_query 
2456 ------------------
2457 (0 rows)
2459 select jsonb_path_query('true', '$.number()', silent => true);
2460  jsonb_path_query 
2461 ------------------
2462 (0 rows)
2464 select jsonb_path_query('[]', '$.number()');
2465  jsonb_path_query 
2466 ------------------
2467 (0 rows)
2469 select jsonb_path_query('[]', 'strict $.number()');
2470 ERROR:  jsonpath item method .number() can only be applied to a string or numeric value
2471 select jsonb_path_query('{}', '$.number()');
2472 ERROR:  jsonpath item method .number() can only be applied to a string or numeric value
2473 select jsonb_path_query('[]', 'strict $.number()', silent => true);
2474  jsonb_path_query 
2475 ------------------
2476 (0 rows)
2478 select jsonb_path_query('{}', '$.number()', silent => true);
2479  jsonb_path_query 
2480 ------------------
2481 (0 rows)
2483 select jsonb_path_query('1.23', '$.number()');
2484  jsonb_path_query 
2485 ------------------
2486  1.23
2487 (1 row)
2489 select jsonb_path_query('"1.23"', '$.number()');
2490  jsonb_path_query 
2491 ------------------
2492  1.23
2493 (1 row)
2495 select jsonb_path_query('"1.23aaa"', '$.number()');
2496 ERROR:  argument "1.23aaa" of jsonpath item method .number() is invalid for type numeric
2497 select jsonb_path_query('1e1000', '$.number()');
2498                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              jsonb_path_query                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
2499 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2500  10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2501 (1 row)
2503 select jsonb_path_query('"nan"', '$.number()');
2504 ERROR:  NaN or Infinity is not allowed for jsonpath item method .number()
2505 select jsonb_path_query('"NaN"', '$.number()');
2506 ERROR:  NaN or Infinity is not allowed for jsonpath item method .number()
2507 select jsonb_path_query('"inf"', '$.number()');
2508 ERROR:  NaN or Infinity is not allowed for jsonpath item method .number()
2509 select jsonb_path_query('"-inf"', '$.number()');
2510 ERROR:  NaN or Infinity is not allowed for jsonpath item method .number()
2511 select jsonb_path_query('"inf"', '$.number()', silent => true);
2512  jsonb_path_query 
2513 ------------------
2514 (0 rows)
2516 select jsonb_path_query('"-inf"', '$.number()', silent => true);
2517  jsonb_path_query 
2518 ------------------
2519 (0 rows)
2521 select jsonb_path_query('123', '$.number()');
2522  jsonb_path_query 
2523 ------------------
2524  123
2525 (1 row)
2527 select jsonb_path_query('"123"', '$.number()');
2528  jsonb_path_query 
2529 ------------------
2530  123
2531 (1 row)
2533 select jsonb_path_query('12345678901234567890', '$.number()');
2534    jsonb_path_query   
2535 ----------------------
2536  12345678901234567890
2537 (1 row)
2539 select jsonb_path_query('"12345678901234567890"', '$.number()');
2540    jsonb_path_query   
2541 ----------------------
2542  12345678901234567890
2543 (1 row)
2545 select jsonb_path_query('"+12.3"', '$.number()');
2546  jsonb_path_query 
2547 ------------------
2548  12.3
2549 (1 row)
2551 select jsonb_path_query('-12.3', '$.number()');
2552  jsonb_path_query 
2553 ------------------
2554  -12.3
2555 (1 row)
2557 select jsonb_path_query('"-12.3"', '$.number()');
2558  jsonb_path_query 
2559 ------------------
2560  -12.3
2561 (1 row)
2563 select jsonb_path_query('12.3', '$.number() * 2');
2564  jsonb_path_query 
2565 ------------------
2566  24.6
2567 (1 row)
2569 -- Test .string()
2570 select jsonb_path_query('null', '$.string()');
2571 ERROR:  jsonpath item method .string() can only be applied to a boolean, string, numeric, or datetime value
2572 select jsonb_path_query('null', '$.string()', silent => true);
2573  jsonb_path_query 
2574 ------------------
2575 (0 rows)
2577 select jsonb_path_query('[]', '$.string()');
2578  jsonb_path_query 
2579 ------------------
2580 (0 rows)
2582 select jsonb_path_query('[]', 'strict $.string()');
2583 ERROR:  jsonpath item method .string() can only be applied to a boolean, string, numeric, or datetime value
2584 select jsonb_path_query('{}', '$.string()');
2585 ERROR:  jsonpath item method .string() can only be applied to a boolean, string, numeric, or datetime value
2586 select jsonb_path_query('[]', 'strict $.string()', silent => true);
2587  jsonb_path_query 
2588 ------------------
2589 (0 rows)
2591 select jsonb_path_query('{}', '$.string()', silent => true);
2592  jsonb_path_query 
2593 ------------------
2594 (0 rows)
2596 select jsonb_path_query('1.23', '$.string()');
2597  jsonb_path_query 
2598 ------------------
2599  "1.23"
2600 (1 row)
2602 select jsonb_path_query('"1.23"', '$.string()');
2603  jsonb_path_query 
2604 ------------------
2605  "1.23"
2606 (1 row)
2608 select jsonb_path_query('"1.23aaa"', '$.string()');
2609  jsonb_path_query 
2610 ------------------
2611  "1.23aaa"
2612 (1 row)
2614 select jsonb_path_query('1234', '$.string()');
2615  jsonb_path_query 
2616 ------------------
2617  "1234"
2618 (1 row)
2620 select jsonb_path_query('true', '$.string()');
2621  jsonb_path_query 
2622 ------------------
2623  "true"
2624 (1 row)
2626 select jsonb_path_query('1234', '$.string().type()');
2627  jsonb_path_query 
2628 ------------------
2629  "string"
2630 (1 row)
2632 select jsonb_path_query('[2, true]', '$.string()');
2633  jsonb_path_query 
2634 ------------------
2635  "2"
2636  "true"
2637 (2 rows)
2639 select jsonb_path_query_array('[1.23, "yes", false]', '$[*].string()');
2640   jsonb_path_query_array  
2641 --------------------------
2642  ["1.23", "yes", "false"]
2643 (1 row)
2645 select jsonb_path_query_array('[1.23, "yes", false]', '$[*].string().type()');
2646      jsonb_path_query_array     
2647 --------------------------------
2648  ["string", "string", "string"]
2649 (1 row)
2651 select jsonb_path_query('"2023-08-15 12:34:56 +5:30"', '$.timestamp().string()');
2652 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
2653 HINT:  Use *_tz() function for time zone support.
2654 select jsonb_path_query_tz('"2023-08-15 12:34:56 +5:30"', '$.timestamp().string()'); -- should work
2655   jsonb_path_query_tz  
2656 -----------------------
2657  "2023-08-15T00:04:56"
2658 (1 row)
2660 select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp_tz().string()');
2661 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
2662 HINT:  Use *_tz() function for time zone support.
2663 select jsonb_path_query_tz('"2023-08-15 12:34:56"', '$.timestamp_tz().string()'); -- should work
2664      jsonb_path_query_tz     
2665 -----------------------------
2666  "2023-08-15T12:34:56-07:00"
2667 (1 row)
2669 select jsonb_path_query('"2023-08-15 12:34:56 +5:30"', '$.timestamp_tz().string()');
2670       jsonb_path_query       
2671 -----------------------------
2672  "2023-08-15T12:34:56+05:30"
2673 (1 row)
2675 select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp().string()');
2676    jsonb_path_query    
2677 -----------------------
2678  "2023-08-15T12:34:56"
2679 (1 row)
2681 select jsonb_path_query('"12:34:56 +5:30"', '$.time_tz().string()');
2682  jsonb_path_query 
2683 ------------------
2684  "12:34:56+05:30"
2685 (1 row)
2687 -- this timetz usage will absorb the UTC offset of the current timezone setting
2688 begin;
2689 set local timezone = 'UTC-10';
2690 select jsonb_path_query_tz('"12:34:56"', '$.time_tz().string()');
2691  jsonb_path_query_tz 
2692 ---------------------
2693  "12:34:56+10:00"
2694 (1 row)
2696 rollback;
2697 select jsonb_path_query('"12:34:56"', '$.time().string()');
2698  jsonb_path_query 
2699 ------------------
2700  "12:34:56"
2701 (1 row)
2703 select jsonb_path_query('"2023-08-15"', '$.date().string()');
2704  jsonb_path_query 
2705 ------------------
2706  "2023-08-15"
2707 (1 row)
2709 -- .string() does not react to timezone or datestyle
2710 begin;
2711 set local timezone = 'UTC';
2712 set local datestyle = 'German';
2713 select jsonb_path_query('"2023-08-15 12:34:56 +5:30"', '$.timestamp_tz().string()');
2714       jsonb_path_query       
2715 -----------------------------
2716  "2023-08-15T12:34:56+05:30"
2717 (1 row)
2719 select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp().string()');
2720    jsonb_path_query    
2721 -----------------------
2722  "2023-08-15T12:34:56"
2723 (1 row)
2725 rollback;
2726 -- Test .time()
2727 select jsonb_path_query('null', '$.time()');
2728 ERROR:  jsonpath item method .time() can only be applied to a string
2729 select jsonb_path_query('true', '$.time()');
2730 ERROR:  jsonpath item method .time() can only be applied to a string
2731 select jsonb_path_query('1', '$.time()');
2732 ERROR:  jsonpath item method .time() can only be applied to a string
2733 select jsonb_path_query('[]', '$.time()');
2734  jsonb_path_query 
2735 ------------------
2736 (0 rows)
2738 select jsonb_path_query('[]', 'strict $.time()');
2739 ERROR:  jsonpath item method .time() can only be applied to a string
2740 select jsonb_path_query('{}', '$.time()');
2741 ERROR:  jsonpath item method .time() can only be applied to a string
2742 select jsonb_path_query('"bogus"', '$.time()');
2743 ERROR:  time format is not recognized: "bogus"
2744 select jsonb '"12:34:56"' @? '$.time()';
2745  ?column? 
2746 ----------
2748 (1 row)
2750 select jsonb_path_query('"12:34:56"', '$.time()');
2751  jsonb_path_query 
2752 ------------------
2753  "12:34:56"
2754 (1 row)
2756 select jsonb_path_query('"12:34:56"', '$.time().type()');
2757      jsonb_path_query     
2758 --------------------------
2759  "time without time zone"
2760 (1 row)
2762 select jsonb_path_query('"2023-08-15"', '$.time()');
2763 ERROR:  time format is not recognized: "2023-08-15"
2764 select jsonb_path_query('"12:34:56 +05:30"', '$.time()');
2765 ERROR:  cannot convert value from timetz to time without time zone usage
2766 HINT:  Use *_tz() function for time zone support.
2767 select jsonb_path_query_tz('"12:34:56 +05:30"', '$.time()'); -- should work
2768  jsonb_path_query_tz 
2769 ---------------------
2770  "12:34:56"
2771 (1 row)
2773 select jsonb_path_query('"2023-08-15 12:34:56"', '$.time()');
2774  jsonb_path_query 
2775 ------------------
2776  "12:34:56"
2777 (1 row)
2779 select jsonb_path_query('"12:34:56.789"', '$.time(-1)');
2780 ERROR:  syntax error at or near "-" of jsonpath input
2781 LINE 1: select jsonb_path_query('"12:34:56.789"', '$.time(-1)');
2782                                                   ^
2783 select jsonb_path_query('"12:34:56.789"', '$.time(2.0)');
2784 ERROR:  syntax error at or near "2.0" of jsonpath input
2785 LINE 1: select jsonb_path_query('"12:34:56.789"', '$.time(2.0)');
2786                                                   ^
2787 select jsonb_path_query('"12:34:56.789"', '$.time(12345678901)');
2788 ERROR:  time precision of jsonpath item method .time() is out of range for type integer
2789 select jsonb_path_query('"12:34:56.789"', '$.time(0)');
2790  jsonb_path_query 
2791 ------------------
2792  "12:34:57"
2793 (1 row)
2795 select jsonb_path_query('"12:34:56.789"', '$.time(2)');
2796  jsonb_path_query 
2797 ------------------
2798  "12:34:56.79"
2799 (1 row)
2801 select jsonb_path_query('"12:34:56.789"', '$.time(5)');
2802  jsonb_path_query 
2803 ------------------
2804  "12:34:56.789"
2805 (1 row)
2807 select jsonb_path_query('"12:34:56.789"', '$.time(10)');
2808 WARNING:  TIME(10) precision reduced to maximum allowed, 6
2809  jsonb_path_query 
2810 ------------------
2811  "12:34:56.789"
2812 (1 row)
2814 select jsonb_path_query('"12:34:56.789012"', '$.time(8)');
2815 WARNING:  TIME(8) precision reduced to maximum allowed, 6
2816  jsonb_path_query  
2817 -------------------
2818  "12:34:56.789012"
2819 (1 row)
2821 -- Test .time_tz()
2822 select jsonb_path_query('null', '$.time_tz()');
2823 ERROR:  jsonpath item method .time_tz() can only be applied to a string
2824 select jsonb_path_query('true', '$.time_tz()');
2825 ERROR:  jsonpath item method .time_tz() can only be applied to a string
2826 select jsonb_path_query('1', '$.time_tz()');
2827 ERROR:  jsonpath item method .time_tz() can only be applied to a string
2828 select jsonb_path_query('[]', '$.time_tz()');
2829  jsonb_path_query 
2830 ------------------
2831 (0 rows)
2833 select jsonb_path_query('[]', 'strict $.time_tz()');
2834 ERROR:  jsonpath item method .time_tz() can only be applied to a string
2835 select jsonb_path_query('{}', '$.time_tz()');
2836 ERROR:  jsonpath item method .time_tz() can only be applied to a string
2837 select jsonb_path_query('"bogus"', '$.time_tz()');
2838 ERROR:  time_tz format is not recognized: "bogus"
2839 select jsonb '"12:34:56 +05:30"' @? '$.time_tz()';
2840  ?column? 
2841 ----------
2843 (1 row)
2845 select jsonb_path_query('"12:34:56 +05:30"', '$.time_tz()');
2846  jsonb_path_query 
2847 ------------------
2848  "12:34:56+05:30"
2849 (1 row)
2851 select jsonb_path_query('"12:34:56 +05:30"', '$.time_tz().type()');
2852    jsonb_path_query    
2853 -----------------------
2854  "time with time zone"
2855 (1 row)
2857 select jsonb_path_query('"2023-08-15"', '$.time_tz()');
2858 ERROR:  time_tz format is not recognized: "2023-08-15"
2859 select jsonb_path_query('"2023-08-15 12:34:56"', '$.time_tz()');
2860 ERROR:  time_tz format is not recognized: "2023-08-15 12:34:56"
2861 select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(-1)');
2862 ERROR:  syntax error at or near "-" of jsonpath input
2863 LINE 1: select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(...
2864                                                          ^
2865 select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(2.0)');
2866 ERROR:  syntax error at or near "2.0" of jsonpath input
2867 LINE 1: select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(...
2868                                                          ^
2869 select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(12345678901)');
2870 ERROR:  time precision of jsonpath item method .time_tz() is out of range for type integer
2871 select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(0)');
2872  jsonb_path_query 
2873 ------------------
2874  "12:34:57+05:30"
2875 (1 row)
2877 select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(2)');
2878   jsonb_path_query   
2879 ---------------------
2880  "12:34:56.79+05:30"
2881 (1 row)
2883 select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(5)');
2884    jsonb_path_query   
2885 ----------------------
2886  "12:34:56.789+05:30"
2887 (1 row)
2889 select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(10)');
2890 WARNING:  TIME(10) WITH TIME ZONE precision reduced to maximum allowed, 6
2891    jsonb_path_query   
2892 ----------------------
2893  "12:34:56.789+05:30"
2894 (1 row)
2896 select jsonb_path_query('"12:34:56.789012 +05:30"', '$.time_tz(8)');
2897 WARNING:  TIME(8) WITH TIME ZONE precision reduced to maximum allowed, 6
2898     jsonb_path_query     
2899 -------------------------
2900  "12:34:56.789012+05:30"
2901 (1 row)
2903 -- Test .timestamp()
2904 select jsonb_path_query('null', '$.timestamp()');
2905 ERROR:  jsonpath item method .timestamp() can only be applied to a string
2906 select jsonb_path_query('true', '$.timestamp()');
2907 ERROR:  jsonpath item method .timestamp() can only be applied to a string
2908 select jsonb_path_query('1', '$.timestamp()');
2909 ERROR:  jsonpath item method .timestamp() can only be applied to a string
2910 select jsonb_path_query('[]', '$.timestamp()');
2911  jsonb_path_query 
2912 ------------------
2913 (0 rows)
2915 select jsonb_path_query('[]', 'strict $.timestamp()');
2916 ERROR:  jsonpath item method .timestamp() can only be applied to a string
2917 select jsonb_path_query('{}', '$.timestamp()');
2918 ERROR:  jsonpath item method .timestamp() can only be applied to a string
2919 select jsonb_path_query('"bogus"', '$.timestamp()');
2920 ERROR:  timestamp format is not recognized: "bogus"
2921 select jsonb '"2023-08-15 12:34:56"' @? '$.timestamp()';
2922  ?column? 
2923 ----------
2925 (1 row)
2927 select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp()');
2928    jsonb_path_query    
2929 -----------------------
2930  "2023-08-15T12:34:56"
2931 (1 row)
2933 select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp().type()');
2934        jsonb_path_query        
2935 -------------------------------
2936  "timestamp without time zone"
2937 (1 row)
2939 select jsonb_path_query('"2023-08-15"', '$.timestamp()');
2940    jsonb_path_query    
2941 -----------------------
2942  "2023-08-15T00:00:00"
2943 (1 row)
2945 select jsonb_path_query('"12:34:56"', '$.timestamp()');
2946 ERROR:  timestamp format is not recognized: "12:34:56"
2947 select jsonb_path_query('"12:34:56 +05:30"', '$.timestamp()');
2948 ERROR:  timestamp format is not recognized: "12:34:56 +05:30"
2949 select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(-1)');
2950 ERROR:  syntax error at or near "-" of jsonpath input
2951 LINE 1: ...ect jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timesta...
2952                                                              ^
2953 select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(2.0)');
2954 ERROR:  syntax error at or near "2.0" of jsonpath input
2955 LINE 1: ...ect jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timesta...
2956                                                              ^
2957 select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(12345678901)');
2958 ERROR:  time precision of jsonpath item method .timestamp() is out of range for type integer
2959 select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(0)');
2960    jsonb_path_query    
2961 -----------------------
2962  "2023-08-15T12:34:57"
2963 (1 row)
2965 select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(2)');
2966      jsonb_path_query     
2967 --------------------------
2968  "2023-08-15T12:34:56.79"
2969 (1 row)
2971 select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(5)');
2972      jsonb_path_query      
2973 ---------------------------
2974  "2023-08-15T12:34:56.789"
2975 (1 row)
2977 select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(10)');
2978 WARNING:  TIMESTAMP(10) precision reduced to maximum allowed, 6
2979      jsonb_path_query      
2980 ---------------------------
2981  "2023-08-15T12:34:56.789"
2982 (1 row)
2984 select jsonb_path_query('"2023-08-15 12:34:56.789012"', '$.timestamp(8)');
2985 WARNING:  TIMESTAMP(8) precision reduced to maximum allowed, 6
2986        jsonb_path_query       
2987 ------------------------------
2988  "2023-08-15T12:34:56.789012"
2989 (1 row)
2991 -- Test .timestamp_tz()
2992 select jsonb_path_query('null', '$.timestamp_tz()');
2993 ERROR:  jsonpath item method .timestamp_tz() can only be applied to a string
2994 select jsonb_path_query('true', '$.timestamp_tz()');
2995 ERROR:  jsonpath item method .timestamp_tz() can only be applied to a string
2996 select jsonb_path_query('1', '$.timestamp_tz()');
2997 ERROR:  jsonpath item method .timestamp_tz() can only be applied to a string
2998 select jsonb_path_query('[]', '$.timestamp_tz()');
2999  jsonb_path_query 
3000 ------------------
3001 (0 rows)
3003 select jsonb_path_query('[]', 'strict $.timestamp_tz()');
3004 ERROR:  jsonpath item method .timestamp_tz() can only be applied to a string
3005 select jsonb_path_query('{}', '$.timestamp_tz()');
3006 ERROR:  jsonpath item method .timestamp_tz() can only be applied to a string
3007 select jsonb_path_query('"bogus"', '$.timestamp_tz()');
3008 ERROR:  timestamp_tz format is not recognized: "bogus"
3009 select jsonb '"2023-08-15 12:34:56 +05:30"' @? '$.timestamp_tz()';
3010  ?column? 
3011 ----------
3013 (1 row)
3015 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()');
3016       jsonb_path_query       
3017 -----------------------------
3018  "2023-08-15T12:34:56+05:30"
3019 (1 row)
3021 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz().type()');
3022       jsonb_path_query      
3023 ----------------------------
3024  "timestamp with time zone"
3025 (1 row)
3027 select jsonb_path_query('"2023-08-15"', '$.timestamp_tz()');
3028 ERROR:  cannot convert value from date to timestamptz without time zone usage
3029 HINT:  Use *_tz() function for time zone support.
3030 select jsonb_path_query_tz('"2023-08-15"', '$.timestamp_tz()'); -- should work
3031      jsonb_path_query_tz     
3032 -----------------------------
3033  "2023-08-15T00:00:00-07:00"
3034 (1 row)
3036 select jsonb_path_query('"12:34:56"', '$.timestamp_tz()');
3037 ERROR:  timestamp_tz format is not recognized: "12:34:56"
3038 select jsonb_path_query('"12:34:56 +05:30"', '$.timestamp_tz()');
3039 ERROR:  timestamp_tz format is not recognized: "12:34:56 +05:30"
3040 select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(-1)');
3041 ERROR:  syntax error at or near "-" of jsonpath input
3042 LINE 1: ...nb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timesta...
3043                                                              ^
3044 select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(2.0)');
3045 ERROR:  syntax error at or near "2.0" of jsonpath input
3046 LINE 1: ...nb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timesta...
3047                                                              ^
3048 select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(12345678901)');
3049 ERROR:  time precision of jsonpath item method .timestamp_tz() is out of range for type integer
3050 select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(0)');
3051       jsonb_path_query       
3052 -----------------------------
3053  "2023-08-15T12:34:57+05:30"
3054 (1 row)
3056 select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(2)');
3057         jsonb_path_query        
3058 --------------------------------
3059  "2023-08-15T12:34:56.79+05:30"
3060 (1 row)
3062 select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(5)');
3063         jsonb_path_query         
3064 ---------------------------------
3065  "2023-08-15T12:34:56.789+05:30"
3066 (1 row)
3068 select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(10)');
3069 WARNING:  TIMESTAMP(10) WITH TIME ZONE precision reduced to maximum allowed, 6
3070         jsonb_path_query         
3071 ---------------------------------
3072  "2023-08-15T12:34:56.789+05:30"
3073 (1 row)
3075 select jsonb_path_query('"2023-08-15 12:34:56.789012 +05:30"', '$.timestamp_tz(8)');
3076 WARNING:  TIMESTAMP(8) WITH TIME ZONE precision reduced to maximum allowed, 6
3077           jsonb_path_query          
3078 ------------------------------------
3079  "2023-08-15T12:34:56.789012+05:30"
3080 (1 row)
3082 set time zone '+00';
3083 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time()');
3084 ERROR:  cannot convert value from timestamptz to time without time zone usage
3085 HINT:  Use *_tz() function for time zone support.
3086 select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.time()'); -- should work
3087  jsonb_path_query_tz 
3088 ---------------------
3089  "07:04:56"
3090 (1 row)
3092 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time_tz()');
3093  jsonb_path_query 
3094 ------------------
3095  "07:04:56+00:00"
3096 (1 row)
3098 select jsonb_path_query('"12:34:56"', '$.time_tz()');
3099 ERROR:  cannot convert value from time to timetz without time zone usage
3100 HINT:  Use *_tz() function for time zone support.
3101 select jsonb_path_query_tz('"12:34:56"', '$.time_tz()'); -- should work
3102  jsonb_path_query_tz 
3103 ---------------------
3104  "12:34:56+00:00"
3105 (1 row)
3107 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp()');
3108 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
3109 HINT:  Use *_tz() function for time zone support.
3110 select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.timestamp()'); -- should work
3111   jsonb_path_query_tz  
3112 -----------------------
3113  "2023-08-15T07:04:56"
3114 (1 row)
3116 select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp_tz()');
3117 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
3118 HINT:  Use *_tz() function for time zone support.
3119 select jsonb_path_query_tz('"2023-08-15 12:34:56"', '$.timestamp_tz()'); -- should work
3120      jsonb_path_query_tz     
3121 -----------------------------
3122  "2023-08-15T12:34:56+00:00"
3123 (1 row)
3125 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI")');
3126    jsonb_path_query    
3127 -----------------------
3128  "2017-03-10T12:34:00"
3129 (1 row)
3131 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
3132 ERROR:  input string is too short for datetime format
3133 select jsonb_path_query('"10-03-2017 12:34 +05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
3134       jsonb_path_query       
3135 -----------------------------
3136  "2017-03-10T12:34:00+05:00"
3137 (1 row)
3139 select jsonb_path_query('"10-03-2017 12:34 -05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
3140       jsonb_path_query       
3141 -----------------------------
3142  "2017-03-10T12:34:00-05:00"
3143 (1 row)
3145 select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
3146       jsonb_path_query       
3147 -----------------------------
3148  "2017-03-10T12:34:00+05:20"
3149 (1 row)
3151 select jsonb_path_query('"10-03-2017 12:34 -05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
3152       jsonb_path_query       
3153 -----------------------------
3154  "2017-03-10T12:34:00-05:20"
3155 (1 row)
3157 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI")');
3158  jsonb_path_query 
3159 ------------------
3160  "12:34:00"
3161 (1 row)
3163 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI TZH")');
3164 ERROR:  input string is too short for datetime format
3165 select jsonb_path_query('"12:34 +05"', '$.datetime("HH24:MI TZH")');
3166  jsonb_path_query 
3167 ------------------
3168  "12:34:00+05:00"
3169 (1 row)
3171 select jsonb_path_query('"12:34 -05"', '$.datetime("HH24:MI TZH")');
3172  jsonb_path_query 
3173 ------------------
3174  "12:34:00-05:00"
3175 (1 row)
3177 select jsonb_path_query('"12:34 +05:20"', '$.datetime("HH24:MI TZH:TZM")');
3178  jsonb_path_query 
3179 ------------------
3180  "12:34:00+05:20"
3181 (1 row)
3183 select jsonb_path_query('"12:34 -05:20"', '$.datetime("HH24:MI TZH:TZM")');
3184  jsonb_path_query 
3185 ------------------
3186  "12:34:00-05:20"
3187 (1 row)
3189 set time zone '+10';
3190 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time()');
3191 ERROR:  cannot convert value from timestamptz to time without time zone usage
3192 HINT:  Use *_tz() function for time zone support.
3193 select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.time()'); -- should work
3194  jsonb_path_query_tz 
3195 ---------------------
3196  "17:04:56"
3197 (1 row)
3199 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time_tz()');
3200  jsonb_path_query 
3201 ------------------
3202  "17:04:56+10:00"
3203 (1 row)
3205 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp()');
3206 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
3207 HINT:  Use *_tz() function for time zone support.
3208 select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.timestamp()'); -- should work
3209   jsonb_path_query_tz  
3210 -----------------------
3211  "2023-08-15T17:04:56"
3212 (1 row)
3214 select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp_tz()');
3215 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
3216 HINT:  Use *_tz() function for time zone support.
3217 select jsonb_path_query_tz('"2023-08-15 12:34:56"', '$.timestamp_tz()'); -- should work
3218      jsonb_path_query_tz     
3219 -----------------------------
3220  "2023-08-15T12:34:56+10:00"
3221 (1 row)
3223 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()');
3224       jsonb_path_query       
3225 -----------------------------
3226  "2023-08-15T12:34:56+05:30"
3227 (1 row)
3229 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI")');
3230    jsonb_path_query    
3231 -----------------------
3232  "2017-03-10T12:34:00"
3233 (1 row)
3235 select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
3236 ERROR:  input string is too short for datetime format
3237 select jsonb_path_query('"10-03-2017 12:34 +05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
3238       jsonb_path_query       
3239 -----------------------------
3240  "2017-03-10T12:34:00+05:00"
3241 (1 row)
3243 select jsonb_path_query('"10-03-2017 12:34 -05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
3244       jsonb_path_query       
3245 -----------------------------
3246  "2017-03-10T12:34:00-05:00"
3247 (1 row)
3249 select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
3250       jsonb_path_query       
3251 -----------------------------
3252  "2017-03-10T12:34:00+05:20"
3253 (1 row)
3255 select jsonb_path_query('"10-03-2017 12:34 -05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
3256       jsonb_path_query       
3257 -----------------------------
3258  "2017-03-10T12:34:00-05:20"
3259 (1 row)
3261 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI")');
3262  jsonb_path_query 
3263 ------------------
3264  "12:34:00"
3265 (1 row)
3267 select jsonb_path_query('"12:34"', '$.datetime("HH24:MI TZH")');
3268 ERROR:  input string is too short for datetime format
3269 select jsonb_path_query('"12:34 +05"', '$.datetime("HH24:MI TZH")');
3270  jsonb_path_query 
3271 ------------------
3272  "12:34:00+05:00"
3273 (1 row)
3275 select jsonb_path_query('"12:34 -05"', '$.datetime("HH24:MI TZH")');
3276  jsonb_path_query 
3277 ------------------
3278  "12:34:00-05:00"
3279 (1 row)
3281 select jsonb_path_query('"12:34 +05:20"', '$.datetime("HH24:MI TZH:TZM")');
3282  jsonb_path_query 
3283 ------------------
3284  "12:34:00+05:20"
3285 (1 row)
3287 select jsonb_path_query('"12:34 -05:20"', '$.datetime("HH24:MI TZH:TZM")');
3288  jsonb_path_query 
3289 ------------------
3290  "12:34:00-05:20"
3291 (1 row)
3293 set time zone default;
3294 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time()');
3295 ERROR:  cannot convert value from timestamptz to time without time zone usage
3296 HINT:  Use *_tz() function for time zone support.
3297 select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.time()'); -- should work
3298  jsonb_path_query_tz 
3299 ---------------------
3300  "00:04:56"
3301 (1 row)
3303 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time_tz()');
3304  jsonb_path_query 
3305 ------------------
3306  "00:04:56-07:00"
3307 (1 row)
3309 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp()');
3310 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
3311 HINT:  Use *_tz() function for time zone support.
3312 select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.timestamp()'); -- should work
3313   jsonb_path_query_tz  
3314 -----------------------
3315  "2023-08-15T00:04:56"
3316 (1 row)
3318 select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()');
3319       jsonb_path_query       
3320 -----------------------------
3321  "2023-08-15T12:34:56+05:30"
3322 (1 row)
3324 select jsonb_path_query('"2017-03-10"', '$.datetime().type()');
3325  jsonb_path_query 
3326 ------------------
3327  "date"
3328 (1 row)
3330 select jsonb_path_query('"2017-03-10"', '$.datetime()');
3331  jsonb_path_query 
3332 ------------------
3333  "2017-03-10"
3334 (1 row)
3336 select jsonb_path_query('"2017-03-10 12:34:56"', '$.datetime().type()');
3337        jsonb_path_query        
3338 -------------------------------
3339  "timestamp without time zone"
3340 (1 row)
3342 select jsonb_path_query('"2017-03-10 12:34:56"', '$.datetime()');
3343    jsonb_path_query    
3344 -----------------------
3345  "2017-03-10T12:34:56"
3346 (1 row)
3348 select jsonb_path_query('"2017-03-10 12:34:56+3"', '$.datetime().type()');
3349       jsonb_path_query      
3350 ----------------------------
3351  "timestamp with time zone"
3352 (1 row)
3354 select jsonb_path_query('"2017-03-10 12:34:56+3"', '$.datetime()');
3355       jsonb_path_query       
3356 -----------------------------
3357  "2017-03-10T12:34:56+03:00"
3358 (1 row)
3360 select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime().type()');
3361       jsonb_path_query      
3362 ----------------------------
3363  "timestamp with time zone"
3364 (1 row)
3366 select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime()');
3367       jsonb_path_query       
3368 -----------------------------
3369  "2017-03-10T12:34:56+03:10"
3370 (1 row)
3372 select jsonb_path_query('"2017-03-10T12:34:56+3:10"', '$.datetime()');
3373       jsonb_path_query       
3374 -----------------------------
3375  "2017-03-10T12:34:56+03:10"
3376 (1 row)
3378 select jsonb_path_query('"2017-03-10t12:34:56+3:10"', '$.datetime()');
3379 ERROR:  datetime format is not recognized: "2017-03-10t12:34:56+3:10"
3380 HINT:  Use a datetime template argument to specify the input data format.
3381 select jsonb_path_query('"2017-03-10 12:34:56.789+3:10"', '$.datetime()');
3382         jsonb_path_query         
3383 ---------------------------------
3384  "2017-03-10T12:34:56.789+03:10"
3385 (1 row)
3387 select jsonb_path_query('"2017-03-10T12:34:56.789+3:10"', '$.datetime()');
3388         jsonb_path_query         
3389 ---------------------------------
3390  "2017-03-10T12:34:56.789+03:10"
3391 (1 row)
3393 select jsonb_path_query('"2017-03-10t12:34:56.789+3:10"', '$.datetime()');
3394 ERROR:  datetime format is not recognized: "2017-03-10t12:34:56.789+3:10"
3395 HINT:  Use a datetime template argument to specify the input data format.
3396 select jsonb_path_query('"2017-03-10T12:34:56.789EST"', '$.datetime()');
3397         jsonb_path_query         
3398 ---------------------------------
3399  "2017-03-10T12:34:56.789-05:00"
3400 (1 row)
3402 select jsonb_path_query('"2017-03-10T12:34:56.789Z"', '$.datetime()');
3403         jsonb_path_query         
3404 ---------------------------------
3405  "2017-03-10T12:34:56.789+00:00"
3406 (1 row)
3408 select jsonb_path_query('"12:34:56"', '$.datetime().type()');
3409      jsonb_path_query     
3410 --------------------------
3411  "time without time zone"
3412 (1 row)
3414 select jsonb_path_query('"12:34:56"', '$.datetime()');
3415  jsonb_path_query 
3416 ------------------
3417  "12:34:56"
3418 (1 row)
3420 select jsonb_path_query('"12:34:56+3"', '$.datetime().type()');
3421    jsonb_path_query    
3422 -----------------------
3423  "time with time zone"
3424 (1 row)
3426 select jsonb_path_query('"12:34:56+3"', '$.datetime()');
3427  jsonb_path_query 
3428 ------------------
3429  "12:34:56+03:00"
3430 (1 row)
3432 select jsonb_path_query('"12:34:56+3:10"', '$.datetime().type()');
3433    jsonb_path_query    
3434 -----------------------
3435  "time with time zone"
3436 (1 row)
3438 select jsonb_path_query('"12:34:56+3:10"', '$.datetime()');
3439  jsonb_path_query 
3440 ------------------
3441  "12:34:56+03:10"
3442 (1 row)
3444 set time zone '+00';
3445 -- date comparison
3446 select jsonb_path_query(
3447         '["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"]',
3448         '$[*].datetime() ? (@ == "10.03.2017".datetime("dd.mm.yyyy"))');
3449 ERROR:  cannot convert value from date to timestamptz without time zone usage
3450 HINT:  Use *_tz() function for time zone support.
3451 select jsonb_path_query(
3452         '["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"]',
3453         '$[*].datetime() ? (@ >= "10.03.2017".datetime("dd.mm.yyyy"))');
3454 ERROR:  cannot convert value from date to timestamptz without time zone usage
3455 HINT:  Use *_tz() function for time zone support.
3456 select jsonb_path_query(
3457         '["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"]',
3458         '$[*].datetime() ? (@ <  "10.03.2017".datetime("dd.mm.yyyy"))');
3459 ERROR:  cannot convert value from date to timestamptz without time zone usage
3460 HINT:  Use *_tz() function for time zone support.
3461 select jsonb_path_query_tz(
3462         '["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"]',
3463         '$[*].datetime() ? (@ == "10.03.2017".datetime("dd.mm.yyyy"))');
3464      jsonb_path_query_tz     
3465 -----------------------------
3466  "2017-03-10"
3467  "2017-03-10T00:00:00"
3468  "2017-03-10T03:00:00+03:00"
3469 (3 rows)
3471 select jsonb_path_query_tz(
3472         '["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"]',
3473         '$[*].datetime() ? (@ >= "10.03.2017".datetime("dd.mm.yyyy"))');
3474      jsonb_path_query_tz     
3475 -----------------------------
3476  "2017-03-10"
3477  "2017-03-11"
3478  "2017-03-10T00:00:00"
3479  "2017-03-10T12:34:56"
3480  "2017-03-10T03:00:00+03:00"
3481 (5 rows)
3483 select jsonb_path_query_tz(
3484         '["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"]',
3485         '$[*].datetime() ? (@ <  "10.03.2017".datetime("dd.mm.yyyy"))');
3486      jsonb_path_query_tz     
3487 -----------------------------
3488  "2017-03-09"
3489  "2017-03-10T01:02:03+04:00"
3490 (2 rows)
3492 select jsonb_path_query_tz(
3493         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3494         '$[*].datetime() ? (@ == "2017-03-10".date())');
3495      jsonb_path_query_tz     
3496 -----------------------------
3497  "2017-03-10"
3498  "2017-03-10T00:00:00"
3499  "2017-03-10T03:00:00+03:00"
3500 (3 rows)
3502 select jsonb_path_query_tz(
3503         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3504         '$[*].datetime() ? (@ >= "2017-03-10".date())');
3505      jsonb_path_query_tz     
3506 -----------------------------
3507  "2017-03-10"
3508  "2017-03-11"
3509  "2017-03-10T00:00:00"
3510  "2017-03-10T12:34:56"
3511  "2017-03-10T03:00:00+03:00"
3512 (5 rows)
3514 select jsonb_path_query_tz(
3515         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3516         '$[*].datetime() ? (@ <  "2017-03-10".date())');
3517      jsonb_path_query_tz     
3518 -----------------------------
3519  "2017-03-09"
3520  "2017-03-10T01:02:03+04:00"
3521 (2 rows)
3523 select jsonb_path_query(
3524         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3525         '$[*].date() ? (@ == "2017-03-10".date())');
3526 ERROR:  cannot convert value from timestamptz to date without time zone usage
3527 HINT:  Use *_tz() function for time zone support.
3528 select jsonb_path_query(
3529         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3530         '$[*].date() ? (@ >= "2017-03-10".date())');
3531 ERROR:  cannot convert value from timestamptz to date without time zone usage
3532 HINT:  Use *_tz() function for time zone support.
3533 select jsonb_path_query(
3534         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3535         '$[*].date() ? (@ <  "2017-03-10".date())');
3536 ERROR:  cannot convert value from timestamptz to date without time zone usage
3537 HINT:  Use *_tz() function for time zone support.
3538 select jsonb_path_query_tz(
3539         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3540         '$[*].date() ? (@ == "2017-03-10".date())');
3541  jsonb_path_query_tz 
3542 ---------------------
3543  "2017-03-10"
3544  "2017-03-10"
3545  "2017-03-10"
3546  "2017-03-10"
3547 (4 rows)
3549 select jsonb_path_query_tz(
3550         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3551         '$[*].date() ? (@ >= "2017-03-10".date())');
3552  jsonb_path_query_tz 
3553 ---------------------
3554  "2017-03-10"
3555  "2017-03-11"
3556  "2017-03-10"
3557  "2017-03-10"
3558  "2017-03-10"
3559 (5 rows)
3561 select jsonb_path_query_tz(
3562         '["2017-03-10", "2017-03-11", "2017-03-09", "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"]',
3563         '$[*].date() ? (@ <  "2017-03-10".date())');
3564  jsonb_path_query_tz 
3565 ---------------------
3566  "2017-03-09"
3567  "2017-03-09"
3568 (2 rows)
3570 -- time comparison
3571 select jsonb_path_query(
3572         '["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"]',
3573         '$[*].datetime() ? (@ == "12:35".datetime("HH24:MI"))');
3574 ERROR:  cannot convert value from time to timetz without time zone usage
3575 HINT:  Use *_tz() function for time zone support.
3576 select jsonb_path_query(
3577         '["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"]',
3578         '$[*].datetime() ? (@ >= "12:35".datetime("HH24:MI"))');
3579 ERROR:  cannot convert value from time to timetz without time zone usage
3580 HINT:  Use *_tz() function for time zone support.
3581 select jsonb_path_query(
3582         '["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"]',
3583         '$[*].datetime() ? (@ <  "12:35".datetime("HH24:MI"))');
3584 ERROR:  cannot convert value from time to timetz without time zone usage
3585 HINT:  Use *_tz() function for time zone support.
3586 select jsonb_path_query_tz(
3587         '["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"]',
3588         '$[*].datetime() ? (@ == "12:35".datetime("HH24:MI"))');
3589  jsonb_path_query_tz 
3590 ---------------------
3591  "12:35:00"
3592  "12:35:00+00:00"
3593 (2 rows)
3595 select jsonb_path_query_tz(
3596         '["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"]',
3597         '$[*].datetime() ? (@ >= "12:35".datetime("HH24:MI"))');
3598  jsonb_path_query_tz 
3599 ---------------------
3600  "12:35:00"
3601  "12:36:00"
3602  "12:35:00+00:00"
3603 (3 rows)
3605 select jsonb_path_query_tz(
3606         '["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"]',
3607         '$[*].datetime() ? (@ <  "12:35".datetime("HH24:MI"))');
3608  jsonb_path_query_tz 
3609 ---------------------
3610  "12:34:00"
3611  "12:35:00+01:00"
3612  "13:35:00+01:00"
3613 (3 rows)
3615 select jsonb_path_query_tz(
3616         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3617         '$[*].datetime() ? (@ == "12:35:00".time())');
3618  jsonb_path_query_tz 
3619 ---------------------
3620  "12:35:00"
3621  "12:35:00+00:00"
3622 (2 rows)
3624 select jsonb_path_query_tz(
3625         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3626         '$[*].datetime() ? (@ >= "12:35:00".time())');
3627  jsonb_path_query_tz 
3628 ---------------------
3629  "12:35:00"
3630  "12:36:00"
3631  "12:35:00+00:00"
3632 (3 rows)
3634 select jsonb_path_query_tz(
3635         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3636         '$[*].datetime() ? (@ <  "12:35:00".time())');
3637  jsonb_path_query_tz 
3638 ---------------------
3639  "12:34:00"
3640  "12:35:00+01:00"
3641  "13:35:00+01:00"
3642 (3 rows)
3644 select jsonb_path_query(
3645         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3646         '$[*].time() ? (@ == "12:35:00".time())');
3647 ERROR:  cannot convert value from timetz to time without time zone usage
3648 HINT:  Use *_tz() function for time zone support.
3649 select jsonb_path_query(
3650         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3651         '$[*].time() ? (@ >= "12:35:00".time())');
3652 ERROR:  cannot convert value from timetz to time without time zone usage
3653 HINT:  Use *_tz() function for time zone support.
3654 select jsonb_path_query(
3655         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3656         '$[*].time() ? (@ <  "12:35:00".time())');
3657 ERROR:  cannot convert value from timetz to time without time zone usage
3658 HINT:  Use *_tz() function for time zone support.
3659 select jsonb_path_query(
3660         '["12:34:00.123", "12:35:00.123", "12:36:00.1123", "12:35:00.1123+00", "12:35:00.123+01", "13:35:00.123+01", "2017-03-10 12:35:00.1", "2017-03-10 12:35:00.123+01"]',
3661         '$[*].time(2) ? (@ >= "12:35:00.123".time(2))');
3662 ERROR:  cannot convert value from timetz to time without time zone usage
3663 HINT:  Use *_tz() function for time zone support.
3664 select jsonb_path_query_tz(
3665         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3666         '$[*].time() ? (@ == "12:35:00".time())');
3667  jsonb_path_query_tz 
3668 ---------------------
3669  "12:35:00"
3670  "12:35:00"
3671  "12:35:00"
3672  "12:35:00"
3673 (4 rows)
3675 select jsonb_path_query_tz(
3676         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3677         '$[*].time() ? (@ >= "12:35:00".time())');
3678  jsonb_path_query_tz 
3679 ---------------------
3680  "12:35:00"
3681  "12:36:00"
3682  "12:35:00"
3683  "12:35:00"
3684  "13:35:00"
3685  "12:35:00"
3686 (6 rows)
3688 select jsonb_path_query_tz(
3689         '["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
3690         '$[*].time() ? (@ <  "12:35:00".time())');
3691  jsonb_path_query_tz 
3692 ---------------------
3693  "12:34:00"
3694  "11:35:00"
3695 (2 rows)
3697 select jsonb_path_query_tz(
3698         '["12:34:00.123", "12:35:00.123", "12:36:00.1123", "12:35:00.1123+00", "12:35:00.123+01", "13:35:00.123+01", "2017-03-10 12:35:00.1", "2017-03-10 12:35:00.123+01"]',
3699         '$[*].time(2) ? (@ >= "12:35:00.123".time(2))');
3700  jsonb_path_query_tz 
3701 ---------------------
3702  "12:35:00.12"
3703  "12:36:00.11"
3704  "12:35:00.12"
3705  "13:35:00.12"
3706 (4 rows)
3708 -- timetz comparison
3709 select jsonb_path_query(
3710         '["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"]',
3711         '$[*].datetime() ? (@ == "12:35 +1".datetime("HH24:MI TZH"))');
3712 ERROR:  cannot convert value from time to timetz without time zone usage
3713 HINT:  Use *_tz() function for time zone support.
3714 select jsonb_path_query(
3715         '["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"]',
3716         '$[*].datetime() ? (@ >= "12:35 +1".datetime("HH24:MI TZH"))');
3717 ERROR:  cannot convert value from time to timetz without time zone usage
3718 HINT:  Use *_tz() function for time zone support.
3719 select jsonb_path_query(
3720         '["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"]',
3721         '$[*].datetime() ? (@ <  "12:35 +1".datetime("HH24:MI TZH"))');
3722 ERROR:  cannot convert value from time to timetz without time zone usage
3723 HINT:  Use *_tz() function for time zone support.
3724 select jsonb_path_query_tz(
3725         '["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"]',
3726         '$[*].datetime() ? (@ == "12:35 +1".datetime("HH24:MI TZH"))');
3727  jsonb_path_query_tz 
3728 ---------------------
3729  "12:35:00+01:00"
3730 (1 row)
3732 select jsonb_path_query_tz(
3733         '["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"]',
3734         '$[*].datetime() ? (@ >= "12:35 +1".datetime("HH24:MI TZH"))');
3735  jsonb_path_query_tz 
3736 ---------------------
3737  "12:35:00+01:00"
3738  "12:36:00+01:00"
3739  "12:35:00-02:00"
3740  "11:35:00"
3741  "12:35:00"
3742 (5 rows)
3744 select jsonb_path_query_tz(
3745         '["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"]',
3746         '$[*].datetime() ? (@ <  "12:35 +1".datetime("HH24:MI TZH"))');
3747  jsonb_path_query_tz 
3748 ---------------------
3749  "12:34:00+01:00"
3750  "12:35:00+02:00"
3751  "10:35:00"
3752 (3 rows)
3754 select jsonb_path_query_tz(
3755         '["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 12:35:00 +1"]',
3756         '$[*].datetime() ? (@ == "12:35:00 +1".time_tz())');
3757  jsonb_path_query_tz 
3758 ---------------------
3759  "12:35:00+01:00"
3760 (1 row)
3762 select jsonb_path_query_tz(
3763         '["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 12:35:00 +1"]',
3764         '$[*].datetime() ? (@ >= "12:35:00 +1".time_tz())');
3765  jsonb_path_query_tz 
3766 ---------------------
3767  "12:35:00+01:00"
3768  "12:36:00+01:00"
3769  "12:35:00-02:00"
3770  "11:35:00"
3771  "12:35:00"
3772 (5 rows)
3774 select jsonb_path_query_tz(
3775         '["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 12:35:00 +1"]',
3776         '$[*].datetime() ? (@ <  "12:35:00 +1".time_tz())');
3777  jsonb_path_query_tz 
3778 ---------------------
3779  "12:34:00+01:00"
3780  "12:35:00+02:00"
3781  "10:35:00"
3782 (3 rows)
3784 select jsonb_path_query(
3785         '["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 12:35:00 +1"]',
3786         '$[*].time_tz() ? (@ == "12:35:00 +1".time_tz())');
3787 ERROR:  cannot convert value from time to timetz without time zone usage
3788 HINT:  Use *_tz() function for time zone support.
3789 select jsonb_path_query(
3790         '["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 12:35:00 +1"]',
3791         '$[*].time_tz() ? (@ >= "12:35:00 +1".time_tz())');
3792 ERROR:  cannot convert value from time to timetz without time zone usage
3793 HINT:  Use *_tz() function for time zone support.
3794 select jsonb_path_query(
3795         '["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 12:35:00 +1"]',
3796         '$[*].time_tz() ? (@ <  "12:35:00 +1".time_tz())');
3797 ERROR:  cannot convert value from time to timetz without time zone usage
3798 HINT:  Use *_tz() function for time zone support.
3799 select jsonb_path_query(
3800         '["12:34:00.123+01", "12:35:00.123+01", "12:36:00.1123+01", "12:35:00.1123+02", "12:35:00.123-02", "10:35:00.123", "11:35:00.1", "12:35:00.123", "2017-03-10 12:35:00.123 +1"]',
3801         '$[*].time_tz(2) ? (@ >= "12:35:00.123 +1".time_tz(2))');
3802 ERROR:  cannot convert value from time to timetz without time zone usage
3803 HINT:  Use *_tz() function for time zone support.
3804 select jsonb_path_query_tz(
3805         '["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 12:35:00 +1"]',
3806         '$[*].time_tz() ? (@ == "12:35:00 +1".time_tz())');
3807  jsonb_path_query_tz 
3808 ---------------------
3809  "12:35:00+01:00"
3810 (1 row)
3812 select jsonb_path_query_tz(
3813         '["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 12:35:00 +1"]',
3814         '$[*].time_tz() ? (@ >= "12:35:00 +1".time_tz())');
3815  jsonb_path_query_tz 
3816 ---------------------
3817  "12:35:00+01:00"
3818  "12:36:00+01:00"
3819  "12:35:00-02:00"
3820  "11:35:00+00:00"
3821  "12:35:00+00:00"
3822  "11:35:00+00:00"
3823 (6 rows)
3825 select jsonb_path_query_tz(
3826         '["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 12:35:00 +1"]',
3827         '$[*].time_tz() ? (@ <  "12:35:00 +1".time_tz())');
3828  jsonb_path_query_tz 
3829 ---------------------
3830  "12:34:00+01:00"
3831  "12:35:00+02:00"
3832  "10:35:00+00:00"
3833 (3 rows)
3835 select jsonb_path_query_tz(
3836         '["12:34:00.123+01", "12:35:00.123+01", "12:36:00.1123+01", "12:35:00.1123+02", "12:35:00.123-02", "10:35:00.123", "11:35:00.1", "12:35:00.123", "2017-03-10 12:35:00.123 +1"]',
3837         '$[*].time_tz(2) ? (@ >= "12:35:00.123 +1".time_tz(2))');
3838  jsonb_path_query_tz 
3839 ---------------------
3840  "12:35:00.12+01:00"
3841  "12:36:00.11+01:00"
3842  "12:35:00.12-02:00"
3843  "12:35:00.12+00:00"
3844  "11:35:00.12+00:00"
3845 (5 rows)
3847 -- timestamp comparison
3848 select jsonb_path_query(
3849         '["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"]',
3850         '$[*].datetime() ? (@ == "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
3851 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
3852 HINT:  Use *_tz() function for time zone support.
3853 select jsonb_path_query(
3854         '["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"]',
3855         '$[*].datetime() ? (@ >= "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
3856 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
3857 HINT:  Use *_tz() function for time zone support.
3858 select jsonb_path_query(
3859         '["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"]',
3860         '$[*].datetime() ? (@ < "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
3861 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
3862 HINT:  Use *_tz() function for time zone support.
3863 select jsonb_path_query_tz(
3864         '["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"]',
3865         '$[*].datetime() ? (@ == "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
3866      jsonb_path_query_tz     
3867 -----------------------------
3868  "2017-03-10T12:35:00"
3869  "2017-03-10T13:35:00+01:00"
3870 (2 rows)
3872 select jsonb_path_query_tz(
3873         '["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"]',
3874         '$[*].datetime() ? (@ >= "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
3875      jsonb_path_query_tz     
3876 -----------------------------
3877  "2017-03-10T12:35:00"
3878  "2017-03-10T12:36:00"
3879  "2017-03-10T13:35:00+01:00"
3880  "2017-03-10T12:35:00-01:00"
3881  "2017-03-11"
3882 (5 rows)
3884 select jsonb_path_query_tz(
3885         '["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"]',
3886         '$[*].datetime() ? (@ < "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
3887      jsonb_path_query_tz     
3888 -----------------------------
3889  "2017-03-10T12:34:00"
3890  "2017-03-10T12:35:00+01:00"
3891  "2017-03-10"
3892 (3 rows)
3894 select jsonb_path_query_tz(
3895         '["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"]',
3896         '$[*].datetime() ? (@ == "2017-03-10 12:35:00".timestamp())');
3897      jsonb_path_query_tz     
3898 -----------------------------
3899  "2017-03-10T12:35:00"
3900  "2017-03-10T13:35:00+01:00"
3901 (2 rows)
3903 select jsonb_path_query_tz(
3904         '["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"]',
3905         '$[*].datetime() ? (@ >= "2017-03-10 12:35:00".timestamp())');
3906      jsonb_path_query_tz     
3907 -----------------------------
3908  "2017-03-10T12:35:00"
3909  "2017-03-10T12:36:00"
3910  "2017-03-10T13:35:00+01:00"
3911  "2017-03-10T12:35:00-01:00"
3912  "2017-03-11"
3913 (5 rows)
3915 select jsonb_path_query_tz(
3916         '["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"]',
3917         '$[*].datetime() ? (@ < "2017-03-10 12:35:00".timestamp())');
3918      jsonb_path_query_tz     
3919 -----------------------------
3920  "2017-03-10T12:34:00"
3921  "2017-03-10T12:35:00+01:00"
3922  "2017-03-10"
3923 (3 rows)
3925 select jsonb_path_query(
3926         '["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"]',
3927         '$[*].timestamp() ? (@ == "2017-03-10 12:35:00".timestamp())');
3928 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
3929 HINT:  Use *_tz() function for time zone support.
3930 select jsonb_path_query(
3931         '["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"]',
3932         '$[*].timestamp() ? (@ >= "2017-03-10 12:35:00".timestamp())');
3933 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
3934 HINT:  Use *_tz() function for time zone support.
3935 select jsonb_path_query(
3936         '["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"]',
3937         '$[*].timestamp() ? (@ < "2017-03-10 12:35:00".timestamp())');
3938 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
3939 HINT:  Use *_tz() function for time zone support.
3940 select jsonb_path_query(
3941         '["2017-03-10 12:34:00.123", "2017-03-10 12:35:00.123", "2017-03-10 12:36:00.1123", "2017-03-10 12:35:00.1123+01", "2017-03-10 13:35:00.123+01", "2017-03-10 12:35:00.1-01", "2017-03-10", "2017-03-11"]',
3942         '$[*].timestamp(2) ? (@ >= "2017-03-10 12:35:00.123".timestamp(2))');
3943 ERROR:  cannot convert value from timestamptz to timestamp without time zone usage
3944 HINT:  Use *_tz() function for time zone support.
3945 select jsonb_path_query_tz(
3946         '["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"]',
3947         '$[*].timestamp() ? (@ == "2017-03-10 12:35:00".timestamp())');
3948   jsonb_path_query_tz  
3949 -----------------------
3950  "2017-03-10T12:35:00"
3951  "2017-03-10T12:35:00"
3952 (2 rows)
3954 select jsonb_path_query_tz(
3955         '["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"]',
3956         '$[*].timestamp() ? (@ >= "2017-03-10 12:35:00".timestamp())');
3957   jsonb_path_query_tz  
3958 -----------------------
3959  "2017-03-10T12:35:00"
3960  "2017-03-10T12:36:00"
3961  "2017-03-10T12:35:00"
3962  "2017-03-10T13:35:00"
3963  "2017-03-11T00:00:00"
3964 (5 rows)
3966 select jsonb_path_query_tz(
3967         '["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"]',
3968         '$[*].timestamp() ? (@ < "2017-03-10 12:35:00".timestamp())');
3969   jsonb_path_query_tz  
3970 -----------------------
3971  "2017-03-10T12:34:00"
3972  "2017-03-10T11:35:00"
3973  "2017-03-10T00:00:00"
3974 (3 rows)
3976 select jsonb_path_query_tz(
3977         '["2017-03-10 12:34:00.123", "2017-03-10 12:35:00.123", "2017-03-10 12:36:00.1123", "2017-03-10 12:35:00.1123+01", "2017-03-10 13:35:00.123+01", "2017-03-10 12:35:00.1-01", "2017-03-10", "2017-03-11"]',
3978         '$[*].timestamp(2) ? (@ >= "2017-03-10 12:35:00.123".timestamp(2))');
3979    jsonb_path_query_tz    
3980 --------------------------
3981  "2017-03-10T12:35:00.12"
3982  "2017-03-10T12:36:00.11"
3983  "2017-03-10T12:35:00.12"
3984  "2017-03-10T13:35:00.1"
3985  "2017-03-11T00:00:00"
3986 (5 rows)
3988 -- timestamptz comparison
3989 select jsonb_path_query(
3990         '["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"]',
3991         '$[*].datetime() ? (@ == "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
3992 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
3993 HINT:  Use *_tz() function for time zone support.
3994 select jsonb_path_query(
3995         '["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"]',
3996         '$[*].datetime() ? (@ >= "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
3997 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
3998 HINT:  Use *_tz() function for time zone support.
3999 select jsonb_path_query(
4000         '["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"]',
4001         '$[*].datetime() ? (@ < "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
4002 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
4003 HINT:  Use *_tz() function for time zone support.
4004 select jsonb_path_query_tz(
4005         '["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"]',
4006         '$[*].datetime() ? (@ == "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
4007      jsonb_path_query_tz     
4008 -----------------------------
4009  "2017-03-10T12:35:00+01:00"
4010  "2017-03-10T11:35:00"
4011 (2 rows)
4013 select jsonb_path_query_tz(
4014         '["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"]',
4015         '$[*].datetime() ? (@ >= "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
4016      jsonb_path_query_tz     
4017 -----------------------------
4018  "2017-03-10T12:35:00+01:00"
4019  "2017-03-10T12:36:00+01:00"
4020  "2017-03-10T12:35:00-02:00"
4021  "2017-03-10T11:35:00"
4022  "2017-03-10T12:35:00"
4023  "2017-03-11"
4024 (6 rows)
4026 select jsonb_path_query_tz(
4027         '["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"]',
4028         '$[*].datetime() ? (@ < "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
4029      jsonb_path_query_tz     
4030 -----------------------------
4031  "2017-03-10T12:34:00+01:00"
4032  "2017-03-10T12:35:00+02:00"
4033  "2017-03-10T10:35:00"
4034  "2017-03-10"
4035 (4 rows)
4037 select jsonb_path_query_tz(
4038         '["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"]',
4039         '$[*].datetime() ? (@ == "2017-03-10 12:35:00 +1".timestamp_tz())');
4040      jsonb_path_query_tz     
4041 -----------------------------
4042  "2017-03-10T12:35:00+01:00"
4043  "2017-03-10T11:35:00"
4044 (2 rows)
4046 select jsonb_path_query_tz(
4047         '["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"]',
4048         '$[*].datetime() ? (@ >= "2017-03-10 12:35:00 +1".timestamp_tz())');
4049      jsonb_path_query_tz     
4050 -----------------------------
4051  "2017-03-10T12:35:00+01:00"
4052  "2017-03-10T12:36:00+01:00"
4053  "2017-03-10T12:35:00-02:00"
4054  "2017-03-10T11:35:00"
4055  "2017-03-10T12:35:00"
4056  "2017-03-11"
4057 (6 rows)
4059 select jsonb_path_query_tz(
4060         '["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"]',
4061         '$[*].datetime() ? (@ < "2017-03-10 12:35:00 +1".timestamp_tz())');
4062      jsonb_path_query_tz     
4063 -----------------------------
4064  "2017-03-10T12:34:00+01:00"
4065  "2017-03-10T12:35:00+02:00"
4066  "2017-03-10T10:35:00"
4067  "2017-03-10"
4068 (4 rows)
4070 select jsonb_path_query(
4071         '["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"]',
4072         '$[*].timestamp_tz() ? (@ == "2017-03-10 12:35:00 +1".timestamp_tz())');
4073 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
4074 HINT:  Use *_tz() function for time zone support.
4075 select jsonb_path_query(
4076         '["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"]',
4077         '$[*].timestamp_tz() ? (@ >= "2017-03-10 12:35:00 +1".timestamp_tz())');
4078 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
4079 HINT:  Use *_tz() function for time zone support.
4080 select jsonb_path_query(
4081         '["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"]',
4082         '$[*].timestamp_tz() ? (@ < "2017-03-10 12:35:00 +1".timestamp_tz())');
4083 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
4084 HINT:  Use *_tz() function for time zone support.
4085 select jsonb_path_query(
4086         '["2017-03-10 12:34:00.123+01", "2017-03-10 12:35:00.123+01", "2017-03-10 12:36:00.1123+01", "2017-03-10 12:35:00.1123+02", "2017-03-10 12:35:00.123-02", "2017-03-10 10:35:00.123", "2017-03-10 11:35:00.1", "2017-03-10 12:35:00.123", "2017-03-10", "2017-03-11"]',
4087         '$[*].timestamp_tz(2) ? (@ >= "2017-03-10 12:35:00.123 +1".timestamp_tz(2))');
4088 ERROR:  cannot convert value from timestamp to timestamptz without time zone usage
4089 HINT:  Use *_tz() function for time zone support.
4090 select jsonb_path_query_tz(
4091         '["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"]',
4092         '$[*].timestamp_tz() ? (@ == "2017-03-10 12:35:00 +1".timestamp_tz())');
4093      jsonb_path_query_tz     
4094 -----------------------------
4095  "2017-03-10T12:35:00+01:00"
4096  "2017-03-10T11:35:00+00:00"
4097 (2 rows)
4099 select jsonb_path_query_tz(
4100         '["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"]',
4101         '$[*].timestamp_tz() ? (@ >= "2017-03-10 12:35:00 +1".timestamp_tz())');
4102      jsonb_path_query_tz     
4103 -----------------------------
4104  "2017-03-10T12:35:00+01:00"
4105  "2017-03-10T12:36:00+01:00"
4106  "2017-03-10T12:35:00-02:00"
4107  "2017-03-10T11:35:00+00:00"
4108  "2017-03-10T12:35:00+00:00"
4109  "2017-03-11T00:00:00+00:00"
4110 (6 rows)
4112 select jsonb_path_query_tz(
4113         '["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"]',
4114         '$[*].timestamp_tz() ? (@ < "2017-03-10 12:35:00 +1".timestamp_tz())');
4115      jsonb_path_query_tz     
4116 -----------------------------
4117  "2017-03-10T12:34:00+01:00"
4118  "2017-03-10T12:35:00+02:00"
4119  "2017-03-10T10:35:00+00:00"
4120  "2017-03-10T00:00:00+00:00"
4121 (4 rows)
4123 select jsonb_path_query_tz(
4124         '["2017-03-10 12:34:00.123+01", "2017-03-10 12:35:00.123+01", "2017-03-10 12:36:00.1123+01", "2017-03-10 12:35:00.1123+02", "2017-03-10 12:35:00.123-02", "2017-03-10 10:35:00.123", "2017-03-10 11:35:00.1", "2017-03-10 12:35:00.123", "2017-03-10", "2017-03-11"]',
4125         '$[*].timestamp_tz(2) ? (@ >= "2017-03-10 12:35:00.123 +1".timestamp_tz(2))');
4126       jsonb_path_query_tz       
4127 --------------------------------
4128  "2017-03-10T12:35:00.12+01:00"
4129  "2017-03-10T12:36:00.11+01:00"
4130  "2017-03-10T12:35:00.12-02:00"
4131  "2017-03-10T12:35:00.12+00:00"
4132  "2017-03-11T00:00:00+00:00"
4133 (5 rows)
4135 -- overflow during comparison
4136 select jsonb_path_query('"1000000-01-01"', '$.datetime() > "2020-01-01 12:00:00".datetime()'::jsonpath);
4137  jsonb_path_query 
4138 ------------------
4139  true
4140 (1 row)
4142 set time zone default;
4143 -- jsonpath operators
4144 SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*]');
4145  jsonb_path_query 
4146 ------------------
4147  {"a": 1}
4148  {"a": 2}
4149 (2 rows)
4151 SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*] ? (@.a > 10)');
4152  jsonb_path_query 
4153 ------------------
4154 (0 rows)
4156 SELECT jsonb_path_query('[{"a": 1}]', '$undefined_var');
4157 ERROR:  could not find jsonpath variable "undefined_var"
4158 SELECT jsonb_path_query('[{"a": 1}]', 'false');
4159  jsonb_path_query 
4160 ------------------
4161  false
4162 (1 row)
4164 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a');
4165 ERROR:  JSON object does not contain key "a"
4166 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a');
4167  jsonb_path_query_array 
4168 ------------------------
4169  [1, 2]
4170 (1 row)
4172 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ == 1)');
4173  jsonb_path_query_array 
4174 ------------------------
4175  [1]
4176 (1 row)
4178 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 10)');
4179  jsonb_path_query_array 
4180 ------------------------
4181  []
4182 (1 row)
4184 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 1, "max": 4}');
4185  jsonb_path_query_array 
4186 ------------------------
4187  [2, 3]
4188 (1 row)
4190 SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 3, "max": 4}');
4191  jsonb_path_query_array 
4192 ------------------------
4193  []
4194 (1 row)
4196 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a');
4197 ERROR:  JSON object does not contain key "a"
4198 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a', silent => true);
4199  jsonb_path_query_first 
4200 ------------------------
4202 (1 row)
4204 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a');
4205  jsonb_path_query_first 
4206 ------------------------
4208 (1 row)
4210 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ == 1)');
4211  jsonb_path_query_first 
4212 ------------------------
4214 (1 row)
4216 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 10)');
4217  jsonb_path_query_first 
4218 ------------------------
4220 (1 row)
4222 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 1, "max": 4}');
4223  jsonb_path_query_first 
4224 ------------------------
4226 (1 row)
4228 SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 3, "max": 4}');
4229  jsonb_path_query_first 
4230 ------------------------
4232 (1 row)
4234 SELECT jsonb_path_query_first('[{"a": 1}]', '$undefined_var');
4235 ERROR:  could not find jsonpath variable "undefined_var"
4236 SELECT jsonb_path_query_first('[{"a": 1}]', 'false');
4237  jsonb_path_query_first 
4238 ------------------------
4239  false
4240 (1 row)
4242 SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*].a ? (@ > 1)';
4243  ?column? 
4244 ----------
4246 (1 row)
4248 SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*] ? (@.a > 2)';
4249  ?column? 
4250 ----------
4252 (1 row)
4254 SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 1)');
4255  jsonb_path_exists 
4256 -------------------
4258 (1 row)
4260 SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 1, "max": 4}');
4261  jsonb_path_exists 
4262 -------------------
4264 (1 row)
4266 SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 3, "max": 4}');
4267  jsonb_path_exists 
4268 -------------------
4270 (1 row)
4272 SELECT jsonb_path_exists('[{"a": 1}]', '$undefined_var');
4273 ERROR:  could not find jsonpath variable "undefined_var"
4274 SELECT jsonb_path_exists('[{"a": 1}]', 'false');
4275  jsonb_path_exists 
4276 -------------------
4278 (1 row)
4280 SELECT jsonb_path_match('true', '$', silent => false);
4281  jsonb_path_match 
4282 ------------------
4284 (1 row)
4286 SELECT jsonb_path_match('false', '$', silent => false);
4287  jsonb_path_match 
4288 ------------------
4290 (1 row)
4292 SELECT jsonb_path_match('null', '$', silent => false);
4293  jsonb_path_match 
4294 ------------------
4296 (1 row)
4298 SELECT jsonb_path_match('1', '$', silent => true);
4299  jsonb_path_match 
4300 ------------------
4302 (1 row)
4304 SELECT jsonb_path_match('1', '$', silent => false);
4305 ERROR:  single boolean result is expected
4306 SELECT jsonb_path_match('"a"', '$', silent => false);
4307 ERROR:  single boolean result is expected
4308 SELECT jsonb_path_match('{}', '$', silent => false);
4309 ERROR:  single boolean result is expected
4310 SELECT jsonb_path_match('[true]', '$', silent => false);
4311 ERROR:  single boolean result is expected
4312 SELECT jsonb_path_match('{}', 'lax $.a', silent => false);
4313 ERROR:  single boolean result is expected
4314 SELECT jsonb_path_match('{}', 'strict $.a', silent => false);
4315 ERROR:  JSON object does not contain key "a"
4316 SELECT jsonb_path_match('{}', 'strict $.a', silent => true);
4317  jsonb_path_match 
4318 ------------------
4320 (1 row)
4322 SELECT jsonb_path_match('[true, true]', '$[*]', silent => false);
4323 ERROR:  single boolean result is expected
4324 SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 1';
4325  ?column? 
4326 ----------
4328 (1 row)
4330 SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 2';
4331  ?column? 
4332 ----------
4334 (1 row)
4336 SELECT jsonb_path_match('[{"a": 1}, {"a": 2}]', '$[*].a > 1');
4337  jsonb_path_match 
4338 ------------------
4340 (1 row)
4342 SELECT jsonb_path_match('[{"a": 1}]', '$undefined_var');
4343 ERROR:  could not find jsonpath variable "undefined_var"
4344 SELECT jsonb_path_match('[{"a": 1}]', 'false');
4345  jsonb_path_match 
4346 ------------------
4348 (1 row)
4350 -- test string comparison (Unicode codepoint collation)
4351 WITH str(j, num) AS
4353         SELECT jsonb_build_object('s', s), num
4354         FROM unnest('{"", "a", "ab", "abc", "abcd", "b", "A", "AB", "ABC", "ABc", "ABcD", "B"}'::text[]) WITH ORDINALITY AS a(s, num)
4356 SELECT
4357         s1.j, s2.j,
4358         jsonb_path_query_first(s1.j, '$.s < $s', vars => s2.j) lt,
4359         jsonb_path_query_first(s1.j, '$.s <= $s', vars => s2.j) le,
4360         jsonb_path_query_first(s1.j, '$.s == $s', vars => s2.j) eq,
4361         jsonb_path_query_first(s1.j, '$.s >= $s', vars => s2.j) ge,
4362         jsonb_path_query_first(s1.j, '$.s > $s', vars => s2.j) gt
4363 FROM str s1, str s2
4364 ORDER BY s1.num, s2.num;
4365        j       |       j       |  lt   |  le   |  eq   |  ge   |  gt   
4366 ---------------+---------------+-------+-------+-------+-------+-------
4367  {"s": ""}     | {"s": ""}     | false | true  | true  | true  | false
4368  {"s": ""}     | {"s": "a"}    | true  | true  | false | false | false
4369  {"s": ""}     | {"s": "ab"}   | true  | true  | false | false | false
4370  {"s": ""}     | {"s": "abc"}  | true  | true  | false | false | false
4371  {"s": ""}     | {"s": "abcd"} | true  | true  | false | false | false
4372  {"s": ""}     | {"s": "b"}    | true  | true  | false | false | false
4373  {"s": ""}     | {"s": "A"}    | true  | true  | false | false | false
4374  {"s": ""}     | {"s": "AB"}   | true  | true  | false | false | false
4375  {"s": ""}     | {"s": "ABC"}  | true  | true  | false | false | false
4376  {"s": ""}     | {"s": "ABc"}  | true  | true  | false | false | false
4377  {"s": ""}     | {"s": "ABcD"} | true  | true  | false | false | false
4378  {"s": ""}     | {"s": "B"}    | true  | true  | false | false | false
4379  {"s": "a"}    | {"s": ""}     | false | false | false | true  | true
4380  {"s": "a"}    | {"s": "a"}    | false | true  | true  | true  | false
4381  {"s": "a"}    | {"s": "ab"}   | true  | true  | false | false | false
4382  {"s": "a"}    | {"s": "abc"}  | true  | true  | false | false | false
4383  {"s": "a"}    | {"s": "abcd"} | true  | true  | false | false | false
4384  {"s": "a"}    | {"s": "b"}    | true  | true  | false | false | false
4385  {"s": "a"}    | {"s": "A"}    | false | false | false | true  | true
4386  {"s": "a"}    | {"s": "AB"}   | false | false | false | true  | true
4387  {"s": "a"}    | {"s": "ABC"}  | false | false | false | true  | true
4388  {"s": "a"}    | {"s": "ABc"}  | false | false | false | true  | true
4389  {"s": "a"}    | {"s": "ABcD"} | false | false | false | true  | true
4390  {"s": "a"}    | {"s": "B"}    | false | false | false | true  | true
4391  {"s": "ab"}   | {"s": ""}     | false | false | false | true  | true
4392  {"s": "ab"}   | {"s": "a"}    | false | false | false | true  | true
4393  {"s": "ab"}   | {"s": "ab"}   | false | true  | true  | true  | false
4394  {"s": "ab"}   | {"s": "abc"}  | true  | true  | false | false | false
4395  {"s": "ab"}   | {"s": "abcd"} | true  | true  | false | false | false
4396  {"s": "ab"}   | {"s": "b"}    | true  | true  | false | false | false
4397  {"s": "ab"}   | {"s": "A"}    | false | false | false | true  | true
4398  {"s": "ab"}   | {"s": "AB"}   | false | false | false | true  | true
4399  {"s": "ab"}   | {"s": "ABC"}  | false | false | false | true  | true
4400  {"s": "ab"}   | {"s": "ABc"}  | false | false | false | true  | true
4401  {"s": "ab"}   | {"s": "ABcD"} | false | false | false | true  | true
4402  {"s": "ab"}   | {"s": "B"}    | false | false | false | true  | true
4403  {"s": "abc"}  | {"s": ""}     | false | false | false | true  | true
4404  {"s": "abc"}  | {"s": "a"}    | false | false | false | true  | true
4405  {"s": "abc"}  | {"s": "ab"}   | false | false | false | true  | true
4406  {"s": "abc"}  | {"s": "abc"}  | false | true  | true  | true  | false
4407  {"s": "abc"}  | {"s": "abcd"} | true  | true  | false | false | false
4408  {"s": "abc"}  | {"s": "b"}    | true  | true  | false | false | false
4409  {"s": "abc"}  | {"s": "A"}    | false | false | false | true  | true
4410  {"s": "abc"}  | {"s": "AB"}   | false | false | false | true  | true
4411  {"s": "abc"}  | {"s": "ABC"}  | false | false | false | true  | true
4412  {"s": "abc"}  | {"s": "ABc"}  | false | false | false | true  | true
4413  {"s": "abc"}  | {"s": "ABcD"} | false | false | false | true  | true
4414  {"s": "abc"}  | {"s": "B"}    | false | false | false | true  | true
4415  {"s": "abcd"} | {"s": ""}     | false | false | false | true  | true
4416  {"s": "abcd"} | {"s": "a"}    | false | false | false | true  | true
4417  {"s": "abcd"} | {"s": "ab"}   | false | false | false | true  | true
4418  {"s": "abcd"} | {"s": "abc"}  | false | false | false | true  | true
4419  {"s": "abcd"} | {"s": "abcd"} | false | true  | true  | true  | false
4420  {"s": "abcd"} | {"s": "b"}    | true  | true  | false | false | false
4421  {"s": "abcd"} | {"s": "A"}    | false | false | false | true  | true
4422  {"s": "abcd"} | {"s": "AB"}   | false | false | false | true  | true
4423  {"s": "abcd"} | {"s": "ABC"}  | false | false | false | true  | true
4424  {"s": "abcd"} | {"s": "ABc"}  | false | false | false | true  | true
4425  {"s": "abcd"} | {"s": "ABcD"} | false | false | false | true  | true
4426  {"s": "abcd"} | {"s": "B"}    | false | false | false | true  | true
4427  {"s": "b"}    | {"s": ""}     | false | false | false | true  | true
4428  {"s": "b"}    | {"s": "a"}    | false | false | false | true  | true
4429  {"s": "b"}    | {"s": "ab"}   | false | false | false | true  | true
4430  {"s": "b"}    | {"s": "abc"}  | false | false | false | true  | true
4431  {"s": "b"}    | {"s": "abcd"} | false | false | false | true  | true
4432  {"s": "b"}    | {"s": "b"}    | false | true  | true  | true  | false
4433  {"s": "b"}    | {"s": "A"}    | false | false | false | true  | true
4434  {"s": "b"}    | {"s": "AB"}   | false | false | false | true  | true
4435  {"s": "b"}    | {"s": "ABC"}  | false | false | false | true  | true
4436  {"s": "b"}    | {"s": "ABc"}  | false | false | false | true  | true
4437  {"s": "b"}    | {"s": "ABcD"} | false | false | false | true  | true
4438  {"s": "b"}    | {"s": "B"}    | false | false | false | true  | true
4439  {"s": "A"}    | {"s": ""}     | false | false | false | true  | true
4440  {"s": "A"}    | {"s": "a"}    | true  | true  | false | false | false
4441  {"s": "A"}    | {"s": "ab"}   | true  | true  | false | false | false
4442  {"s": "A"}    | {"s": "abc"}  | true  | true  | false | false | false
4443  {"s": "A"}    | {"s": "abcd"} | true  | true  | false | false | false
4444  {"s": "A"}    | {"s": "b"}    | true  | true  | false | false | false
4445  {"s": "A"}    | {"s": "A"}    | false | true  | true  | true  | false
4446  {"s": "A"}    | {"s": "AB"}   | true  | true  | false | false | false
4447  {"s": "A"}    | {"s": "ABC"}  | true  | true  | false | false | false
4448  {"s": "A"}    | {"s": "ABc"}  | true  | true  | false | false | false
4449  {"s": "A"}    | {"s": "ABcD"} | true  | true  | false | false | false
4450  {"s": "A"}    | {"s": "B"}    | true  | true  | false | false | false
4451  {"s": "AB"}   | {"s": ""}     | false | false | false | true  | true
4452  {"s": "AB"}   | {"s": "a"}    | true  | true  | false | false | false
4453  {"s": "AB"}   | {"s": "ab"}   | true  | true  | false | false | false
4454  {"s": "AB"}   | {"s": "abc"}  | true  | true  | false | false | false
4455  {"s": "AB"}   | {"s": "abcd"} | true  | true  | false | false | false
4456  {"s": "AB"}   | {"s": "b"}    | true  | true  | false | false | false
4457  {"s": "AB"}   | {"s": "A"}    | false | false | false | true  | true
4458  {"s": "AB"}   | {"s": "AB"}   | false | true  | true  | true  | false
4459  {"s": "AB"}   | {"s": "ABC"}  | true  | true  | false | false | false
4460  {"s": "AB"}   | {"s": "ABc"}  | true  | true  | false | false | false
4461  {"s": "AB"}   | {"s": "ABcD"} | true  | true  | false | false | false
4462  {"s": "AB"}   | {"s": "B"}    | true  | true  | false | false | false
4463  {"s": "ABC"}  | {"s": ""}     | false | false | false | true  | true
4464  {"s": "ABC"}  | {"s": "a"}    | true  | true  | false | false | false
4465  {"s": "ABC"}  | {"s": "ab"}   | true  | true  | false | false | false
4466  {"s": "ABC"}  | {"s": "abc"}  | true  | true  | false | false | false
4467  {"s": "ABC"}  | {"s": "abcd"} | true  | true  | false | false | false
4468  {"s": "ABC"}  | {"s": "b"}    | true  | true  | false | false | false
4469  {"s": "ABC"}  | {"s": "A"}    | false | false | false | true  | true
4470  {"s": "ABC"}  | {"s": "AB"}   | false | false | false | true  | true
4471  {"s": "ABC"}  | {"s": "ABC"}  | false | true  | true  | true  | false
4472  {"s": "ABC"}  | {"s": "ABc"}  | true  | true  | false | false | false
4473  {"s": "ABC"}  | {"s": "ABcD"} | true  | true  | false | false | false
4474  {"s": "ABC"}  | {"s": "B"}    | true  | true  | false | false | false
4475  {"s": "ABc"}  | {"s": ""}     | false | false | false | true  | true
4476  {"s": "ABc"}  | {"s": "a"}    | true  | true  | false | false | false
4477  {"s": "ABc"}  | {"s": "ab"}   | true  | true  | false | false | false
4478  {"s": "ABc"}  | {"s": "abc"}  | true  | true  | false | false | false
4479  {"s": "ABc"}  | {"s": "abcd"} | true  | true  | false | false | false
4480  {"s": "ABc"}  | {"s": "b"}    | true  | true  | false | false | false
4481  {"s": "ABc"}  | {"s": "A"}    | false | false | false | true  | true
4482  {"s": "ABc"}  | {"s": "AB"}   | false | false | false | true  | true
4483  {"s": "ABc"}  | {"s": "ABC"}  | false | false | false | true  | true
4484  {"s": "ABc"}  | {"s": "ABc"}  | false | true  | true  | true  | false
4485  {"s": "ABc"}  | {"s": "ABcD"} | true  | true  | false | false | false
4486  {"s": "ABc"}  | {"s": "B"}    | true  | true  | false | false | false
4487  {"s": "ABcD"} | {"s": ""}     | false | false | false | true  | true
4488  {"s": "ABcD"} | {"s": "a"}    | true  | true  | false | false | false
4489  {"s": "ABcD"} | {"s": "ab"}   | true  | true  | false | false | false
4490  {"s": "ABcD"} | {"s": "abc"}  | true  | true  | false | false | false
4491  {"s": "ABcD"} | {"s": "abcd"} | true  | true  | false | false | false
4492  {"s": "ABcD"} | {"s": "b"}    | true  | true  | false | false | false
4493  {"s": "ABcD"} | {"s": "A"}    | false | false | false | true  | true
4494  {"s": "ABcD"} | {"s": "AB"}   | false | false | false | true  | true
4495  {"s": "ABcD"} | {"s": "ABC"}  | false | false | false | true  | true
4496  {"s": "ABcD"} | {"s": "ABc"}  | false | false | false | true  | true
4497  {"s": "ABcD"} | {"s": "ABcD"} | false | true  | true  | true  | false
4498  {"s": "ABcD"} | {"s": "B"}    | true  | true  | false | false | false
4499  {"s": "B"}    | {"s": ""}     | false | false | false | true  | true
4500  {"s": "B"}    | {"s": "a"}    | true  | true  | false | false | false
4501  {"s": "B"}    | {"s": "ab"}   | true  | true  | false | false | false
4502  {"s": "B"}    | {"s": "abc"}  | true  | true  | false | false | false
4503  {"s": "B"}    | {"s": "abcd"} | true  | true  | false | false | false
4504  {"s": "B"}    | {"s": "b"}    | true  | true  | false | false | false
4505  {"s": "B"}    | {"s": "A"}    | false | false | false | true  | true
4506  {"s": "B"}    | {"s": "AB"}   | false | false | false | true  | true
4507  {"s": "B"}    | {"s": "ABC"}  | false | false | false | true  | true
4508  {"s": "B"}    | {"s": "ABc"}  | false | false | false | true  | true
4509  {"s": "B"}    | {"s": "ABcD"} | false | false | false | true  | true
4510  {"s": "B"}    | {"s": "B"}    | false | true  | true  | true  | false
4511 (144 rows)