|
1 | 1 | # LogicTest: !local-mixed-24.3 !local-mixed-25.1 |
2 | 2 |
|
| 3 | +query T |
| 4 | +SELECT jsonb_path_query('"\\"', '$ ? (@ like_regex "^\\\\$")'); |
| 5 | +---- |
| 6 | +"\\" |
| 7 | + |
3 | 8 | query T |
4 | 9 | SELECT jsonb_path_query('{}', '$') |
5 | 10 | ---- |
@@ -764,12 +769,154 @@ SELECT jsonb_path_query('{"a": "hello"}', '$.a / 2'); |
764 | 769 | statement error pgcode 22038 pq: right operand of jsonpath operator \+ is not a single numeric value |
765 | 770 | SELECT jsonb_path_query('{"a": null}', '2 + $.a'); |
766 | 771 |
|
767 | | -# when string literals are supported |
768 | | -# query T rowsort |
769 | | -# SELECT jsonb_path_query('{"data": [{"val": "a", "num": 1}, {"val": "b", "num": 2}, {"val": "a", "num": 3}]}'::jsonb, '$.data ? (@.val == "a")'::jsonpath); |
770 | | -# ---- |
771 | | -# {"num": 1, "val": "a"} |
772 | | -# {"num": 3, "val": "a"} |
| 772 | +query T |
| 773 | +SELECT jsonb_path_query('{}', '"a" == "b"'); |
| 774 | +---- |
| 775 | +false |
| 776 | + |
| 777 | +query T |
| 778 | +SELECT jsonb_path_query('{}', '"a" < "b"'); |
| 779 | +---- |
| 780 | +true |
| 781 | + |
| 782 | +query T |
| 783 | +SELECT jsonb_path_query('{}', '"a" > "b"'); |
| 784 | +---- |
| 785 | +false |
| 786 | + |
| 787 | +statement error pgcode 22038 pq: left operand of jsonpath operator \+ is not a single numeric value |
| 788 | +SELECT jsonb_path_query('{}', '"a" + "b"'); |
| 789 | + |
| 790 | +query T rowsort |
| 791 | +SELECT jsonb_path_query('{"data": [{"val": "a", "num": 1}, {"val": "b", "num": 2}, {"val": "a", "num": 3}]}', '$.data ? (@.val == "a")'); |
| 792 | +---- |
| 793 | +{"num": 1, "val": "a"} |
| 794 | +{"num": 3, "val": "a"} |
| 795 | + |
| 796 | +query T |
| 797 | +SELECT jsonb_path_query('{}', 'null == null'); |
| 798 | +---- |
| 799 | +true |
| 800 | + |
| 801 | +query T |
| 802 | +SELECT jsonb_path_query('{}', 'null != null'); |
| 803 | +---- |
| 804 | +false |
| 805 | + |
| 806 | +query T |
| 807 | +SELECT jsonb_path_query('{}', 'null != 1'); |
| 808 | +---- |
| 809 | +true |
| 810 | + |
| 811 | +query T |
| 812 | +SELECT jsonb_path_query('{}', 'null <= "null"'); |
| 813 | +---- |
| 814 | +false |
| 815 | + |
| 816 | +statement error pgcode 22038 pq: left operand of jsonpath operator \% is not a single numeric value |
| 817 | +SELECT jsonb_path_query('{}', 'null % 1'); |
| 818 | + |
| 819 | +query T |
| 820 | +SELECT jsonb_path_query('{}', 'null like_regex "^he.*$"'); |
| 821 | +---- |
| 822 | +null |
| 823 | + |
| 824 | +query T |
| 825 | +SELECT jsonb_path_query('{}', '"hello" like_regex "^he.*$"'); |
| 826 | +---- |
| 827 | +true |
| 828 | + |
| 829 | +query T |
| 830 | +SELECT jsonb_path_query('{}', '"ahello" like_regex "^he.*$"'); |
| 831 | +---- |
| 832 | +false |
| 833 | + |
| 834 | +query T |
| 835 | +SELECT jsonb_path_query('{"a": "e"}', '$.a ? (@ like_regex "^[aeiou]")'); |
| 836 | +---- |
| 837 | +"e" |
| 838 | + |
| 839 | +query T |
| 840 | +SELECT jsonb_path_query('{"a": {"b": "e"}}', '$.a ? (@.b like_regex "^[aeiou]")'); |
| 841 | +---- |
| 842 | +{"b": "e"} |
| 843 | + |
| 844 | +query empty |
| 845 | +SELECT jsonb_path_query('{"a": {"b": "r"}}', '$.a ? (@.b like_regex "^[aeiou]")'); |
| 846 | + |
| 847 | +query T rowsort |
| 848 | +SELECT jsonb_path_query('["apple", "banana", "orange", "umbrella", "grape"]', 'strict $[*] ? (@ like_regex "^[aeiou]")'); |
| 849 | +---- |
| 850 | +"apple" |
| 851 | +"orange" |
| 852 | +"umbrella" |
| 853 | + |
| 854 | +query T rowsort |
| 855 | +SELECT jsonb_path_query('[{"balance": "987_650", "name": "a"}, {"balance": "987_424", "name": "b"}, {"balance": "100", "name": "c"}]', '$[*] ? (@.balance like_regex "987_.*").balance'); |
| 856 | +---- |
| 857 | +"987_650" |
| 858 | +"987_424" |
| 859 | + |
| 860 | +query T |
| 861 | +SELECT jsonb_path_query('{"ab\\c": "hello"}', '$."ab\\c"'); |
| 862 | +---- |
| 863 | +"hello" |
| 864 | + |
| 865 | +query empty |
| 866 | +SELECT jsonb_path_query('"a\nb"', '$ ? (@ like_regex "^.*$")'); |
| 867 | + |
| 868 | +query T |
| 869 | +SELECT jsonb_path_query('"\\"', '$ ? (@ like_regex "^\\\\$")'); |
| 870 | +---- |
| 871 | +"\\" |
| 872 | + |
| 873 | +query T |
| 874 | +SELECT jsonb_path_query('"\\\\"', '$ ? (@ like_regex "^\\\\\\\\$")'); |
| 875 | +---- |
| 876 | +"\\\\" |
| 877 | + |
| 878 | +query T |
| 879 | +SELECT jsonb_path_query('{"paths": ["C:\\Program Files", "D:\\Data"]}', '$.paths[*] ? (@ like_regex "^[A-Z]:\\\\[A-Za-z]+$")'); |
| 880 | +---- |
| 881 | +"D:\\Data" |
| 882 | + |
| 883 | +query T rowsort |
| 884 | +SELECT jsonb_path_query('{"paths": ["C:\\Program Files (x86)\\", "D:\\My Documents\\", "E:\\Test!@#$"]}', '$.paths[*] ? (@ like_regex "^[A-Z]:\\\\.*\\\\$")'); |
| 885 | +---- |
| 886 | +"C:\\Program Files (x86)\\" |
| 887 | +"D:\\My Documents\\" |
| 888 | + |
| 889 | +query T rowsort |
| 890 | +SELECT jsonb_path_query('{"urls": ["http:\/\/example.com", "https:\/\/test.com\/path"]}', '$.urls[*] ? (@ like_regex "^https?:\/\/.*\.com")'); |
| 891 | +---- |
| 892 | +"http://example.com" |
| 893 | +"https://test.com/path" |
| 894 | + |
| 895 | +query T rowsort |
| 896 | +SELECT jsonb_path_query('{"mixed": ["C:/path\\to/file", "D:\\path/to\\file"]}', '$.mixed[*] ? (@ like_regex "^[A-Z]:[/\\\\].*")'); |
| 897 | +---- |
| 898 | +"C:/path\\to/file" |
| 899 | +"D:\\path/to\\file" |
| 900 | + |
| 901 | +query T rowsort |
| 902 | +SELECT jsonb_path_query('["a+b", "a*b", "a?b", "a.b", "a[b]", "a{b}"]', '$[*] ? (@ like_regex "^a[\\+\\*\\?\\.]b$|^a\\[b\\]$|^a\\{b\\}$")'); |
| 903 | +---- |
| 904 | +"a+b" |
| 905 | +"a*b" |
| 906 | +"a?b" |
| 907 | +"a.b" |
| 908 | +"a[b]" |
| 909 | +"a{b}" |
| 910 | + |
| 911 | +query T rowsort |
| 912 | +SELECT jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c")'); |
| 913 | +---- |
| 914 | +"abc" |
| 915 | +"abdacb" |
| 916 | + |
| 917 | +# TODO(normanchenn): support scanning identQuote within regex. |
| 918 | +# SELECT jsonb_path_query('"He said \"Hello\\World!\""', '$ ? (@ like_regex ".*\"H.*\\\\.*!.*\".*")'); |
| 919 | + |
773 | 920 | # select jsonb_path_query('[1, 2, 3, 4, 5]', '$[-1]'); |
774 | 921 | # select jsonb_path_query('[1, 2, 3, 4, 5]', 'strict $[-1]'); |
775 | 922 |
|
|
0 commit comments