Improve regression test code coverage for jsonb and json.
authorAndrew Dunstan <[email protected]>
Tue, 18 Mar 2014 15:40:38 +0000 (11:40 -0400)
committerAndrew Dunstan <[email protected]>
Tue, 18 Mar 2014 15:40:38 +0000 (11:40 -0400)
src/test/regress/expected/json.out
src/test/regress/expected/json_1.out
src/test/regress/expected/jsonb.out
src/test/regress/expected/jsonb_1.out
src/test/regress/sql/json.sql
src/test/regress/sql/jsonb.sql

index 04b969ae101518498f5f85fff69c8e38b10abfff..7437ea9f672c41448d175d649c2f7085cb9e8589 100644 (file)
@@ -464,8 +464,8 @@ CREATE TEMP TABLE test_json (
 );
 INSERT INTO test_json VALUES
 ('scalar','"a scalar"'),
-('array','["zero", "one","two",null,"four","five"]'),
-('object','{"field1":"val1","field2":"val2","field3":null}');
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
 SELECT test_json -> 'x'
 FROM test_json
 WHERE json_type = 'scalar';
@@ -522,6 +522,36 @@ WHERE json_type = 'array';
  two
 (1 row)
 
+SELECT test_json ->> 6 FROM test_json WHERE json_type = 'array';
+ ?column? 
+----------
+ [1,2,3]
+(1 row)
+
+SELECT test_json ->> 7 FROM test_json WHERE json_type = 'array';
+ ?column? 
+----------
+ {"f1":9}
+(1 row)
+
+SELECT test_json ->> 'field4' FROM test_json WHERE json_type = 'object';
+ ?column? 
+----------
+ 4
+(1 row)
+
+SELECT test_json ->> 'field5' FROM test_json WHERE json_type = 'object';
+ ?column? 
+----------
+ [1,2,3]
+(1 row)
+
+SELECT test_json ->> 'field6' FROM test_json WHERE json_type = 'object';
+ ?column? 
+----------
+ {"f1":9}
+(1 row)
+
 SELECT json_object_keys(test_json)
 FROM test_json
 WHERE json_type = 'scalar';
@@ -538,7 +568,20 @@ WHERE json_type = 'object';
  field1
  field2
  field3
-(3 rows)
+ field4
+ field5
+ field6
+(6 rows)
+
+-- test extending object_keys resultset - initial resultset size is 256
+select count(*) from
+    (select json_object_keys(json_object(array_agg(g))) 
+     from (select unnest(array['f'||n,n::text])as g 
+           from generate_series(1,300) as n) x ) y;
+ count 
+-------
+   300
+(1 row)
 
 -- nulls
 select (test_json->'field3') is null as expect_false
index 07b25ca96c61a2d7ccf44540a9f7968e1002631d..4caf92fcf3f25795bb3e9bb9e5795e19ca8fb745 100644 (file)
@@ -464,8 +464,8 @@ CREATE TEMP TABLE test_json (
 );
 INSERT INTO test_json VALUES
 ('scalar','"a scalar"'),
-('array','["zero", "one","two",null,"four","five"]'),
-('object','{"field1":"val1","field2":"val2","field3":null}');
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
 SELECT test_json -> 'x'
 FROM test_json
 WHERE json_type = 'scalar';
@@ -522,6 +522,36 @@ WHERE json_type = 'array';
  two
 (1 row)
 
+SELECT test_json ->> 6 FROM test_json WHERE json_type = 'array';
+ ?column? 
+----------
+ [1,2,3]
+(1 row)
+
+SELECT test_json ->> 7 FROM test_json WHERE json_type = 'array';
+ ?column? 
+----------
+ {"f1":9}
+(1 row)
+
+SELECT test_json ->> 'field4' FROM test_json WHERE json_type = 'object';
+ ?column? 
+----------
+ 4
+(1 row)
+
+SELECT test_json ->> 'field5' FROM test_json WHERE json_type = 'object';
+ ?column? 
+----------
+ [1,2,3]
+(1 row)
+
+SELECT test_json ->> 'field6' FROM test_json WHERE json_type = 'object';
+ ?column? 
+----------
+ {"f1":9}
+(1 row)
+
 SELECT json_object_keys(test_json)
 FROM test_json
 WHERE json_type = 'scalar';
@@ -538,7 +568,20 @@ WHERE json_type = 'object';
  field1
  field2
  field3
-(3 rows)
+ field4
+ field5
+ field6
+(6 rows)
+
+-- test extending object_keys resultset - initial resultset size is 256
+select count(*) from
+    (select json_object_keys(json_object(array_agg(g))) 
+     from (select unnest(array['f'||n,n::text])as g 
+           from generate_series(1,300) as n) x ) y;
+ count 
+-------
+   300
+(1 row)
 
 -- nulls
 select (test_json->'field3') is null as expect_false
index 686f8efddc92dbf922c6a4b97df957f9fab7b97b..b425307755775ee2918e1c117bb2f3ea0faddcbd 100644 (file)
@@ -308,8 +308,8 @@ CREATE TEMP TABLE test_jsonb (
 );
 INSERT INTO test_jsonb VALUES
 ('scalar','"a scalar"'),
-('array','["zero", "one","two",null,"four","five"]'),
-('object','{"field1":"val1","field2":"val2","field3":null}');
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
 SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'scalar';
 ERROR:  cannot call jsonb_object_field (jsonb -> text operator) on a scalar
 SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'array';
@@ -352,6 +352,36 @@ SELECT test_json -> 9 FROM test_jsonb WHERE json_type = 'array';
 
 SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'object';
 ERROR:  cannot call jsonb_array_element (jsonb -> int operator) on an object
+SELECT test_json ->> 6 FROM test_jsonb WHERE json_type = 'array';
+ ?column?  
+-----------
+ [1, 2, 3]
+(1 row)
+
+SELECT test_json ->> 7 FROM test_jsonb WHERE json_type = 'array';
+ ?column?  
+-----------
+ {"f1": 9}
+(1 row)
+
+SELECT test_json ->> 'field4' FROM test_jsonb WHERE json_type = 'object';
+ ?column? 
+----------
+ 4
+(1 row)
+
+SELECT test_json ->> 'field5' FROM test_jsonb WHERE json_type = 'object';
+ ?column?  
+-----------
+ [1, 2, 3]
+(1 row)
+
+SELECT test_json ->> 'field6' FROM test_jsonb WHERE json_type = 'object';
+ ?column?  
+-----------
+ {"f1": 9}
+(1 row)
+
 SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'scalar';
 ERROR:  cannot call jsonb_array_element_text on a scalar
 SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'array';
@@ -372,7 +402,10 @@ SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'object';
  field1
  field2
  field3
-(3 rows)
+ field4
+ field5
+ field6
+(6 rows)
 
 -- nulls
 SELECT (test_json->'field3') IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'object';
index 7c15b4c847652883a21d47b173c89ff5057b5d0c..65b68a5a80d2abe1850f838677a7ddfde9c431d3 100644 (file)
@@ -308,8 +308,8 @@ CREATE TEMP TABLE test_jsonb (
 );
 INSERT INTO test_jsonb VALUES
 ('scalar','"a scalar"'),
-('array','["zero", "one","two",null,"four","five"]'),
-('object','{"field1":"val1","field2":"val2","field3":null}');
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
 SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'scalar';
 ERROR:  cannot call jsonb_object_field (jsonb -> text operator) on a scalar
 SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'array';
@@ -352,6 +352,36 @@ SELECT test_json -> 9 FROM test_jsonb WHERE json_type = 'array';
 
 SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'object';
 ERROR:  cannot call jsonb_array_element (jsonb -> int operator) on an object
+SELECT test_json ->> 6 FROM test_jsonb WHERE json_type = 'array';
+ ?column?  
+-----------
+ [1, 2, 3]
+(1 row)
+
+SELECT test_json ->> 7 FROM test_jsonb WHERE json_type = 'array';
+ ?column?  
+-----------
+ {"f1": 9}
+(1 row)
+
+SELECT test_json ->> 'field4' FROM test_jsonb WHERE json_type = 'object';
+ ?column? 
+----------
+ 4
+(1 row)
+
+SELECT test_json ->> 'field5' FROM test_jsonb WHERE json_type = 'object';
+ ?column?  
+-----------
+ [1, 2, 3]
+(1 row)
+
+SELECT test_json ->> 'field6' FROM test_jsonb WHERE json_type = 'object';
+ ?column?  
+-----------
+ {"f1": 9}
+(1 row)
+
 SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'scalar';
 ERROR:  cannot call jsonb_array_element_text on a scalar
 SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'array';
@@ -372,7 +402,10 @@ SELECT jsonb_object_keys(test_json) FROM test_jsonb WHERE json_type = 'object';
  field1
  field2
  field3
-(3 rows)
+ field4
+ field5
+ field6
+(6 rows)
 
 -- nulls
 SELECT (test_json->'field3') IS NULL AS expect_false FROM test_jsonb WHERE json_type = 'object';
index 2d3f0bcc612d69deb8f24047f688fa1839931174..96000c7df764dd6bd21ec7cd2fd6047f806c6f14 100644 (file)
@@ -136,8 +136,8 @@ CREATE TEMP TABLE test_json (
 
 INSERT INTO test_json VALUES
 ('scalar','"a scalar"'),
-('array','["zero", "one","two",null,"four","five"]'),
-('object','{"field1":"val1","field2":"val2","field3":null}');
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
 
 SELECT test_json -> 'x'
 FROM test_json
@@ -175,6 +175,13 @@ SELECT test_json->>2
 FROM test_json
 WHERE json_type = 'array';
 
+SELECT test_json ->> 6 FROM test_json WHERE json_type = 'array';
+SELECT test_json ->> 7 FROM test_json WHERE json_type = 'array';
+
+SELECT test_json ->> 'field4' FROM test_json WHERE json_type = 'object';
+SELECT test_json ->> 'field5' FROM test_json WHERE json_type = 'object';
+SELECT test_json ->> 'field6' FROM test_json WHERE json_type = 'object';
+
 SELECT json_object_keys(test_json)
 FROM test_json
 WHERE json_type = 'scalar';
@@ -187,6 +194,13 @@ SELECT json_object_keys(test_json)
 FROM test_json
 WHERE json_type = 'object';
 
+-- test extending object_keys resultset - initial resultset size is 256
+
+select count(*) from
+    (select json_object_keys(json_object(array_agg(g))) 
+     from (select unnest(array['f'||n,n::text])as g 
+           from generate_series(1,300) as n) x ) y;
+
 -- nulls
 
 select (test_json->'field3') is null as expect_false
index 21f4da9505cbf8bdf3ce66117771da924f6f558d..847aa7a78e6cee0066d5adfe48f8b2cbd919e910 100644 (file)
@@ -70,8 +70,8 @@ CREATE TEMP TABLE test_jsonb (
 
 INSERT INTO test_jsonb VALUES
 ('scalar','"a scalar"'),
-('array','["zero", "one","two",null,"four","five"]'),
-('object','{"field1":"val1","field2":"val2","field3":null}');
+('array','["zero", "one","two",null,"four","five", [1,2,3],{"f1":9}]'),
+('object','{"field1":"val1","field2":"val2","field3":null, "field4": 4, "field5": [1,2,3], "field6": {"f1":9}}');
 
 SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'scalar';
 SELECT test_json -> 'x' FROM test_jsonb WHERE json_type = 'array';
@@ -87,6 +87,13 @@ SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'array';
 SELECT test_json -> 9 FROM test_jsonb WHERE json_type = 'array';
 SELECT test_json -> 2 FROM test_jsonb WHERE json_type = 'object';
 
+SELECT test_json ->> 6 FROM test_jsonb WHERE json_type = 'array';
+SELECT test_json ->> 7 FROM test_jsonb WHERE json_type = 'array';
+
+SELECT test_json ->> 'field4' FROM test_jsonb WHERE json_type = 'object';
+SELECT test_json ->> 'field5' FROM test_jsonb WHERE json_type = 'object';
+SELECT test_json ->> 'field6' FROM test_jsonb WHERE json_type = 'object';
+
 SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'scalar';
 SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'array';
 SELECT test_json ->> 2 FROM test_jsonb WHERE json_type = 'object';