mirror of
https://github.com/postgres/postgres.git
synced 2025-09-11 00:12:06 +03:00
SQL/JSON: Fix coercion of constructor outputs to types with typmod
Ensure SQL/JSON constructor functions that allow specifying the target type using the RETURNING clause perform implicit cast to that type. This ensures that output values that exceed the specified length produce an error rather than being silently truncated. This behavior conforms to the SQL standard. Reported-by: Alvaro Herrera <alvherre@alvh.no-ip.org> Reviewed-by: Jian He <jian.universality@gmail.com> Discussion: https://postgr.es/m/202405271326.5a5rprki64aw%40alvherre.pgsql
This commit is contained in:
@@ -463,3 +463,15 @@ SELECT '1' IS JSON AS "any", ('1' || i) IS JSON SCALAR AS "scalar", '[]' IS NOT
|
||||
\sv is_json_view
|
||||
|
||||
DROP VIEW is_json_view;
|
||||
|
||||
-- Test implicit coercion to a fixed-length type specified in RETURNING
|
||||
SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING varchar(2));
|
||||
SELECT JSON_OBJECT('a': JSON_OBJECT('b': 1 RETURNING varchar(2)));
|
||||
SELECT JSON_ARRAY(JSON_ARRAY('{ "a" : 123 }' RETURNING varchar(2)));
|
||||
SELECT JSON_ARRAYAGG(('111' || i)::bytea FORMAT JSON NULL ON NULL RETURNING varchar(2)) FROM generate_series(1,1) i;
|
||||
SELECT JSON_OBJECTAGG(i: ('111' || i)::bytea FORMAT JSON WITH UNIQUE RETURNING varchar(2)) FROM generate_series(1, 1) i;
|
||||
|
||||
-- Now try domain over fixed-length type
|
||||
CREATE DOMAIN sqljson_char2 AS char(2) CHECK (VALUE NOT IN ('12'));
|
||||
SELECT JSON_SERIALIZE('123' RETURNING sqljson_char2);
|
||||
SELECT JSON_SERIALIZE('12' RETURNING sqljson_char2);
|
||||
|
Reference in New Issue
Block a user