@@ -140,6 +140,57 @@ SELECT JSON_EXISTS(jsonb '1', '$.a > 2' ERROR ON ERROR);
140
140
t
141
141
(1 row)
142
142
143
+ -- extension: RETURNING clause
144
+ SELECT JSON_EXISTS(jsonb '1', '$[0]' RETURNING bool);
145
+ json_exists
146
+ -------------
147
+ t
148
+ (1 row)
149
+
150
+ SELECT JSON_EXISTS(jsonb '1', '$[1]' RETURNING bool);
151
+ json_exists
152
+ -------------
153
+ f
154
+ (1 row)
155
+
156
+ SELECT JSON_EXISTS(jsonb '1', '$[0]' RETURNING int);
157
+ json_exists
158
+ -------------
159
+ 1
160
+ (1 row)
161
+
162
+ SELECT JSON_EXISTS(jsonb '1', '$[1]' RETURNING int);
163
+ json_exists
164
+ -------------
165
+ 0
166
+ (1 row)
167
+
168
+ SELECT JSON_EXISTS(jsonb '1', '$[0]' RETURNING text);
169
+ json_exists
170
+ -------------
171
+ true
172
+ (1 row)
173
+
174
+ SELECT JSON_EXISTS(jsonb '1', '$[1]' RETURNING text);
175
+ json_exists
176
+ -------------
177
+ false
178
+ (1 row)
179
+
180
+ SELECT JSON_EXISTS(jsonb '1', 'strict $[1]' RETURNING text FALSE ON ERROR);
181
+ json_exists
182
+ -------------
183
+ false
184
+ (1 row)
185
+
186
+ SELECT JSON_EXISTS(jsonb '1', '$[0]' RETURNING jsonb);
187
+ ERROR: cannot cast type boolean to jsonb
188
+ LINE 1: SELECT JSON_EXISTS(jsonb '1', '$[0]' RETURNING jsonb);
189
+ ^
190
+ SELECT JSON_EXISTS(jsonb '1', '$[0]' RETURNING float4);
191
+ ERROR: cannot cast type boolean to real
192
+ LINE 1: SELECT JSON_EXISTS(jsonb '1', '$[0]' RETURNING float4);
193
+ ^
143
194
-- JSON_VALUE
144
195
SELECT JSON_VALUE(NULL::jsonb, '$');
145
196
json_value
@@ -866,6 +917,8 @@ CREATE TABLE test_jsonb_constraints (
866
917
CHECK (JSON_QUERY(js::jsonb, '$.a' WITH CONDITIONAL WRAPPER EMPTY OBJECT ON ERROR) < jsonb '[10]')
867
918
CONSTRAINT test_jsonb_constraint5
868
919
CHECK (JSON_QUERY(js::jsonb, '$.a' RETURNING char(5) OMIT QUOTES EMPTY ARRAY ON EMPTY) > 'a' COLLATE "C")
920
+ CONSTRAINT test_jsonb_constraint6
921
+ CHECK (JSON_EXISTS(js::jsonb, 'strict $.a' RETURNING int TRUE ON ERROR) < 2)
869
922
);
870
923
\d test_jsonb_constraints
871
924
Table "public.test_jsonb_constraints"
@@ -880,6 +933,7 @@ Check constraints:
880
933
"test_jsonb_constraint3" CHECK (JSON_VALUE(js::jsonb, '$."a"' RETURNING integer DEFAULT ('12'::text || i)::integer ON EMPTY ERROR ON ERROR) > i)
881
934
"test_jsonb_constraint4" CHECK (JSON_QUERY(js::jsonb, '$."a"' RETURNING jsonb WITH CONDITIONAL WRAPPER EMPTY OBJECT ON ERROR) < '[10]'::jsonb)
882
935
"test_jsonb_constraint5" CHECK (JSON_QUERY(js::jsonb, '$."a"' RETURNING character(5) OMIT QUOTES EMPTY ARRAY ON EMPTY) > ('a'::bpchar COLLATE "C"))
936
+ "test_jsonb_constraint6" CHECK (JSON_EXISTS(js::jsonb, 'strict $."a"' RETURNING integer TRUE ON ERROR) < 2)
883
937
884
938
SELECT check_clause
885
939
FROM information_schema.check_constraints
@@ -891,7 +945,8 @@ WHERE constraint_name LIKE 'test_jsonb_constraint%';
891
945
((JSON_VALUE((js)::jsonb, '$."a"' RETURNING integer DEFAULT (('12'::text || i))::integer ON EMPTY ERROR ON ERROR) > i))
892
946
((JSON_QUERY((js)::jsonb, '$."a"' RETURNING jsonb WITH CONDITIONAL WRAPPER EMPTY OBJECT ON ERROR) < '[10]'::jsonb))
893
947
((JSON_QUERY((js)::jsonb, '$."a"' RETURNING character(5) OMIT QUOTES EMPTY ARRAY ON EMPTY) > ('a'::bpchar COLLATE "C")))
894
- (5 rows)
948
+ ((JSON_EXISTS((js)::jsonb, 'strict $."a"' RETURNING integer TRUE ON ERROR) < 2))
949
+ (6 rows)
895
950
896
951
SELECT pg_get_expr(adbin, adrelid) FROM pg_attrdef WHERE adrelid = 'test_jsonb_constraints'::regclass;
897
952
pg_get_expr
0 commit comments