mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Built-in JSON data type.
Like the XML data type, we simply store JSON data as text, after checking that it is valid. More complex operations such as canonicalization and comparison may come later, but this is enough for not. There are a few open issues here, such as whether we should attempt to detect UTF-8 surrogate pairs represented as \uXXXX\uYYYY, but this gets the basic framework in place.
This commit is contained in:
56
src/test/regress/sql/json.sql
Normal file
56
src/test/regress/sql/json.sql
Normal file
@ -0,0 +1,56 @@
|
||||
-- Strings.
|
||||
SELECT '""'::json; -- OK.
|
||||
SELECT $$''$$::json; -- ERROR, single quotes are not allowed
|
||||
SELECT '"abc"'::json; -- OK
|
||||
SELECT '"abc'::json; -- ERROR, quotes not closed
|
||||
SELECT '"abc
|
||||
def"'::json; -- ERROR, unescaped newline in string constant
|
||||
SELECT '"\n\"\\"'::json; -- OK, legal escapes
|
||||
SELECT '"\v"'::json; -- ERROR, not a valid JSON escape
|
||||
SELECT '"\u"'::json; -- ERROR, incomplete escape
|
||||
SELECT '"\u00"'::json; -- ERROR, incomplete escape
|
||||
SELECT '"\u000g"'::json; -- ERROR, g is not a hex digit
|
||||
SELECT '"\u0000"'::json; -- OK, legal escape
|
||||
SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK
|
||||
|
||||
-- Numbers.
|
||||
SELECT '1'::json; -- OK
|
||||
SELECT '0'::json; -- OK
|
||||
SELECT '01'::json; -- ERROR, not valid according to JSON spec
|
||||
SELECT '0.1'::json; -- OK
|
||||
SELECT '9223372036854775808'::json; -- OK, even though it's too large for int8
|
||||
SELECT '1e100'::json; -- OK
|
||||
SELECT '1.3e100'::json; -- OK
|
||||
SELECT '1f2'::json; -- ERROR
|
||||
|
||||
-- Arrays.
|
||||
SELECT '[]'::json; -- OK
|
||||
SELECT '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'::json; -- OK
|
||||
SELECT '[1,2]'::json; -- OK
|
||||
SELECT '[1,2,]'::json; -- ERROR, trailing comma
|
||||
SELECT '[1,2'::json; -- ERROR, no closing bracket
|
||||
SELECT '[1,[2]'::json; -- ERROR, no closing bracket
|
||||
|
||||
-- Objects.
|
||||
SELECT '{}'::json; -- OK
|
||||
SELECT '{"abc"}'::json; -- ERROR, no value
|
||||
SELECT '{"abc":1}'::json; -- OK
|
||||
SELECT '{1:"abc"}'::json; -- ERROR, keys must be strings
|
||||
SELECT '{"abc",1}'::json; -- ERROR, wrong separator
|
||||
SELECT '{"abc"=1}'::json; -- ERROR, totally wrong separator
|
||||
SELECT '{"abc"::1}'::json; -- ERROR, another wrong separator
|
||||
SELECT '{"abc":1,"def":2,"ghi":[3,4],"hij":{"klm":5,"nop":[6]}}'::json; -- OK
|
||||
SELECT '{"abc":1:2}'::json; -- ERROR, colon in wrong spot
|
||||
SELECT '{"abc":1,3}'::json; -- ERROR, no value
|
||||
|
||||
-- Miscellaneous stuff.
|
||||
SELECT 'true'::json; -- OK
|
||||
SELECT 'false'::json; -- OK
|
||||
SELECT 'null'::json; -- OK
|
||||
SELECT ' true '::json; -- OK, even with extra whitespace
|
||||
SELECT 'true false'::json; -- ERROR, too many values
|
||||
SELECT 'true, false'::json; -- ERROR, too many values
|
||||
SELECT 'truf'::json; -- ERROR, not a keyword
|
||||
SELECT 'trues'::json; -- ERROR, not a keyword
|
||||
SELECT ''::json; -- ERROR, no value
|
||||
SELECT ' '::json; -- ERROR, no value
|
Reference in New Issue
Block a user