/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact c0897616f32d95431f37fd291cb78742181980ac:


0000: 23 20 32 30 31 35 2d 30 38 2d 31 32 0a 23 0a 23  # 2015-08-12.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u give..#.#*****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
0180: 66 6f 72 20 4a 53 4f 4e 20 53 51 4c 20 66 75 6e  for JSON SQL fun
0190: 63 74 69 6f 6e 73 20 65 78 74 65 6e 73 69 6f 6e  ctions extension
01a0: 20 74 6f 20 74 68 65 0a 23 20 53 51 4c 69 74 65   to the.# SQLite
01b0: 20 6c 69 62 72 61 72 79 2e 0a 23 0a 0a 73 65 74   library..#..set
01c0: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
01d0: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
01e0: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
01f0: 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66 63 61 70  ester.tcl..ifcap
0200: 61 62 6c 65 20 21 6a 73 6f 6e 31 20 7b 0a 20 20  able !json1 {.  
0210: 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65  finish_test.  re
0220: 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  turn.}..do_execs
0230: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d  ql_test json101-
0240: 31 2e 31 2e 30 30 20 7b 0a 20 20 53 45 4c 45 43  1.1.00 {.  SELEC
0250: 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28 31 2c 32  T json_array(1,2
0260: 2e 35 2c 6e 75 6c 6c 2c 27 68 65 6c 6c 6f 27 29  .5,null,'hello')
0270: 3b 0a 7d 20 7b 5b 31 2c 32 2e 35 2c 6e 75 6c 6c  ;.} {[1,2.5,null
0280: 2c 22 68 65 6c 6c 6f 22 5d 7d 0a 64 6f 5f 65 78  ,"hello"]}.do_ex
0290: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
02a0: 30 31 2d 31 2e 31 2e 30 31 20 7b 0a 20 20 53 45  01-1.1.01 {.  SE
02b0: 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28  LECT json_array(
02c0: 31 2c 27 7b 22 61 62 63 22 3a 32 2e 35 2c 22 64  1,'{"abc":2.5,"d
02d0: 65 66 22 3a 6e 75 6c 6c 2c 22 67 68 69 22 3a 68  ef":null,"ghi":h
02e0: 65 6c 6c 6f 7d 27 2c 39 39 29 3b 0a 20 20 2d 2d  ello}',99);.  --
02f0: 20 74 68 65 20 73 65 63 6f 6e 64 20 74 65 72 6d   the second term
0300: 20 67 6f 65 73 20 69 6e 20 61 73 20 61 20 73 74   goes in as a st
0310: 72 69 6e 67 3a 0a 7d 20 7b 5b 31 2c 22 7b 5c 5c  ring:.} {[1,"{\\
0320: 22 61 62 63 5c 5c 22 3a 32 2e 35 2c 5c 5c 22 64  "abc\\":2.5,\\"d
0330: 65 66 5c 5c 22 3a 6e 75 6c 6c 2c 5c 5c 22 67 68  ef\\":null,\\"gh
0340: 69 5c 5c 22 3a 68 65 6c 6c 6f 7d 22 2c 39 39 5d  i\\":hello}",99]
0350: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0360: 74 20 6a 73 6f 6e 31 30 31 2d 31 2e 31 2e 30 32  t json101-1.1.02
0370: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
0380: 5f 61 72 72 61 79 28 31 2c 6a 73 6f 6e 28 27 7b  _array(1,json('{
0390: 22 61 62 63 22 3a 32 2e 35 2c 22 64 65 66 22 3a  "abc":2.5,"def":
03a0: 6e 75 6c 6c 2c 22 67 68 69 22 3a 22 68 65 6c 6c  null,"ghi":"hell
03b0: 6f 22 7d 27 29 2c 39 39 29 3b 0a 20 20 2d 2d 20  o"}'),99);.  -- 
03c0: 74 68 65 20 73 65 63 6f 6e 64 20 74 65 72 6d 20  the second term 
03d0: 67 6f 65 73 20 69 6e 20 61 73 20 4a 53 4f 4e 0a  goes in as JSON.
03e0: 7d 20 7b 5b 31 2c 7b 22 61 62 63 22 3a 32 2e 35  } {[1,{"abc":2.5
03f0: 2c 22 64 65 66 22 3a 6e 75 6c 6c 2c 22 67 68 69  ,"def":null,"ghi
0400: 22 3a 22 68 65 6c 6c 6f 22 7d 2c 39 39 5d 7d 0a  ":"hello"},99]}.
0410: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0420: 6a 73 6f 6e 31 30 31 2d 31 2e 31 2e 30 33 20 7b  json101-1.1.03 {
0430: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 61  .  SELECT json_a
0440: 72 72 61 79 28 31 2c 6a 73 6f 6e 5f 6f 62 6a 65  rray(1,json_obje
0450: 63 74 28 27 61 62 63 27 2c 32 2e 35 2c 27 64 65  ct('abc',2.5,'de
0460: 66 27 2c 6e 75 6c 6c 2c 27 67 68 69 27 2c 27 68  f',null,'ghi','h
0470: 65 6c 6c 6f 27 29 2c 39 39 29 3b 0a 20 20 2d 2d  ello'),99);.  --
0480: 20 74 68 65 20 73 65 63 6f 6e 64 20 74 65 72 6d   the second term
0490: 20 67 6f 65 73 20 69 6e 20 61 73 20 4a 53 4f 4e   goes in as JSON
04a0: 0a 7d 20 7b 5b 31 2c 7b 22 61 62 63 22 3a 32 2e  .} {[1,{"abc":2.
04b0: 35 2c 22 64 65 66 22 3a 6e 75 6c 6c 2c 22 67 68  5,"def":null,"gh
04c0: 69 22 3a 22 68 65 6c 6c 6f 22 7d 2c 39 39 5d 7d  i":"hello"},99]}
04d0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
04e0: 20 6a 73 6f 6e 31 30 31 2d 31 2e 32 20 7b 0a 20   json101-1.2 {. 
04f0: 20 53 45 4c 45 43 54 20 68 65 78 28 6a 73 6f 6e   SELECT hex(json
0500: 5f 61 72 72 61 79 28 27 53 74 72 69 6e 67 20 22  _array('String "
0510: 5c 20 54 65 73 74 27 29 29 3b 0a 7d 20 7b 35 42  \ Test'));.} {5B
0520: 32 32 35 33 37 34 37 32 36 39 36 45 36 37 32 30  22537472696E6720
0530: 35 43 32 32 35 43 35 43 32 30 35 34 36 35 37 33  5C225C5C20546573
0540: 37 34 32 32 35 44 7d 0a 64 6f 5f 63 61 74 63 68  74225D}.do_catch
0550: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31  sql_test json101
0560: 2d 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20  -1.3 {.  SELECT 
0570: 6a 73 6f 6e 5f 61 72 72 61 79 28 31 2c 70 72 69  json_array(1,pri
0580: 6e 74 66 28 27 25 2e 31 30 30 30 63 27 2c 27 78  ntf('%.1000c','x
0590: 27 29 2c 78 27 61 62 63 64 27 2c 33 29 3b 0a 7d  '),x'abcd',3);.}
05a0: 20 7b 31 20 7b 4a 53 4f 4e 20 63 61 6e 6e 6f 74   {1 {JSON cannot
05b0: 20 68 6f 6c 64 20 42 4c 4f 42 20 76 61 6c 75 65   hold BLOB value
05c0: 73 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  s}}.do_execsql_t
05d0: 65 73 74 20 6a 73 6f 6e 31 30 31 2d 31 2e 34 20  est json101-1.4 
05e0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
05f0: 61 72 72 61 79 28 2d 39 32 32 33 33 37 32 30 33  array(-922337203
0600: 36 38 35 34 37 37 35 38 30 38 2c 39 32 32 33 33  6854775808,92233
0610: 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2c 30  72036854775807,0
0620: 2c 31 2c 2d 31 2c 0a 20 20 20 20 20 20 20 20 20  ,1,-1,.         
0630: 20 20 20 20 20 20 20 20 20 20 20 30 2e 30 2c 20             0.0, 
0640: 31 2e 30 2c 20 2d 31 2e 30 2c 20 2d 31 65 39 39  1.0, -1.0, -1e99
0650: 2c 20 2b 32 65 31 30 30 2c 0a 20 20 20 20 20 20  , +2e100,.      
0660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 6f                'o
0670: 6e 65 27 2c 27 74 77 6f 27 2c 27 74 68 72 65 65  ne','two','three
0680: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ',.             
0690: 20 20 20 20 20 20 20 34 2c 20 35 2c 20 36 2c 20         4, 5, 6, 
06a0: 37 2c 20 38 2c 20 39 2c 20 31 30 2c 20 31 31 2c  7, 8, 9, 10, 11,
06b0: 20 31 32 2c 20 31 33 2c 20 31 34 2c 20 31 35 2c   12, 13, 14, 15,
06c0: 20 31 36 2c 20 31 37 2c 20 31 38 2c 0a 20 20 20   16, 17, 18,.   
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06e0: 20 31 39 2c 20 4e 55 4c 4c 2c 20 32 31 2c 20 32   19, NULL, 21, 2
06f0: 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c 20 32  2, 23, 24, 25, 2
0700: 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c 20 33  6, 27, 28, 29, 3
0710: 30 2c 20 33 31 2c 0a 20 20 20 20 20 20 20 20 20  0, 31,.         
0720: 20 20 20 20 20 20 20 20 20 20 20 27 61 62 63 64             'abcd
0730: 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74  efghijklmnopqrst
0740: 75 76 77 79 78 7a 41 42 43 44 45 46 47 48 49 4a  uvwyxzABCDEFGHIJ
0750: 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a  KLMNOPQRSTUVWXYZ
0760: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ',.             
0770: 20 20 20 20 20 20 20 27 61 62 63 64 65 66 67 68         'abcdefgh
0780: 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 79  ijklmnopqrstuvwy
0790: 78 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e  xzABCDEFGHIJKLMN
07a0: 4f 50 51 52 53 54 55 56 57 58 59 5a 27 2c 0a 20  OPQRSTUVWXYZ',. 
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 20 20 20 27 61 62 63 64 65 66 67 68 69 6a 6b 6c     'abcdefghijkl
07d0: 6d 6e 6f 70 71 72 73 74 75 76 77 79 78 7a 41 42  mnopqrstuvwyxzAB
07e0: 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52  CDEFGHIJKLMNOPQR
07f0: 53 54 55 56 57 58 59 5a 27 2c 0a 20 20 20 20 20  STUVWXYZ',.     
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 39                 9
0810: 39 29 3b 0a 7d 20 7b 5b 2d 39 32 32 33 33 37 32  9);.} {[-9223372
0820: 30 33 36 38 35 34 37 37 35 38 30 38 2c 39 32 32  036854775808,922
0830: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
0840: 2c 30 2c 31 2c 2d 31 2c 30 2e 30 2c 31 2e 30 2c  ,0,1,-1,0.0,1.0,
0850: 2d 31 2e 30 2c 2d 31 2e 30 65 2b 39 39 2c 32 2e  -1.0,-1.0e+99,2.
0860: 30 65 2b 31 30 30 2c 22 6f 6e 65 22 2c 22 74 77  0e+100,"one","tw
0870: 6f 22 2c 22 74 68 72 65 65 22 2c 34 2c 35 2c 36  o","three",4,5,6
0880: 2c 37 2c 38 2c 39 2c 31 30 2c 31 31 2c 31 32 2c  ,7,8,9,10,11,12,
0890: 31 33 2c 31 34 2c 31 35 2c 31 36 2c 31 37 2c 31  13,14,15,16,17,1
08a0: 38 2c 31 39 2c 6e 75 6c 6c 2c 32 31 2c 32 32 2c  8,19,null,21,22,
08b0: 32 33 2c 32 34 2c 32 35 2c 32 36 2c 32 37 2c 32  23,24,25,26,27,2
08c0: 38 2c 32 39 2c 33 30 2c 33 31 2c 22 61 62 63 64  8,29,30,31,"abcd
08d0: 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74  efghijklmnopqrst
08e0: 75 76 77 79 78 7a 41 42 43 44 45 46 47 48 49 4a  uvwyxzABCDEFGHIJ
08f0: 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a  KLMNOPQRSTUVWXYZ
0900: 22 2c 22 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d  ","abcdefghijklm
0910: 6e 6f 70 71 72 73 74 75 76 77 79 78 7a 41 42 43  nopqrstuvwyxzABC
0920: 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53  DEFGHIJKLMNOPQRS
0930: 54 55 56 57 58 59 5a 22 2c 22 61 62 63 64 65 66  TUVWXYZ","abcdef
0940: 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76  ghijklmnopqrstuv
0950: 77 79 78 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c  wyxzABCDEFGHIJKL
0960: 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 22 2c  MNOPQRSTUVWXYZ",
0970: 39 39 5d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  99]}..do_execsql
0980: 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 32 2e  _test json101-2.
0990: 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  1 {.  SELECT jso
09a0: 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 31 2c 27  n_object('a',1,'
09b0: 62 27 2c 32 2e 35 2c 27 63 27 2c 6e 75 6c 6c 2c  b',2.5,'c',null,
09c0: 27 64 27 2c 27 53 74 72 69 6e 67 20 54 65 73 74  'd','String Test
09d0: 27 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 31 2c 22  ');.} {{{"a":1,"
09e0: 62 22 3a 32 2e 35 2c 22 63 22 3a 6e 75 6c 6c 2c  b":2.5,"c":null,
09f0: 22 64 22 3a 22 53 74 72 69 6e 67 20 54 65 73 74  "d":"String Test
0a00: 22 7d 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  "}}}.do_catchsql
0a10: 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 32 2e  _test json101-2.
0a20: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  2 {.  SELECT jso
0a30: 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 70 72 69  n_object('a',pri
0a40: 6e 74 66 28 27 25 2e 31 30 30 30 63 27 2c 27 78  ntf('%.1000c','x
0a50: 27 29 2c 32 2c 32 2e 35 29 3b 0a 7d 20 7b 31 20  '),2,2.5);.} {1 
0a60: 7b 6a 73 6f 6e 5f 6f 62 6a 65 63 74 28 29 20 6c  {json_object() l
0a70: 61 62 65 6c 73 20 6d 75 73 74 20 62 65 20 54 45  abels must be TE
0a80: 58 54 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  XT}}.do_catchsql
0a90: 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 32 2e  _test json101-2.
0aa0: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  3 {.  SELECT jso
0ab0: 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 31 2c 27  n_object('a',1,'
0ac0: 62 27 29 3b 0a 7d 20 7b 31 20 7b 6a 73 6f 6e 5f  b');.} {1 {json_
0ad0: 6f 62 6a 65 63 74 28 29 20 72 65 71 75 69 72 65  object() require
0ae0: 73 20 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72  s an even number
0af0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 7d 7d 0a   of arguments}}.
0b00: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
0b10: 20 6a 73 6f 6e 31 30 31 2d 32 2e 34 20 7b 0a 20   json101-2.4 {. 
0b20: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 6f 62 6a   SELECT json_obj
0b30: 65 63 74 28 27 61 27 2c 70 72 69 6e 74 66 28 27  ect('a',printf('
0b40: 25 2e 31 30 30 30 63 27 2c 27 78 27 29 2c 27 62  %.1000c','x'),'b
0b50: 27 2c 78 27 61 62 63 64 27 29 3b 0a 7d 20 7b 31  ',x'abcd');.} {1
0b60: 20 7b 4a 53 4f 4e 20 63 61 6e 6e 6f 74 20 68 6f   {JSON cannot ho
0b70: 6c 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 7d 7d  ld BLOB values}}
0b80: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0b90: 74 20 6a 73 6f 6e 31 30 31 2d 33 2e 31 20 7b 0a  t json101-3.1 {.
0ba0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 72 65    SELECT json_re
0bb0: 70 6c 61 63 65 28 27 7b 22 61 22 3a 31 2c 22 62  place('{"a":1,"b
0bc0: 22 3a 32 7d 27 2c 27 24 2e 61 27 2c 27 5b 33 2c  ":2}','$.a','[3,
0bd0: 34 2c 35 5d 27 29 3b 0a 7d 20 7b 7b 7b 22 61 22  4,5]');.} {{{"a"
0be0: 3a 22 5b 33 2c 34 2c 35 5d 22 2c 22 62 22 3a 32  :"[3,4,5]","b":2
0bf0: 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }}}.do_execsql_t
0c00: 65 73 74 20 6a 73 6f 6e 31 30 31 2d 33 2e 32 20  est json101-3.2 
0c10: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
0c20: 72 65 70 6c 61 63 65 28 27 7b 22 61 22 3a 31 2c  replace('{"a":1,
0c30: 22 62 22 3a 32 7d 27 2c 27 24 2e 61 27 2c 6a 73  "b":2}','$.a',js
0c40: 6f 6e 28 27 5b 33 2c 34 2c 35 5d 27 29 29 3b 0a  on('[3,4,5]'));.
0c50: 7d 20 7b 7b 7b 22 61 22 3a 5b 33 2c 34 2c 35 5d  } {{{"a":[3,4,5]
0c60: 2c 22 62 22 3a 32 7d 7d 7d 0a 64 6f 5f 65 78 65  ,"b":2}}}.do_exe
0c70: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
0c80: 31 2d 33 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  1-3.3 {.  SELECT
0c90: 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73 6f 6e 5f   json_type(json_
0ca0: 73 65 74 28 27 7b 22 61 22 3a 31 2c 22 62 22 3a  set('{"a":1,"b":
0cb0: 32 7d 27 2c 27 24 2e 62 27 2c 27 7b 22 78 22 3a  2}','$.b','{"x":
0cc0: 33 2c 22 79 22 3a 34 7d 27 29 2c 27 24 2e 62 27  3,"y":4}'),'$.b'
0cd0: 29 3b 0a 7d 20 7b 74 65 78 74 7d 0a 64 6f 5f 65  );.} {text}.do_e
0ce0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
0cf0: 31 30 31 2d 33 2e 34 20 7b 0a 20 20 53 45 4c 45  101-3.4 {.  SELE
0d00: 43 54 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73 6f  CT json_type(jso
0d10: 6e 5f 73 65 74 28 27 7b 22 61 22 3a 31 2c 22 62  n_set('{"a":1,"b
0d20: 22 3a 32 7d 27 2c 27 24 2e 62 27 2c 6a 73 6f 6e  ":2}','$.b',json
0d30: 28 27 7b 22 78 22 3a 33 2c 22 79 22 3a 34 7d 27  ('{"x":3,"y":4}'
0d40: 29 29 2c 27 24 2e 62 27 29 3b 0a 7d 20 7b 6f 62  )),'$.b');.} {ob
0d50: 6a 65 63 74 7d 0a 69 66 63 61 70 61 62 6c 65 20  ject}.ifcapable 
0d60: 76 74 61 62 20 7b 0a 64 6f 5f 65 78 65 63 73 71  vtab {.do_execsq
0d70: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 33  l_test json101-3
0d80: 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 66 75  .5 {.  SELECT fu
0d90: 6c 6c 6b 65 79 2c 20 61 74 6f 6d 2c 20 27 7c 27  llkey, atom, '|'
0da0: 20 46 52 4f 4d 20 6a 73 6f 6e 5f 74 72 65 65 28   FROM json_tree(
0db0: 6a 73 6f 6e 5f 73 65 74 28 27 7b 7d 27 2c 27 24  json_set('{}','$
0dc0: 2e 78 27 2c 31 32 33 2c 27 24 2e 78 27 2c 34 35  .x',123,'$.x',45
0dd0: 36 29 29 3b 0a 7d 20 7b 7b 24 7d 20 7b 7d 20 7c  6));.} {{$} {} |
0de0: 20 7b 24 2e 78 7d 20 34 35 36 20 7c 7d 0a 7d 0a   {$.x} 456 |}.}.
0df0: 0a 23 20 50 65 72 20 72 66 63 37 31 35 39 2c 20  .# Per rfc7159, 
0e00: 61 6e 79 20 4a 53 4f 4e 20 76 61 6c 75 65 20 69  any JSON value i
0e10: 73 20 61 6c 6c 6f 77 65 64 20 61 74 20 74 68 65  s allowed at the
0e20: 20 74 6f 70 20 6c 65 76 65 6c 2c 20 61 6e 64 20   top level, and 
0e30: 77 68 69 74 65 73 70 61 63 65 0a 23 20 69 73 20  whitespace.# is 
0e40: 70 65 72 6d 69 74 74 69 6e 67 20 62 65 66 6f 72  permitting befor
0e50: 65 20 61 6e 64 2f 6f 72 20 61 66 74 65 72 20 74  e and/or after t
0e60: 68 61 74 20 76 61 6c 75 65 2e 0a 23 0a 64 6f 5f  hat value..#.do_
0e70: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
0e80: 6e 31 30 31 2d 34 2e 31 20 7b 0a 20 20 43 52 45  n101-4.1 {.  CRE
0e90: 41 54 45 20 54 41 42 4c 45 20 6a 31 28 78 29 3b  ATE TABLE j1(x);
0ea0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6a  .  INSERT INTO j
0eb0: 31 28 78 29 0a 20 20 20 56 41 4c 55 45 53 28 27  1(x).   VALUES('
0ec0: 74 72 75 65 27 29 2c 28 27 66 61 6c 73 65 27 29  true'),('false')
0ed0: 2c 28 27 6e 75 6c 6c 27 29 2c 28 27 31 32 33 27  ,('null'),('123'
0ee0: 29 2c 28 27 2d 32 33 34 27 29 2c 28 27 33 34 2e  ),('-234'),('34.
0ef0: 35 65 2b 36 27 29 2c 0a 20 20 20 20 20 20 20 20  5e+6'),.        
0f00: 20 28 27 22 22 27 29 2c 28 27 22 5c 22 22 27 29   ('""'),('"\""')
0f10: 2c 28 27 22 5c 5c 22 27 29 2c 28 27 22 61 62 63  ,('"\\"'),('"abc
0f20: 64 65 66 67 68 69 6a 6c 6d 6e 6f 70 71 72 73 74  defghijlmnopqrst
0f30: 75 76 77 78 79 7a 22 27 29 2c 0a 20 20 20 20 20  uvwxyz"'),.     
0f40: 20 20 20 20 28 27 5b 5d 27 29 2c 28 27 7b 7d 27      ('[]'),('{}'
0f50: 29 2c 28 27 5b 74 72 75 65 2c 66 61 6c 73 65 2c  ),('[true,false,
0f60: 6e 75 6c 6c 2c 31 32 33 2c 2d 32 33 34 2c 33 34  null,123,-234,34
0f70: 2e 35 65 2b 36 2c 7b 7d 2c 5b 5d 5d 27 29 2c 0a  .5e+6,{},[]]'),.
0f80: 20 20 20 20 20 20 20 20 20 28 27 7b 22 61 22 3a           ('{"a":
0f90: 74 72 75 65 2c 22 62 22 3a 7b 22 63 22 3a 66 61  true,"b":{"c":fa
0fa0: 6c 73 65 7d 7d 27 29 3b 0a 20 20 53 45 4c 45 43  lse}}');.  SELEC
0fb0: 54 20 2a 20 46 52 4f 4d 20 6a 31 20 57 48 45 52  T * FROM j1 WHER
0fc0: 45 20 4e 4f 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  E NOT json_valid
0fd0: 28 78 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65  (x);.} {}.do_exe
0fe0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
0ff0: 31 2d 34 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54  1-4.2 {.  SELECT
1000: 20 2a 20 46 52 4f 4d 20 6a 31 20 57 48 45 52 45   * FROM j1 WHERE
1010: 20 4e 4f 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28   NOT json_valid(
1020: 63 68 61 72 28 30 78 32 30 2c 30 78 30 39 2c 30  char(0x20,0x09,0
1030: 78 30 61 2c 30 78 30 64 29 7c 7c 78 29 3b 0a 7d  x0a,0x0d)||x);.}
1040: 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   {}.do_execsql_t
1050: 65 73 74 20 6a 73 6f 6e 31 30 31 2d 34 2e 33 20  est json101-4.3 
1060: 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  {.  SELECT * FRO
1070: 4d 20 6a 31 20 57 48 45 52 45 20 4e 4f 54 20 6a  M j1 WHERE NOT j
1080: 73 6f 6e 5f 76 61 6c 69 64 28 78 7c 7c 63 68 61  son_valid(x||cha
1090: 72 28 30 78 32 30 2c 30 78 30 39 2c 30 78 30 61  r(0x20,0x09,0x0a
10a0: 2c 30 78 30 64 29 29 3b 0a 7d 20 7b 7d 0a 0a 23  ,0x0d));.} {}..#
10b0: 20 42 75 74 20 61 6e 20 65 6d 70 74 79 20 73 74   But an empty st
10c0: 72 69 6e 67 2c 20 6f 72 20 61 20 73 74 72 69 6e  ring, or a strin
10d0: 67 20 6f 66 20 70 75 72 65 20 77 68 69 74 65 73  g of pure whites
10e0: 70 61 63 65 20 69 73 20 6e 6f 74 20 76 61 6c 69  pace is not vali
10f0: 64 20 4a 53 4f 4e 2e 0a 23 0a 64 6f 5f 65 78 65  d JSON..#.do_exe
1100: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
1110: 31 2d 34 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54  1-4.4 {.  SELECT
1120: 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 27 29 2c   json_valid(''),
1130: 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 63 68 61 72   json_valid(char
1140: 28 30 78 32 30 2c 30 78 30 39 2c 30 78 30 61 2c  (0x20,0x09,0x0a,
1150: 30 78 30 64 29 29 3b 0a 7d 20 7b 30 20 30 7d 0a  0x0d));.} {0 0}.
1160: 0a 23 20 6a 73 6f 6e 5f 72 65 6d 6f 76 65 28 29  .# json_remove()
1170: 20 61 6e 64 20 73 69 6d 69 6c 61 72 20 66 75 6e   and similar fun
1180: 63 74 69 6f 6e 73 20 77 69 74 68 20 6e 6f 20 65  ctions with no e
1190: 64 69 74 20 6f 70 65 72 61 74 69 6f 6e 73 20 72  dit operations r
11a0: 65 74 75 72 6e 20 74 68 65 69 72 0a 23 20 69 6e  eturn their.# in
11b0: 70 75 74 20 75 6e 63 68 61 6e 67 65 64 2e 0a 23  put unchanged..#
11c0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
11d0: 20 6a 73 6f 6e 31 30 31 2d 34 2e 35 20 7b 0a 20   json101-4.5 {. 
11e0: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 6a   SELECT x FROM j
11f0: 31 20 57 48 45 52 45 20 6a 73 6f 6e 5f 72 65 6d  1 WHERE json_rem
1200: 6f 76 65 28 78 29 3c 3e 78 3b 0a 7d 20 7b 7d 0a  ove(x)<>x;.} {}.
1210: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1220: 6a 73 6f 6e 31 30 31 2d 34 2e 36 20 7b 0a 20 20  json101-4.6 {.  
1230: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 6a 31  SELECT x FROM j1
1240: 20 57 48 45 52 45 20 6a 73 6f 6e 5f 72 65 70 6c   WHERE json_repl
1250: 61 63 65 28 78 29 3c 3e 78 3b 0a 7d 20 7b 7d 0a  ace(x)<>x;.} {}.
1260: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1270: 6a 73 6f 6e 31 30 31 2d 34 2e 37 20 7b 0a 20 20  json101-4.7 {.  
1280: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 6a 31  SELECT x FROM j1
1290: 20 57 48 45 52 45 20 6a 73 6f 6e 5f 73 65 74 28   WHERE json_set(
12a0: 78 29 3c 3e 78 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65  x)<>x;.} {}.do_e
12b0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
12c0: 31 30 31 2d 34 2e 38 20 7b 0a 20 20 53 45 4c 45  101-4.8 {.  SELE
12d0: 43 54 20 78 20 46 52 4f 4d 20 6a 31 20 57 48 45  CT x FROM j1 WHE
12e0: 52 45 20 6a 73 6f 6e 5f 69 6e 73 65 72 74 28 78  RE json_insert(x
12f0: 29 3c 3e 78 3b 0a 7d 20 7b 7d 0a 0a 23 20 6a 73  )<>x;.} {}..# js
1300: 6f 6e 5f 65 78 74 72 61 63 74 28 4a 53 4f 4e 2c  on_extract(JSON,
1310: 27 24 27 29 20 77 69 6c 6c 20 72 65 74 75 72 6e  '$') will return
1320: 20 6f 62 6a 65 63 74 73 20 61 6e 64 20 61 72 72   objects and arr
1330: 61 79 73 20 77 69 74 68 6f 75 74 20 63 68 61 6e  ays without chan
1340: 67 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ge..#.do_execsql
1350: 5f 74 65 73 74 20 6a 73 6f 6e 2d 34 2e 31 30 20  _test json-4.10 
1360: 7b 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74  {.  SELECT count
1370: 28 2a 29 20 46 52 4f 4d 20 6a 31 20 57 48 45 52  (*) FROM j1 WHER
1380: 45 20 6a 73 6f 6e 5f 74 79 70 65 28 78 29 20 49  E json_type(x) I
1390: 4e 20 28 27 6f 62 6a 65 63 74 27 2c 27 61 72 72  N ('object','arr
13a0: 61 79 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 78  ay');.  SELECT x
13b0: 20 46 52 4f 4d 20 6a 31 0a 20 20 20 57 48 45 52   FROM j1.   WHER
13c0: 45 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 78  E json_extract(x
13d0: 2c 27 24 27 29 3c 3e 78 0a 20 20 20 20 20 41 4e  ,'$')<>x.     AN
13e0: 44 20 6a 73 6f 6e 5f 74 79 70 65 28 78 29 20 49  D json_type(x) I
13f0: 4e 20 28 27 6f 62 6a 65 63 74 27 2c 27 61 72 72  N ('object','arr
1400: 61 79 27 29 3b 0a 7d 20 7b 34 7d 0a 0a 64 6f 5f  ay');.} {4}..do_
1410: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
1420: 6e 2d 35 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  n-5.1 {.  CREATE
1430: 20 54 41 42 4c 45 20 6a 32 28 69 64 20 49 4e 54   TABLE j2(id INT
1440: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1450: 2c 20 6a 73 6f 6e 2c 20 73 72 63 29 3b 0a 20 20  , json, src);.  
1460: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6a 32 28 69  INSERT INTO j2(i
1470: 64 2c 6a 73 6f 6e 2c 73 72 63 29 0a 20 20 56 41  d,json,src).  VA
1480: 4c 55 45 53 28 31 2c 27 7b 0a 20 20 20 20 22 66  LUES(1,'{.    "f
1490: 69 72 73 74 4e 61 6d 65 22 3a 20 22 4a 6f 68 6e  irstName": "John
14a0: 22 2c 0a 20 20 20 20 22 6c 61 73 74 4e 61 6d 65  ",.    "lastName
14b0: 22 3a 20 22 53 6d 69 74 68 22 2c 0a 20 20 20 20  ": "Smith",.    
14c0: 22 69 73 41 6c 69 76 65 22 3a 20 74 72 75 65 2c  "isAlive": true,
14d0: 0a 20 20 20 20 22 61 67 65 22 3a 20 32 35 2c 0a  .    "age": 25,.
14e0: 20 20 20 20 22 61 64 64 72 65 73 73 22 3a 20 7b      "address": {
14f0: 0a 20 20 20 20 20 20 22 73 74 72 65 65 74 41 64  .      "streetAd
1500: 64 72 65 73 73 22 3a 20 22 32 31 20 32 6e 64 20  dress": "21 2nd 
1510: 53 74 72 65 65 74 22 2c 0a 20 20 20 20 20 20 22  Street",.      "
1520: 63 69 74 79 22 3a 20 22 4e 65 77 20 59 6f 72 6b  city": "New York
1530: 22 2c 0a 20 20 20 20 20 20 22 73 74 61 74 65 22  ",.      "state"
1540: 3a 20 22 4e 59 22 2c 0a 20 20 20 20 20 20 22 70  : "NY",.      "p
1550: 6f 73 74 61 6c 43 6f 64 65 22 3a 20 22 31 30 30  ostalCode": "100
1560: 32 31 2d 33 31 30 30 22 0a 20 20 20 20 7d 2c 0a  21-3100".    },.
1570: 20 20 20 20 22 70 68 6f 6e 65 4e 75 6d 62 65 72      "phoneNumber
1580: 73 22 3a 20 5b 0a 20 20 20 20 20 20 7b 0a 20 20  s": [.      {.  
1590: 20 20 20 20 20 20 22 74 79 70 65 22 3a 20 22 68        "type": "h
15a0: 6f 6d 65 22 2c 0a 20 20 20 20 20 20 20 20 22 6e  ome",.        "n
15b0: 75 6d 62 65 72 22 3a 20 22 32 31 32 20 35 35 35  umber": "212 555
15c0: 2d 31 32 33 34 22 0a 20 20 20 20 20 20 7d 2c 0a  -1234".      },.
15d0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
15e0: 22 74 79 70 65 22 3a 20 22 6f 66 66 69 63 65 22  "type": "office"
15f0: 2c 0a 20 20 20 20 20 20 20 20 22 6e 75 6d 62 65  ,.        "numbe
1600: 72 22 3a 20 22 36 34 36 20 35 35 35 2d 34 35 36  r": "646 555-456
1610: 37 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 5d  7".      }.    ]
1620: 2c 0a 20 20 20 20 22 63 68 69 6c 64 72 65 6e 22  ,.    "children"
1630: 3a 20 5b 5d 2c 0a 20 20 20 20 22 73 70 6f 75 73  : [],.    "spous
1640: 65 22 3a 20 6e 75 6c 6c 0a 20 20 7d 27 2c 27 68  e": null.  }','h
1650: 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  ttps://en.wikipe
1660: 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 53 4f  dia.org/wiki/JSO
1670: 4e 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  N');.  INSERT IN
1680: 54 4f 20 6a 32 28 69 64 2c 6a 73 6f 6e 2c 73 72  TO j2(id,json,sr
1690: 63 29 0a 20 20 56 41 4c 55 45 53 28 32 2c 20 27  c).  VALUES(2, '
16a0: 7b 0a 09 22 69 64 22 3a 20 22 30 30 30 31 22 2c  {.."id": "0001",
16b0: 0a 09 22 74 79 70 65 22 3a 20 22 64 6f 6e 75 74  .."type": "donut
16c0: 22 2c 0a 09 22 6e 61 6d 65 22 3a 20 22 43 61 6b  ",.."name": "Cak
16d0: 65 22 2c 0a 09 22 70 70 75 22 3a 20 30 2e 35 35  e",.."ppu": 0.55
16e0: 2c 0a 09 22 62 61 74 74 65 72 73 22 3a 0a 09 09  ,.."batters":...
16f0: 7b 0a 09 09 09 22 62 61 74 74 65 72 22 3a 0a 09  {...."batter":..
1700: 09 09 09 5b 0a 09 09 09 09 09 7b 20 22 69 64 22  ...[......{ "id"
1710: 3a 20 22 31 30 30 31 22 2c 20 22 74 79 70 65 22  : "1001", "type"
1720: 3a 20 22 52 65 67 75 6c 61 72 22 20 7d 2c 0a 09  : "Regular" },..
1730: 09 09 09 09 7b 20 22 69 64 22 3a 20 22 31 30 30  ....{ "id": "100
1740: 32 22 2c 20 22 74 79 70 65 22 3a 20 22 43 68 6f  2", "type": "Cho
1750: 63 6f 6c 61 74 65 22 20 7d 2c 0a 09 09 09 09 09  colate" },......
1760: 7b 20 22 69 64 22 3a 20 22 31 30 30 33 22 2c 20  { "id": "1003", 
1770: 22 74 79 70 65 22 3a 20 22 42 6c 75 65 62 65 72  "type": "Blueber
1780: 72 79 22 20 7d 2c 0a 09 09 09 09 09 7b 20 22 69  ry" },......{ "i
1790: 64 22 3a 20 22 31 30 30 34 22 2c 20 22 74 79 70  d": "1004", "typ
17a0: 65 22 3a 20 22 44 65 76 69 6c 27 27 73 20 46 6f  e": "Devil''s Fo
17b0: 6f 64 22 20 7d 0a 09 09 09 09 5d 0a 09 09 7d 2c  od" }.....]...},
17c0: 0a 09 22 74 6f 70 70 69 6e 67 22 3a 0a 09 09 5b  .."topping":...[
17d0: 0a 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30  ....{ "id": "500
17e0: 31 22 2c 20 22 74 79 70 65 22 3a 20 22 4e 6f 6e  1", "type": "Non
17f0: 65 22 20 7d 2c 0a 09 09 09 7b 20 22 69 64 22 3a  e" },....{ "id":
1800: 20 22 35 30 30 32 22 2c 20 22 74 79 70 65 22 3a   "5002", "type":
1810: 20 22 47 6c 61 7a 65 64 22 20 7d 2c 0a 09 09 09   "Glazed" },....
1820: 7b 20 22 69 64 22 3a 20 22 35 30 30 35 22 2c 20  { "id": "5005", 
1830: 22 74 79 70 65 22 3a 20 22 53 75 67 61 72 22 20  "type": "Sugar" 
1840: 7d 2c 0a 09 09 09 7b 20 22 69 64 22 3a 20 22 35  },....{ "id": "5
1850: 30 30 37 22 2c 20 22 74 79 70 65 22 3a 20 22 50  007", "type": "P
1860: 6f 77 64 65 72 65 64 20 53 75 67 61 72 22 20 7d  owdered Sugar" }
1870: 2c 0a 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30  ,....{ "id": "50
1880: 30 36 22 2c 20 22 74 79 70 65 22 3a 20 22 43 68  06", "type": "Ch
1890: 6f 63 6f 6c 61 74 65 20 77 69 74 68 20 53 70 72  ocolate with Spr
18a0: 69 6e 6b 6c 65 73 22 20 7d 2c 0a 09 09 09 7b 20  inkles" },....{ 
18b0: 22 69 64 22 3a 20 22 35 30 30 33 22 2c 20 22 74  "id": "5003", "t
18c0: 79 70 65 22 3a 20 22 43 68 6f 63 6f 6c 61 74 65  ype": "Chocolate
18d0: 22 20 7d 2c 0a 09 09 09 7b 20 22 69 64 22 3a 20  " },....{ "id": 
18e0: 22 35 30 30 34 22 2c 20 22 74 79 70 65 22 3a 20  "5004", "type": 
18f0: 22 4d 61 70 6c 65 22 20 7d 0a 09 09 5d 0a 20 20  "Maple" }...].  
1900: 20 7d 27 2c 27 68 74 74 70 73 3a 2f 2f 61 64 6f   }','https://ado
1910: 62 65 2e 67 69 74 68 75 62 2e 69 6f 2f 53 70 72  be.github.io/Spr
1920: 79 2f 73 61 6d 70 6c 65 73 2f 64 61 74 61 5f 72  y/samples/data_r
1930: 65 67 69 6f 6e 2f 4a 53 4f 4e 44 61 74 61 53 65  egion/JSONDataSe
1940: 74 53 61 6d 70 6c 65 2e 68 74 6d 6c 27 29 3b 0a  tSample.html');.
1950: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6a     INSERT INTO j
1960: 32 28 69 64 2c 6a 73 6f 6e 2c 73 72 63 29 0a 20  2(id,json,src). 
1970: 20 20 56 41 4c 55 45 53 28 33 2c 27 5b 0a 09 7b    VALUES(3,'[..{
1980: 0a 09 09 22 69 64 22 3a 20 22 30 30 30 31 22 2c  ..."id": "0001",
1990: 0a 09 09 22 74 79 70 65 22 3a 20 22 64 6f 6e 75  ..."type": "donu
19a0: 74 22 2c 0a 09 09 22 6e 61 6d 65 22 3a 20 22 43  t",..."name": "C
19b0: 61 6b 65 22 2c 0a 09 09 22 70 70 75 22 3a 20 30  ake",..."ppu": 0
19c0: 2e 35 35 2c 0a 09 09 22 62 61 74 74 65 72 73 22  .55,..."batters"
19d0: 3a 0a 09 09 09 7b 0a 09 09 09 09 22 62 61 74 74  :....{....."batt
19e0: 65 72 22 3a 0a 09 09 09 09 09 5b 0a 09 09 09 09  er":......[.....
19f0: 09 09 7b 20 22 69 64 22 3a 20 22 31 30 30 31 22  ..{ "id": "1001"
1a00: 2c 20 22 74 79 70 65 22 3a 20 22 52 65 67 75 6c  , "type": "Regul
1a10: 61 72 22 20 7d 2c 0a 09 09 09 09 09 09 7b 20 22  ar" },.......{ "
1a20: 69 64 22 3a 20 22 31 30 30 32 22 2c 20 22 74 79  id": "1002", "ty
1a30: 70 65 22 3a 20 22 43 68 6f 63 6f 6c 61 74 65 22  pe": "Chocolate"
1a40: 20 7d 2c 0a 09 09 09 09 09 09 7b 20 22 69 64 22   },.......{ "id"
1a50: 3a 20 22 31 30 30 33 22 2c 20 22 74 79 70 65 22  : "1003", "type"
1a60: 3a 20 22 42 6c 75 65 62 65 72 72 79 22 20 7d 2c  : "Blueberry" },
1a70: 0a 09 09 09 09 09 09 7b 20 22 69 64 22 3a 20 22  .......{ "id": "
1a80: 31 30 30 34 22 2c 20 22 74 79 70 65 22 3a 20 22  1004", "type": "
1a90: 44 65 76 69 6c 27 27 73 20 46 6f 6f 64 22 20 7d  Devil''s Food" }
1aa0: 0a 09 09 09 09 09 5d 0a 09 09 09 7d 2c 0a 09 09  ......]....},...
1ab0: 22 74 6f 70 70 69 6e 67 22 3a 0a 09 09 09 5b 0a  "topping":....[.
1ac0: 09 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30  ....{ "id": "500
1ad0: 31 22 2c 20 22 74 79 70 65 22 3a 20 22 4e 6f 6e  1", "type": "Non
1ae0: 65 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22  e" },.....{ "id"
1af0: 3a 20 22 35 30 30 32 22 2c 20 22 74 79 70 65 22  : "5002", "type"
1b00: 3a 20 22 47 6c 61 7a 65 64 22 20 7d 2c 0a 09 09  : "Glazed" },...
1b10: 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30 35 22  ..{ "id": "5005"
1b20: 2c 20 22 74 79 70 65 22 3a 20 22 53 75 67 61 72  , "type": "Sugar
1b30: 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22 3a  " },.....{ "id":
1b40: 20 22 35 30 30 37 22 2c 20 22 74 79 70 65 22 3a   "5007", "type":
1b50: 20 22 50 6f 77 64 65 72 65 64 20 53 75 67 61 72   "Powdered Sugar
1b60: 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22 3a  " },.....{ "id":
1b70: 20 22 35 30 30 36 22 2c 20 22 74 79 70 65 22 3a   "5006", "type":
1b80: 20 22 43 68 6f 63 6f 6c 61 74 65 20 77 69 74 68   "Chocolate with
1b90: 20 53 70 72 69 6e 6b 6c 65 73 22 20 7d 2c 0a 09   Sprinkles" },..
1ba0: 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30 33  ...{ "id": "5003
1bb0: 22 2c 20 22 74 79 70 65 22 3a 20 22 43 68 6f 63  ", "type": "Choc
1bc0: 6f 6c 61 74 65 22 20 7d 2c 0a 09 09 09 09 7b 20  olate" },.....{ 
1bd0: 22 69 64 22 3a 20 22 35 30 30 34 22 2c 20 22 74  "id": "5004", "t
1be0: 79 70 65 22 3a 20 22 4d 61 70 6c 65 22 20 7d 0a  ype": "Maple" }.
1bf0: 09 09 09 5d 0a 09 7d 2c 0a 09 7b 0a 09 09 22 69  ...]..},..{..."i
1c00: 64 22 3a 20 22 30 30 30 32 22 2c 0a 09 09 22 74  d": "0002",..."t
1c10: 79 70 65 22 3a 20 22 64 6f 6e 75 74 22 2c 0a 09  ype": "donut",..
1c20: 09 22 6e 61 6d 65 22 3a 20 22 52 61 69 73 65 64  ."name": "Raised
1c30: 22 2c 0a 09 09 22 70 70 75 22 3a 20 30 2e 35 35  ",..."ppu": 0.55
1c40: 2c 0a 09 09 22 62 61 74 74 65 72 73 22 3a 0a 09  ,..."batters":..
1c50: 09 09 7b 0a 09 09 09 09 22 62 61 74 74 65 72 22  ..{....."batter"
1c60: 3a 0a 09 09 09 09 09 5b 0a 09 09 09 09 09 09 7b  :......[.......{
1c70: 20 22 69 64 22 3a 20 22 31 30 30 31 22 2c 20 22   "id": "1001", "
1c80: 74 79 70 65 22 3a 20 22 52 65 67 75 6c 61 72 22  type": "Regular"
1c90: 20 7d 0a 09 09 09 09 09 5d 0a 09 09 09 7d 2c 0a   }......]....},.
1ca0: 09 09 22 74 6f 70 70 69 6e 67 22 3a 0a 09 09 09  .."topping":....
1cb0: 5b 0a 09 09 09 09 7b 20 22 69 64 22 3a 20 22 35  [.....{ "id": "5
1cc0: 30 30 31 22 2c 20 22 74 79 70 65 22 3a 20 22 4e  001", "type": "N
1cd0: 6f 6e 65 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69  one" },.....{ "i
1ce0: 64 22 3a 20 22 35 30 30 32 22 2c 20 22 74 79 70  d": "5002", "typ
1cf0: 65 22 3a 20 22 47 6c 61 7a 65 64 22 20 7d 2c 0a  e": "Glazed" },.
1d00: 09 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30  ....{ "id": "500
1d10: 35 22 2c 20 22 74 79 70 65 22 3a 20 22 53 75 67  5", "type": "Sug
1d20: 61 72 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64  ar" },.....{ "id
1d30: 22 3a 20 22 35 30 30 33 22 2c 20 22 74 79 70 65  ": "5003", "type
1d40: 22 3a 20 22 43 68 6f 63 6f 6c 61 74 65 22 20 7d  ": "Chocolate" }
1d50: 2c 0a 09 09 09 09 7b 20 22 69 64 22 3a 20 22 35  ,.....{ "id": "5
1d60: 30 30 34 22 2c 20 22 74 79 70 65 22 3a 20 22 4d  004", "type": "M
1d70: 61 70 6c 65 22 20 7d 0a 09 09 09 5d 0a 09 7d 2c  aple" }....]..},
1d80: 0a 09 7b 0a 09 09 22 69 64 22 3a 20 22 30 30 30  ..{..."id": "000
1d90: 33 22 2c 0a 09 09 22 74 79 70 65 22 3a 20 22 64  3",..."type": "d
1da0: 6f 6e 75 74 22 2c 0a 09 09 22 6e 61 6d 65 22 3a  onut",..."name":
1db0: 20 22 4f 6c 64 20 46 61 73 68 69 6f 6e 65 64 22   "Old Fashioned"
1dc0: 2c 0a 09 09 22 70 70 75 22 3a 20 30 2e 35 35 2c  ,..."ppu": 0.55,
1dd0: 0a 09 09 22 62 61 74 74 65 72 73 22 3a 0a 09 09  ..."batters":...
1de0: 09 7b 0a 09 09 09 09 22 62 61 74 74 65 72 22 3a  .{....."batter":
1df0: 0a 09 09 09 09 09 5b 0a 09 09 09 09 09 09 7b 20  ......[.......{ 
1e00: 22 69 64 22 3a 20 22 31 30 30 31 22 2c 20 22 74  "id": "1001", "t
1e10: 79 70 65 22 3a 20 22 52 65 67 75 6c 61 72 22 20  ype": "Regular" 
1e20: 7d 2c 0a 09 09 09 09 09 09 7b 20 22 69 64 22 3a  },.......{ "id":
1e30: 20 22 31 30 30 32 22 2c 20 22 74 79 70 65 22 3a   "1002", "type":
1e40: 20 22 43 68 6f 63 6f 6c 61 74 65 22 20 7d 0a 09   "Chocolate" }..
1e50: 09 09 09 09 5d 0a 09 09 09 7d 2c 0a 09 09 22 74  ....]....},..."t
1e60: 6f 70 70 69 6e 67 22 3a 0a 09 09 09 5b 0a 09 09  opping":....[...
1e70: 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30 31 22  ..{ "id": "5001"
1e80: 2c 20 22 74 79 70 65 22 3a 20 22 4e 6f 6e 65 22  , "type": "None"
1e90: 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22 3a 20   },.....{ "id": 
1ea0: 22 35 30 30 32 22 2c 20 22 74 79 70 65 22 3a 20  "5002", "type": 
1eb0: 22 47 6c 61 7a 65 64 22 20 7d 2c 0a 09 09 09 09  "Glazed" },.....
1ec0: 7b 20 22 69 64 22 3a 20 22 35 30 30 33 22 2c 20  { "id": "5003", 
1ed0: 22 74 79 70 65 22 3a 20 22 43 68 6f 63 6f 6c 61  "type": "Chocola
1ee0: 74 65 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64  te" },.....{ "id
1ef0: 22 3a 20 22 35 30 30 34 22 2c 20 22 74 79 70 65  ": "5004", "type
1f00: 22 3a 20 22 4d 61 70 6c 65 22 20 7d 0a 09 09 09  ": "Maple" }....
1f10: 5d 0a 09 7d 0a 20 20 20 5d 27 2c 27 68 74 74 70  ]..}.   ]','http
1f20: 73 3a 2f 2f 61 64 6f 62 65 2e 67 69 74 68 75 62  s://adobe.github
1f30: 2e 69 6f 2f 53 70 72 79 2f 73 61 6d 70 6c 65 73  .io/Spry/samples
1f40: 2f 64 61 74 61 5f 72 65 67 69 6f 6e 2f 4a 53 4f  /data_region/JSO
1f50: 4e 44 61 74 61 53 65 74 53 61 6d 70 6c 65 2e 68  NDataSetSample.h
1f60: 74 6d 6c 27 29 3b 0a 20 20 20 53 45 4c 45 43 54  tml');.   SELECT
1f70: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 6a   count(*) FROM j
1f80: 32 3b 0a 7d 20 7b 33 7d 0a 0a 64 6f 5f 65 78 65  2;.} {3}..do_exe
1f90: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 35  csql_test json-5
1fa0: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 69 64  .2 {.  SELECT id
1fb0: 2c 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 6a 73 6f  , json_valid(jso
1fc0: 6e 29 2c 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73  n), json_type(js
1fd0: 6f 6e 29 2c 20 27 7c 27 20 46 52 4f 4d 20 6a 32  on), '|' FROM j2
1fe0: 20 4f 52 44 45 52 20 42 59 20 69 64 3b 0a 7d 20   ORDER BY id;.} 
1ff0: 7b 31 20 31 20 6f 62 6a 65 63 74 20 7c 20 32 20  {1 1 object | 2 
2000: 31 20 6f 62 6a 65 63 74 20 7c 20 33 20 31 20 61  1 object | 3 1 a
2010: 72 72 61 79 20 7c 7d 0a 0a 69 66 63 61 70 61 62  rray |}..ifcapab
2020: 6c 65 20 21 76 74 61 62 20 7b 0a 20 20 66 69 6e  le !vtab {.  fin
2030: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
2040: 6e 0a 7d 0a 0a 23 20 66 75 6c 6c 6b 65 79 20 69  n.}..# fullkey i
2050: 73 20 61 6c 77 61 79 73 20 74 68 65 20 73 61 6d  s always the sam
2060: 65 20 61 73 20 70 61 74 68 2b 6b 65 79 20 28 77  e as path+key (w
2070: 69 74 68 20 61 70 70 72 6f 70 72 69 61 74 65 20  ith appropriate 
2080: 66 6f 72 6d 61 74 74 69 6e 67 29 0a 23 0a 64 6f  formatting).#.do
2090: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
20a0: 6f 6e 2d 35 2e 33 20 7b 0a 20 20 53 45 4c 45 43  on-5.3 {.  SELEC
20b0: 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a 78 2e 72  T j2.rowid, jx.r
20c0: 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79 2c 20 70  owid, fullkey, p
20d0: 61 74 68 2c 20 6b 65 79 0a 20 20 20 20 46 52 4f  ath, key.    FRO
20e0: 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 74 72 65 65 28  M j2, json_tree(
20f0: 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a 78 0a 20  j2.json) AS jx. 
2100: 20 20 57 48 45 52 45 20 66 75 6c 6c 6b 65 79 21    WHERE fullkey!
2110: 3d 28 70 61 74 68 20 7c 7c 20 43 41 53 45 20 57  =(path || CASE W
2120: 48 45 4e 20 74 79 70 65 6f 66 28 6b 65 79 29 3d  HEN typeof(key)=
2130: 3d 27 69 6e 74 65 67 65 72 27 20 54 48 45 4e 20  ='integer' THEN 
2140: 27 5b 27 7c 7c 6b 65 79 7c 7c 27 5d 27 0a 20 20  '['||key||']'.  
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4c                EL
2170: 53 45 20 27 2e 27 7c 7c 6b 65 79 20 45 4e 44 29  SE '.'||key END)
2180: 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71  ;.} {}.do_execsq
2190: 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 35 2e 34 20  l_test json-5.4 
21a0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 32 2e 72 6f  {.  SELECT j2.ro
21b0: 77 69 64 2c 20 6a 78 2e 72 6f 77 69 64 2c 20 66  wid, jx.rowid, f
21c0: 75 6c 6c 6b 65 79 2c 20 70 61 74 68 2c 20 6b 65  ullkey, path, ke
21d0: 79 0a 20 20 20 20 46 52 4f 4d 20 6a 32 2c 20 6a  y.    FROM j2, j
21e0: 73 6f 6e 5f 65 61 63 68 28 6a 32 2e 6a 73 6f 6e  son_each(j2.json
21f0: 29 20 41 53 20 6a 78 0a 20 20 20 57 48 45 52 45  ) AS jx.   WHERE
2200: 20 66 75 6c 6c 6b 65 79 21 3d 28 70 61 74 68 20   fullkey!=(path 
2210: 7c 7c 20 43 41 53 45 20 57 48 45 4e 20 74 79 70  || CASE WHEN typ
2220: 65 6f 66 28 6b 65 79 29 3d 3d 27 69 6e 74 65 67  eof(key)=='integ
2230: 65 72 27 20 54 48 45 4e 20 27 5b 27 7c 7c 6b 65  er' THEN '['||ke
2240: 79 7c 7c 27 5d 27 0a 20 20 20 20 20 20 20 20 20  y||']'.         
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 20 20 20 20 20 45 4c 53 45 20 27 2e 27 7c         ELSE '.'|
2270: 7c 6b 65 79 20 45 4e 44 29 3b 0a 7d 20 7b 7d 0a  |key END);.} {}.
2280: 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20  ..# Verify that 
2290: 74 68 65 20 6a 73 6f 6e 5f 65 61 63 68 2e 6a 73  the json_each.js
22a0: 6f 6e 20 61 6e 64 20 6a 73 6f 6e 5f 74 72 65 65  on and json_tree
22b0: 2e 6a 73 6f 6e 20 6f 75 74 70 75 74 20 69 73 20  .json output is 
22c0: 61 6c 77 61 79 73 20 74 68 65 0a 23 20 73 61 6d  always the.# sam
22d0: 65 20 61 73 20 69 6e 70 75 74 2e 0a 23 0a 64 6f  e as input..#.do
22e0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
22f0: 6f 6e 2d 35 2e 35 20 7b 0a 20 20 53 45 4c 45 43  on-5.5 {.  SELEC
2300: 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a 78 2e 72  T j2.rowid, jx.r
2310: 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79 2c 20 70  owid, fullkey, p
2320: 61 74 68 2c 20 6b 65 79 0a 20 20 20 20 46 52 4f  ath, key.    FRO
2330: 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 65 61 63 68 28  M j2, json_each(
2340: 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a 78 0a 20  j2.json) AS jx. 
2350: 20 20 57 48 45 52 45 20 6a 78 2e 6a 73 6f 6e 3c    WHERE jx.json<
2360: 3e 6a 32 2e 6a 73 6f 6e 3b 0a 7d 20 7b 7d 0a 64  >j2.json;.} {}.d
2370: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
2380: 73 6f 6e 2d 35 2e 36 20 7b 0a 20 20 53 45 4c 45  son-5.6 {.  SELE
2390: 43 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a 78 2e  CT j2.rowid, jx.
23a0: 72 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79 2c 20  rowid, fullkey, 
23b0: 70 61 74 68 2c 20 6b 65 79 0a 20 20 20 20 46 52  path, key.    FR
23c0: 4f 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 74 72 65 65  OM j2, json_tree
23d0: 28 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a 78 0a  (j2.json) AS jx.
23e0: 20 20 20 57 48 45 52 45 20 6a 78 2e 6a 73 6f 6e     WHERE jx.json
23f0: 3c 3e 6a 32 2e 6a 73 6f 6e 3b 0a 7d 20 7b 7d 0a  <>j2.json;.} {}.
2400: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2410: 6a 73 6f 6e 2d 35 2e 37 20 7b 0a 20 20 53 45 4c  json-5.7 {.  SEL
2420: 45 43 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a 78  ECT j2.rowid, jx
2430: 2e 72 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79 2c  .rowid, fullkey,
2440: 20 70 61 74 68 2c 20 6b 65 79 0a 20 20 20 20 46   path, key.    F
2450: 52 4f 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 65 61 63  ROM j2, json_eac
2460: 68 28 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a 78  h(j2.json) AS jx
2470: 0a 20 20 20 57 48 45 52 45 20 6a 78 2e 76 61 6c  .   WHERE jx.val
2480: 75 65 3c 3e 6a 78 2e 61 74 6f 6d 20 41 4e 44 20  ue<>jx.atom AND 
2490: 74 79 70 65 20 4e 4f 54 20 49 4e 20 28 27 61 72  type NOT IN ('ar
24a0: 72 61 79 27 2c 27 6f 62 6a 65 63 74 27 29 3b 0a  ray','object');.
24b0: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
24c0: 74 65 73 74 20 6a 73 6f 6e 2d 35 2e 38 20 7b 0a  test json-5.8 {.
24d0: 20 20 53 45 4c 45 43 54 20 6a 32 2e 72 6f 77 69    SELECT j2.rowi
24e0: 64 2c 20 6a 78 2e 72 6f 77 69 64 2c 20 66 75 6c  d, jx.rowid, ful
24f0: 6c 6b 65 79 2c 20 70 61 74 68 2c 20 6b 65 79 0a  lkey, path, key.
2500: 20 20 20 20 46 52 4f 4d 20 6a 32 2c 20 6a 73 6f      FROM j2, jso
2510: 6e 5f 74 72 65 65 28 6a 32 2e 6a 73 6f 6e 29 20  n_tree(j2.json) 
2520: 41 53 20 6a 78 0a 20 20 20 57 48 45 52 45 20 6a  AS jx.   WHERE j
2530: 78 2e 76 61 6c 75 65 3c 3e 6a 78 2e 61 74 6f 6d  x.value<>jx.atom
2540: 20 41 4e 44 20 74 79 70 65 20 4e 4f 54 20 49 4e   AND type NOT IN
2550: 20 28 27 61 72 72 61 79 27 2c 27 6f 62 6a 65 63   ('array','objec
2560: 74 27 29 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78  t');.} {}..do_ex
2570: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d  ecsql_test json-
2580: 36 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  6.1 {.  SELECT j
2590: 73 6f 6e 5f 76 61 6c 69 64 28 27 7b 22 61 22 3a  son_valid('{"a":
25a0: 35 35 2c 22 62 22 3a 37 32 2c 7d 27 29 3b 0a 7d  55,"b":72,}');.}
25b0: 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   {0}.do_execsql_
25c0: 74 65 73 74 20 6a 73 6f 6e 2d 36 2e 32 20 7b 0a  test json-6.2 {.
25d0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61    SELECT json_va
25e0: 6c 69 64 28 27 7b 22 61 22 3a 35 35 2c 22 62 22  lid('{"a":55,"b"
25f0: 3a 37 32 7d 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f  :72}');.} {1}.do
2600: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
2610: 6f 6e 2d 36 2e 33 20 7b 0a 20 20 53 45 4c 45 43  on-6.3 {.  SELEC
2620: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 5b 22  T json_valid('["
2630: 61 22 2c 35 35 2c 22 62 22 2c 37 32 2c 5d 27 29  a",55,"b",72,]')
2640: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
2650: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 36 2e 34  ql_test json-6.4
2660: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
2670: 5f 76 61 6c 69 64 28 27 5b 22 61 22 2c 35 35 2c  _valid('["a",55,
2680: 22 62 22 2c 37 32 5d 27 29 3b 0a 7d 20 7b 31 7d  "b",72]');.} {1}
2690: 0a 0a 23 20 57 68 69 74 65 2d 73 70 61 63 65 20  ..# White-space 
26a0: 74 65 73 74 73 2e 20 20 4e 6f 74 65 20 74 68 61  tests.  Note tha
26b0: 74 20 66 6f 72 6d 2d 66 65 65 64 20 69 73 20 6e  t form-feed is n
26c0: 6f 74 20 77 68 69 74 65 2d 73 70 61 63 65 20 69  ot white-space i
26d0: 6e 20 4a 53 4f 4e 2e 0a 23 20 74 69 63 6b 65 74  n JSON..# ticket
26e0: 20 5b 35 37 65 65 63 33 37 34 61 65 31 64 30 61   [57eec374ae1d0a
26f0: 31 64 34 61 32 33 30 37 37 61 39 35 66 34 65 31  1d4a23077a95f4e1
2700: 37 33 66 65 32 36 39 31 31 33 5d 0a 23 20 0a 66  73fe269113].# .f
2710: 6f 72 65 61 63 68 20 7b 74 6e 20 69 73 76 61 6c  oreach {tn isval
2720: 69 64 20 77 73 7d 20 7b 0a 20 20 37 2e 31 20 20  id ws} {.  7.1  
2730: 31 20 20 63 68 61 72 28 30 78 32 30 29 0a 20 20  1  char(0x20).  
2740: 37 2e 32 20 20 31 20 20 63 68 61 72 28 30 78 30  7.2  1  char(0x0
2750: 39 29 0a 20 20 37 2e 33 20 20 31 20 20 63 68 61  9).  7.3  1  cha
2760: 72 28 30 78 30 41 29 0a 20 20 37 2e 34 20 20 31  r(0x0A).  7.4  1
2770: 20 20 63 68 61 72 28 30 78 30 44 29 0a 20 20 37    char(0x0D).  7
2780: 2e 35 20 20 30 20 20 63 68 61 72 28 30 78 30 43  .5  0  char(0x0C
2790: 29 0a 20 20 37 2e 36 20 20 31 20 20 63 68 61 72  ).  7.6  1  char
27a0: 28 30 78 32 30 2c 30 78 30 39 2c 30 78 30 61 2c  (0x20,0x09,0x0a,
27b0: 30 78 30 64 2c 30 78 32 30 29 0a 20 20 37 2e 37  0x0d,0x20).  7.7
27c0: 20 20 30 20 20 63 68 61 72 28 30 78 32 30 2c 30    0  char(0x20,0
27d0: 78 30 39 2c 30 78 30 61 2c 30 78 30 63 2c 30 78  x09,0x0a,0x0c,0x
27e0: 30 64 2c 30 78 32 30 29 0a 7d 20 7b 0a 20 20 64  0d,0x20).} {.  d
27f0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
2800: 73 6f 6e 2d 24 74 6e 2e 31 20 5c 0a 20 20 20 20  son-$tn.1 \.    
2810: 22 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c  "SELECT json_val
2820: 69 64 28 70 72 69 6e 74 66 28 27 25 73 7b 25 73  id(printf('%s{%s
2830: 5c 22 78 5c 22 25 73 3a 25 73 39 25 73 7d 25 73  \"x\"%s:%s9%s}%s
2840: 27 2c 0a 20 20 20 20 20 20 20 20 20 24 3a 3a 77  ',.         $::w
2850: 73 2c 24 3a 3a 77 73 2c 24 3a 3a 77 73 2c 24 3a  s,$::ws,$::ws,$:
2860: 3a 77 73 2c 24 3a 3a 77 73 2c 24 3a 3a 77 73 29  :ws,$::ws,$::ws)
2870: 29 3b 22 20 5c 0a 20 20 24 69 73 76 61 6c 69 64  );" \.  $isvalid
2880: 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20 68 74 74  .}..# Ticket htt
2890: 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  ps://www.sqlite.
28a0: 6f 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 61 64 32  org/src/info/ad2
28b0: 35 35 39 64 62 33 38 30 61 62 66 38 65 0a 23 20  559db380abf8e.# 
28c0: 43 6f 6e 74 72 6f 6c 20 63 68 61 72 61 63 74 65  Control characte
28d0: 72 73 20 6d 75 73 74 20 62 65 20 65 73 63 61 70  rs must be escap
28e0: 65 64 20 69 6e 20 4a 53 4f 4e 20 73 74 72 69 6e  ed in JSON strin
28f0: 67 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  gs..#.do_execsql
2900: 5f 74 65 73 74 20 6a 73 6f 6e 2d 38 2e 31 20 7b  _test json-8.1 {
2910: 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46  .  DROP TABLE IF
2920: 20 45 58 49 53 54 53 20 74 38 3b 0a 20 20 43 52   EXISTS t8;.  CR
2930: 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 61 2c  EATE TABLE t8(a,
2940: 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  b);.  INSERT INT
2950: 4f 20 74 38 28 61 29 20 56 41 4c 55 45 53 28 27  O t8(a) VALUES('
2960: 61 62 63 27 20 7c 7c 20 63 68 61 72 28 31 2c 32  abc' || char(1,2
2970: 2c 33 2c 34 2c 35 2c 36 2c 37 2c 38 2c 39 2c 31  ,3,4,5,6,7,8,9,1
2980: 30 2c 31 31 2c 31 32 2c 31 33 2c 31 34 2c 31 35  0,11,12,13,14,15
2990: 2c 31 36 2c 31 37 2c 31 38 2c 31 39 2c 32 30 2c  ,16,17,18,19,20,
29a0: 32 31 2c 32 32 2c 32 33 2c 32 34 2c 32 35 2c 32  21,22,23,24,25,2
29b0: 36 2c 32 37 2c 32 38 2c 32 39 2c 33 30 2c 33 31  6,27,28,29,30,31
29c0: 2c 33 32 2c 33 33 2c 33 34 2c 33 35 29 20 7c 7c  ,32,33,34,35) ||
29d0: 20 27 78 79 7a 27 29 3b 0a 20 20 55 50 44 41 54   'xyz');.  UPDAT
29e0: 45 20 74 38 20 53 45 54 20 62 3d 6a 73 6f 6e 5f  E t8 SET b=json_
29f0: 61 72 72 61 79 28 61 29 3b 0a 20 20 53 45 4c 45  array(a);.  SELE
2a00: 43 54 20 62 20 46 52 4f 4d 20 74 38 3b 0a 7d 20  CT b FROM t8;.} 
2a10: 7b 7b 5b 22 61 62 63 5c 75 30 30 30 31 5c 75 30  {{["abc\u0001\u0
2a20: 30 30 32 5c 75 30 30 30 33 5c 75 30 30 30 34 5c  002\u0003\u0004\
2a30: 75 30 30 30 35 5c 75 30 30 30 36 5c 75 30 30 30  u0005\u0006\u000
2a40: 37 5c 62 5c 74 5c 6e 5c 75 30 30 30 62 5c 66 5c  7\b\t\n\u000b\f\
2a50: 72 5c 75 30 30 30 65 5c 75 30 30 30 66 5c 75 30  r\u000e\u000f\u0
2a60: 30 31 30 5c 75 30 30 31 31 5c 75 30 30 31 32 5c  010\u0011\u0012\
2a70: 75 30 30 31 33 5c 75 30 30 31 34 5c 75 30 30 31  u0013\u0014\u001
2a80: 35 5c 75 30 30 31 36 5c 75 30 30 31 37 5c 75 30  5\u0016\u0017\u0
2a90: 30 31 38 5c 75 30 30 31 39 5c 75 30 30 31 61 5c  018\u0019\u001a\
2aa0: 75 30 30 31 62 5c 75 30 30 31 63 5c 75 30 30 31  u001b\u001c\u001
2ab0: 64 5c 75 30 30 31 65 5c 75 30 30 31 66 20 21 5c  d\u001e\u001f !\
2ac0: 22 23 78 79 7a 22 5d 7d 7d 0a 64 6f 5f 65 78 65  "#xyz"]}}.do_exe
2ad0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 38  csql_test json-8
2ae0: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 3d  .2 {.  SELECT a=
2af0: 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 62 2c 27  json_extract(b,'
2b00: 24 5b 30 5d 27 29 20 46 52 4f 4d 20 74 38 3b 0a  $[0]') FROM t8;.
2b10: 7d 20 7b 31 7d 0a 0a 23 20 54 68 65 20 6a 73 6f  } {1}..# The jso
2b20: 6e 5f 71 75 6f 74 65 28 29 20 66 75 6e 63 74 69  n_quote() functi
2b30: 6f 6e 20 74 72 61 6e 73 66 6f 72 6d 73 20 61 6e  on transforms an
2b40: 20 53 51 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20   SQL value into 
2b50: 61 20 4a 53 4f 4e 20 76 61 6c 75 65 2e 0a 23 20  a JSON value..# 
2b60: 53 74 72 69 6e 67 20 76 61 6c 75 65 73 20 61 72  String values ar
2b70: 65 20 71 75 6f 74 65 64 20 61 6e 64 20 69 6e 74  e quoted and int
2b80: 65 72 69 6f 72 20 71 75 6f 74 65 73 20 61 72 65  erior quotes are
2b90: 20 65 73 63 61 70 65 64 2e 20 20 4e 55 4c 4c 20   escaped.  NULL 
2ba0: 76 61 6c 75 65 73 0a 23 20 61 72 65 20 72 65 6e  values.# are ren
2bb0: 64 65 72 65 64 20 61 73 20 74 68 65 20 75 6e 71  dered as the unq
2bc0: 75 6f 74 65 64 20 73 74 72 69 6e 67 20 22 6e 75  uoted string "nu
2bd0: 6c 6c 22 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  ll"..#.do_execsq
2be0: 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 39 2e 31 20  l_test json-9.1 
2bf0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
2c00: 71 75 6f 74 65 28 27 61 62 63 22 78 79 7a 27 29  quote('abc"xyz')
2c10: 3b 0a 7d 20 7b 7b 22 61 62 63 5c 22 78 79 7a 22  ;.} {{"abc\"xyz"
2c20: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
2c30: 73 74 20 6a 73 6f 6e 2d 39 2e 32 20 7b 0a 20 20  st json-9.2 {.  
2c40: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 71 75 6f 74  SELECT json_quot
2c50: 65 28 33 2e 31 34 31 35 39 29 3b 0a 7d 20 7b 33  e(3.14159);.} {3
2c60: 2e 31 34 31 35 39 7d 0a 64 6f 5f 65 78 65 63 73  .14159}.do_execs
2c70: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 39 2e 33  ql_test json-9.3
2c80: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
2c90: 5f 71 75 6f 74 65 28 31 32 33 34 35 29 3b 0a 7d  _quote(12345);.}
2ca0: 20 7b 31 32 33 34 35 7d 0a 64 6f 5f 65 78 65 63   {12345}.do_exec
2cb0: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 39 2e  sql_test json-9.
2cc0: 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  4 {.  SELECT jso
2cd0: 6e 5f 71 75 6f 74 65 28 6e 75 6c 6c 29 3b 0a 7d  n_quote(null);.}
2ce0: 20 7b 22 6e 75 6c 6c 22 7d 0a 64 6f 5f 63 61 74   {"null"}.do_cat
2cf0: 63 68 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d  chsql_test json-
2d00: 39 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  9.5 {.  SELECT j
2d10: 73 6f 6e 5f 71 75 6f 74 65 28 78 27 33 30 33 31  son_quote(x'3031
2d20: 33 32 33 33 27 29 3b 0a 7d 20 7b 31 20 7b 4a 53  3233');.} {1 {JS
2d30: 4f 4e 20 63 61 6e 6e 6f 74 20 68 6f 6c 64 20 42  ON cannot hold B
2d40: 4c 4f 42 20 76 61 6c 75 65 73 7d 7d 0a 64 6f 5f  LOB values}}.do_
2d50: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 6a 73  catchsql_test js
2d60: 6f 6e 2d 39 2e 36 20 7b 0a 20 20 53 45 4c 45 43  on-9.6 {.  SELEC
2d70: 54 20 6a 73 6f 6e 5f 71 75 6f 74 65 28 31 32 33  T json_quote(123
2d80: 2c 34 35 36 29 0a 7d 20 7b 31 20 7b 77 72 6f 6e  ,456).} {1 {wron
2d90: 67 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  g number of argu
2da0: 6d 65 6e 74 73 20 74 6f 20 66 75 6e 63 74 69 6f  ments to functio
2db0: 6e 20 6a 73 6f 6e 5f 71 75 6f 74 65 28 29 7d 7d  n json_quote()}}
2dc0: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
2dd0: 74 20 6a 73 6f 6e 2d 39 2e 37 20 7b 0a 20 20 53  t json-9.7 {.  S
2de0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 71 75 6f 74 65  ELECT json_quote
2df0: 28 29 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 6e  ().} {1 {wrong n
2e00: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2e10: 74 73 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 6a  ts to function j
2e20: 73 6f 6e 5f 71 75 6f 74 65 28 29 7d 7d 0a 0a 23  son_quote()}}..#
2e30: 20 4d 61 6b 65 20 73 75 72 65 20 6f 6e 6c 79 20   Make sure only 
2e40: 76 61 6c 69 64 20 62 61 63 6b 73 6c 61 73 68 2d  valid backslash-
2e50: 65 73 63 61 70 65 73 20 61 72 65 20 61 63 63 65  escapes are acce
2e60: 70 74 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  pted..#.do_execs
2e70: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
2e80: 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  1 {.  SELECT jso
2e90: 6e 5f 76 61 6c 69 64 28 27 22 20 5c 20 20 22 27  n_valid('" \  "'
2ea0: 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63  );.} {0}.do_exec
2eb0: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30  sql_test json-10
2ec0: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  .2 {.  SELECT js
2ed0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 21 20 22  on_valid('" \! "
2ee0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
2ef0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
2f00: 30 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  0.3 {.  SELECT j
2f10: 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 22 20  son_valid('" \" 
2f20: 22 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78  "');.} {1}.do_ex
2f30: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d  ecsql_test json-
2f40: 31 30 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20  10.4 {.  SELECT 
2f50: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 23  json_valid('" \#
2f60: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
2f70: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
2f80: 2d 31 30 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54  -10.5 {.  SELECT
2f90: 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c   json_valid('" \
2fa0: 24 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f  $ "');.} {0}.do_
2fb0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
2fc0: 6e 2d 31 30 2e 36 20 7b 0a 20 20 53 45 4c 45 43  n-10.6 {.  SELEC
2fd0: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
2fe0: 5c 25 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \% "');.} {0}.do
2ff0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3000: 6f 6e 2d 31 30 2e 37 20 7b 0a 20 20 53 45 4c 45  on-10.7 {.  SELE
3010: 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22  CT json_valid('"
3020: 20 5c 26 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64   \& "');.} {0}.d
3030: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
3040: 73 6f 6e 2d 31 30 2e 38 20 7b 0a 20 20 53 45 4c  son-10.8 {.  SEL
3050: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3060: 22 20 5c 27 27 20 22 27 29 3b 0a 7d 20 7b 30 7d  " \'' "');.} {0}
3070: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
3080: 20 6a 73 6f 6e 2d 31 30 2e 39 20 7b 0a 20 20 53   json-10.9 {.  S
3090: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
30a0: 28 27 22 20 5c 28 20 22 27 29 3b 0a 7d 20 7b 30  ('" \( "');.} {0
30b0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
30c0: 74 20 6a 73 6f 6e 2d 31 30 2e 31 30 20 7b 0a 20  t json-10.10 {. 
30d0: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
30e0: 69 64 28 27 22 20 5c 29 20 22 27 29 3b 0a 7d 20  id('" \) "');.} 
30f0: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3100: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 31 31 20 7b  est json-10.11 {
3110: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3120: 61 6c 69 64 28 27 22 20 5c 2a 20 22 27 29 3b 0a  alid('" \* "');.
3130: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3140: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 31 32  _test json-10.12
3150: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3160: 5f 76 61 6c 69 64 28 27 22 20 5c 2b 20 22 27 29  _valid('" \+ "')
3170: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
3180: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
3190: 31 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  13 {.  SELECT js
31a0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 2c 20 22  on_valid('" \, "
31b0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
31c0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
31d0: 30 2e 31 34 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.14 {.  SELECT 
31e0: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 2d  json_valid('" \-
31f0: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3200: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3210: 2d 31 30 2e 31 35 20 7b 0a 20 20 53 45 4c 45 43  -10.15 {.  SELEC
3220: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3230: 5c 2e 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \. "');.} {0}.do
3240: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3250: 6f 6e 2d 31 30 2e 31 36 20 7b 0a 20 20 53 45 4c  on-10.16 {.  SEL
3260: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3270: 22 20 5c 2f 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a  " \/ "');.} {1}.
3280: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3290: 6a 73 6f 6e 2d 31 30 2e 31 37 20 7b 0a 20 20 53  json-10.17 {.  S
32a0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
32b0: 28 27 22 20 5c 30 20 22 27 29 3b 0a 7d 20 7b 30  ('" \0 "');.} {0
32c0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
32d0: 74 20 6a 73 6f 6e 2d 31 30 2e 31 38 20 7b 0a 20  t json-10.18 {. 
32e0: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
32f0: 69 64 28 27 22 20 5c 31 20 22 27 29 3b 0a 7d 20  id('" \1 "');.} 
3300: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3310: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 31 39 20 7b  est json-10.19 {
3320: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3330: 61 6c 69 64 28 27 22 20 5c 32 20 22 27 29 3b 0a  alid('" \2 "');.
3340: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3350: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32 30  _test json-10.20
3360: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3370: 5f 76 61 6c 69 64 28 27 22 20 5c 33 20 22 27 29  _valid('" \3 "')
3380: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
3390: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
33a0: 32 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  21 {.  SELECT js
33b0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 34 20 22  on_valid('" \4 "
33c0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
33d0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
33e0: 30 2e 32 32 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.22 {.  SELECT 
33f0: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 35  json_valid('" \5
3400: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3410: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3420: 2d 31 30 2e 32 33 20 7b 0a 20 20 53 45 4c 45 43  -10.23 {.  SELEC
3430: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3440: 5c 36 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \6 "');.} {0}.do
3450: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3460: 6f 6e 2d 31 30 2e 32 34 20 7b 0a 20 20 53 45 4c  on-10.24 {.  SEL
3470: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3480: 22 20 5c 37 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \7 "');.} {0}.
3490: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
34a0: 6a 73 6f 6e 2d 31 30 2e 32 35 20 7b 0a 20 20 53  json-10.25 {.  S
34b0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
34c0: 28 27 22 20 5c 38 20 22 27 29 3b 0a 7d 20 7b 30  ('" \8 "');.} {0
34d0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
34e0: 74 20 6a 73 6f 6e 2d 31 30 2e 32 36 20 7b 0a 20  t json-10.26 {. 
34f0: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3500: 69 64 28 27 22 20 5c 39 20 22 27 29 3b 0a 7d 20  id('" \9 "');.} 
3510: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3520: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32 37 20 7b  est json-10.27 {
3530: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3540: 61 6c 69 64 28 27 22 20 5c 3a 20 22 27 29 3b 0a  alid('" \: "');.
3550: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3560: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32 38  _test json-10.28
3570: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3580: 5f 76 61 6c 69 64 28 27 22 20 5c 3b 20 22 27 29  _valid('" \; "')
3590: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
35a0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
35b0: 32 39 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  29 {.  SELECT js
35c0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 3c 20 22  on_valid('" \< "
35d0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
35e0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
35f0: 30 2e 33 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.30 {.  SELECT 
3600: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 3d  json_valid('" \=
3610: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3620: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3630: 2d 31 30 2e 33 31 20 7b 0a 20 20 53 45 4c 45 43  -10.31 {.  SELEC
3640: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3650: 5c 3e 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \> "');.} {0}.do
3660: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3670: 6f 6e 2d 31 30 2e 33 32 20 7b 0a 20 20 53 45 4c  on-10.32 {.  SEL
3680: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3690: 22 20 5c 3f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \? "');.} {0}.
36a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
36b0: 6a 73 6f 6e 2d 31 30 2e 33 33 20 7b 0a 20 20 53  json-10.33 {.  S
36c0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
36d0: 28 27 22 20 5c 40 20 22 27 29 3b 0a 7d 20 7b 30  ('" \@ "');.} {0
36e0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
36f0: 74 20 6a 73 6f 6e 2d 31 30 2e 33 34 20 7b 0a 20  t json-10.34 {. 
3700: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3710: 69 64 28 27 22 20 5c 41 20 22 27 29 3b 0a 7d 20  id('" \A "');.} 
3720: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3730: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 33 35 20 7b  est json-10.35 {
3740: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3750: 61 6c 69 64 28 27 22 20 5c 42 20 22 27 29 3b 0a  alid('" \B "');.
3760: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3770: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 33 36  _test json-10.36
3780: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3790: 5f 76 61 6c 69 64 28 27 22 20 5c 43 20 22 27 29  _valid('" \C "')
37a0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
37b0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
37c0: 33 37 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  37 {.  SELECT js
37d0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 44 20 22  on_valid('" \D "
37e0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
37f0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3800: 30 2e 33 38 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.38 {.  SELECT 
3810: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 45  json_valid('" \E
3820: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3830: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3840: 2d 31 30 2e 33 39 20 7b 0a 20 20 53 45 4c 45 43  -10.39 {.  SELEC
3850: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3860: 5c 46 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \F "');.} {0}.do
3870: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3880: 6f 6e 2d 31 30 2e 34 30 20 7b 0a 20 20 53 45 4c  on-10.40 {.  SEL
3890: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
38a0: 22 20 5c 47 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \G "');.} {0}.
38b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
38c0: 6a 73 6f 6e 2d 31 30 2e 34 31 20 7b 0a 20 20 53  json-10.41 {.  S
38d0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
38e0: 28 27 22 20 5c 48 20 22 27 29 3b 0a 7d 20 7b 30  ('" \H "');.} {0
38f0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3900: 74 20 6a 73 6f 6e 2d 31 30 2e 34 32 20 7b 0a 20  t json-10.42 {. 
3910: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3920: 69 64 28 27 22 20 5c 49 20 22 27 29 3b 0a 7d 20  id('" \I "');.} 
3930: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3940: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 34 33 20 7b  est json-10.43 {
3950: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3960: 61 6c 69 64 28 27 22 20 5c 4a 20 22 27 29 3b 0a  alid('" \J "');.
3970: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3980: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 34 34  _test json-10.44
3990: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
39a0: 5f 76 61 6c 69 64 28 27 22 20 5c 4b 20 22 27 29  _valid('" \K "')
39b0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
39c0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
39d0: 34 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  45 {.  SELECT js
39e0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 4c 20 22  on_valid('" \L "
39f0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3a00: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3a10: 30 2e 34 36 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.46 {.  SELECT 
3a20: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 4d  json_valid('" \M
3a30: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3a40: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3a50: 2d 31 30 2e 34 37 20 7b 0a 20 20 53 45 4c 45 43  -10.47 {.  SELEC
3a60: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3a70: 5c 4e 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \N "');.} {0}.do
3a80: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3a90: 6f 6e 2d 31 30 2e 34 38 20 7b 0a 20 20 53 45 4c  on-10.48 {.  SEL
3aa0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3ab0: 22 20 5c 4f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \O "');.} {0}.
3ac0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3ad0: 6a 73 6f 6e 2d 31 30 2e 34 39 20 7b 0a 20 20 53  json-10.49 {.  S
3ae0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
3af0: 28 27 22 20 5c 50 20 22 27 29 3b 0a 7d 20 7b 30  ('" \P "');.} {0
3b00: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3b10: 74 20 6a 73 6f 6e 2d 31 30 2e 35 30 20 7b 0a 20  t json-10.50 {. 
3b20: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3b30: 69 64 28 27 22 20 5c 51 20 22 27 29 3b 0a 7d 20  id('" \Q "');.} 
3b40: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3b50: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 35 31 20 7b  est json-10.51 {
3b60: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3b70: 61 6c 69 64 28 27 22 20 5c 52 20 22 27 29 3b 0a  alid('" \R "');.
3b80: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3b90: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 35 32  _test json-10.52
3ba0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3bb0: 5f 76 61 6c 69 64 28 27 22 20 5c 53 20 22 27 29  _valid('" \S "')
3bc0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
3bd0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
3be0: 35 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  53 {.  SELECT js
3bf0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 54 20 22  on_valid('" \T "
3c00: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3c10: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3c20: 30 2e 35 34 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.54 {.  SELECT 
3c30: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 55  json_valid('" \U
3c40: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3c50: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3c60: 2d 31 30 2e 35 35 20 7b 0a 20 20 53 45 4c 45 43  -10.55 {.  SELEC
3c70: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3c80: 5c 56 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \V "');.} {0}.do
3c90: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3ca0: 6f 6e 2d 31 30 2e 35 36 20 7b 0a 20 20 53 45 4c  on-10.56 {.  SEL
3cb0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3cc0: 22 20 5c 57 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \W "');.} {0}.
3cd0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3ce0: 6a 73 6f 6e 2d 31 30 2e 35 37 20 7b 0a 20 20 53  json-10.57 {.  S
3cf0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
3d00: 28 27 22 20 5c 58 20 22 27 29 3b 0a 7d 20 7b 30  ('" \X "');.} {0
3d10: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3d20: 74 20 6a 73 6f 6e 2d 31 30 2e 35 38 20 7b 0a 20  t json-10.58 {. 
3d30: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3d40: 69 64 28 27 22 20 5c 59 20 22 27 29 3b 0a 7d 20  id('" \Y "');.} 
3d50: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3d60: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 35 39 20 7b  est json-10.59 {
3d70: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3d80: 61 6c 69 64 28 27 22 20 5c 5a 20 22 27 29 3b 0a  alid('" \Z "');.
3d90: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3da0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 36 30  _test json-10.60
3db0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3dc0: 5f 76 61 6c 69 64 28 27 22 20 5c 5b 20 22 27 29  _valid('" \[ "')
3dd0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
3de0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
3df0: 36 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  61 {.  SELECT js
3e00: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 5c 20 22  on_valid('" \\ "
3e10: 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65  ');.} {1}.do_exe
3e20: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3e30: 30 2e 36 32 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.62 {.  SELECT 
3e40: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 5d  json_valid('" \]
3e50: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3e60: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3e70: 2d 31 30 2e 36 33 20 7b 0a 20 20 53 45 4c 45 43  -10.63 {.  SELEC
3e80: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3e90: 5c 5e 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \^ "');.} {0}.do
3ea0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3eb0: 6f 6e 2d 31 30 2e 36 34 20 7b 0a 20 20 53 45 4c  on-10.64 {.  SEL
3ec0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3ed0: 22 20 5c 5f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \_ "');.} {0}.
3ee0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3ef0: 6a 73 6f 6e 2d 31 30 2e 36 35 20 7b 0a 20 20 53  json-10.65 {.  S
3f00: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
3f10: 28 27 22 20 5c 60 20 22 27 29 3b 0a 7d 20 7b 30  ('" \` "');.} {0
3f20: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3f30: 74 20 6a 73 6f 6e 2d 31 30 2e 36 36 20 7b 0a 20  t json-10.66 {. 
3f40: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3f50: 69 64 28 27 22 20 5c 61 20 22 27 29 3b 0a 7d 20  id('" \a "');.} 
3f60: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3f70: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 36 37 20 7b  est json-10.67 {
3f80: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3f90: 61 6c 69 64 28 27 22 20 5c 62 20 22 27 29 3b 0a  alid('" \b "');.
3fa0: 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {1}.do_execsql
3fb0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 36 38  _test json-10.68
3fc0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3fd0: 5f 76 61 6c 69 64 28 27 22 20 5c 63 20 22 27 29  _valid('" \c "')
3fe0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
3ff0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4000: 36 39 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  69 {.  SELECT js
4010: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 64 20 22  on_valid('" \d "
4020: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
4030: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
4040: 30 2e 37 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.70 {.  SELECT 
4050: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 65  json_valid('" \e
4060: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
4070: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
4080: 2d 31 30 2e 37 31 20 7b 0a 20 20 53 45 4c 45 43  -10.71 {.  SELEC
4090: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
40a0: 5c 66 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f  \f "');.} {1}.do
40b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
40c0: 6f 6e 2d 31 30 2e 37 32 20 7b 0a 20 20 53 45 4c  on-10.72 {.  SEL
40d0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
40e0: 22 20 5c 67 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \g "');.} {0}.
40f0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4100: 6a 73 6f 6e 2d 31 30 2e 37 33 20 7b 0a 20 20 53  json-10.73 {.  S
4110: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4120: 28 27 22 20 5c 68 20 22 27 29 3b 0a 7d 20 7b 30  ('" \h "');.} {0
4130: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
4140: 74 20 6a 73 6f 6e 2d 31 30 2e 37 34 20 7b 0a 20  t json-10.74 {. 
4150: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
4160: 69 64 28 27 22 20 5c 69 20 22 27 29 3b 0a 7d 20  id('" \i "');.} 
4170: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
4180: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 37 35 20 7b  est json-10.75 {
4190: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
41a0: 61 6c 69 64 28 27 22 20 5c 6a 20 22 27 29 3b 0a  alid('" \j "');.
41b0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
41c0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 37 36  _test json-10.76
41d0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
41e0: 5f 76 61 6c 69 64 28 27 22 20 5c 6b 20 22 27 29  _valid('" \k "')
41f0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
4200: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4210: 37 37 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  77 {.  SELECT js
4220: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 6c 20 22  on_valid('" \l "
4230: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
4240: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
4250: 30 2e 37 38 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.78 {.  SELECT 
4260: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 6d  json_valid('" \m
4270: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
4280: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
4290: 2d 31 30 2e 37 39 20 7b 0a 20 20 53 45 4c 45 43  -10.79 {.  SELEC
42a0: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
42b0: 5c 6e 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f  \n "');.} {1}.do
42c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
42d0: 6f 6e 2d 31 30 2e 38 30 20 7b 0a 20 20 53 45 4c  on-10.80 {.  SEL
42e0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
42f0: 22 20 5c 6f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \o "');.} {0}.
4300: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4310: 6a 73 6f 6e 2d 31 30 2e 38 31 20 7b 0a 20 20 53  json-10.81 {.  S
4320: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4330: 28 27 22 20 5c 70 20 22 27 29 3b 0a 7d 20 7b 30  ('" \p "');.} {0
4340: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
4350: 74 20 6a 73 6f 6e 2d 31 30 2e 38 32 20 7b 0a 20  t json-10.82 {. 
4360: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
4370: 69 64 28 27 22 20 5c 71 20 22 27 29 3b 0a 7d 20  id('" \q "');.} 
4380: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
4390: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 38 33 20 7b  est json-10.83 {
43a0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
43b0: 61 6c 69 64 28 27 22 20 5c 72 20 22 27 29 3b 0a  alid('" \r "');.
43c0: 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {1}.do_execsql
43d0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 38 34  _test json-10.84
43e0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
43f0: 5f 76 61 6c 69 64 28 27 22 20 5c 73 20 22 27 29  _valid('" \s "')
4400: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
4410: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4420: 38 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  85 {.  SELECT js
4430: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 74 20 22  on_valid('" \t "
4440: 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65  ');.} {1}.do_exe
4450: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
4460: 30 2e 38 36 2e 30 20 7b 0a 20 20 53 45 4c 45 43  0.86.0 {.  SELEC
4470: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
4480: 5c 75 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \u "');.} {0}.do
4490: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
44a0: 6f 6e 2d 31 30 2e 38 36 2e 31 20 7b 0a 20 20 53  on-10.86.1 {.  S
44b0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
44c0: 28 27 22 20 5c 75 61 20 22 27 29 3b 0a 7d 20 7b  ('" \ua "');.} {
44d0: 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  0}.do_execsql_te
44e0: 73 74 20 6a 73 6f 6e 2d 31 30 2e 38 36 2e 32 20  st json-10.86.2 
44f0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
4500: 76 61 6c 69 64 28 27 22 20 5c 75 61 62 20 22 27  valid('" \uab "'
4510: 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63  );.} {0}.do_exec
4520: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30  sql_test json-10
4530: 2e 38 36 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  .86.3 {.  SELECT
4540: 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c   json_valid('" \
4550: 75 61 62 63 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  uabc "');.} {0}.
4560: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4570: 6a 73 6f 6e 2d 31 30 2e 38 36 2e 34 20 7b 0a 20  json-10.86.4 {. 
4580: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
4590: 69 64 28 27 22 20 5c 75 61 62 63 64 20 22 27 29  id('" \uabcd "')
45a0: 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {1}.do_execs
45b0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
45c0: 38 36 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20  86.5 {.  SELECT 
45d0: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 75  json_valid('" \u
45e0: 46 45 44 43 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a  FEDC "');.} {1}.
45f0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4600: 6a 73 6f 6e 2d 31 30 2e 38 36 2e 36 20 7b 0a 20  json-10.86.6 {. 
4610: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
4620: 69 64 28 27 22 20 5c 75 31 32 33 34 20 22 27 29  id('" \u1234 "')
4630: 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {1}.do_execs
4640: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4650: 38 37 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  87 {.  SELECT js
4660: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 76 20 22  on_valid('" \v "
4670: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
4680: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
4690: 30 2e 38 38 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.88 {.  SELECT 
46a0: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 77  json_valid('" \w
46b0: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
46c0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
46d0: 2d 31 30 2e 38 39 20 7b 0a 20 20 53 45 4c 45 43  -10.89 {.  SELEC
46e0: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
46f0: 5c 78 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \x "');.} {0}.do
4700: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
4710: 6f 6e 2d 31 30 2e 39 30 20 7b 0a 20 20 53 45 4c  on-10.90 {.  SEL
4720: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
4730: 22 20 5c 79 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \y "');.} {0}.
4740: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4750: 6a 73 6f 6e 2d 31 30 2e 39 31 20 7b 0a 20 20 53  json-10.91 {.  S
4760: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4770: 28 27 22 20 5c 7a 20 22 27 29 3b 0a 7d 20 7b 30  ('" \z "');.} {0
4780: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
4790: 74 20 6a 73 6f 6e 2d 31 30 2e 39 32 20 7b 0a 20  t json-10.92 {. 
47a0: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
47b0: 69 64 28 27 22 20 5c 7b 20 22 27 29 3b 0a 7d 20  id('" \{ "');.} 
47c0: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
47d0: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 39 33 20 7b  est json-10.93 {
47e0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
47f0: 61 6c 69 64 28 27 22 20 5c 7c 20 22 27 29 3b 0a  alid('" \| "');.
4800: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
4810: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 39 34  _test json-10.94
4820: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
4830: 5f 76 61 6c 69 64 28 27 22 20 5c 7d 20 22 27 29  _valid('" \} "')
4840: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
4850: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4860: 39 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  95 {.  SELECT js
4870: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 7e 20 22  on_valid('" \~ "
4880: 27 29 3b 0a 7d 20 7b 30 7d 0a 0a 0a 66 69 6e 69  ');.} {0}...fini
4890: 73 68 5f 74 65 73 74 0a                          sh_test.