# 2015-08-12
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
# This file implements tests for JSON SQL functions extension to the
# SQLite library.
#

set testdir [file dirname $argv0]
source $testdir/tester.tcl

do_execsql_test json101-1.1.00 {
  SELECT json_array(1,2.5,null,'hello');
} {[1,2.5,null,"hello"]}
do_execsql_test json101-1.1.01 {
  SELECT json_array(1,'{"abc":2.5,"def":null,"ghi":hello}',99);
  -- the second term goes in as a string:
} {[1,"{\\"abc\\":2.5,\\"def\\":null,\\"ghi\\":hello}",99]}
do_execsql_test json101-1.1.02 {
  SELECT json_array(1,json('{"abc":2.5,"def":null,"ghi":"hello"}'),99);
  -- the second term goes in as JSON
} {[1,{"abc":2.5,"def":null,"ghi":"hello"},99]}
do_execsql_test json101-1.1.03 {
  SELECT json_array(1,json_object('abc',2.5,'def',null,'ghi','hello'),99);
  -- the second term goes in as JSON
} {[1,{"abc":2.5,"def":null,"ghi":"hello"},99]}
do_execsql_test json101-1.2 {
  SELECT hex(json_array('String "\ Test'));
} {5B22537472696E67205C225C5C2054657374225D}
do_catchsql_test json101-1.3 {
  SELECT json_array(1,printf('%.1000c','x'),x'abcd',3);
} {1 {JSON cannot hold BLOB values}}
do_catchsql_test json101-1.3b {
  SELECT jsonb_array(1,printf('%.1000c','x'),x'abcd',3);
} {1 {JSON cannot hold BLOB values}}
do_execsql_test json101-1.4 {
  SELECT json_array(-9223372036854775808,9223372036854775807,0,1,-1,
                    0.0, 1.0, -1.0, -1e99, +2e100,
                    'one','two','three',
                    4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
                    19, NULL, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
                    'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                    'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                    'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                    99);
} {[-9223372036854775808,9223372036854775807,0,1,-1,0.0,1.0,-1.0,-1.0e+99,2.0e+100,"one","two","three",4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,null,21,22,23,24,25,26,27,28,29,30,31,"abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ",99]}
do_execsql_test json101-1.4b {
  SELECT json(jsonb_array(-9223372036854775808,9223372036854775807,0,1,-1,
                    0.0, 1.0, -1.0, -1e99, +2e100,
                    'one','two','three',
                    4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
                    19, NULL, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
                    'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                    'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                    'abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                    99));
} {[-9223372036854775808,9223372036854775807,0,1,-1,0.0,1.0,-1.0,-1.0e+99,2.0e+100,"one","two","three",4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,null,21,22,23,24,25,26,27,28,29,30,31,"abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ",99]}

do_execsql_test json101-2.1 {
  SELECT json_object('a',1,'b',2.5,'c',null,'d','String Test');
} {{{"a":1,"b":2.5,"c":null,"d":"String Test"}}}
do_execsql_test json101-2.1b {
  SELECT json(jsonb_object('a',1,'b',2.5,'c',null,'d','String Test'));
} {{{"a":1,"b":2.5,"c":null,"d":"String Test"}}}
do_catchsql_test json101-2.2 {
  SELECT json_object('a',printf('%.1000c','x'),2,2.5);
} {1 {json_object() labels must be TEXT}}
do_catchsql_test json101-2.2b {
  SELECT jsonb_object('a',printf('%.1000c','x'),2,2.5);
} {1 {json_object() labels must be TEXT}}
do_execsql_test json101-2.2.2 {
  SELECT json_object('a',json_array('xyx',77,4.5),'x',2.5);
} {{{"a":["xyx",77,4.5],"x":2.5}}}
do_execsql_test json101-2.2.2b {
  SELECT json(jsonb_object('a',json_array('xyx',77,4.5),'x',2.5));
} {{{"a":["xyx",77,4.5],"x":2.5}}}
do_execsql_test json101-2.2.3 {
  SELECT json_object('a',jsonb_array('xyx',77,4.5),'x',2.5);
} {{{"a":["xyx",77,4.5],"x":2.5}}}
do_execsql_test json101-2.2.3b {
  SELECT json(jsonb_object('a',jsonb_array('xyx',77,4.5),'x',2.5));
} {{{"a":["xyx",77,4.5],"x":2.5}}}
do_catchsql_test json101-2.3 {
  SELECT json_object('a',1,'b');
} {1 {json_object() requires an even number of arguments}}
do_catchsql_test json101-2.4 {
  SELECT json_object('a',printf('%.1000c','x'),'b',x'abcd');
} {1 {JSON cannot hold BLOB values}}
do_execsql_test json101-2.5 {
  SELECT json_object('a',printf('%.10c','x'),'b',jsonb_array(1,2,3));
} {{{"a":"xxxxxxxxxx","b":[1,2,3]}}}

do_execsql_test json101-3.1 {
  SELECT json_replace('{"a":1,"b":2}','$.a','[3,4,5]');
} {{{"a":"[3,4,5]","b":2}}}
do_execsql_test json101-3.1b {
  SELECT json(jsonb_replace('{"a":1,"b":2}','$.a','[3,4,5]'));
} {{{"a":"[3,4,5]","b":2}}}
do_execsql_test json101-3.2 {
  SELECT json_replace('{"a":1,"b":2}','$.a',json('[3,4,5]'));
} {{{"a":[3,4,5],"b":2}}}
do_execsql_test json101-3.2b {
  SELECT json_replace('{"a":1,"b":2}','$.a',jsonb('[3,4,5]'));
} {{{"a":[3,4,5],"b":2}}}
do_execsql_test json101-3.3 {
  SELECT json_type(json_set('{"a":1,"b":2}','$.b','{"x":3,"y":4}'),'$.b');
} {text}
do_execsql_test json101-3.3b {
  SELECT json_type(jsonb_set('{"a":1,"b":2}','$.b','{"x":3,"y":4}'),'$.b');
} {text}
do_execsql_test json101-3.4 {
  SELECT json_type(json_set('{"a":1,"b":2}','$.b',json('{"x":3,"y":4}')),'$.b');
} {object}
do_execsql_test json101-3.4b {
  SELECT json_type(jsonb_set('{"a":1,"b":2}','$.b',jsonb('{"x":3,"y":4}')),'$.b');
} {object}
ifcapable vtab {
  do_execsql_test json101-3.5 {
    SELECT fullkey, atom, '|' FROM json_tree(json_set('{}','$.x',123,'$.x',456));
  } {{$} {} | {$.x} 456 |}
  do_execsql_test json101-3.5b {
    SELECT fullkey, atom, '|' FROM json_tree(jsonb_set('{}','$.x',123,'$.x',456));
  } {{$} {} | {$.x} 456 |}
}

# Per rfc7159, any JSON value is allowed at the top level, and whitespace
# is permitting before and/or after that value.
#
do_execsql_test json101-4.1 {
  CREATE TABLE j1(x);
  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}}');
  SELECT * FROM j1 WHERE NOT json_valid(x);
} {}
do_execsql_test json101-4.2 {
  SELECT * FROM j1 WHERE NOT json_valid(char(0x20,0x09,0x0a,0x0d)||x);
} {}
do_execsql_test json101-4.3 {
  SELECT * FROM j1 WHERE NOT json_valid(x||char(0x20,0x09,0x0a,0x0d));
} {}

# But an empty string, or a string of pure whitespace is not valid JSON.
#
do_execsql_test json101-4.4 {
  SELECT json_valid(''), json_valid(char(0x20,0x09,0x0a,0x0d));
} {0 0}

# json_remove() and similar functions with no edit operations return their
# input unchanged.
#
do_execsql_test json101-4.5 {
  SELECT x FROM j1 WHERE json_remove(x)<>x;
} {}
do_execsql_test json101-4.6 {
  SELECT x FROM j1 WHERE json_replace(x)<>x;
} {}
do_execsql_test json101-4.7 {
  SELECT x FROM j1 WHERE json_set(x)<>x;
} {}
do_execsql_test json101-4.8 {
  SELECT x FROM j1 WHERE json_insert(x)<>x;
} {}
do_execsql_test json101-4.9 {
  SELECT json_insert('{"a":1}','$.b',CAST(x'0000' AS text));
} {{{"a":1,"b":"\u0000\u0000"}}}

# json_extract(JSON,'$') will return objects and arrays without change.
#
do_execsql_test json101-4.10 {
  SELECT count(*) FROM j1 WHERE json_type(x) IN ('object','array');
  SELECT x FROM j1
   WHERE json_extract(x,'$')<>x
     AND json_type(x) IN ('object','array');
} {4}
do_execsql_test json101-4.10b {
  CREATE TABLE j1b AS SELECT jsonb(x) AS "x" FROM j1;
  SELECT count(*) FROM j1b WHERE json_type(x) IN ('object','array');
  SELECT json(x) FROM j1b
   WHERE json_extract(x,'$')<>json(x)
     AND json_type(x) IN ('object','array');
} {4}

do_execsql_test json101-5.1 {
  CREATE TABLE j2(id INTEGER PRIMARY KEY, json, src);
  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');
  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');
   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');
   SELECT count(*) FROM j2;
   CREATE TABLE j2b(id INTEGER PRIMARY KEY, json, src);
   INSERT INTO J2b(id,json,src) SELECT id, jsonb(json), src FROM j2;
   SELECT count(*) FROM j2b;
} {3 3}

do_execsql_test json101-5.2 {
  SELECT id, json_valid(json), json_type(json), '|' FROM j2 ORDER BY id;
} {1 1 object | 2 1 object | 3 1 array |}
do_execsql_test json101-5.2b {
  SELECT id, json_valid(json,5), json_type(json), '|' FROM j2b ORDER BY id;
} {1 1 object | 2 1 object | 3 1 array |}

ifcapable !vtab {
  finish_test
  return
}

# fullkey is always the same as path+key (with appropriate formatting)
#
do_execsql_test json101-5.3 {
  SELECT j2.rowid, jx.rowid, fullkey, path, key
    FROM j2, json_tree(j2.json) AS jx
   WHERE fullkey!=(path || CASE WHEN typeof(key)=='integer' THEN '['||key||']'
                                ELSE '.'||key END);
} {}
do_execsql_test json101-5.3b {
  SELECT j2b.rowid, jx.rowid, fullkey, path, key
    FROM j2b, json_tree(j2b.json) AS jx
   WHERE fullkey!=(path || CASE WHEN typeof(key)=='integer' THEN '['||key||']'
                                ELSE '.'||key END);
} {}
do_execsql_test json101-5.4 {
  SELECT j2.rowid, jx.rowid, fullkey, path, key
    FROM j2, json_each(j2.json) AS jx
   WHERE fullkey!=(path || CASE WHEN typeof(key)=='integer' THEN '['||key||']'
                                ELSE '.'||key END);
} {}


# Verify that the json_each.json and json_tree.json output is always the
# same as input.
#
do_execsql_test json101-5.5 {
  SELECT j2.rowid, jx.rowid, fullkey, path, key
    FROM j2, json_each(j2.json) AS jx
   WHERE jx.json<>j2.json;
} {}
do_execsql_test json101-5.6 {
  SELECT j2.rowid, jx.rowid, fullkey, path, key
    FROM j2, json_tree(j2.json) AS jx
   WHERE jx.json<>j2.json;
} {}
do_execsql_test json101-5.7 {
  SELECT j2.rowid, jx.rowid, fullkey, path, key
    FROM j2, json_each(j2.json) AS jx
   WHERE jx.value<>jx.atom AND type NOT IN ('array','object');
} {}
do_execsql_test json101-5.8 {
  SELECT j2.rowid, jx.rowid, fullkey, path, key
    FROM j2, json_tree(j2.json) AS jx
   WHERE jx.value<>jx.atom AND type NOT IN ('array','object');
} {}

# 2024-02-16 https://sqlite.org/forum/forumpost/ecb94cd210
# Regression in json_tree()/json_each().  The value column
# should have the "J" subtype if the value is an array or
# object.
#
do_execsql_test json101-5.10 {
  SELECT json_insert('{}','$.a',value) FROM json_tree('[1,2,3]') WHERE atom IS NULL;
} {{{"a":[1,2,3]}}}
#        ^^^^^^^--- In double-quotes, a string literal, prior to bug fix

do_execsql_test json101-5.11 {
  SELECT json_insert('{}','$.a',value) FROM json_tree('"[1,2,3]"');
} {{{"a":"[1,2,3]"}}}

do_execsql_test json101-6.1 {
  SELECT json_valid('{"a":55,"b":72,}');
} {0}
do_execsql_test json101-6.2 {
  SELECT json_error_position('{"a":55,"b":72,}');
} {0}
do_execsql_test json101-6.3 {
  SELECT json_valid(json('{"a":55,"b":72,}'));
} {1}
do_execsql_test json101-6.4 {
  SELECT json_valid('{"a":55,"b":72 , }');
} {0}
do_execsql_test json101-6.5 {
  SELECT json_error_position('{"a":55,"b":72 , }');
} {0}
do_execsql_test json101-6.6 {
  SELECT json_error_position('{"a":55,"b":72,,}');
} {16}
do_execsql_test json101-6.7 {
  SELECT json_valid('{"a":55,"b":72}');
} {1}
do_execsql_test json101-6.8 {
  SELECT json_error_position('["a",55,"b",72,]');
} {0}
do_execsql_test json101-6.9 {
  SELECT json_error_position('["a",55,"b",72 , ]');
} {0}
do_execsql_test json101-6.10 {
  SELECT json_error_position('["a",55,"b",72,,]');
} {16}
do_execsql_test json101-6.11 {
  SELECT json_valid('["a",55,"b",72]');
} {1}

# White-space tests.  Note that form-feed is not white-space in JSON.
# ticket [57eec374ae1d0a1d4a23077a95f4e173fe269113]
# 
foreach {tn isvalid ws} {
  7.1  1  char(0x20)
  7.2  1  char(0x09)
  7.3  1  char(0x0A)
  7.4  1  char(0x0D)
  7.5  0  char(0x0C)
  7.6  1  char(0x20,0x09,0x0a,0x0d,0x20)
  7.7  0  char(0x20,0x09,0x0a,0x0c,0x0d,0x20)
} {
  do_execsql_test json101-$tn.1 \
    "SELECT json_valid(printf('%s{%s\"x\"%s:%s9%s}%s',
         $::ws,$::ws,$::ws,$::ws,$::ws,$::ws));" \
  $isvalid
}

# Ticket https://www.sqlite.org/src/info/ad2559db380abf8e
# Control characters must be escaped in JSON strings.
#
do_execsql_test json101-8.1 {
  DROP TABLE IF EXISTS t8;
  CREATE TABLE t8(a,b);
  INSERT INTO t8(a) VALUES('abc' || char(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35) || 'xyz');
  UPDATE t8 SET b=json_array(a);
  SELECT b FROM t8;
} {{["abc\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#xyz"]}}
do_execsql_test json101-8.1b {
  DROP TABLE IF EXISTS t8;
  CREATE TABLE t8(a,b);
  INSERT INTO t8(a) VALUES('abc' || char(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35) || 'xyz');
  UPDATE t8 SET b=jsonb_array(a);
  SELECT json(b) FROM t8;
} {{["abc\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#xyz"]}}
do_execsql_test json101-8.2 {
  SELECT a=json_extract(b,'$[0]') FROM t8;
} {1}

# 2017-04-12.  Regression reported on the mailing list by Rolf Ade
#
do_execsql_test json101-8.3 {
  SELECT json_valid(char(0x22,0xe4,0x22));
} {1}
do_execsql_test json101-8.4 {
  SELECT unicode(json_extract(char(0x22,228,0x22),'$'));
} {228}

# The json_quote() function transforms an SQL value into a JSON value.
# String values are quoted and interior quotes are escaped.  NULL values
# are rendered as the unquoted string "null".
#
do_execsql_test json101-9.1 {
  SELECT json_quote('abc"xyz');
} {{"abc\"xyz"}}
do_execsql_test json101-9.2 {
  SELECT json_quote(3.14159);
} {3.14159}
do_execsql_test json101-9.3 {
  SELECT json_quote(12345);
} {12345}
do_execsql_test json101-9.4 {
  SELECT json_quote(null);
} {"null"}
do_catchsql_test json101-9.5 {
  SELECT json_quote(x'3031323334');
} {1 {JSON cannot hold BLOB values}}
do_catchsql_test json101-9.6 {
  SELECT json_quote(123,456)
} {1 {wrong number of arguments to function json_quote()}}
do_catchsql_test json101-9.7 {
  SELECT json_quote()
} {1 {wrong number of arguments to function json_quote()}}

# Make sure only valid backslash-escapes are accepted.
#
do_execsql_test json101-10.1 {
  SELECT json_valid('" \  "');
} {0}
do_execsql_test json101-10.2 {
  SELECT json_valid('" \! "');
} {0}
do_execsql_test json101-10.3 {
  SELECT json_valid('" \" "');
} {1}
do_execsql_test json101-10.4 {
  SELECT json_valid('" \# "');
} {0}
do_execsql_test json101-10.5 {
  SELECT json_valid('" \$ "');
} {0}
do_execsql_test json101-10.6 {
  SELECT json_valid('" \% "');
} {0}
do_execsql_test json101-10.7 {
  SELECT json_valid('" \& "');
} {0}
do_execsql_test json101-10.8 {
  SELECT json_valid('" \'' "');
} {0}
do_execsql_test json101-10.9 {
  SELECT json_valid('" \( "');
} {0}
do_execsql_test json101-10.10 {
  SELECT json_valid('" \) "');
} {0}
do_execsql_test json101-10.11 {
  SELECT json_valid('" \* "');
} {0}
do_execsql_test json101-10.12 {
  SELECT json_valid('" \+ "');
} {0}
do_execsql_test json101-10.13 {
  SELECT json_valid('" \, "');
} {0}
do_execsql_test json101-10.14 {
  SELECT json_valid('" \- "');
} {0}
do_execsql_test json101-10.15 {
  SELECT json_valid('" \. "');
} {0}
do_execsql_test json101-10.16 {
  SELECT json_valid('" \/ "');
} {1}
do_execsql_test json101-10.17 {
  SELECT json_valid('" \0 "');
} {0}
do_execsql_test json101-10.18 {
  SELECT json_valid('" \1 "');
} {0}
do_execsql_test json101-10.19 {
  SELECT json_valid('" \2 "');
} {0}
do_execsql_test json101-10.20 {
  SELECT json_valid('" \3 "');
} {0}
do_execsql_test json101-10.21 {
  SELECT json_valid('" \4 "');
} {0}
do_execsql_test json101-10.22 {
  SELECT json_valid('" \5 "');
} {0}
do_execsql_test json101-10.23 {
  SELECT json_valid('" \6 "');
} {0}
do_execsql_test json101-10.24 {
  SELECT json_valid('" \7 "');
} {0}
do_execsql_test json101-10.25 {
  SELECT json_valid('" \8 "');
} {0}
do_execsql_test json101-10.26 {
  SELECT json_valid('" \9 "');
} {0}
do_execsql_test json101-10.27 {
  SELECT json_valid('" \: "');
} {0}
do_execsql_test json101-10.28 {
  SELECT json_valid('" \; "');
} {0}
do_execsql_test json101-10.29 {
  SELECT json_valid('" \< "');
} {0}
do_execsql_test json101-10.30 {
  SELECT json_valid('" \= "');
} {0}
do_execsql_test json101-10.31 {
  SELECT json_valid('" \> "');
} {0}
do_execsql_test json101-10.32 {
  SELECT json_valid('" \? "');
} {0}
do_execsql_test json101-10.33 {
  SELECT json_valid('" \@ "');
} {0}
do_execsql_test json101-10.34 {
  SELECT json_valid('" \A "');
} {0}
do_execsql_test json101-10.35 {
  SELECT json_valid('" \B "');
} {0}
do_execsql_test json101-10.36 {
  SELECT json_valid('" \C "');
} {0}
do_execsql_test json101-10.37 {
  SELECT json_valid('" \D "');
} {0}
do_execsql_test json101-10.38 {
  SELECT json_valid('" \E "');
} {0}
do_execsql_test json101-10.39 {
  SELECT json_valid('" \F "');
} {0}
do_execsql_test json101-10.40 {
  SELECT json_valid('" \G "');
} {0}
do_execsql_test json101-10.41 {
  SELECT json_valid('" \H "');
} {0}
do_execsql_test json101-10.42 {
  SELECT json_valid('" \I "');
} {0}
do_execsql_test json101-10.43 {
  SELECT json_valid('" \J "');
} {0}
do_execsql_test json101-10.44 {
  SELECT json_valid('" \K "');
} {0}
do_execsql_test json101-10.45 {
  SELECT json_valid('" \L "');
} {0}
do_execsql_test json101-10.46 {
  SELECT json_valid('" \M "');
} {0}
do_execsql_test json101-10.47 {
  SELECT json_valid('" \N "');
} {0}
do_execsql_test json101-10.48 {
  SELECT json_valid('" \O "');
} {0}
do_execsql_test json101-10.49 {
  SELECT json_valid('" \P "');
} {0}
do_execsql_test json101-10.50 {
  SELECT json_valid('" \Q "');
} {0}
do_execsql_test json101-10.51 {
  SELECT json_valid('" \R "');
} {0}
do_execsql_test json101-10.52 {
  SELECT json_valid('" \S "');
} {0}
do_execsql_test json101-10.53 {
  SELECT json_valid('" \T "');
} {0}
do_execsql_test json101-10.54 {
  SELECT json_valid('" \U "');
} {0}
do_execsql_test json101-10.55 {
  SELECT json_valid('" \V "');
} {0}
do_execsql_test json101-10.56 {
  SELECT json_valid('" \W "');
} {0}
do_execsql_test json101-10.57 {
  SELECT json_valid('" \X "');
} {0}
do_execsql_test json101-10.58 {
  SELECT json_valid('" \Y "');
} {0}
do_execsql_test json101-10.59 {
  SELECT json_valid('" \Z "');
} {0}
do_execsql_test json101-10.60 {
  SELECT json_valid('" \[ "');
} {0}
do_execsql_test json101-10.61 {
  SELECT json_valid('" \\ "');
} {1}
do_execsql_test json101-10.62 {
  SELECT json_valid('" \] "');
} {0}
do_execsql_test json101-10.63 {
  SELECT json_valid('" \^ "');
} {0}
do_execsql_test json101-10.64 {
  SELECT json_valid('" \_ "');
} {0}
do_execsql_test json101-10.65 {
  SELECT json_valid('" \` "');
} {0}
do_execsql_test json101-10.66 {
  SELECT json_valid('" \a "');
} {0}
do_execsql_test json101-10.67 {
  SELECT json_valid('" \b "');
} {1}
do_execsql_test json101-10.68 {
  SELECT json_valid('" \c "');
} {0}
do_execsql_test json101-10.69 {
  SELECT json_valid('" \d "');
} {0}
do_execsql_test json101-10.70 {
  SELECT json_valid('" \e "');
} {0}
do_execsql_test json101-10.71 {
  SELECT json_valid('" \f "');
} {1}
do_execsql_test json101-10.72 {
  SELECT json_valid('" \g "');
} {0}
do_execsql_test json101-10.73 {
  SELECT json_valid('" \h "');
} {0}
do_execsql_test json101-10.74 {
  SELECT json_valid('" \i "');
} {0}
do_execsql_test json101-10.75 {
  SELECT json_valid('" \j "');
} {0}
do_execsql_test json101-10.76 {
  SELECT json_valid('" \k "');
} {0}
do_execsql_test json101-10.77 {
  SELECT json_valid('" \l "');
} {0}
do_execsql_test json101-10.78 {
  SELECT json_valid('" \m "');
} {0}
do_execsql_test json101-10.79 {
  SELECT json_valid('" \n "');
} {1}
do_execsql_test json101-10.80 {
  SELECT json_valid('" \o "');
} {0}
do_execsql_test json101-10.81 {
  SELECT json_valid('" \p "');
} {0}
do_execsql_test json101-10.82 {
  SELECT json_valid('" \q "');
} {0}
do_execsql_test json101-10.83 {
  SELECT json_valid('" \r "');
} {1}
do_execsql_test json101-10.84 {
  SELECT json_valid('" \s "');
} {0}
do_execsql_test json101-10.85 {
  SELECT json_valid('" \t "');
} {1}
do_execsql_test json101-10.86.0 {
  SELECT json_valid('" \u "');
} {0}
do_execsql_test json101-10.86.1 {
  SELECT json_valid('" \ua "');
} {0}
do_execsql_test json101-10.86.2 {
  SELECT json_valid('" \uab "');
} {0}
do_execsql_test json101-10.86.3 {
  SELECT json_valid('" \uabc "');
} {0}
do_execsql_test json101-10.86.4 {
  SELECT json_valid('" \uabcd "');
} {1}
do_execsql_test json101-10.86.5 {
  SELECT json_valid('" \uFEDC "');
} {1}
do_execsql_test json101-10.86.6 {
  SELECT json_valid('" \u1234 "');
} {1}
do_execsql_test json101-10.87 {
  SELECT json_valid('" \v "');
} {0}
do_execsql_test json101-10.88 {
  SELECT json_valid('" \w "');
} {0}
do_execsql_test json101-10.89 {
  SELECT json_valid('" \x "');
} {0}
do_execsql_test json101-10.90 {
  SELECT json_valid('" \y "');
} {0}
do_execsql_test json101-10.91 {
  SELECT json_valid('" \z "');
} {0}
do_execsql_test json101-10.92 {
  SELECT json_valid('" \{ "');
} {0}
do_execsql_test json101-10.93 {
  SELECT json_valid('" \| "');
} {0}
do_execsql_test json101-10.94 {
  SELECT json_valid('" \} "');
} {0}
do_execsql_test json101-10.95 {
  SELECT json_valid('" \~ "');
} {0}

#--------------------------------------------------------------------------
# 2017-04-11.  https://www.sqlite.org/src/info/981329adeef51011
# Stack overflow on deeply nested JSON.
#
# The following tests confirm that deeply nested JSON is considered invalid.
#
do_execsql_test json101-11.0 {
  /* Shallow enough to be parsed */
  SELECT json_valid(printf('%.1000c0%.1000c','[',']'));
} {1}
do_execsql_test json101-11.1 {
  /* Too deep by one */
  SELECT json_valid(printf('%.1001c0%.1001c','[',']'));
} {0}
do_execsql_test json101-11.2 {
  /* Shallow enough to be parsed { */
  SELECT json_valid(replace(printf('%.1000c0%.1000c','[','}'),'[','{"a":'));
  /* } */
} {1}
do_execsql_test json101-11.3 {
  /* Too deep by one { */
  SELECT json_valid(replace(printf('%.1001c0%.1001c','[','}'),'[','{"a":'));
  /* } */
} {0}

# 2017-10-27.  Demonstrate the ability to access an element from
# a json structure even though the element name constains a "."
# character, by quoting the element name in the path.
#
do_execsql_test json101-12.100 {
  CREATE TABLE t12(x);
  INSERT INTO t12(x) VALUES(
    '{"settings":
        {"layer2":
           {"hapax.legomenon":
              {"forceDisplay":true,
               "transliterate":true,
               "add.footnote":true,
               "summary.report":true},
            "dis.legomenon":
              {"forceDisplay":true,
               "transliterate":false,
               "add.footnote":false,
               "summary.report":true},
            "tris.legomenon":
              {"forceDisplay":true,
               "transliterate":false,
               "add.footnote":false,
               "summary.report":false}
           }
        }
     }');
} {}

do_execsql_test json101-12.110 {
  SELECT json_remove(x, '$.settings.layer2."dis.legomenon".forceDisplay')
    FROM t12;
} {{{"settings":{"layer2":{"hapax.legomenon":{"forceDisplay":true,"transliterate":true,"add.footnote":true,"summary.report":true},"dis.legomenon":{"transliterate":false,"add.footnote":false,"summary.report":true},"tris.legomenon":{"forceDisplay":true,"transliterate":false,"add.footnote":false,"summary.report":false}}}}}}
do_execsql_test json101-12.110b {
  SELECT json_remove(jsonb(x), '$.settings.layer2."dis.legomenon".forceDisplay')
    FROM t12;
} {{{"settings":{"layer2":{"hapax.legomenon":{"forceDisplay":true,"transliterate":true,"add.footnote":true,"summary.report":true},"dis.legomenon":{"transliterate":false,"add.footnote":false,"summary.report":true},"tris.legomenon":{"forceDisplay":true,"transliterate":false,"add.footnote":false,"summary.report":false}}}}}}
do_execsql_test json101-12.120 {
  SELECT json_extract(x, '$.settings.layer2."tris.legomenon"."summary.report"')
    FROM t12;
} {0}
do_execsql_test json101-12.120b {
  SELECT json_extract(jsonb(x), '$.settings.layer2."tris.legomenon"."summary.report"')
    FROM t12;
} {0}

# 2018-01-26
# ticket https://www.sqlite.org/src/tktview/80177f0c226ff54f6ddd41
# Make sure the query planner knows about the arguments to table-valued functions.
#
do_execsql_test json101-13.100 {
  DROP TABLE IF EXISTS t1;
  DROP TABLE IF EXISTS t2;
  CREATE TABLE t1(id, json);
  INSERT INTO t1(id,json) VALUES(1,'{"items":[3,5]}');
  CREATE TABLE t2(id, json);
  INSERT INTO t2(id,json) VALUES(2,'{"value":2}');
  INSERT INTO t2(id,json) VALUES(3,'{"value":3}');
  INSERT INTO t2(id,json) VALUES(4,'{"value":4}');
  INSERT INTO t2(id,json) VALUES(5,'{"value":5}');
  INSERT INTO t2(id,json) VALUES(6,'{"value":6}');
  SELECT * FROM t1 CROSS JOIN t2
   WHERE EXISTS(SELECT 1 FROM json_each(t1.json,'$.items') AS Z
                 WHERE Z.value==t2.id);
} {1 {{"items":[3,5]}} 3 {{"value":3}} 1 {{"items":[3,5]}} 5 {{"value":5}}}
do_execsql_test json101-13.110 {
  SELECT * FROM t2 CROSS JOIN t1
   WHERE EXISTS(SELECT 1 FROM json_each(t1.json,'$.items') AS Z
                 WHERE Z.value==t2.id);
} {3 {{"value":3}} 1 {{"items":[3,5]}} 5 {{"value":5}} 1 {{"items":[3,5]}}}

# 2018-05-16
# Incorrect fullkey output from json_each()
# when the input JSON is not an array or object.
#
do_execsql_test json101-14.100 {
  SELECT fullkey FROM json_each('123');
} {$}
do_execsql_test json101-14.110 {
  SELECT fullkey FROM json_each('123.56');
} {$}
do_execsql_test json101-14.120 {
  SELECT fullkey FROM json_each('"hello"');
} {$}
do_execsql_test json101-14.130 {
  SELECT fullkey FROM json_each('null');
} {$}
do_execsql_test json101-14.140 {
  SELECT fullkey FROM json_tree('123');
} {$}
do_execsql_test json101-14.150 {
  SELECT fullkey FROM json_tree('123.56');
} {$}
do_execsql_test json101-14.160 {
  SELECT fullkey FROM json_tree('"hello"');
} {$}
do_execsql_test json101-14.170 {
  SELECT fullkey FROM json_tree('null');
} {$}

# 2018-12-03
# Make sure the table-valued functions contained within parentheses
# work correctly.
#
# Bug reported via private email. See TH3 for more information.
#
do_execsql_test json101-15.100 {
  SELECT * FROM JSON_EACH('{"a":1, "b":2}');
} {a 1 integer 1 1 {} {$.a} {$} b 2 integer 2 5 {} {$.b} {$}}
do_execsql_test json101-15.110 {
  SELECT xyz.* FROM JSON_EACH('{"a":1, "b":2}') AS xyz;
} {a 1 integer 1 1 {} {$.a} {$} b 2 integer 2 5 {} {$.b} {$}}
do_execsql_test json101-15.120 {
  SELECT * FROM (JSON_EACH('{"a":1, "b":2}'));
} {a 1 integer 1 1 {} {$.a} {$} b 2 integer 2 5 {} {$.b} {$}}
do_execsql_test json101-15.130 {
  SELECT xyz.* FROM (JSON_EACH('{"a":1, "b":2}')) AS xyz;
} {a 1 integer 1 1 {} {$.a} {$} b 2 integer 2 5 {} {$.b} {$}}

# 2019-11-10
# Mailing list bug report on the handling of surrogate pairs
# in JSON.
#
do_execsql_test json101-16.10 {
  SELECT length(json_extract('"abc\uD834\uDD1Exyz"','$'));
} {7}
do_execsql_test json101-16.20 {
  SELECT length(json_extract('"\uD834\uDD1E"','$'));
} {1}
do_execsql_test json101-16.30 {
  SELECT unicode(json_extract('"\uD834\uDD1E"','$'));
} {119070}

# 2022-01-30 dbsqlfuzz 4678cf825d27f87c9b8343720121e12cf944b71a
do_execsql_test json101-17.1 {
  DROP TABLE IF EXISTS t1;
  DROP TABLE IF EXISTS t2;
  CREATE TABLE t1(a,b,c);
  CREATE TABLE t2(d);
  SELECT * FROM t1 LEFT JOIN t2 ON (SELECT b FROM json_each ORDER BY 1);
} {}

# 2022-04-04 forum post https://sqlite.org/forum/forumpost/c082aeab43
do_execsql_test json101-18.1 {
  SELECT json_valid('{"":5}');
} {1}
do_execsql_test json101-18.2 {
  SELECT json_extract('{"":5}', '$.""');
} {5}
do_execsql_test json101-18.3 {
  SELECT json_extract('[3,{"a":4,"":[5,{"hi":6},7]},8]', '$[1].""[1].hi');
} {6}
do_execsql_test json101-18.4 {
  SELECT json_extract('[3,{"a":4,"":[5,{"hi":6},7]},8]', '$[1].""[1]."hi"');
} {6}
do_catchsql_test json101-18.5 {
  SELECT json_extract('{"":8}', '$.');
} {1 {bad JSON path: '$.'}}

# 2022-08-29 https://sqlite.org/forum/forumpost/9b9e4716c0d7bbd1
# This is not a problem specifically with JSON functions.  It is
# a problem with transaction control.  But the json() function makes
# the problem more easily accessible, so it is tested here.
#
do_execsql_test json101-19.1 {
  DROP TABLE IF EXISTS t1;
  CREATE TABLE t1(x);
} {}
do_catchsql_test json101-19.2 {
  BEGIN;
  INSERT INTO t1 VALUES(0), (json('not-valid-json'));
} {1 {malformed JSON}}
do_execsql_test json101-19.3 {
  COMMIT;
  SELECT * FROM t1;
} {}

# 2023-03-17 positive and negative infinities
#
do_execsql_test json101-20.1 {
  SELECT json_object('a',2e370,'b',-3e380);
} {{{"a":9.0e+999,"b":-9.0e+999}}}
do_execsql_test json101-20.2 {
  SELECT json_object('a',2e370,'b',-3e380)->>'a';
} Inf
do_execsql_test json101-20.3 {
  SELECT json_object('a',2e370,'b',-3e380)->>'b';
} {-Inf}

# 2023-05-02 https://sqlite.org/forum/forumpost/06c6334412
# JSON functions should normally return NULL when given
# a NULL value as the JSON input.
#
db null NULL
if {[db exists {SELECT * FROM pragma_compile_options WHERE compile_options LIKE '%legacy_json_valid%'}]} {
  do_execsql_test json101-21.1-legacy {
    SELECT json_valid(NULL);
  } 0
} else {
  do_execsql_test json101-21.1-correct {
    SELECT json_valid(NULL);
  } NULL
}
do_execsql_test json101-21.2 {
  SELECT json_error_position(NULL);
} NULL
do_execsql_test json101-21.3 {
  SELECT json(NULL);
} NULL
do_execsql_test json101-21.4 {
  SELECT json_array(NULL);
} {[null]}
do_execsql_test json101-21.5 {
  SELECT json_extract(NULL);
} NULL
do_execsql_test json101-21.6 {
  SELECT json_insert(NULL,'$',123);
} NULL
do_execsql_test json101-21.7 {
  SELECT NULL->0;
} NULL
do_execsql_test json101-21.8 {
  SELECT NULL->>0;
} NULL
do_execsql_test json101-21.9 {
  SELECT '{a:5}'->NULL;
} NULL
do_execsql_test json101-21.10 {
  SELECT '{a:5}'->>NULL;
} NULL
do_catchsql_test json101-21.11 {
  SELECT json_object(NULL,5);
} {1 {json_object() labels must be TEXT}}
do_execsql_test json101-21.12 {
  SELECT json_patch(NULL,'{a:5}');
} NULL
do_execsql_test json101-21.13 {
  SELECT json_patch('{a:5}',NULL);
} NULL
do_execsql_test json101-21.14 {
  SELECT json_patch(NULL,NULL);
} NULL
do_execsql_test json101-21.15 {
  SELECT json_remove(NULL,'$');
} NULL
do_execsql_test json101-21.16 {
  SELECT json_remove('{a:5,b:7}',NULL);
} NULL
do_execsql_test json101-21.17 {
  SELECT json_replace(NULL,'$.a',123);
} NULL
do_execsql_test json101-21.18 {
  SELECT json_replace('{a:5,b:7}',NULL,NULL);
} {{{"a":5,"b":7}}}
do_execsql_test json101-21.19 {
  SELECT json_set(NULL,'$.a',123);
} NULL
do_execsql_test json101-21.20 {
  SELECT json_set('{a:5,b:7}',NULL,NULL);
} {{{"a":5,"b":7}}}
do_execsql_test json101-21.21 {
  SELECT json_type(NULL);
} NULL
do_execsql_test json101-21.22 {
  SELECT json_type('{a:5,b:7}',NULL);
} NULL
do_execsql_test json101-21.23 {
  SELECT json_quote(NULL);
} null
do_execsql_test json101-21.24 {
  SELECT count(*) FROM json_each(NULL);
} 0
do_execsql_test json101-21.25 {
  SELECT count(*) FROM json_tree(NULL);
} 0
do_execsql_test json101-21.26 {
  WITH c(x) AS (VALUES(1),(2.0),(NULL),('three'))
  SELECT json_group_array(x) FROM c;
} {[1,2.0,null,"three"]}
do_execsql_test json101-21.27 {
  WITH c(x,y) AS (VALUES('a',1),('b',2.0),('c',NULL),(NULL,'three'),('e','four'))
  SELECT json_group_object(x,y) FROM c;
} {{{"a":1,"b":2.0,"c":null,:"three","e":"four"}}}

# 2023-10-09 https://sqlite.org/forum/forumpost/b25edc1d46
# UAF due to JSON cache overflow
#
do_execsql_test json101-22.1 {
  SELECT json_set(
    '{}',
    '$.a', json('1'),
    '$.a', json('2'),
    '$.b', json('3'),
    '$.b', json('4'),
    '$.c', json('5'),
    '$.c', json('6')
  );
} {{{"a":2,"b":4,"c":6}}}
do_execsql_test json101-22.2 {
  SELECT json_replace(
    '{"a":7,"b":8,"c":9}',
    '$.a', json('1'),
    '$.a', json('2'),
    '$.b', json('3'),
    '$.b', json('4'),
    '$.c', json('5'),
    '$.c', json('6')
  );
} {{{"a":2,"b":4,"c":6}}}

# 2023-10-17 https://sqlite.org/forum/forumpost/fc0e3f1e2a
# Incorrect accesss to '$[0]' in parsed + edited JSON.
#
do_execsql_test json101-23.1 {
  SELECT j, j->>0, j->>1
    FROM (SELECT json_set(json_set('[]','$[#]',0), '$[#]',1) AS j);
} {{[0,1]} 0 1}
do_execsql_test json101-23.2 {
  SELECT j, j->>0, j->>1
    FROM (SELECT json_set('[]','$[#]',0,'$[#]',1) AS j);
} {{[0,1]} 0 1}

# Insert/Set/Replace where the path specifies substructure that
# does not yet exist
#
proc tx x {return [string map [list ( \173 ) \175 ' \042 < \133 > \135] $x]}
foreach {id start path ins set repl} {
  1 {{}}       {$.a.b.c}     ('a':('b':('c':9)))      ('a':('b':('c':9)))      ()
  2 {{a:4}}    {$.a.b.c}     ('a':4)                  ('a':4)                  ('a':4)
  3 {{a:{}}}   {$.a.b.c}     ('a':('b':('c':9)))      ('a':('b':('c':9)))      ('a':())
  4 {[0,1,2]}  {$[3].a[0].b} <0,1,2,('a':<('b':9)>)>  <0,1,2,('a':<('b':9)>)>  <0,1,2>
  5 {[0,1,2]}  {$[1].a[0].b} <0,1,2>                  <0,1,2>                  <0,1,2>
  6 {[0,{},2]} {$[1].a[0].b} <0,('a':<('b':9)>),2>    <0,('a':<('b':9)>),2>    <0,(),2>
  7 {[0,1,2]}  {$[3][0].b}   <0,1,2,<('b':9)>>        <0,1,2,<('b':9)>>        <0,1,2>
  8 {[0,1,2]}  {$[1][0].b}   <0,1,2>                  <0,1,2>                  <0,1,2>
} {
  do_execsql_test json101-24.$id.insert {
    SELECT json_insert($start,$path,9);
  } [list [tx $ins]]
  do_execsql_test json101-24.$id.set {
    SELECT json_set($start,$path,9);
  } [list [tx $set]]
  do_execsql_test json101-24.$id.replace {
    SELECT json_replace($start,$path,9);
  } [list [tx $repl]]
}

finish_test
