@@ -140,6 +140,57 @@ SELECT JSON_EXISTS(jsonb '1', '$.a > 2' ERROR ON ERROR);
140140 t
141141(1 row)
142142
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+ ^
143194-- JSON_VALUE
144195SELECT JSON_VALUE(NULL::jsonb, '$');
145196 json_value
@@ -866,6 +917,8 @@ CREATE TABLE test_jsonb_constraints (
866917 CHECK (JSON_QUERY(js::jsonb, '$.a' WITH CONDITIONAL WRAPPER EMPTY OBJECT ON ERROR) < jsonb '[10]')
867918 CONSTRAINT test_jsonb_constraint5
868919 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)
869922);
870923\d test_jsonb_constraints
871924 Table "public.test_jsonb_constraints"
@@ -880,6 +933,7 @@ Check constraints:
880933 "test_jsonb_constraint3" CHECK (JSON_VALUE(js::jsonb, '$."a"' RETURNING integer DEFAULT ('12'::text || i)::integer ON EMPTY ERROR ON ERROR) > i)
881934 "test_jsonb_constraint4" CHECK (JSON_QUERY(js::jsonb, '$."a"' RETURNING jsonb WITH CONDITIONAL WRAPPER EMPTY OBJECT ON ERROR) < '[10]'::jsonb)
882935 "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)
883937
884938SELECT check_clause
885939FROM information_schema.check_constraints
@@ -891,7 +945,8 @@ WHERE constraint_name LIKE 'test_jsonb_constraint%';
891945 ((JSON_VALUE((js)::jsonb, '$."a"' RETURNING integer DEFAULT (('12'::text || i))::integer ON EMPTY ERROR ON ERROR) > i))
892946 ((JSON_QUERY((js)::jsonb, '$."a"' RETURNING jsonb WITH CONDITIONAL WRAPPER EMPTY OBJECT ON ERROR) < '[10]'::jsonb))
893947 ((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)
895950
896951SELECT pg_get_expr(adbin, adrelid) FROM pg_attrdef WHERE adrelid = 'test_jsonb_constraints'::regclass;
897952 pg_get_expr
0 commit comments