/ Hex Artifact Content
Login

Artifact d7cdf3e6731d41e0c4bde1c88806abd17f1f478486a1409933c1d8eac9120095:


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 32 30 31 37 2d 30 34  } {1}..# 2017-04
2b20: 2d 31 32 2e 20 20 52 65 67 72 65 73 73 69 6f 6e  -12.  Regression
2b30: 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65   reported on the
2b40: 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74 20 62 79   mailing list by
2b50: 20 52 6f 6c 66 20 41 64 65 0a 23 0a 64 6f 5f 65   Rolf Ade.#.do_e
2b60: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
2b70: 2d 38 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20  -8.3 {.  SELECT 
2b80: 6a 73 6f 6e 5f 76 61 6c 69 64 28 63 68 61 72 28  json_valid(char(
2b90: 30 78 32 32 2c 30 78 65 34 2c 30 78 32 32 29 29  0x22,0xe4,0x22))
2ba0: 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {1}.do_execs
2bb0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 38 2e 34  ql_test json-8.4
2bc0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 75 6e 69 63   {.  SELECT unic
2bd0: 6f 64 65 28 6a 73 6f 6e 5f 65 78 74 72 61 63 74  ode(json_extract
2be0: 28 63 68 61 72 28 30 78 32 32 2c 32 32 38 2c 30  (char(0x22,228,0
2bf0: 78 32 32 29 2c 27 24 27 29 29 3b 0a 7d 20 7b 32  x22),'$'));.} {2
2c00: 32 38 7d 0a 0a 23 20 54 68 65 20 6a 73 6f 6e 5f  28}..# The json_
2c10: 71 75 6f 74 65 28 29 20 66 75 6e 63 74 69 6f 6e  quote() function
2c20: 20 74 72 61 6e 73 66 6f 72 6d 73 20 61 6e 20 53   transforms an S
2c30: 51 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  QL value into a 
2c40: 4a 53 4f 4e 20 76 61 6c 75 65 2e 0a 23 20 53 74  JSON value..# St
2c50: 72 69 6e 67 20 76 61 6c 75 65 73 20 61 72 65 20  ring values are 
2c60: 71 75 6f 74 65 64 20 61 6e 64 20 69 6e 74 65 72  quoted and inter
2c70: 69 6f 72 20 71 75 6f 74 65 73 20 61 72 65 20 65  ior quotes are e
2c80: 73 63 61 70 65 64 2e 20 20 4e 55 4c 4c 20 76 61  scaped.  NULL va
2c90: 6c 75 65 73 0a 23 20 61 72 65 20 72 65 6e 64 65  lues.# are rende
2ca0: 72 65 64 20 61 73 20 74 68 65 20 75 6e 71 75 6f  red as the unquo
2cb0: 74 65 64 20 73 74 72 69 6e 67 20 22 6e 75 6c 6c  ted string "null
2cc0: 22 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  "..#.do_execsql_
2cd0: 74 65 73 74 20 6a 73 6f 6e 2d 39 2e 31 20 7b 0a  test json-9.1 {.
2ce0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 71 75    SELECT json_qu
2cf0: 6f 74 65 28 27 61 62 63 22 78 79 7a 27 29 3b 0a  ote('abc"xyz');.
2d00: 7d 20 7b 7b 22 61 62 63 5c 22 78 79 7a 22 7d 7d  } {{"abc\"xyz"}}
2d10: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2d20: 20 6a 73 6f 6e 2d 39 2e 32 20 7b 0a 20 20 53 45   json-9.2 {.  SE
2d30: 4c 45 43 54 20 6a 73 6f 6e 5f 71 75 6f 74 65 28  LECT json_quote(
2d40: 33 2e 31 34 31 35 39 29 3b 0a 7d 20 7b 33 2e 31  3.14159);.} {3.1
2d50: 34 31 35 39 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  4159}.do_execsql
2d60: 5f 74 65 73 74 20 6a 73 6f 6e 2d 39 2e 33 20 7b  _test json-9.3 {
2d70: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 71  .  SELECT json_q
2d80: 75 6f 74 65 28 31 32 33 34 35 29 3b 0a 7d 20 7b  uote(12345);.} {
2d90: 31 32 33 34 35 7d 0a 64 6f 5f 65 78 65 63 73 71  12345}.do_execsq
2da0: 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 39 2e 34 20  l_test json-9.4 
2db0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
2dc0: 71 75 6f 74 65 28 6e 75 6c 6c 29 3b 0a 7d 20 7b  quote(null);.} {
2dd0: 22 6e 75 6c 6c 22 7d 0a 64 6f 5f 63 61 74 63 68  "null"}.do_catch
2de0: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 39 2e  sql_test json-9.
2df0: 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  5 {.  SELECT jso
2e00: 6e 5f 71 75 6f 74 65 28 78 27 33 30 33 31 33 32  n_quote(x'303132
2e10: 33 33 27 29 3b 0a 7d 20 7b 31 20 7b 4a 53 4f 4e  33');.} {1 {JSON
2e20: 20 63 61 6e 6e 6f 74 20 68 6f 6c 64 20 42 4c 4f   cannot hold BLO
2e30: 42 20 76 61 6c 75 65 73 7d 7d 0a 64 6f 5f 63 61  B values}}.do_ca
2e40: 74 63 68 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  tchsql_test json
2e50: 2d 39 2e 36 20 7b 0a 20 20 53 45 4c 45 43 54 20  -9.6 {.  SELECT 
2e60: 6a 73 6f 6e 5f 71 75 6f 74 65 28 31 32 33 2c 34  json_quote(123,4
2e70: 35 36 29 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20  56).} {1 {wrong 
2e80: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
2e90: 6e 74 73 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20  nts to function 
2ea0: 6a 73 6f 6e 5f 71 75 6f 74 65 28 29 7d 7d 0a 64  json_quote()}}.d
2eb0: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
2ec0: 6a 73 6f 6e 2d 39 2e 37 20 7b 0a 20 20 53 45 4c  json-9.7 {.  SEL
2ed0: 45 43 54 20 6a 73 6f 6e 5f 71 75 6f 74 65 28 29  ECT json_quote()
2ee0: 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 6e 75 6d  .} {1 {wrong num
2ef0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2f00: 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 6a 73 6f   to function jso
2f10: 6e 5f 71 75 6f 74 65 28 29 7d 7d 0a 0a 23 20 4d  n_quote()}}..# M
2f20: 61 6b 65 20 73 75 72 65 20 6f 6e 6c 79 20 76 61  ake sure only va
2f30: 6c 69 64 20 62 61 63 6b 73 6c 61 73 68 2d 65 73  lid backslash-es
2f40: 63 61 70 65 73 20 61 72 65 20 61 63 63 65 70 74  capes are accept
2f50: 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ed..#.do_execsql
2f60: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 31 20  _test json-10.1 
2f70: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
2f80: 76 61 6c 69 64 28 27 22 20 5c 20 20 22 27 29 3b  valid('" \  "');
2f90: 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71  .} {0}.do_execsq
2fa0: 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32  l_test json-10.2
2fb0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
2fc0: 5f 76 61 6c 69 64 28 27 22 20 5c 21 20 22 27 29  _valid('" \! "')
2fd0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
2fe0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
2ff0: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  3 {.  SELECT jso
3000: 6e 5f 76 61 6c 69 64 28 27 22 20 5c 22 20 22 27  n_valid('" \" "'
3010: 29 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63  );.} {1}.do_exec
3020: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30  sql_test json-10
3030: 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  .4 {.  SELECT js
3040: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 23 20 22  on_valid('" \# "
3050: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3060: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3070: 30 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  0.5 {.  SELECT j
3080: 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 24 20  son_valid('" \$ 
3090: 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78  "');.} {0}.do_ex
30a0: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d  ecsql_test json-
30b0: 31 30 2e 36 20 7b 0a 20 20 53 45 4c 45 43 54 20  10.6 {.  SELECT 
30c0: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 25  json_valid('" \%
30d0: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
30e0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
30f0: 2d 31 30 2e 37 20 7b 0a 20 20 53 45 4c 45 43 54  -10.7 {.  SELECT
3100: 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c   json_valid('" \
3110: 26 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f  & "');.} {0}.do_
3120: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
3130: 6e 2d 31 30 2e 38 20 7b 0a 20 20 53 45 4c 45 43  n-10.8 {.  SELEC
3140: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3150: 5c 27 27 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64  \'' "');.} {0}.d
3160: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
3170: 73 6f 6e 2d 31 30 2e 39 20 7b 0a 20 20 53 45 4c  son-10.9 {.  SEL
3180: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3190: 22 20 5c 28 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \( "');.} {0}.
31a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
31b0: 6a 73 6f 6e 2d 31 30 2e 31 30 20 7b 0a 20 20 53  json-10.10 {.  S
31c0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
31d0: 28 27 22 20 5c 29 20 22 27 29 3b 0a 7d 20 7b 30  ('" \) "');.} {0
31e0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
31f0: 74 20 6a 73 6f 6e 2d 31 30 2e 31 31 20 7b 0a 20  t json-10.11 {. 
3200: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3210: 69 64 28 27 22 20 5c 2a 20 22 27 29 3b 0a 7d 20  id('" \* "');.} 
3220: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3230: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 31 32 20 7b  est json-10.12 {
3240: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3250: 61 6c 69 64 28 27 22 20 5c 2b 20 22 27 29 3b 0a  alid('" \+ "');.
3260: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3270: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 31 33  _test json-10.13
3280: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3290: 5f 76 61 6c 69 64 28 27 22 20 5c 2c 20 22 27 29  _valid('" \, "')
32a0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
32b0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
32c0: 31 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  14 {.  SELECT js
32d0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 2d 20 22  on_valid('" \- "
32e0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
32f0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3300: 30 2e 31 35 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.15 {.  SELECT 
3310: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 2e  json_valid('" \.
3320: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3330: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3340: 2d 31 30 2e 31 36 20 7b 0a 20 20 53 45 4c 45 43  -10.16 {.  SELEC
3350: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3360: 5c 2f 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f  \/ "');.} {1}.do
3370: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3380: 6f 6e 2d 31 30 2e 31 37 20 7b 0a 20 20 53 45 4c  on-10.17 {.  SEL
3390: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
33a0: 22 20 5c 30 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \0 "');.} {0}.
33b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
33c0: 6a 73 6f 6e 2d 31 30 2e 31 38 20 7b 0a 20 20 53  json-10.18 {.  S
33d0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
33e0: 28 27 22 20 5c 31 20 22 27 29 3b 0a 7d 20 7b 30  ('" \1 "');.} {0
33f0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3400: 74 20 6a 73 6f 6e 2d 31 30 2e 31 39 20 7b 0a 20  t json-10.19 {. 
3410: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3420: 69 64 28 27 22 20 5c 32 20 22 27 29 3b 0a 7d 20  id('" \2 "');.} 
3430: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3440: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32 30 20 7b  est json-10.20 {
3450: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3460: 61 6c 69 64 28 27 22 20 5c 33 20 22 27 29 3b 0a  alid('" \3 "');.
3470: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3480: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32 31  _test json-10.21
3490: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
34a0: 5f 76 61 6c 69 64 28 27 22 20 5c 34 20 22 27 29  _valid('" \4 "')
34b0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
34c0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
34d0: 32 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  22 {.  SELECT js
34e0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 35 20 22  on_valid('" \5 "
34f0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3500: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3510: 30 2e 32 33 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.23 {.  SELECT 
3520: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 36  json_valid('" \6
3530: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3540: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3550: 2d 31 30 2e 32 34 20 7b 0a 20 20 53 45 4c 45 43  -10.24 {.  SELEC
3560: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3570: 5c 37 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \7 "');.} {0}.do
3580: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3590: 6f 6e 2d 31 30 2e 32 35 20 7b 0a 20 20 53 45 4c  on-10.25 {.  SEL
35a0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
35b0: 22 20 5c 38 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \8 "');.} {0}.
35c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
35d0: 6a 73 6f 6e 2d 31 30 2e 32 36 20 7b 0a 20 20 53  json-10.26 {.  S
35e0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
35f0: 28 27 22 20 5c 39 20 22 27 29 3b 0a 7d 20 7b 30  ('" \9 "');.} {0
3600: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3610: 74 20 6a 73 6f 6e 2d 31 30 2e 32 37 20 7b 0a 20  t json-10.27 {. 
3620: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3630: 69 64 28 27 22 20 5c 3a 20 22 27 29 3b 0a 7d 20  id('" \: "');.} 
3640: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3650: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32 38 20 7b  est json-10.28 {
3660: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3670: 61 6c 69 64 28 27 22 20 5c 3b 20 22 27 29 3b 0a  alid('" \; "');.
3680: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3690: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 32 39  _test json-10.29
36a0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
36b0: 5f 76 61 6c 69 64 28 27 22 20 5c 3c 20 22 27 29  _valid('" \< "')
36c0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
36d0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
36e0: 33 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  30 {.  SELECT js
36f0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 3d 20 22  on_valid('" \= "
3700: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3710: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3720: 30 2e 33 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.31 {.  SELECT 
3730: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 3e  json_valid('" \>
3740: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3750: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3760: 2d 31 30 2e 33 32 20 7b 0a 20 20 53 45 4c 45 43  -10.32 {.  SELEC
3770: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3780: 5c 3f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \? "');.} {0}.do
3790: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
37a0: 6f 6e 2d 31 30 2e 33 33 20 7b 0a 20 20 53 45 4c  on-10.33 {.  SEL
37b0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
37c0: 22 20 5c 40 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \@ "');.} {0}.
37d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
37e0: 6a 73 6f 6e 2d 31 30 2e 33 34 20 7b 0a 20 20 53  json-10.34 {.  S
37f0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
3800: 28 27 22 20 5c 41 20 22 27 29 3b 0a 7d 20 7b 30  ('" \A "');.} {0
3810: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3820: 74 20 6a 73 6f 6e 2d 31 30 2e 33 35 20 7b 0a 20  t json-10.35 {. 
3830: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3840: 69 64 28 27 22 20 5c 42 20 22 27 29 3b 0a 7d 20  id('" \B "');.} 
3850: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3860: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 33 36 20 7b  est json-10.36 {
3870: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3880: 61 6c 69 64 28 27 22 20 5c 43 20 22 27 29 3b 0a  alid('" \C "');.
3890: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
38a0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 33 37  _test json-10.37
38b0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
38c0: 5f 76 61 6c 69 64 28 27 22 20 5c 44 20 22 27 29  _valid('" \D "')
38d0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
38e0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
38f0: 33 38 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  38 {.  SELECT js
3900: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 45 20 22  on_valid('" \E "
3910: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3920: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3930: 30 2e 33 39 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.39 {.  SELECT 
3940: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 46  json_valid('" \F
3950: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3960: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3970: 2d 31 30 2e 34 30 20 7b 0a 20 20 53 45 4c 45 43  -10.40 {.  SELEC
3980: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3990: 5c 47 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \G "');.} {0}.do
39a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
39b0: 6f 6e 2d 31 30 2e 34 31 20 7b 0a 20 20 53 45 4c  on-10.41 {.  SEL
39c0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
39d0: 22 20 5c 48 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \H "');.} {0}.
39e0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
39f0: 6a 73 6f 6e 2d 31 30 2e 34 32 20 7b 0a 20 20 53  json-10.42 {.  S
3a00: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
3a10: 28 27 22 20 5c 49 20 22 27 29 3b 0a 7d 20 7b 30  ('" \I "');.} {0
3a20: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3a30: 74 20 6a 73 6f 6e 2d 31 30 2e 34 33 20 7b 0a 20  t json-10.43 {. 
3a40: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3a50: 69 64 28 27 22 20 5c 4a 20 22 27 29 3b 0a 7d 20  id('" \J "');.} 
3a60: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3a70: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 34 34 20 7b  est json-10.44 {
3a80: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3a90: 61 6c 69 64 28 27 22 20 5c 4b 20 22 27 29 3b 0a  alid('" \K "');.
3aa0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3ab0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 34 35  _test json-10.45
3ac0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3ad0: 5f 76 61 6c 69 64 28 27 22 20 5c 4c 20 22 27 29  _valid('" \L "')
3ae0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
3af0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
3b00: 34 36 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  46 {.  SELECT js
3b10: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 4d 20 22  on_valid('" \M "
3b20: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3b30: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3b40: 30 2e 34 37 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.47 {.  SELECT 
3b50: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 4e  json_valid('" \N
3b60: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3b70: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3b80: 2d 31 30 2e 34 38 20 7b 0a 20 20 53 45 4c 45 43  -10.48 {.  SELEC
3b90: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3ba0: 5c 4f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \O "');.} {0}.do
3bb0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3bc0: 6f 6e 2d 31 30 2e 34 39 20 7b 0a 20 20 53 45 4c  on-10.49 {.  SEL
3bd0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3be0: 22 20 5c 50 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \P "');.} {0}.
3bf0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3c00: 6a 73 6f 6e 2d 31 30 2e 35 30 20 7b 0a 20 20 53  json-10.50 {.  S
3c10: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
3c20: 28 27 22 20 5c 51 20 22 27 29 3b 0a 7d 20 7b 30  ('" \Q "');.} {0
3c30: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3c40: 74 20 6a 73 6f 6e 2d 31 30 2e 35 31 20 7b 0a 20  t json-10.51 {. 
3c50: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3c60: 69 64 28 27 22 20 5c 52 20 22 27 29 3b 0a 7d 20  id('" \R "');.} 
3c70: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3c80: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 35 32 20 7b  est json-10.52 {
3c90: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3ca0: 61 6c 69 64 28 27 22 20 5c 53 20 22 27 29 3b 0a  alid('" \S "');.
3cb0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3cc0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 35 33  _test json-10.53
3cd0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3ce0: 5f 76 61 6c 69 64 28 27 22 20 5c 54 20 22 27 29  _valid('" \T "')
3cf0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
3d00: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
3d10: 35 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  54 {.  SELECT js
3d20: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 55 20 22  on_valid('" \U "
3d30: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3d40: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3d50: 30 2e 35 35 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.55 {.  SELECT 
3d60: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 56  json_valid('" \V
3d70: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3d80: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3d90: 2d 31 30 2e 35 36 20 7b 0a 20 20 53 45 4c 45 43  -10.56 {.  SELEC
3da0: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3db0: 5c 57 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \W "');.} {0}.do
3dc0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3dd0: 6f 6e 2d 31 30 2e 35 37 20 7b 0a 20 20 53 45 4c  on-10.57 {.  SEL
3de0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
3df0: 22 20 5c 58 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \X "');.} {0}.
3e00: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3e10: 6a 73 6f 6e 2d 31 30 2e 35 38 20 7b 0a 20 20 53  json-10.58 {.  S
3e20: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
3e30: 28 27 22 20 5c 59 20 22 27 29 3b 0a 7d 20 7b 30  ('" \Y "');.} {0
3e40: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
3e50: 74 20 6a 73 6f 6e 2d 31 30 2e 35 39 20 7b 0a 20  t json-10.59 {. 
3e60: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
3e70: 69 64 28 27 22 20 5c 5a 20 22 27 29 3b 0a 7d 20  id('" \Z "');.} 
3e80: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
3e90: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 36 30 20 7b  est json-10.60 {
3ea0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
3eb0: 61 6c 69 64 28 27 22 20 5c 5b 20 22 27 29 3b 0a  alid('" \[ "');.
3ec0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
3ed0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 36 31  _test json-10.61
3ee0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
3ef0: 5f 76 61 6c 69 64 28 27 22 20 5c 5c 20 22 27 29  _valid('" \\ "')
3f00: 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {1}.do_execs
3f10: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
3f20: 36 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  62 {.  SELECT js
3f30: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 5d 20 22  on_valid('" \] "
3f40: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
3f50: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
3f60: 30 2e 36 33 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.63 {.  SELECT 
3f70: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 5e  json_valid('" \^
3f80: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
3f90: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
3fa0: 2d 31 30 2e 36 34 20 7b 0a 20 20 53 45 4c 45 43  -10.64 {.  SELEC
3fb0: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
3fc0: 5c 5f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \_ "');.} {0}.do
3fd0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
3fe0: 6f 6e 2d 31 30 2e 36 35 20 7b 0a 20 20 53 45 4c  on-10.65 {.  SEL
3ff0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
4000: 22 20 5c 60 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \` "');.} {0}.
4010: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4020: 6a 73 6f 6e 2d 31 30 2e 36 36 20 7b 0a 20 20 53  json-10.66 {.  S
4030: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4040: 28 27 22 20 5c 61 20 22 27 29 3b 0a 7d 20 7b 30  ('" \a "');.} {0
4050: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
4060: 74 20 6a 73 6f 6e 2d 31 30 2e 36 37 20 7b 0a 20  t json-10.67 {. 
4070: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
4080: 69 64 28 27 22 20 5c 62 20 22 27 29 3b 0a 7d 20  id('" \b "');.} 
4090: 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {1}.do_execsql_t
40a0: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 36 38 20 7b  est json-10.68 {
40b0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
40c0: 61 6c 69 64 28 27 22 20 5c 63 20 22 27 29 3b 0a  alid('" \c "');.
40d0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
40e0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 36 39  _test json-10.69
40f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
4100: 5f 76 61 6c 69 64 28 27 22 20 5c 64 20 22 27 29  _valid('" \d "')
4110: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
4120: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4130: 37 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  70 {.  SELECT js
4140: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 65 20 22  on_valid('" \e "
4150: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
4160: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
4170: 30 2e 37 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.71 {.  SELECT 
4180: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 66  json_valid('" \f
4190: 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65   "');.} {1}.do_e
41a0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
41b0: 2d 31 30 2e 37 32 20 7b 0a 20 20 53 45 4c 45 43  -10.72 {.  SELEC
41c0: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
41d0: 5c 67 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \g "');.} {0}.do
41e0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
41f0: 6f 6e 2d 31 30 2e 37 33 20 7b 0a 20 20 53 45 4c  on-10.73 {.  SEL
4200: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
4210: 22 20 5c 68 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \h "');.} {0}.
4220: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4230: 6a 73 6f 6e 2d 31 30 2e 37 34 20 7b 0a 20 20 53  json-10.74 {.  S
4240: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4250: 28 27 22 20 5c 69 20 22 27 29 3b 0a 7d 20 7b 30  ('" \i "');.} {0
4260: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
4270: 74 20 6a 73 6f 6e 2d 31 30 2e 37 35 20 7b 0a 20  t json-10.75 {. 
4280: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
4290: 69 64 28 27 22 20 5c 6a 20 22 27 29 3b 0a 7d 20  id('" \j "');.} 
42a0: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
42b0: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 37 36 20 7b  est json-10.76 {
42c0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
42d0: 61 6c 69 64 28 27 22 20 5c 6b 20 22 27 29 3b 0a  alid('" \k "');.
42e0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
42f0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 37 37  _test json-10.77
4300: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
4310: 5f 76 61 6c 69 64 28 27 22 20 5c 6c 20 22 27 29  _valid('" \l "')
4320: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
4330: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4340: 37 38 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  78 {.  SELECT js
4350: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 6d 20 22  on_valid('" \m "
4360: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
4370: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
4380: 30 2e 37 39 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.79 {.  SELECT 
4390: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 6e  json_valid('" \n
43a0: 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65   "');.} {1}.do_e
43b0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
43c0: 2d 31 30 2e 38 30 20 7b 0a 20 20 53 45 4c 45 43  -10.80 {.  SELEC
43d0: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
43e0: 5c 6f 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \o "');.} {0}.do
43f0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
4400: 6f 6e 2d 31 30 2e 38 31 20 7b 0a 20 20 53 45 4c  on-10.81 {.  SEL
4410: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
4420: 22 20 5c 70 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \p "');.} {0}.
4430: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4440: 6a 73 6f 6e 2d 31 30 2e 38 32 20 7b 0a 20 20 53  json-10.82 {.  S
4450: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4460: 28 27 22 20 5c 71 20 22 27 29 3b 0a 7d 20 7b 30  ('" \q "');.} {0
4470: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
4480: 74 20 6a 73 6f 6e 2d 31 30 2e 38 33 20 7b 0a 20  t json-10.83 {. 
4490: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
44a0: 69 64 28 27 22 20 5c 72 20 22 27 29 3b 0a 7d 20  id('" \r "');.} 
44b0: 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {1}.do_execsql_t
44c0: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 38 34 20 7b  est json-10.84 {
44d0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
44e0: 61 6c 69 64 28 27 22 20 5c 73 20 22 27 29 3b 0a  alid('" \s "');.
44f0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
4500: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 38 35  _test json-10.85
4510: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
4520: 5f 76 61 6c 69 64 28 27 22 20 5c 74 20 22 27 29  _valid('" \t "')
4530: 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {1}.do_execs
4540: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4550: 38 36 2e 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  86.0 {.  SELECT 
4560: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 75  json_valid('" \u
4570: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
4580: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
4590: 2d 31 30 2e 38 36 2e 31 20 7b 0a 20 20 53 45 4c  -10.86.1 {.  SEL
45a0: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
45b0: 22 20 5c 75 61 20 22 27 29 3b 0a 7d 20 7b 30 7d  " \ua "');.} {0}
45c0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
45d0: 20 6a 73 6f 6e 2d 31 30 2e 38 36 2e 32 20 7b 0a   json-10.86.2 {.
45e0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61    SELECT json_va
45f0: 6c 69 64 28 27 22 20 5c 75 61 62 20 22 27 29 3b  lid('" \uab "');
4600: 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71  .} {0}.do_execsq
4610: 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 38  l_test json-10.8
4620: 36 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  6.3 {.  SELECT j
4630: 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 75 61  son_valid('" \ua
4640: 62 63 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  bc "');.} {0}.do
4650: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
4660: 6f 6e 2d 31 30 2e 38 36 2e 34 20 7b 0a 20 20 53  on-10.86.4 {.  S
4670: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4680: 28 27 22 20 5c 75 61 62 63 64 20 22 27 29 3b 0a  ('" \uabcd "');.
4690: 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {1}.do_execsql
46a0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 38 36  _test json-10.86
46b0: 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  .5 {.  SELECT js
46c0: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 75 46 45  on_valid('" \uFE
46d0: 44 43 20 22 27 29 3b 0a 7d 20 7b 31 7d 0a 64 6f  DC "');.} {1}.do
46e0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
46f0: 6f 6e 2d 31 30 2e 38 36 2e 36 20 7b 0a 20 20 53  on-10.86.6 {.  S
4700: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
4710: 28 27 22 20 5c 75 31 32 33 34 20 22 27 29 3b 0a  ('" \u1234 "');.
4720: 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {1}.do_execsql
4730: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 38 37  _test json-10.87
4740: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
4750: 5f 76 61 6c 69 64 28 27 22 20 5c 76 20 22 27 29  _valid('" \v "')
4760: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
4770: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e  ql_test json-10.
4780: 38 38 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  88 {.  SELECT js
4790: 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 77 20 22  on_valid('" \w "
47a0: 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65  ');.} {0}.do_exe
47b0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
47c0: 30 2e 38 39 20 7b 0a 20 20 53 45 4c 45 43 54 20  0.89 {.  SELECT 
47d0: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20 5c 78  json_valid('" \x
47e0: 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65   "');.} {0}.do_e
47f0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
4800: 2d 31 30 2e 39 30 20 7b 0a 20 20 53 45 4c 45 43  -10.90 {.  SELEC
4810: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 22 20  T json_valid('" 
4820: 5c 79 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  \y "');.} {0}.do
4830: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
4840: 6f 6e 2d 31 30 2e 39 31 20 7b 0a 20 20 53 45 4c  on-10.91 {.  SEL
4850: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27  ECT json_valid('
4860: 22 20 5c 7a 20 22 27 29 3b 0a 7d 20 7b 30 7d 0a  " \z "');.} {0}.
4870: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4880: 6a 73 6f 6e 2d 31 30 2e 39 32 20 7b 0a 20 20 53  json-10.92 {.  S
4890: 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  ELECT json_valid
48a0: 28 27 22 20 5c 7b 20 22 27 29 3b 0a 7d 20 7b 30  ('" \{ "');.} {0
48b0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
48c0: 74 20 6a 73 6f 6e 2d 31 30 2e 39 33 20 7b 0a 20  t json-10.93 {. 
48d0: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c   SELECT json_val
48e0: 69 64 28 27 22 20 5c 7c 20 22 27 29 3b 0a 7d 20  id('" \| "');.} 
48f0: 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {0}.do_execsql_t
4900: 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 39 34 20 7b  est json-10.94 {
4910: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
4920: 61 6c 69 64 28 27 22 20 5c 7d 20 22 27 29 3b 0a  alid('" \} "');.
4930: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
4940: 5f 74 65 73 74 20 6a 73 6f 6e 2d 31 30 2e 39 35  _test json-10.95
4950: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
4960: 5f 76 61 6c 69 64 28 27 22 20 5c 7e 20 22 27 29  _valid('" \~ "')
4970: 3b 0a 7d 20 7b 30 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  ;.} {0}..#------
4980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49c0: 2d 2d 2d 2d 0a 23 20 32 30 31 37 2d 30 34 2d 31  ----.# 2017-04-1
49d0: 31 2e 20 20 68 74 74 70 73 3a 2f 2f 77 77 77 2e  1.  https://www.
49e0: 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 69  sqlite.org/src/i
49f0: 6e 66 6f 2f 39 38 31 33 32 39 61 64 65 65 66 35  nfo/981329adeef5
4a00: 31 30 31 31 0a 23 20 53 74 61 63 6b 20 6f 76 65  1011.# Stack ove
4a10: 72 66 6c 6f 77 20 6f 6e 20 64 65 65 70 6c 79 20  rflow on deeply 
4a20: 6e 65 73 74 65 64 20 4a 53 4f 4e 2e 0a 23 0a 23  nested JSON..#.#
4a30: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
4a40: 65 73 74 73 20 63 6f 6e 66 69 72 6d 20 74 68 61  ests confirm tha
4a50: 74 20 64 65 65 70 6c 79 20 6e 65 73 74 65 64 20  t deeply nested 
4a60: 4a 53 4f 4e 20 69 73 20 63 6f 6e 73 69 64 65 72  JSON is consider
4a70: 65 64 20 69 6e 76 61 6c 69 64 2e 0a 23 0a 64 6f  ed invalid..#.do
4a80: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
4a90: 6f 6e 2d 31 31 2e 30 20 7b 0a 20 20 2f 2a 20 53  on-11.0 {.  /* S
4aa0: 68 61 6c 6c 6f 77 20 65 6e 6f 75 67 68 20 74 6f  hallow enough to
4ab0: 20 62 65 20 70 61 72 73 65 64 20 2a 2f 0a 20 20   be parsed */.  
4ac0: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69  SELECT json_vali
4ad0: 64 28 70 72 69 6e 74 66 28 27 25 2e 32 30 30 30  d(printf('%.2000
4ae0: 63 30 25 2e 32 30 30 30 63 27 2c 27 5b 27 2c 27  c0%.2000c','[','
4af0: 5d 27 29 29 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65  ]'));.} {1}.do_e
4b00: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
4b10: 2d 31 31 2e 31 20 7b 0a 20 20 2f 2a 20 54 6f 6f  -11.1 {.  /* Too
4b20: 20 64 65 65 70 20 62 79 20 6f 6e 65 20 2a 2f 0a   deep by one */.
4b30: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61    SELECT json_va
4b40: 6c 69 64 28 70 72 69 6e 74 66 28 27 25 2e 32 30  lid(printf('%.20
4b50: 30 31 63 30 25 2e 32 30 30 31 63 27 2c 27 5b 27  01c0%.2001c','['
4b60: 2c 27 5d 27 29 29 3b 0a 7d 20 7b 30 7d 0a 64 6f  ,']'));.} {0}.do
4b70: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
4b80: 6f 6e 2d 31 31 2e 32 20 7b 0a 20 20 2f 2a 20 53  on-11.2 {.  /* S
4b90: 68 61 6c 6c 6f 77 20 65 6e 6f 75 67 68 20 74 6f  hallow enough to
4ba0: 20 62 65 20 70 61 72 73 65 64 20 7b 20 2a 2f 0a   be parsed { */.
4bb0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61    SELECT json_va
4bc0: 6c 69 64 28 72 65 70 6c 61 63 65 28 70 72 69 6e  lid(replace(prin
4bd0: 74 66 28 27 25 2e 32 30 30 30 63 30 25 2e 32 30  tf('%.2000c0%.20
4be0: 30 30 63 27 2c 27 5b 27 2c 27 7d 27 29 2c 27 5b  00c','[','}'),'[
4bf0: 27 2c 27 7b 22 61 22 3a 27 29 29 3b 0a 20 20 2f  ','{"a":'));.  /
4c00: 2a 20 7d 20 2a 2f 0a 7d 20 7b 31 7d 0a 64 6f 5f  * } */.} {1}.do_
4c10: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
4c20: 6e 2d 31 31 2e 33 20 7b 0a 20 20 2f 2a 20 54 6f  n-11.3 {.  /* To
4c30: 6f 20 64 65 65 70 20 62 79 20 6f 6e 65 20 7b 20  o deep by one { 
4c40: 2a 2f 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e  */.  SELECT json
4c50: 5f 76 61 6c 69 64 28 72 65 70 6c 61 63 65 28 70  _valid(replace(p
4c60: 72 69 6e 74 66 28 27 25 2e 32 30 30 31 63 30 25  rintf('%.2001c0%
4c70: 2e 32 30 30 31 63 27 2c 27 5b 27 2c 27 7d 27 29  .2001c','[','}')
4c80: 2c 27 5b 27 2c 27 7b 22 61 22 3a 27 29 29 3b 0a  ,'[','{"a":'));.
4c90: 20 20 2f 2a 20 7d 20 2a 2f 0a 7d 20 7b 30 7d 0a    /* } */.} {0}.
4ca0: 0a 23 20 32 30 31 37 2d 31 30 2d 32 37 2e 20 20  .# 2017-10-27.  
4cb0: 44 65 6d 6f 6e 73 74 72 61 74 65 20 74 68 65 20  Demonstrate the 
4cc0: 61 62 69 6c 69 74 79 20 74 6f 20 61 63 63 65 73  ability to acces
4cd0: 73 20 61 6e 20 65 6c 65 6d 65 6e 74 20 66 72 6f  s an element fro
4ce0: 6d 0a 23 20 61 20 6a 73 6f 6e 20 73 74 72 75 63  m.# a json struc
4cf0: 74 75 72 65 20 65 76 65 6e 20 74 68 6f 75 67 68  ture even though
4d00: 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 6e 61 6d   the element nam
4d10: 65 20 63 6f 6e 73 74 61 69 6e 73 20 61 20 22 2e  e constains a ".
4d20: 22 0a 23 20 63 68 61 72 61 63 74 65 72 2c 20 62  ".# character, b
4d30: 79 20 71 75 6f 74 69 6e 67 20 74 68 65 20 65 6c  y quoting the el
4d40: 65 6d 65 6e 74 20 6e 61 6d 65 20 69 6e 20 74 68  ement name in th
4d50: 65 20 70 61 74 68 2e 0a 23 0a 64 6f 5f 65 78 65  e path..#.do_exe
4d60: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
4d70: 32 2e 31 30 30 20 7b 0a 20 20 43 52 45 41 54 45  2.100 {.  CREATE
4d80: 20 54 41 42 4c 45 20 74 31 32 28 78 29 3b 0a 20   TABLE t12(x);. 
4d90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32   INSERT INTO t12
4da0: 28 78 29 20 56 41 4c 55 45 53 28 0a 20 20 20 20  (x) VALUES(.    
4db0: 27 7b 22 73 65 74 74 69 6e 67 73 22 3a 0a 20 20  '{"settings":.  
4dc0: 20 20 20 20 20 20 7b 22 6c 61 79 65 72 32 22 3a        {"layer2":
4dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 7b 22 68 61  .           {"ha
4de0: 70 61 78 2e 6c 65 67 6f 6d 65 6e 6f 6e 22 3a 0a  pax.legomenon":.
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 22                {"
4e00: 66 6f 72 63 65 44 69 73 70 6c 61 79 22 3a 74 72  forceDisplay":tr
4e10: 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue,.            
4e20: 20 20 20 22 74 72 61 6e 73 6c 69 74 65 72 61 74     "transliterat
4e30: 65 22 3a 74 72 75 65 2c 0a 20 20 20 20 20 20 20  e":true,.       
4e40: 20 20 20 20 20 20 20 20 22 61 64 64 2e 66 6f 6f          "add.foo
4e50: 74 6e 6f 74 65 22 3a 74 72 75 65 2c 0a 20 20 20  tnote":true,.   
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 6d              "sum
4e70: 6d 61 72 79 2e 72 65 70 6f 72 74 22 3a 74 72 75  mary.report":tru
4e80: 65 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e},.            
4e90: 22 64 69 73 2e 6c 65 67 6f 6d 65 6e 6f 6e 22 3a  "dis.legomenon":
4ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
4eb0: 22 66 6f 72 63 65 44 69 73 70 6c 61 79 22 3a 74  "forceDisplay":t
4ec0: 72 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  rue,.           
4ed0: 20 20 20 20 22 74 72 61 6e 73 6c 69 74 65 72 61      "translitera
4ee0: 74 65 22 3a 66 61 6c 73 65 2c 0a 20 20 20 20 20  te":false,.     
4ef0: 20 20 20 20 20 20 20 20 20 20 22 61 64 64 2e 66            "add.f
4f00: 6f 6f 74 6e 6f 74 65 22 3a 66 61 6c 73 65 2c 0a  ootnote":false,.
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
4f20: 73 75 6d 6d 61 72 79 2e 72 65 70 6f 72 74 22 3a  summary.report":
4f30: 74 72 75 65 7d 2c 0a 20 20 20 20 20 20 20 20 20  true},.         
4f40: 20 20 20 22 74 72 69 73 2e 6c 65 67 6f 6d 65 6e     "tris.legomen
4f50: 6f 6e 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  on":.           
4f60: 20 20 20 7b 22 66 6f 72 63 65 44 69 73 70 6c 61     {"forceDispla
4f70: 79 22 3a 74 72 75 65 2c 0a 20 20 20 20 20 20 20  y":true,.       
4f80: 20 20 20 20 20 20 20 20 22 74 72 61 6e 73 6c 69          "transli
4f90: 74 65 72 61 74 65 22 3a 66 61 6c 73 65 2c 0a 20  terate":false,. 
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
4fb0: 64 64 2e 66 6f 6f 74 6e 6f 74 65 22 3a 66 61 6c  dd.footnote":fal
4fc0: 73 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  se,.            
4fd0: 20 20 20 22 73 75 6d 6d 61 72 79 2e 72 65 70 6f     "summary.repo
4fe0: 72 74 22 3a 66 61 6c 73 65 7d 0a 20 20 20 20 20  rt":false}.     
4ff0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5000: 7d 0a 20 20 20 20 20 7d 27 29 3b 0a 7d 20 7b 7d  }.     }');.} {}
5010: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
5020: 20 6a 73 6f 6e 2d 31 32 2e 31 31 30 20 7b 0a 20   json-12.110 {. 
5030: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 72 65 6d   SELECT json_rem
5040: 6f 76 65 28 78 2c 20 27 24 2e 73 65 74 74 69 6e  ove(x, '$.settin
5050: 67 73 2e 6c 61 79 65 72 32 2e 22 64 69 73 2e 6c  gs.layer2."dis.l
5060: 65 67 6f 6d 65 6e 6f 6e 22 2e 66 6f 72 63 65 44  egomenon".forceD
5070: 69 73 70 6c 61 79 27 29 0a 20 20 20 20 46 52 4f  isplay').    FRO
5080: 4d 20 74 31 32 3b 0a 7d 20 7b 7b 7b 22 73 65 74  M t12;.} {{{"set
5090: 74 69 6e 67 73 22 3a 7b 22 6c 61 79 65 72 32 22  tings":{"layer2"
50a0: 3a 7b 22 68 61 70 61 78 2e 6c 65 67 6f 6d 65 6e  :{"hapax.legomen
50b0: 6f 6e 22 3a 7b 22 66 6f 72 63 65 44 69 73 70 6c  on":{"forceDispl
50c0: 61 79 22 3a 74 72 75 65 2c 22 74 72 61 6e 73 6c  ay":true,"transl
50d0: 69 74 65 72 61 74 65 22 3a 74 72 75 65 2c 22 61  iterate":true,"a
50e0: 64 64 2e 66 6f 6f 74 6e 6f 74 65 22 3a 74 72 75  dd.footnote":tru
50f0: 65 2c 22 73 75 6d 6d 61 72 79 2e 72 65 70 6f 72  e,"summary.repor
5100: 74 22 3a 74 72 75 65 7d 2c 22 64 69 73 2e 6c 65  t":true},"dis.le
5110: 67 6f 6d 65 6e 6f 6e 22 3a 7b 22 74 72 61 6e 73  gomenon":{"trans
5120: 6c 69 74 65 72 61 74 65 22 3a 66 61 6c 73 65 2c  literate":false,
5130: 22 61 64 64 2e 66 6f 6f 74 6e 6f 74 65 22 3a 66  "add.footnote":f
5140: 61 6c 73 65 2c 22 73 75 6d 6d 61 72 79 2e 72 65  alse,"summary.re
5150: 70 6f 72 74 22 3a 74 72 75 65 7d 2c 22 74 72 69  port":true},"tri
5160: 73 2e 6c 65 67 6f 6d 65 6e 6f 6e 22 3a 7b 22 66  s.legomenon":{"f
5170: 6f 72 63 65 44 69 73 70 6c 61 79 22 3a 74 72 75  orceDisplay":tru
5180: 65 2c 22 74 72 61 6e 73 6c 69 74 65 72 61 74 65  e,"transliterate
5190: 22 3a 66 61 6c 73 65 2c 22 61 64 64 2e 66 6f 6f  ":false,"add.foo
51a0: 74 6e 6f 74 65 22 3a 66 61 6c 73 65 2c 22 73 75  tnote":false,"su
51b0: 6d 6d 61 72 79 2e 72 65 70 6f 72 74 22 3a 66 61  mmary.report":fa
51c0: 6c 73 65 7d 7d 7d 7d 7d 7d 0a 64 6f 5f 65 78 65  lse}}}}}}.do_exe
51d0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 31  csql_test json-1
51e0: 32 2e 31 32 30 20 7b 0a 20 20 53 45 4c 45 43 54  2.120 {.  SELECT
51f0: 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 78 2c   json_extract(x,
5200: 20 27 24 2e 73 65 74 74 69 6e 67 73 2e 6c 61 79   '$.settings.lay
5210: 65 72 32 2e 22 74 72 69 73 2e 6c 65 67 6f 6d 65  er2."tris.legome
5220: 6e 6f 6e 22 2e 22 73 75 6d 6d 61 72 79 2e 72 65  non"."summary.re
5230: 70 6f 72 74 22 27 29 0a 20 20 20 20 46 52 4f 4d  port"').    FROM
5240: 20 74 31 32 3b 0a 7d 20 7b 30 7d 0a 0a 0a 0a 0a   t12;.} {0}.....
5250: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.