mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-28 00:01:51 +02:00
Correctly handle array pseudotypes in to_json and to_jsonb
Columns with array pseudotypes have not been identified as arrays, so they have been rendered as strings in the json and jsonb conversion routines. This change allows them to be rendered as json arrays, making it possible to deal correctly with the anyarray columns in pg_stats.
This commit is contained in:
parent
4c728f3829
commit
502a3832cc
@ -1397,9 +1397,10 @@ json_categorize_type(Oid typoid,
|
||||
|
||||
default:
|
||||
/* Check for arrays and composites */
|
||||
if (OidIsValid(get_element_type(typoid)))
|
||||
if (OidIsValid(get_element_type(typoid)) || typoid == ANYARRAYOID
|
||||
|| typoid == RECORDARRAYOID)
|
||||
*tcategory = JSONTYPE_ARRAY;
|
||||
else if (type_is_rowtype(typoid))
|
||||
else if (type_is_rowtype(typoid)) /* includes RECORDOID */
|
||||
*tcategory = JSONTYPE_COMPOSITE;
|
||||
else
|
||||
{
|
||||
|
@ -644,9 +644,10 @@ jsonb_categorize_type(Oid typoid,
|
||||
|
||||
default:
|
||||
/* Check for arrays and composites */
|
||||
if (OidIsValid(get_element_type(typoid)))
|
||||
if (OidIsValid(get_element_type(typoid)) || typoid == ANYARRAYOID
|
||||
|| typoid == RECORDARRAYOID)
|
||||
*tcategory = JSONBTYPE_ARRAY;
|
||||
else if (type_is_rowtype(typoid))
|
||||
else if (type_is_rowtype(typoid)) /* includes RECORDOID */
|
||||
*tcategory = JSONBTYPE_COMPOSITE;
|
||||
else
|
||||
{
|
||||
|
@ -383,6 +383,15 @@ SELECT row_to_json(row((select array_agg(x) as d from generate_series(5,10) x)),
|
||||
{"f1":[5,6,7,8,9,10]}
|
||||
(1 row)
|
||||
|
||||
-- anyarray column
|
||||
select to_json(histogram_bounds) histogram_bounds
|
||||
from pg_stats
|
||||
where attname = 'tmplname' and tablename = 'pg_pltemplate';
|
||||
histogram_bounds
|
||||
---------------------------------------------------------------------------------------
|
||||
["plperl","plperlu","plpgsql","plpython2u","plpython3u","plpythonu","pltcl","pltclu"]
|
||||
(1 row)
|
||||
|
||||
-- to_json, timestamps
|
||||
select to_json(timestamp '2014-05-28 12:22:35.614298');
|
||||
to_json
|
||||
|
@ -279,6 +279,15 @@ SELECT array_to_json(ARRAY [jsonb '{"a":1}', jsonb '{"b":[2,3]}']);
|
||||
[{"a": 1},{"b": [2, 3]}]
|
||||
(1 row)
|
||||
|
||||
-- anyarray column
|
||||
select to_jsonb(histogram_bounds) histogram_bounds
|
||||
from pg_stats
|
||||
where attname = 'tmplname' and tablename = 'pg_pltemplate';
|
||||
histogram_bounds
|
||||
----------------------------------------------------------------------------------------------
|
||||
["plperl", "plperlu", "plpgsql", "plpython2u", "plpython3u", "plpythonu", "pltcl", "pltclu"]
|
||||
(1 row)
|
||||
|
||||
-- to_jsonb, timestamps
|
||||
select to_jsonb(timestamp '2014-05-28 12:22:35.614298');
|
||||
to_jsonb
|
||||
|
@ -102,6 +102,12 @@ FROM rows q;
|
||||
|
||||
SELECT row_to_json(row((select array_agg(x) as d from generate_series(5,10) x)),false);
|
||||
|
||||
-- anyarray column
|
||||
|
||||
select to_json(histogram_bounds) histogram_bounds
|
||||
from pg_stats
|
||||
where attname = 'tmplname' and tablename = 'pg_pltemplate';
|
||||
|
||||
-- to_json, timestamps
|
||||
|
||||
select to_json(timestamp '2014-05-28 12:22:35.614298');
|
||||
|
@ -62,6 +62,12 @@ SELECT ' '::jsonb; -- ERROR, no value
|
||||
-- make sure jsonb is passed through json generators without being escaped
|
||||
SELECT array_to_json(ARRAY [jsonb '{"a":1}', jsonb '{"b":[2,3]}']);
|
||||
|
||||
-- anyarray column
|
||||
|
||||
select to_jsonb(histogram_bounds) histogram_bounds
|
||||
from pg_stats
|
||||
where attname = 'tmplname' and tablename = 'pg_pltemplate';
|
||||
|
||||
-- to_jsonb, timestamps
|
||||
|
||||
select to_jsonb(timestamp '2014-05-28 12:22:35.614298');
|
||||
|
Loading…
Reference in New Issue
Block a user