177 lines
4.7 KiB
SQL
177 lines
4.7 KiB
SQL
# name: test/sql/json/test_json_sqlite.test
|
|
# description: Test JSON sqlite tests
|
|
# group: [json]
|
|
|
|
require json
|
|
|
|
statement ok
|
|
pragma enable_verification
|
|
|
|
# some of the more elaborate tests from SQLite JSON1 extension
|
|
# https://github.com/sqlite/sqlite/blob/master/test/json101.test
|
|
statement ok
|
|
CREATE TABLE j1(x varchar);
|
|
|
|
statement ok
|
|
INSERT INTO j1(x)
|
|
VALUES('true'),('false'),('null'),('123'),('-234'),('34.5e+6'),
|
|
('""'),('"\""'),('"\\"'),('"abcdefghijlmnopqrstuvwxyz"'),
|
|
('[]'),('{}'),('[true,false,null,123,-234,34.5e+6,{},[]]'),
|
|
('{"a":true,"b":{"c":false}}');
|
|
|
|
query I
|
|
SELECT count(*) FROM j1 WHERE json_type(x) IN ('OBJECT','ARRAY');
|
|
----
|
|
4
|
|
|
|
query I
|
|
SELECT x FROM j1
|
|
WHERE json_extract(x,'$')<>x
|
|
AND json_type(x) IN ('OBJECT','ARRAY');
|
|
----
|
|
[true,false,null,123,-234,34.5e+6,{},[]]
|
|
|
|
statement ok
|
|
CREATE TABLE j2(id INTEGER PRIMARY KEY, json VARCHAR, src VARCHAR);
|
|
|
|
statement ok
|
|
INSERT INTO j2(id,json,src)
|
|
VALUES(1,'{
|
|
"firstName": "John",
|
|
"lastName": "Smith",
|
|
"isAlive": true,
|
|
"age": 25,
|
|
"address": {
|
|
"streetAddress": "21 2nd Street",
|
|
"city": "New York",
|
|
"state": "NY",
|
|
"postalCode": "10021-3100"
|
|
},
|
|
"phoneNumbers": [
|
|
{
|
|
"type": "home",
|
|
"number": "212 555-1234"
|
|
},
|
|
{
|
|
"type": "office",
|
|
"number": "646 555-4567"
|
|
}
|
|
],
|
|
"children": [],
|
|
"spouse": null
|
|
}','https://en.wikipedia.org/wiki/JSON');
|
|
|
|
statement ok
|
|
INSERT INTO j2(id,json,src)
|
|
VALUES(2, '{
|
|
"id": "0001",
|
|
"type": "donut",
|
|
"name": "Cake",
|
|
"ppu": 0.55,
|
|
"batters":
|
|
{
|
|
"batter":
|
|
[
|
|
{ "id": "1001", "type": "Regular" },
|
|
{ "id": "1002", "type": "Chocolate" },
|
|
{ "id": "1003", "type": "Blueberry" },
|
|
{ "id": "1004", "type": "Devil''s Food" }
|
|
]
|
|
},
|
|
"topping":
|
|
[
|
|
{ "id": "5001", "type": "None" },
|
|
{ "id": "5002", "type": "Glazed" },
|
|
{ "id": "5005", "type": "Sugar" },
|
|
{ "id": "5007", "type": "Powdered Sugar" },
|
|
{ "id": "5006", "type": "Chocolate with Sprinkles" },
|
|
{ "id": "5003", "type": "Chocolate" },
|
|
{ "id": "5004", "type": "Maple" }
|
|
]
|
|
}','https://adobe.github.io/Spry/samples/data_region/JSONDataSetSample.html');
|
|
|
|
statement ok
|
|
INSERT INTO j2(id,json,src)
|
|
VALUES(3,'[
|
|
{
|
|
"id": "0001",
|
|
"type": "donut",
|
|
"name": "Cake",
|
|
"ppu": 0.55,
|
|
"batters":
|
|
{
|
|
"batter":
|
|
[
|
|
{ "id": "1001", "type": "Regular" },
|
|
{ "id": "1002", "type": "Chocolate" },
|
|
{ "id": "1003", "type": "Blueberry" },
|
|
{ "id": "1004", "type": "Devil''s Food" }
|
|
]
|
|
},
|
|
"topping":
|
|
[
|
|
{ "id": "5001", "type": "None" },
|
|
{ "id": "5002", "type": "Glazed" },
|
|
{ "id": "5005", "type": "Sugar" },
|
|
{ "id": "5007", "type": "Powdered Sugar" },
|
|
{ "id": "5006", "type": "Chocolate with Sprinkles" },
|
|
{ "id": "5003", "type": "Chocolate" },
|
|
{ "id": "5004", "type": "Maple" }
|
|
]
|
|
},
|
|
{
|
|
"id": "0002",
|
|
"type": "donut",
|
|
"name": "Raised",
|
|
"ppu": 0.55,
|
|
"batters":
|
|
{
|
|
"batter":
|
|
[
|
|
{ "id": "1001", "type": "Regular" }
|
|
]
|
|
},
|
|
"topping":
|
|
[
|
|
{ "id": "5001", "type": "None" },
|
|
{ "id": "5002", "type": "Glazed" },
|
|
{ "id": "5005", "type": "Sugar" },
|
|
{ "id": "5003", "type": "Chocolate" },
|
|
{ "id": "5004", "type": "Maple" }
|
|
]
|
|
},
|
|
{
|
|
"id": "0003",
|
|
"type": "donut",
|
|
"name": "Old Fashioned",
|
|
"ppu": 0.55,
|
|
"batters":
|
|
{
|
|
"batter":
|
|
[
|
|
{ "id": "1001", "type": "Regular" },
|
|
{ "id": "1002", "type": "Chocolate" }
|
|
]
|
|
},
|
|
"topping":
|
|
[
|
|
{ "id": "5001", "type": "None" },
|
|
{ "id": "5002", "type": "Glazed" },
|
|
{ "id": "5003", "type": "Chocolate" },
|
|
{ "id": "5004", "type": "Maple" }
|
|
]
|
|
}
|
|
]','https://adobe.github.io/Spry/samples/data_region/JSONDataSetSample.html');
|
|
|
|
query T
|
|
SELECT count(*) FROM j2;
|
|
----
|
|
3
|
|
|
|
query TTT
|
|
SELECT id, json_valid(json), json_type(json) FROM j2 ORDER BY id;
|
|
----
|
|
1 true OBJECT
|
|
2 true OBJECT
|
|
3 true ARRAY
|