/ Hex Artifact Content
Login

Artifact 796b1c59894c6e0f38fc1a3acb0e690573b952a3:


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 23 20 54 68   library..#.# Th
01c0: 69 73 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73  is file contains
01d0: 20 74 65 73 74 73 20 61 75 74 6f 6d 61 74 69 63   tests automatic
01e0: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 66  ally generated f
01f0: 72 6f 6d 20 74 68 65 20 6a 73 6f 6e 31 0a 23 20  rom the json1.# 
0200: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 0a 23  documentation..#
0210: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0220: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0230: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0240: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0250: 6c 6f 61 64 5f 73 74 61 74 69 63 5f 65 78 74 65  load_static_exte
0260: 6e 73 69 6f 6e 20 64 62 20 6a 73 6f 6e 0a 64 6f  nsion db json.do
0270: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0280: 6f 6e 31 30 32 2d 31 30 30 20 7b 0a 20 20 53 45  on102-100 {.  SE
0290: 4c 45 43 54 20 6a 73 6f 6e 5f 6f 62 6a 65 63 74  LECT json_object
02a0: 28 27 65 78 27 2c 27 5b 35 32 2c 33 2e 31 34 31  ('ex','[52,3.141
02b0: 35 39 5d 27 29 3b 0a 7d 20 7b 7b 7b 22 65 78 22  59]');.} {{{"ex"
02c0: 3a 22 5b 35 32 2c 33 2e 31 34 31 35 39 5d 22 7d  :"[52,3.14159]"}
02d0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
02e0: 73 74 20 6a 73 6f 6e 31 30 32 2d 31 31 30 20 7b  st json102-110 {
02f0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 6f  .  SELECT json_o
0300: 62 6a 65 63 74 28 27 65 78 27 2c 6a 73 6f 6e 28  bject('ex',json(
0310: 27 5b 35 32 2c 33 2e 31 34 31 35 39 5d 27 29 29  '[52,3.14159]'))
0320: 3b 0a 7d 20 7b 7b 7b 22 65 78 22 3a 5b 35 32 2c  ;.} {{{"ex":[52,
0330: 33 2e 31 34 31 35 39 5d 7d 7d 7d 0a 64 6f 5f 65  3.14159]}}}.do_e
0340: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
0350: 31 30 32 2d 31 32 30 20 7b 0a 20 20 53 45 4c 45  102-120 {.  SELE
0360: 43 54 20 6a 73 6f 6e 5f 6f 62 6a 65 63 74 28 27  CT json_object('
0370: 65 78 27 2c 6a 73 6f 6e 5f 61 72 72 61 79 28 35  ex',json_array(5
0380: 32 2c 33 2e 31 34 31 35 39 29 29 3b 0a 7d 20 7b  2,3.14159));.} {
0390: 7b 7b 22 65 78 22 3a 5b 35 32 2c 33 2e 31 34 31  {{"ex":[52,3.141
03a0: 35 39 5d 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  59]}}}.do_execsq
03b0: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32 2d 31  l_test json102-1
03c0: 33 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  30 {.  SELECT js
03d0: 6f 6e 28 27 20 7b 20 22 74 68 69 73 22 20 3a 20  on(' { "this" : 
03e0: 22 69 73 22 2c 20 22 61 22 3a 20 5b 20 22 74 65  "is", "a": [ "te
03f0: 73 74 22 20 5d 20 7d 20 27 29 3b 0a 7d 20 7b 7b  st" ] } ');.} {{
0400: 7b 22 74 68 69 73 22 3a 22 69 73 22 2c 22 61 22  {"this":"is","a"
0410: 3a 5b 22 74 65 73 74 22 5d 7d 7d 7d 0a 64 6f 5f  :["test"]}}}.do_
0420: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
0430: 6e 31 30 32 2d 31 34 30 20 7b 0a 20 20 53 45 4c  n102-140 {.  SEL
0440: 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28 31  ECT json_array(1
0450: 2c 32 2c 27 33 27 2c 34 29 3b 0a 7d 20 7b 7b 5b  ,2,'3',4);.} {{[
0460: 31 2c 32 2c 22 33 22 2c 34 5d 7d 7d 0a 64 6f 5f  1,2,"3",4]}}.do_
0470: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
0480: 6e 31 30 32 2d 31 35 30 20 7b 0a 20 20 53 45 4c  n102-150 {.  SEL
0490: 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28 27  ECT json_array('
04a0: 5b 31 2c 32 5d 27 29 3b 0a 7d 20 7b 7b 5b 22 5b  [1,2]');.} {{["[
04b0: 31 2c 32 5d 22 5d 7d 7d 0a 64 6f 5f 65 78 65 63  1,2]"]}}.do_exec
04c0: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32  sql_test json102
04d0: 2d 31 36 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  -160 {.  SELECT 
04e0: 6a 73 6f 6e 5f 61 72 72 61 79 28 6a 73 6f 6e 5f  json_array(json_
04f0: 61 72 72 61 79 28 31 2c 32 29 29 3b 0a 7d 20 7b  array(1,2));.} {
0500: 7b 5b 5b 31 2c 32 5d 5d 7d 7d 0a 64 6f 5f 65 78  {[[1,2]]}}.do_ex
0510: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
0520: 30 32 2d 31 37 30 20 7b 0a 20 20 53 45 4c 45 43  02-170 {.  SELEC
0530: 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28 31 2c 6e  T json_array(1,n
0540: 75 6c 6c 2c 27 33 27 2c 27 5b 34 2c 35 5d 27 2c  ull,'3','[4,5]',
0550: 27 7b 22 73 69 78 22 3a 37 2e 37 7d 27 29 3b 0a  '{"six":7.7}');.
0560: 7d 20 7b 7b 5b 31 2c 6e 75 6c 6c 2c 22 33 22 2c  } {{[1,null,"3",
0570: 22 5b 34 2c 35 5d 22 2c 22 7b 5c 22 73 69 78 5c  "[4,5]","{\"six\
0580: 22 3a 37 2e 37 7d 22 5d 7d 7d 0a 64 6f 5f 65 78  ":7.7}"]}}.do_ex
0590: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
05a0: 30 32 2d 31 38 30 20 7b 0a 20 20 53 45 4c 45 43  02-180 {.  SELEC
05b0: 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28 31 2c 6e  T json_array(1,n
05c0: 75 6c 6c 2c 27 33 27 2c 6a 73 6f 6e 28 27 5b 34  ull,'3',json('[4
05d0: 2c 35 5d 27 29 2c 6a 73 6f 6e 28 27 7b 22 73 69  ,5]'),json('{"si
05e0: 78 22 3a 37 2e 37 7d 27 29 29 3b 0a 7d 20 7b 7b  x":7.7}'));.} {{
05f0: 5b 31 2c 6e 75 6c 6c 2c 22 33 22 2c 5b 34 2c 35  [1,null,"3",[4,5
0600: 5d 2c 7b 22 73 69 78 22 3a 37 2e 37 7d 5d 7d 7d  ],{"six":7.7}]}}
0610: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0620: 20 6a 73 6f 6e 31 30 32 2d 31 39 30 20 7b 0a 20   json102-190 {. 
0630: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72   SELECT json_arr
0640: 61 79 5f 6c 65 6e 67 74 68 28 27 5b 31 2c 32 2c  ay_length('[1,2,
0650: 33 2c 34 5d 27 29 3b 0a 7d 20 7b 7b 34 7d 7d 0a  3,4]');.} {{4}}.
0660: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0670: 6a 73 6f 6e 31 30 32 2d 32 30 30 20 7b 0a 20 20  json102-200 {.  
0680: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61  SELECT json_arra
0690: 79 5f 6c 65 6e 67 74 68 28 27 5b 31 2c 32 2c 33  y_length('[1,2,3
06a0: 2c 34 5d 27 2c 20 27 24 27 29 3b 0a 7d 20 7b 7b  ,4]', '$');.} {{
06b0: 34 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  4}}.do_execsql_t
06c0: 65 73 74 20 6a 73 6f 6e 31 30 32 2d 32 31 30 20  est json102-210 
06d0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
06e0: 61 72 72 61 79 5f 6c 65 6e 67 74 68 28 27 5b 31  array_length('[1
06f0: 2c 32 2c 33 2c 34 5d 27 2c 20 27 24 5b 32 5d 27  ,2,3,4]', '$[2]'
0700: 29 3b 0a 7d 20 7b 7b 30 7d 7d 0a 64 6f 5f 65 78  );.} {{0}}.do_ex
0710: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
0720: 30 32 2d 32 32 30 20 7b 0a 20 20 53 45 4c 45 43  02-220 {.  SELEC
0730: 54 20 6a 73 6f 6e 5f 61 72 72 61 79 5f 6c 65 6e  T json_array_len
0740: 67 74 68 28 27 7b 22 6f 6e 65 22 3a 5b 31 2c 32  gth('{"one":[1,2
0750: 2c 33 5d 7d 27 29 3b 0a 7d 20 7b 7b 30 7d 7d 0a  ,3]}');.} {{0}}.
0760: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0770: 6a 73 6f 6e 31 30 32 2d 32 33 30 20 7b 0a 20 20  json102-230 {.  
0780: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61  SELECT json_arra
0790: 79 5f 6c 65 6e 67 74 68 28 27 7b 22 6f 6e 65 22  y_length('{"one"
07a0: 3a 5b 31 2c 32 2c 33 5d 7d 27 2c 20 27 24 2e 6f  :[1,2,3]}', '$.o
07b0: 6e 65 27 29 3b 0a 7d 20 7b 7b 33 7d 7d 0a 64 6f  ne');.} {{3}}.do
07c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
07d0: 6f 6e 31 30 32 2d 32 34 30 20 7b 0a 20 20 53 45  on102-240 {.  SE
07e0: 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61 79 5f  LECT json_array_
07f0: 6c 65 6e 67 74 68 28 27 7b 22 6f 6e 65 22 3a 5b  length('{"one":[
0800: 31 2c 32 2c 33 5d 7d 27 2c 20 27 24 2e 74 77 6f  1,2,3]}', '$.two
0810: 27 29 3b 0a 7d 20 7b 7b 7d 7d 0a 64 6f 5f 65 78  ');.} {{}}.do_ex
0820: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
0830: 30 32 2d 32 35 30 20 7b 0a 20 20 53 45 4c 45 43  02-250 {.  SELEC
0840: 54 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 27  T json_extract('
0850: 7b 22 61 22 3a 32 2c 22 63 22 3a 5b 34 2c 35 2c  {"a":2,"c":[4,5,
0860: 7b 22 66 22 3a 37 7d 5d 7d 27 2c 20 27 24 27 29  {"f":7}]}', '$')
0870: 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 32 2c 22 63 22  ;.} {{{"a":2,"c"
0880: 3a 5b 34 2c 35 2c 7b 22 66 22 3a 37 7d 5d 7d 7d  :[4,5,{"f":7}]}}
0890: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
08a0: 74 20 6a 73 6f 6e 31 30 32 2d 32 36 30 20 7b 0a  t json102-260 {.
08b0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 65 78    SELECT json_ex
08c0: 74 72 61 63 74 28 27 7b 22 61 22 3a 32 2c 22 63  tract('{"a":2,"c
08d0: 22 3a 5b 34 2c 35 2c 7b 22 66 22 3a 37 7d 5d 7d  ":[4,5,{"f":7}]}
08e0: 27 2c 20 27 24 2e 63 27 29 3b 0a 7d 20 7b 7b 5b  ', '$.c');.} {{[
08f0: 34 2c 35 2c 7b 22 66 22 3a 37 7d 5d 7d 7d 0a 64  4,5,{"f":7}]}}.d
0900: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
0910: 73 6f 6e 31 30 32 2d 32 37 30 20 7b 0a 20 20 53  son102-270 {.  S
0920: 45 4c 45 43 54 20 6a 73 6f 6e 5f 65 78 74 72 61  ELECT json_extra
0930: 63 74 28 27 7b 22 61 22 3a 32 2c 22 63 22 3a 5b  ct('{"a":2,"c":[
0940: 34 2c 35 2c 7b 22 66 22 3a 37 7d 5d 7d 27 2c 20  4,5,{"f":7}]}', 
0950: 27 24 2e 63 5b 32 5d 27 29 3b 0a 7d 20 7b 7b 7b  '$.c[2]');.} {{{
0960: 22 66 22 3a 37 7d 7d 7d 0a 64 6f 5f 65 78 65 63  "f":7}}}.do_exec
0970: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32  sql_test json102
0980: 2d 32 38 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  -280 {.  SELECT 
0990: 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 27 7b 22  json_extract('{"
09a0: 61 22 3a 32 2c 22 63 22 3a 5b 34 2c 35 2c 7b 22  a":2,"c":[4,5,{"
09b0: 66 22 3a 37 7d 5d 7d 27 2c 20 27 24 2e 63 5b 32  f":7}]}', '$.c[2
09c0: 5d 2e 66 27 29 3b 0a 7d 20 7b 7b 37 7d 7d 0a 64  ].f');.} {{7}}.d
09d0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
09e0: 73 6f 6e 31 30 32 2d 32 39 30 20 7b 0a 20 20 53  son102-290 {.  S
09f0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 65 78 74 72 61  ELECT json_extra
0a00: 63 74 28 27 7b 22 61 22 3a 32 2c 22 63 22 3a 5b  ct('{"a":2,"c":[
0a10: 34 2c 35 5d 2c 22 66 22 3a 37 7d 27 2c 27 24 2e  4,5],"f":7}','$.
0a20: 63 27 2c 27 24 2e 61 27 29 3b 0a 7d 20 7b 7b 5b  c','$.a');.} {{[
0a30: 5b 34 2c 35 5d 2c 32 5d 7d 7d 0a 64 6f 5f 65 78  [4,5],2]}}.do_ex
0a40: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
0a50: 30 32 2d 33 30 30 20 7b 0a 20 20 53 45 4c 45 43  02-300 {.  SELEC
0a60: 54 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 27  T json_extract('
0a70: 7b 22 61 22 3a 32 2c 22 63 22 3a 5b 34 2c 35 2c  {"a":2,"c":[4,5,
0a80: 7b 22 66 22 3a 37 7d 5d 7d 27 2c 20 27 24 2e 78  {"f":7}]}', '$.x
0a90: 27 29 3b 0a 7d 20 7b 7b 7d 7d 0a 64 6f 5f 65 78  ');.} {{}}.do_ex
0aa0: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
0ab0: 30 32 2d 33 31 30 20 7b 0a 20 20 53 45 4c 45 43  02-310 {.  SELEC
0ac0: 54 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 27  T json_extract('
0ad0: 7b 22 61 22 3a 32 2c 22 63 22 3a 5b 34 2c 35 2c  {"a":2,"c":[4,5,
0ae0: 7b 22 66 22 3a 37 7d 5d 7d 27 2c 20 27 24 2e 78  {"f":7}]}', '$.x
0af0: 27 2c 20 27 24 2e 61 27 29 3b 0a 7d 20 7b 7b 5b  ', '$.a');.} {{[
0b00: 6e 75 6c 6c 2c 32 5d 7d 7d 0a 64 6f 5f 65 78 65  null,2]}}.do_exe
0b10: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
0b20: 32 2d 33 32 30 20 7b 0a 20 20 53 45 4c 45 43 54  2-320 {.  SELECT
0b30: 20 6a 73 6f 6e 5f 69 6e 73 65 72 74 28 27 7b 22   json_insert('{"
0b40: 61 22 3a 32 2c 22 63 22 3a 34 7d 27 2c 20 27 24  a":2,"c":4}', '$
0b50: 2e 61 27 2c 20 39 39 29 3b 0a 7d 20 7b 7b 7b 22  .a', 99);.} {{{"
0b60: 61 22 3a 32 2c 22 63 22 3a 34 7d 7d 7d 0a 64 6f  a":2,"c":4}}}.do
0b70: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0b80: 6f 6e 31 30 32 2d 33 33 30 20 7b 0a 20 20 53 45  on102-330 {.  SE
0b90: 4c 45 43 54 20 6a 73 6f 6e 5f 69 6e 73 65 72 74  LECT json_insert
0ba0: 28 27 7b 22 61 22 3a 32 2c 22 63 22 3a 34 7d 27  ('{"a":2,"c":4}'
0bb0: 2c 20 27 24 2e 65 27 2c 20 39 39 29 3b 0a 7d 20  , '$.e', 99);.} 
0bc0: 7b 7b 7b 22 61 22 3a 32 2c 22 63 22 3a 34 2c 22  {{{"a":2,"c":4,"
0bd0: 65 22 3a 39 39 7d 7d 7d 0a 64 6f 5f 65 78 65 63  e":99}}}.do_exec
0be0: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32  sql_test json102
0bf0: 2d 33 34 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  -340 {.  SELECT 
0c00: 6a 73 6f 6e 5f 72 65 70 6c 61 63 65 28 27 7b 22  json_replace('{"
0c10: 61 22 3a 32 2c 22 63 22 3a 34 7d 27 2c 20 27 24  a":2,"c":4}', '$
0c20: 2e 61 27 2c 20 39 39 29 3b 0a 7d 20 7b 7b 7b 22  .a', 99);.} {{{"
0c30: 61 22 3a 39 39 2c 22 63 22 3a 34 7d 7d 7d 0a 64  a":99,"c":4}}}.d
0c40: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
0c50: 73 6f 6e 31 30 32 2d 33 35 30 20 7b 0a 20 20 53  son102-350 {.  S
0c60: 45 4c 45 43 54 20 6a 73 6f 6e 5f 72 65 70 6c 61  ELECT json_repla
0c70: 63 65 28 27 7b 22 61 22 3a 32 2c 22 63 22 3a 34  ce('{"a":2,"c":4
0c80: 7d 27 2c 20 27 24 2e 65 27 2c 20 39 39 29 3b 0a  }', '$.e', 99);.
0c90: 7d 20 7b 7b 7b 22 61 22 3a 32 2c 22 63 22 3a 34  } {{{"a":2,"c":4
0ca0: 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }}}.do_execsql_t
0cb0: 65 73 74 20 6a 73 6f 6e 31 30 32 2d 33 36 30 20  est json102-360 
0cc0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
0cd0: 73 65 74 28 27 7b 22 61 22 3a 32 2c 22 63 22 3a  set('{"a":2,"c":
0ce0: 34 7d 27 2c 20 27 24 2e 61 27 2c 20 39 39 29 3b  4}', '$.a', 99);
0cf0: 0a 7d 20 7b 7b 7b 22 61 22 3a 39 39 2c 22 63 22  .} {{{"a":99,"c"
0d00: 3a 34 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  :4}}}.do_execsql
0d10: 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32 2d 33 37  _test json102-37
0d20: 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  0 {.  SELECT jso
0d30: 6e 5f 73 65 74 28 27 7b 22 61 22 3a 32 2c 22 63  n_set('{"a":2,"c
0d40: 22 3a 34 7d 27 2c 20 27 24 2e 65 27 2c 20 39 39  ":4}', '$.e', 99
0d50: 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 32 2c 22 63  );.} {{{"a":2,"c
0d60: 22 3a 34 2c 22 65 22 3a 39 39 7d 7d 7d 0a 64 6f  ":4,"e":99}}}.do
0d70: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0d80: 6f 6e 31 30 32 2d 33 38 30 20 7b 0a 20 20 53 45  on102-380 {.  SE
0d90: 4c 45 43 54 20 6a 73 6f 6e 5f 73 65 74 28 27 7b  LECT json_set('{
0da0: 22 61 22 3a 32 2c 22 63 22 3a 34 7d 27 2c 20 27  "a":2,"c":4}', '
0db0: 24 2e 63 27 2c 20 27 5b 39 37 2c 39 36 5d 27 29  $.c', '[97,96]')
0dc0: 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 32 2c 22 63 22  ;.} {{{"a":2,"c"
0dd0: 3a 22 5b 39 37 2c 39 36 5d 22 7d 7d 7d 0a 64 6f  :"[97,96]"}}}.do
0de0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0df0: 6f 6e 31 30 32 2d 33 39 30 20 7b 0a 20 20 53 45  on102-390 {.  SE
0e00: 4c 45 43 54 20 6a 73 6f 6e 5f 73 65 74 28 27 7b  LECT json_set('{
0e10: 22 61 22 3a 32 2c 22 63 22 3a 34 7d 27 2c 20 27  "a":2,"c":4}', '
0e20: 24 2e 63 27 2c 20 6a 73 6f 6e 28 27 5b 39 37 2c  $.c', json('[97,
0e30: 39 36 5d 27 29 29 3b 0a 7d 20 7b 7b 7b 22 61 22  96]'));.} {{{"a"
0e40: 3a 32 2c 22 63 22 3a 5b 39 37 2c 39 36 5d 7d 7d  :2,"c":[97,96]}}
0e50: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0e60: 74 20 6a 73 6f 6e 31 30 32 2d 34 30 30 20 7b 0a  t json102-400 {.
0e70: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 73 65    SELECT json_se
0e80: 74 28 27 7b 22 61 22 3a 32 2c 22 63 22 3a 34 7d  t('{"a":2,"c":4}
0e90: 27 2c 20 27 24 2e 63 27 2c 20 6a 73 6f 6e 5f 61  ', '$.c', json_a
0ea0: 72 72 61 79 28 39 37 2c 39 36 29 29 3b 0a 7d 20  rray(97,96));.} 
0eb0: 7b 7b 7b 22 61 22 3a 32 2c 22 63 22 3a 5b 39 37  {{{"a":2,"c":[97
0ec0: 2c 39 36 5d 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73  ,96]}}}.do_execs
0ed0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32 2d  ql_test json102-
0ee0: 34 31 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  410 {.  SELECT j
0ef0: 73 6f 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 32  son_object('a',2
0f00: 2c 27 63 27 2c 34 29 3b 0a 7d 20 7b 7b 7b 22 61  ,'c',4);.} {{{"a
0f10: 22 3a 32 2c 22 63 22 3a 34 7d 7d 7d 0a 64 6f 5f  ":2,"c":4}}}.do_
0f20: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
0f30: 6e 31 30 32 2d 34 32 30 20 7b 0a 20 20 53 45 4c  n102-420 {.  SEL
0f40: 45 43 54 20 6a 73 6f 6e 5f 6f 62 6a 65 63 74 28  ECT json_object(
0f50: 27 61 27 2c 32 2c 27 63 27 2c 27 7b 65 3a 35 7d  'a',2,'c','{e:5}
0f60: 27 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 32 2c 22  ');.} {{{"a":2,"
0f70: 63 22 3a 22 7b 65 3a 35 7d 22 7d 7d 7d 0a 64 6f  c":"{e:5}"}}}.do
0f80: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0f90: 6f 6e 31 30 32 2d 34 33 30 20 7b 0a 20 20 53 45  on102-430 {.  SE
0fa0: 4c 45 43 54 20 6a 73 6f 6e 5f 6f 62 6a 65 63 74  LECT json_object
0fb0: 28 27 61 27 2c 32 2c 27 63 27 2c 6a 73 6f 6e 5f  ('a',2,'c',json_
0fc0: 6f 62 6a 65 63 74 28 27 65 27 2c 35 29 29 3b 0a  object('e',5));.
0fd0: 7d 20 7b 7b 7b 22 61 22 3a 32 2c 22 63 22 3a 7b  } {{{"a":2,"c":{
0fe0: 22 65 22 3a 35 7d 7d 7d 7d 0a 64 6f 5f 65 78 65  "e":5}}}}.do_exe
0ff0: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
1000: 32 2d 34 34 30 20 7b 0a 20 20 53 45 4c 45 43 54  2-440 {.  SELECT
1010: 20 6a 73 6f 6e 5f 72 65 6d 6f 76 65 28 27 5b 30   json_remove('[0
1020: 2c 31 2c 32 2c 33 2c 34 5d 27 2c 27 24 5b 32 5d  ,1,2,3,4]','$[2]
1030: 27 29 3b 0a 7d 20 7b 7b 5b 30 2c 31 2c 33 2c 34  ');.} {{[0,1,3,4
1040: 5d 7d 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 32 2d 34 35 30 20  est json102-450 
1060: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
1070: 72 65 6d 6f 76 65 28 27 5b 30 2c 31 2c 32 2c 33  remove('[0,1,2,3
1080: 2c 34 5d 27 2c 27 24 5b 32 5d 27 2c 27 24 5b 30  ,4]','$[2]','$[0
1090: 5d 27 29 3b 0a 7d 20 7b 7b 5b 31 2c 33 2c 34 5d  ]');.} {{[1,3,4]
10a0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
10b0: 73 74 20 6a 73 6f 6e 31 30 32 2d 34 36 30 20 7b  st json102-460 {
10c0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 72  .  SELECT json_r
10d0: 65 6d 6f 76 65 28 27 5b 30 2c 31 2c 32 2c 33 2c  emove('[0,1,2,3,
10e0: 34 5d 27 2c 27 24 5b 30 5d 27 2c 27 24 5b 32 5d  4]','$[0]','$[2]
10f0: 27 29 3b 0a 7d 20 7b 7b 5b 31 2c 32 2c 34 5d 7d  ');.} {{[1,2,4]}
1100: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
1110: 74 20 6a 73 6f 6e 31 30 32 2d 34 37 30 20 7b 0a  t json102-470 {.
1120: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 72 65    SELECT json_re
1130: 6d 6f 76 65 28 27 7b 22 78 22 3a 32 35 2c 22 79  move('{"x":25,"y
1140: 22 3a 34 32 7d 27 29 3b 0a 7d 20 7b 7b 7b 22 78  ":42}');.} {{{"x
1150: 22 3a 32 35 2c 22 79 22 3a 34 32 7d 7d 7d 0a 64  ":25,"y":42}}}.d
1160: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
1170: 73 6f 6e 31 30 32 2d 34 38 30 20 7b 0a 20 20 53  son102-480 {.  S
1180: 45 4c 45 43 54 20 6a 73 6f 6e 5f 72 65 6d 6f 76  ELECT json_remov
1190: 65 28 27 7b 22 78 22 3a 32 35 2c 22 79 22 3a 34  e('{"x":25,"y":4
11a0: 32 7d 27 2c 27 24 2e 7a 27 29 3b 0a 7d 20 7b 7b  2}','$.z');.} {{
11b0: 7b 22 78 22 3a 32 35 2c 22 79 22 3a 34 32 7d 7d  {"x":25,"y":42}}
11c0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
11d0: 74 20 6a 73 6f 6e 31 30 32 2d 34 39 30 20 7b 0a  t json102-490 {.
11e0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 72 65    SELECT json_re
11f0: 6d 6f 76 65 28 27 7b 22 78 22 3a 32 35 2c 22 79  move('{"x":25,"y
1200: 22 3a 34 32 7d 27 2c 27 24 2e 79 27 29 3b 0a 7d  ":42}','$.y');.}
1210: 20 7b 7b 7b 22 78 22 3a 32 35 7d 7d 7d 0a 64 6f   {{{"x":25}}}.do
1220: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
1230: 6f 6e 31 30 32 2d 35 30 30 20 7b 0a 20 20 53 45  on102-500 {.  SE
1240: 4c 45 43 54 20 6a 73 6f 6e 5f 72 65 6d 6f 76 65  LECT json_remove
1250: 28 27 7b 22 78 22 3a 32 35 2c 22 79 22 3a 34 32  ('{"x":25,"y":42
1260: 7d 27 2c 27 24 27 29 3b 0a 7d 20 7b 7b 7d 7d 0a  }','$');.} {{}}.
1270: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1280: 6a 73 6f 6e 31 30 32 2d 35 31 30 20 7b 0a 20 20  json102-510 {.  
1290: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 74 79 70 65  SELECT json_type
12a0: 28 27 7b 22 61 22 3a 5b 32 2c 33 2e 35 2c 74 72  ('{"a":[2,3.5,tr
12b0: 75 65 2c 66 61 6c 73 65 2c 6e 75 6c 6c 2c 22 78  ue,false,null,"x
12c0: 22 5d 7d 27 29 3b 0a 7d 20 7b 7b 6f 62 6a 65 63  "]}');.} {{objec
12d0: 74 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  t}}.do_execsql_t
12e0: 65 73 74 20 6a 73 6f 6e 31 30 32 2d 35 32 30 20  est json102-520 
12f0: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
1300: 74 79 70 65 28 27 7b 22 61 22 3a 5b 32 2c 33 2e  type('{"a":[2,3.
1310: 35 2c 74 72 75 65 2c 66 61 6c 73 65 2c 6e 75 6c  5,true,false,nul
1320: 6c 2c 22 78 22 5d 7d 27 2c 27 24 27 29 3b 0a 7d  l,"x"]}','$');.}
1330: 20 7b 7b 6f 62 6a 65 63 74 7d 7d 0a 64 6f 5f 65   {{object}}.do_e
1340: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
1350: 31 30 32 2d 35 33 30 20 7b 0a 20 20 53 45 4c 45  102-530 {.  SELE
1360: 43 54 20 6a 73 6f 6e 5f 74 79 70 65 28 27 7b 22  CT json_type('{"
1370: 61 22 3a 5b 32 2c 33 2e 35 2c 74 72 75 65 2c 66  a":[2,3.5,true,f
1380: 61 6c 73 65 2c 6e 75 6c 6c 2c 22 78 22 5d 7d 27  alse,null,"x"]}'
1390: 2c 27 24 2e 61 27 29 3b 0a 7d 20 7b 7b 61 72 72  ,'$.a');.} {{arr
13a0: 61 79 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ay}}.do_execsql_
13b0: 74 65 73 74 20 6a 73 6f 6e 31 30 32 2d 35 34 30  test json102-540
13c0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
13d0: 5f 74 79 70 65 28 27 7b 22 61 22 3a 5b 32 2c 33  _type('{"a":[2,3
13e0: 2e 35 2c 74 72 75 65 2c 66 61 6c 73 65 2c 6e 75  .5,true,false,nu
13f0: 6c 6c 2c 22 78 22 5d 7d 27 2c 27 24 2e 61 5b 30  ll,"x"]}','$.a[0
1400: 5d 27 29 3b 0a 7d 20 7b 7b 69 6e 74 65 67 65 72  ]');.} {{integer
1410: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
1420: 73 74 20 6a 73 6f 6e 31 30 32 2d 35 35 30 20 7b  st json102-550 {
1430: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 74  .  SELECT json_t
1440: 79 70 65 28 27 7b 22 61 22 3a 5b 32 2c 33 2e 35  ype('{"a":[2,3.5
1450: 2c 74 72 75 65 2c 66 61 6c 73 65 2c 6e 75 6c 6c  ,true,false,null
1460: 2c 22 78 22 5d 7d 27 2c 27 24 2e 61 5b 31 5d 27  ,"x"]}','$.a[1]'
1470: 29 3b 0a 7d 20 7b 7b 72 65 61 6c 7d 7d 0a 64 6f  );.} {{real}}.do
1480: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
1490: 6f 6e 31 30 32 2d 35 36 30 20 7b 0a 20 20 53 45  on102-560 {.  SE
14a0: 4c 45 43 54 20 6a 73 6f 6e 5f 74 79 70 65 28 27  LECT json_type('
14b0: 7b 22 61 22 3a 5b 32 2c 33 2e 35 2c 74 72 75 65  {"a":[2,3.5,true
14c0: 2c 66 61 6c 73 65 2c 6e 75 6c 6c 2c 22 78 22 5d  ,false,null,"x"]
14d0: 7d 27 2c 27 24 2e 61 5b 32 5d 27 29 3b 0a 7d 20  }','$.a[2]');.} 
14e0: 7b 7b 74 72 75 65 7d 7d 0a 64 6f 5f 65 78 65 63  {{true}}.do_exec
14f0: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32  sql_test json102
1500: 2d 35 37 30 20 7b 0a 20 20 53 45 4c 45 43 54 20  -570 {.  SELECT 
1510: 6a 73 6f 6e 5f 74 79 70 65 28 27 7b 22 61 22 3a  json_type('{"a":
1520: 5b 32 2c 33 2e 35 2c 74 72 75 65 2c 66 61 6c 73  [2,3.5,true,fals
1530: 65 2c 6e 75 6c 6c 2c 22 78 22 5d 7d 27 2c 27 24  e,null,"x"]}','$
1540: 2e 61 5b 33 5d 27 29 3b 0a 7d 20 7b 7b 66 61 6c  .a[3]');.} {{fal
1550: 73 65 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  se}}.do_execsql_
1560: 74 65 73 74 20 6a 73 6f 6e 31 30 32 2d 35 38 30  test json102-580
1570: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
1580: 5f 74 79 70 65 28 27 7b 22 61 22 3a 5b 32 2c 33  _type('{"a":[2,3
1590: 2e 35 2c 74 72 75 65 2c 66 61 6c 73 65 2c 6e 75  .5,true,false,nu
15a0: 6c 6c 2c 22 78 22 5d 7d 27 2c 27 24 2e 61 5b 34  ll,"x"]}','$.a[4
15b0: 5d 27 29 3b 0a 7d 20 7b 7b 6e 75 6c 6c 7d 7d 0a  ]');.} {{null}}.
15c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
15d0: 6a 73 6f 6e 31 30 32 2d 35 39 30 20 7b 0a 20 20  json102-590 {.  
15e0: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 74 79 70 65  SELECT json_type
15f0: 28 27 7b 22 61 22 3a 5b 32 2c 33 2e 35 2c 74 72  ('{"a":[2,3.5,tr
1600: 75 65 2c 66 61 6c 73 65 2c 6e 75 6c 6c 2c 22 78  ue,false,null,"x
1610: 22 5d 7d 27 2c 27 24 2e 61 5b 35 5d 27 29 3b 0a  "]}','$.a[5]');.
1620: 7d 20 7b 7b 74 65 78 74 7d 7d 0a 64 6f 5f 65 78  } {{text}}.do_ex
1630: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
1640: 30 32 2d 36 30 30 20 7b 0a 20 20 53 45 4c 45 43  02-600 {.  SELEC
1650: 54 20 6a 73 6f 6e 5f 74 79 70 65 28 27 7b 22 61  T json_type('{"a
1660: 22 3a 5b 32 2c 33 2e 35 2c 74 72 75 65 2c 66 61  ":[2,3.5,true,fa
1670: 6c 73 65 2c 6e 75 6c 6c 2c 22 78 22 5d 7d 27 2c  lse,null,"x"]}',
1680: 27 24 2e 61 5b 36 5d 27 29 3b 0a 7d 20 7b 7b 7d  '$.a[6]');.} {{}
1690: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
16a0: 74 20 6a 73 6f 6e 31 30 32 2d 36 31 30 20 7b 0a  t json102-610 {.
16b0: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76 61    SELECT json_va
16c0: 6c 69 64 28 63 68 61 72 28 31 32 33 29 7c 7c 27  lid(char(123)||'
16d0: 22 78 22 3a 33 35 27 7c 7c 63 68 61 72 28 31 32  "x":35'||char(12
16e0: 35 29 29 3b 0a 7d 20 7b 7b 31 7d 7d 0a 64 6f 5f  5));.} {{1}}.do_
16f0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
1700: 6e 31 30 32 2d 36 32 30 20 7b 0a 20 20 53 45 4c  n102-620 {.  SEL
1710: 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 63  ECT json_valid(c
1720: 68 61 72 28 31 32 33 29 7c 7c 27 22 78 22 3a 33  har(123)||'"x":3
1730: 35 27 29 3b 0a 7d 20 7b 7b 30 7d 7d 0a 0a 69 66  5');.} {{0}}..if
1740: 63 61 70 61 62 6c 65 20 76 74 61 62 20 7b 0a 64  capable vtab {.d
1750: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
1760: 73 6f 6e 31 30 32 2d 31 30 30 30 20 7b 0a 20 20  son102-1000 {.  
1770: 43 52 45 41 54 45 20 54 41 42 4c 45 20 75 73 65  CREATE TABLE use
1780: 72 28 6e 61 6d 65 2c 70 68 6f 6e 65 29 3b 0a 20  r(name,phone);. 
1790: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 75 73 65   INSERT INTO use
17a0: 72 28 6e 61 6d 65 2c 70 68 6f 6e 65 29 20 56 41  r(name,phone) VA
17b0: 4c 55 45 53 0a 20 20 20 20 20 28 27 41 6c 69 63  LUES.     ('Alic
17c0: 65 27 2c 27 5b 22 39 31 39 2d 35 35 35 2d 32 33  e','["919-555-23
17d0: 34 35 22 2c 22 38 30 34 2d 35 35 35 2d 33 36 32  45","804-555-362
17e0: 31 22 5d 27 29 2c 0a 20 20 20 20 20 28 27 42 6f  1"]'),.     ('Bo
17f0: 62 27 2c 27 5b 22 32 30 31 2d 35 35 35 2d 38 38  b','["201-555-88
1800: 37 32 22 5d 27 29 2c 0a 20 20 20 20 20 28 27 43  72"]'),.     ('C
1810: 69 6e 64 79 27 2c 27 5b 22 37 30 34 2d 35 35 35  indy','["704-555
1820: 2d 39 39 38 33 22 5d 27 29 2c 0a 20 20 20 20 20  -9983"]'),.     
1830: 28 27 44 61 76 65 27 2c 27 5b 22 33 33 36 2d 35  ('Dave','["336-5
1840: 35 35 2d 38 34 32 31 22 2c 22 37 30 34 2d 35 35  55-8421","704-55
1850: 35 2d 34 33 32 31 22 2c 22 38 30 33 2d 39 31 31  5-4321","803-911
1860: 2d 34 34 32 31 22 5d 27 29 3b 0a 20 20 53 45 4c  -4421"]');.  SEL
1870: 45 43 54 20 44 49 53 54 49 4e 43 54 20 75 73 65  ECT DISTINCT use
1880: 72 2e 6e 61 6d 65 0a 20 20 20 20 46 52 4f 4d 20  r.name.    FROM 
1890: 75 73 65 72 2c 20 6a 73 6f 6e 5f 65 61 63 68 28  user, json_each(
18a0: 75 73 65 72 2e 70 68 6f 6e 65 29 0a 20 20 20 57  user.phone).   W
18b0: 48 45 52 45 20 6a 73 6f 6e 5f 65 61 63 68 2e 76  HERE json_each.v
18c0: 61 6c 75 65 20 4c 49 4b 45 20 27 37 30 34 2d 25  alue LIKE '704-%
18d0: 27 0a 20 20 20 4f 52 44 45 52 20 42 59 20 31 3b  '.   ORDER BY 1;
18e0: 0a 7d 20 7b 43 69 6e 64 79 20 44 61 76 65 7d 0a  .} {Cindy Dave}.
18f0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1900: 20 6a 73 6f 6e 31 30 32 2d 31 30 31 30 20 7b 0a   json102-1010 {.
1910: 20 20 55 50 44 41 54 45 20 75 73 65 72 0a 20 20    UPDATE user.  
1920: 20 20 20 53 45 54 20 70 68 6f 6e 65 3d 6a 73 6f     SET phone=jso
1930: 6e 5f 65 78 74 72 61 63 74 28 70 68 6f 6e 65 2c  n_extract(phone,
1940: 27 24 5b 30 5d 27 29 0a 20 20 20 57 48 45 52 45  '$[0]').   WHERE
1950: 20 6a 73 6f 6e 5f 61 72 72 61 79 5f 6c 65 6e 67   json_array_leng
1960: 74 68 28 70 68 6f 6e 65 29 3c 32 3b 0a 20 20 53  th(phone)<2;.  S
1970: 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 75 62 73  ELECT name, subs
1980: 74 72 28 70 68 6f 6e 65 2c 31 2c 35 29 20 46 52  tr(phone,1,5) FR
1990: 4f 4d 20 75 73 65 72 20 4f 52 44 45 52 20 42 59  OM user ORDER BY
19a0: 20 6e 61 6d 65 3b 0a 7d 20 7b 41 6c 69 63 65 20   name;.} {Alice 
19b0: 7b 5b 22 39 31 39 7d 20 42 6f 62 20 32 30 31 2d  {["919} Bob 201-
19c0: 35 20 43 69 6e 64 79 20 37 30 34 2d 35 20 44 61  5 Cindy 704-5 Da
19d0: 76 65 20 7b 5b 22 33 33 36 7d 7d 0a 64 6f 5f 65  ve {["336}}.do_e
19e0: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
19f0: 31 30 32 2d 31 30 31 31 20 7b 0a 20 20 53 45 4c  102-1011 {.  SEL
1a00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 75 73  ECT name FROM us
1a10: 65 72 20 57 48 45 52 45 20 70 68 6f 6e 65 20 4c  er WHERE phone L
1a20: 49 4b 45 20 27 37 30 34 2d 25 27 0a 20 20 55 4e  IKE '704-%'.  UN
1a30: 49 4f 4e 0a 20 20 53 45 4c 45 43 54 20 75 73 65  ION.  SELECT use
1a40: 72 2e 6e 61 6d 65 0a 20 20 20 20 46 52 4f 4d 20  r.name.    FROM 
1a50: 75 73 65 72 2c 20 6a 73 6f 6e 5f 65 61 63 68 28  user, json_each(
1a60: 75 73 65 72 2e 70 68 6f 6e 65 29 0a 20 20 20 57  user.phone).   W
1a70: 48 45 52 45 20 6a 73 6f 6e 5f 76 61 6c 69 64 28  HERE json_valid(
1a80: 75 73 65 72 2e 70 68 6f 6e 65 29 0a 20 20 20 20  user.phone).    
1a90: 20 41 4e 44 20 6a 73 6f 6e 5f 65 61 63 68 2e 76   AND json_each.v
1aa0: 61 6c 75 65 20 4c 49 4b 45 20 27 37 30 34 2d 25  alue LIKE '704-%
1ab0: 27 3b 0a 7d 20 7b 43 69 6e 64 79 20 44 61 76 65  ';.} {Cindy Dave
1ac0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
1ad0: 73 74 20 6a 73 6f 6e 31 30 32 2d 31 31 30 30 20  st json102-1100 
1ae0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
1af0: 20 62 69 67 28 6a 73 6f 6e 20 4a 53 4f 4e 29 3b   big(json JSON);
1b00: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62  .  INSERT INTO b
1b10: 69 67 28 6a 73 6f 6e 29 20 56 41 4c 55 45 53 28  ig(json) VALUES(
1b20: 27 7b 0a 20 20 20 20 22 69 64 22 3a 31 32 33 2c  '{.    "id":123,
1b30: 0a 20 20 20 20 22 73 74 75 66 66 22 3a 5b 31 2c  .    "stuff":[1,
1b40: 32 2c 33 2c 34 5d 2c 0a 20 20 20 20 22 70 61 72  2,3,4],.    "par
1b50: 74 6c 69 73 74 22 3a 5b 0a 20 20 20 20 20 20 20  tlist":[.       
1b60: 7b 22 75 75 69 64 22 3a 22 62 62 31 30 38 37 32  {"uuid":"bb10872
1b70: 32 2d 35 37 32 65 2d 31 31 65 35 2d 39 33 32 30  2-572e-11e5-9320
1b80: 2d 37 66 33 62 36 33 61 34 63 61 37 34 22 7d 2c  -7f3b63a4ca74"},
1b90: 0a 20 20 20 20 20 20 20 7b 22 75 75 69 64 22 3a  .       {"uuid":
1ba0: 22 63 36 39 30 64 63 31 34 2d 35 37 32 65 2d 31  "c690dc14-572e-1
1bb0: 31 65 35 2d 39 35 66 39 2d 64 66 63 38 38 36 31  1e5-95f9-dfc8861
1bc0: 66 64 35 33 35 22 7d 2c 0a 20 20 20 20 20 20 20  fd535"},.       
1bd0: 7b 22 73 75 62 61 73 73 65 6d 62 6c 79 22 3a 5b  {"subassembly":[
1be0: 0a 20 20 20 20 20 20 20 20 20 20 7b 22 75 75 69  .          {"uui
1bf0: 64 22 3a 22 36 66 61 35 31 38 31 65 2d 35 37 32  d":"6fa5181e-572
1c00: 31 2d 31 31 65 35 2d 61 30 34 65 2d 35 37 66 33  1-11e5-a04e-57f3
1c10: 64 37 62 33 32 38 30 38 22 7d 0a 20 20 20 20 20  d7b32808"}.     
1c20: 20 20 5d 7d 0a 20 20 20 20 5d 0a 20 20 7d 27 29    ]}.    ].  }')
1c30: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1c40: 62 69 67 28 6a 73 6f 6e 29 20 56 41 4c 55 45 53  big(json) VALUES
1c50: 28 27 7b 0a 20 20 20 20 22 69 64 22 3a 34 35 36  ('{.    "id":456
1c60: 2c 0a 20 20 20 20 22 73 74 75 66 66 22 3a 5b 22  ,.    "stuff":["
1c70: 68 65 6c 6c 6f 22 2c 22 77 6f 72 6c 64 22 2c 22  hello","world","
1c80: 78 79 7a 7a 79 22 5d 2c 0a 20 20 20 20 22 70 61  xyzzy"],.    "pa
1c90: 72 74 6c 69 73 74 22 3a 5b 0a 20 20 20 20 20 20  rtlist":[.      
1ca0: 20 7b 22 75 75 69 64 22 3a 66 61 6c 73 65 7d 2c   {"uuid":false},
1cb0: 0a 20 20 20 20 20 20 20 7b 22 75 75 69 64 22 3a  .       {"uuid":
1cc0: 22 63 36 39 30 64 63 31 34 2d 35 37 32 65 2d 31  "c690dc14-572e-1
1cd0: 31 65 35 2d 39 35 66 39 2d 64 66 63 38 38 36 31  1e5-95f9-dfc8861
1ce0: 66 64 35 33 35 22 7d 0a 20 20 20 20 5d 0a 20 20  fd535"}.    ].  
1cf0: 7d 27 29 3b 0a 7d 20 7b 7d 0a 73 65 74 20 63 6f  }');.} {}.set co
1d00: 72 72 65 63 74 5f 61 6e 73 77 65 72 20 5b 6c 69  rrect_answer [li
1d10: 73 74 20 5c 0a 20 20 20 20 31 20 7b 24 2e 69 64  st \.    1 {$.id
1d20: 7d 20 31 32 33 20 5c 0a 20 20 20 20 31 20 7b 24  } 123 \.    1 {$
1d30: 2e 73 74 75 66 66 5b 30 5d 7d 20 31 20 5c 0a 20  .stuff[0]} 1 \. 
1d40: 20 20 20 31 20 7b 24 2e 73 74 75 66 66 5b 31 5d     1 {$.stuff[1]
1d50: 7d 20 32 20 5c 0a 20 20 20 20 31 20 7b 24 2e 73  } 2 \.    1 {$.s
1d60: 74 75 66 66 5b 32 5d 7d 20 33 20 5c 0a 20 20 20  tuff[2]} 3 \.   
1d70: 20 31 20 7b 24 2e 73 74 75 66 66 5b 33 5d 7d 20   1 {$.stuff[3]} 
1d80: 34 20 5c 0a 20 20 20 20 31 20 7b 24 2e 70 61 72  4 \.    1 {$.par
1d90: 74 6c 69 73 74 5b 30 5d 2e 75 75 69 64 7d 20 62  tlist[0].uuid} b
1da0: 62 31 30 38 37 32 32 2d 35 37 32 65 2d 31 31 65  b108722-572e-11e
1db0: 35 2d 39 33 32 30 2d 37 66 33 62 36 33 61 34 63  5-9320-7f3b63a4c
1dc0: 61 37 34 20 5c 0a 20 20 20 20 31 20 7b 24 2e 70  a74 \.    1 {$.p
1dd0: 61 72 74 6c 69 73 74 5b 31 5d 2e 75 75 69 64 7d  artlist[1].uuid}
1de0: 20 63 36 39 30 64 63 31 34 2d 35 37 32 65 2d 31   c690dc14-572e-1
1df0: 31 65 35 2d 39 35 66 39 2d 64 66 63 38 38 36 31  1e5-95f9-dfc8861
1e00: 66 64 35 33 35 20 5c 0a 20 20 20 20 31 20 7b 24  fd535 \.    1 {$
1e10: 2e 70 61 72 74 6c 69 73 74 5b 32 5d 2e 73 75 62  .partlist[2].sub
1e20: 61 73 73 65 6d 62 6c 79 5b 30 5d 2e 75 75 69 64  assembly[0].uuid
1e30: 7d 20 36 66 61 35 31 38 31 65 2d 35 37 32 31 2d  } 6fa5181e-5721-
1e40: 31 31 65 35 2d 61 30 34 65 2d 35 37 66 33 64 37  11e5-a04e-57f3d7
1e50: 62 33 32 38 30 38 20 5c 0a 20 20 20 20 32 20 7b  b32808 \.    2 {
1e60: 24 2e 69 64 7d 20 34 35 36 20 5c 0a 20 20 20 20  $.id} 456 \.    
1e70: 32 20 7b 24 2e 73 74 75 66 66 5b 30 5d 7d 20 68  2 {$.stuff[0]} h
1e80: 65 6c 6c 6f 20 5c 0a 20 20 20 20 32 20 7b 24 2e  ello \.    2 {$.
1e90: 73 74 75 66 66 5b 31 5d 7d 20 77 6f 72 6c 64 20  stuff[1]} world 
1ea0: 5c 0a 20 20 20 20 32 20 7b 24 2e 73 74 75 66 66  \.    2 {$.stuff
1eb0: 5b 32 5d 7d 20 78 79 7a 7a 79 20 5c 0a 20 20 20  [2]} xyzzy \.   
1ec0: 20 32 20 7b 24 2e 70 61 72 74 6c 69 73 74 5b 30   2 {$.partlist[0
1ed0: 5d 2e 75 75 69 64 7d 20 30 20 5c 0a 20 20 20 20  ].uuid} 0 \.    
1ee0: 32 20 7b 24 2e 70 61 72 74 6c 69 73 74 5b 31 5d  2 {$.partlist[1]
1ef0: 2e 75 75 69 64 7d 20 63 36 39 30 64 63 31 34 2d  .uuid} c690dc14-
1f00: 35 37 32 65 2d 31 31 65 35 2d 39 35 66 39 2d 64  572e-11e5-95f9-d
1f10: 66 63 38 38 36 31 66 64 35 33 35 5d 0a 64 6f 5f  fc8861fd535].do_
1f20: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
1f30: 6e 31 30 32 2d 31 31 31 30 20 7b 0a 20 20 53 45  n102-1110 {.  SE
1f40: 4c 45 43 54 20 62 69 67 2e 72 6f 77 69 64 2c 20  LECT big.rowid, 
1f50: 66 75 6c 6c 6b 65 79 2c 20 76 61 6c 75 65 0a 20  fullkey, value. 
1f60: 20 20 20 46 52 4f 4d 20 62 69 67 2c 20 6a 73 6f     FROM big, jso
1f70: 6e 5f 74 72 65 65 28 62 69 67 2e 6a 73 6f 6e 29  n_tree(big.json)
1f80: 0a 20 20 20 57 48 45 52 45 20 6a 73 6f 6e 5f 74  .   WHERE json_t
1f90: 72 65 65 2e 74 79 70 65 20 4e 4f 54 20 49 4e 20  ree.type NOT IN 
1fa0: 28 27 6f 62 6a 65 63 74 27 2c 27 61 72 72 61 79  ('object','array
1fb0: 27 29 0a 20 20 20 4f 52 44 45 52 20 42 59 20 2b  ').   ORDER BY +
1fc0: 62 69 67 2e 72 6f 77 69 64 2c 20 2b 6a 73 6f 6e  big.rowid, +json
1fd0: 5f 74 72 65 65 2e 69 64 0a 7d 20 24 63 6f 72 72  _tree.id.} $corr
1fe0: 65 63 74 5f 61 6e 73 77 65 72 0a 64 6f 5f 65 78  ect_answer.do_ex
1ff0: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
2000: 30 32 2d 31 31 32 30 20 7b 0a 20 20 53 45 4c 45  02-1120 {.  SELE
2010: 43 54 20 62 69 67 2e 72 6f 77 69 64 2c 20 66 75  CT big.rowid, fu
2020: 6c 6c 6b 65 79 2c 20 61 74 6f 6d 0a 20 20 20 20  llkey, atom.    
2030: 46 52 4f 4d 20 62 69 67 2c 20 6a 73 6f 6e 5f 74  FROM big, json_t
2040: 72 65 65 28 62 69 67 2e 6a 73 6f 6e 29 0a 20 20  ree(big.json).  
2050: 20 57 48 45 52 45 20 61 74 6f 6d 20 49 53 20 4e   WHERE atom IS N
2060: 4f 54 20 4e 55 4c 4c 0a 20 20 20 4f 52 44 45 52  OT NULL.   ORDER
2070: 20 42 59 20 2b 62 69 67 2e 72 6f 77 69 64 2c 20   BY +big.rowid, 
2080: 2b 6a 73 6f 6e 5f 74 72 65 65 2e 69 64 0a 7d 20  +json_tree.id.} 
2090: 24 63 6f 72 72 65 63 74 5f 61 6e 73 77 65 72 0a  $correct_answer.
20a0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
20b0: 20 6a 73 6f 6e 31 30 32 2d 31 31 33 30 20 7b 0a   json102-1130 {.
20c0: 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43    SELECT DISTINC
20d0: 54 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 62  T json_extract(b
20e0: 69 67 2e 6a 73 6f 6e 2c 27 24 2e 69 64 27 29 0a  ig.json,'$.id').
20f0: 20 20 20 20 46 52 4f 4d 20 62 69 67 2c 20 6a 73      FROM big, js
2100: 6f 6e 5f 74 72 65 65 28 62 69 67 2e 6a 73 6f 6e  on_tree(big.json
2110: 2c 27 24 2e 70 61 72 74 6c 69 73 74 27 29 0a 20  ,'$.partlist'). 
2120: 20 20 57 48 45 52 45 20 6a 73 6f 6e 5f 74 72 65    WHERE json_tre
2130: 65 2e 6b 65 79 3d 27 75 75 69 64 27 0a 20 20 20  e.key='uuid'.   
2140: 20 20 41 4e 44 20 6a 73 6f 6e 5f 74 72 65 65 2e    AND json_tree.
2150: 76 61 6c 75 65 3d 27 36 66 61 35 31 38 31 65 2d  value='6fa5181e-
2160: 35 37 32 31 2d 31 31 65 35 2d 61 30 34 65 2d 35  5721-11e5-a04e-5
2170: 37 66 33 64 37 62 33 32 38 30 38 27 3b 0a 7d 20  7f3d7b32808';.} 
2180: 7b 31 32 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  {123}.do_execsql
2190: 5f 74 65 73 74 20 6a 73 6f 6e 31 30 32 2d 31 31  _test json102-11
21a0: 33 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 44 49  31 {.  SELECT DI
21b0: 53 54 49 4e 43 54 20 6a 73 6f 6e 5f 65 78 74 72  STINCT json_extr
21c0: 61 63 74 28 62 69 67 2e 6a 73 6f 6e 2c 27 24 2e  act(big.json,'$.
21d0: 69 64 27 29 0a 20 20 20 20 46 52 4f 4d 20 62 69  id').    FROM bi
21e0: 67 2c 20 6a 73 6f 6e 5f 74 72 65 65 28 62 69 67  g, json_tree(big
21f0: 2e 6a 73 6f 6e 2c 27 24 27 29 0a 20 20 20 57 48  .json,'$').   WH
2200: 45 52 45 20 6a 73 6f 6e 5f 74 72 65 65 2e 6b 65  ERE json_tree.ke
2210: 79 3d 27 75 75 69 64 27 0a 20 20 20 20 20 41 4e  y='uuid'.     AN
2220: 44 20 6a 73 6f 6e 5f 74 72 65 65 2e 76 61 6c 75  D json_tree.valu
2230: 65 3d 27 36 66 61 35 31 38 31 65 2d 35 37 32 31  e='6fa5181e-5721
2240: 2d 31 31 65 35 2d 61 30 34 65 2d 35 37 66 33 64  -11e5-a04e-57f3d
2250: 37 62 33 32 38 30 38 27 3b 0a 7d 20 7b 31 32 33  7b32808';.} {123
2260: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
2270: 74 20 6a 73 6f 6e 31 30 32 2d 31 31 33 32 20 7b  t json102-1132 {
2280: 0a 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e  .  SELECT DISTIN
2290: 43 54 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28  CT json_extract(
22a0: 62 69 67 2e 6a 73 6f 6e 2c 27 24 2e 69 64 27 29  big.json,'$.id')
22b0: 0a 20 20 20 20 46 52 4f 4d 20 62 69 67 2c 20 6a  .    FROM big, j
22c0: 73 6f 6e 5f 74 72 65 65 28 62 69 67 2e 6a 73 6f  son_tree(big.jso
22d0: 6e 29 0a 20 20 20 57 48 45 52 45 20 6a 73 6f 6e  n).   WHERE json
22e0: 5f 74 72 65 65 2e 6b 65 79 3d 27 75 75 69 64 27  _tree.key='uuid'
22f0: 0a 20 20 20 20 20 41 4e 44 20 6a 73 6f 6e 5f 74  .     AND json_t
2300: 72 65 65 2e 76 61 6c 75 65 3d 27 36 66 61 35 31  ree.value='6fa51
2310: 38 31 65 2d 35 37 32 31 2d 31 31 65 35 2d 61 30  81e-5721-11e5-a0
2320: 34 65 2d 35 37 66 33 64 37 62 33 32 38 30 38 27  4e-57f3d7b32808'
2330: 3b 0a 7d 20 7b 31 32 33 7d 0a 7d 20 3b 23 20 65  ;.} {123}.} ;# e
2340: 6e 64 20 69 66 63 61 70 61 62 6c 65 20 76 74 61  nd ifcapable vta
2350: 62 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  b..#------------
2360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
23a0: 54 65 73 74 20 74 68 61 74 20 6a 73 6f 6e 5f 76  Test that json_v
23b0: 61 6c 69 64 28 29 20 63 6f 72 72 65 63 74 6c 79  alid() correctly
23c0: 20 69 64 65 6e 74 69 66 69 65 73 20 6e 6f 6e 2d   identifies non-
23d0: 61 73 63 69 69 20 72 61 6e 67 65 20 0a 23 20 63  ascii range .# c
23e0: 68 61 72 61 63 74 65 72 73 20 61 73 20 6e 6f 6e  haracters as non
23f0: 2d 77 68 69 74 65 73 70 61 63 65 2e 0a 23 0a 64  -whitespace..#.d
2400: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
2410: 73 6f 6e 31 30 32 2d 31 32 30 31 20 7b 20 53 45  son102-1201 { SE
2420: 4c 45 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28  LECT json_valid(
2430: 63 68 61 72 28 33 32 29 20 20 7c 7c 20 27 22 78  char(32)  || '"x
2440: 79 7a 22 27 29 20 7d 20 31 0a 64 6f 5f 65 78 65  yz"') } 1.do_exe
2450: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
2460: 32 2d 31 32 30 32 20 7b 20 53 45 4c 45 43 54 20  2-1202 { SELECT 
2470: 6a 73 6f 6e 5f 76 61 6c 69 64 28 63 68 61 72 28  json_valid(char(
2480: 32 30 30 29 20 7c 7c 20 27 22 78 79 7a 22 27 29  200) || '"xyz"')
2490: 20 7d 20 30 0a 0a 23 20 4f 66 66 2d 62 79 2d 6f   } 0..# Off-by-o
24a0: 6e 65 20 65 72 72 6f 72 20 69 6e 20 6a 73 6f 6e  ne error in json
24b0: 41 70 70 65 6e 64 53 74 72 69 6e 67 28 29 0a 23  AppendString().#
24c0: 0a 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b  .for {set i 0} {
24d0: 24 69 3c 31 30 30 7d 20 7b 69 6e 63 72 20 69 7d  $i<100} {incr i}
24e0: 20 7b 0a 20 20 73 65 74 20 73 74 72 20 61 62 63   {.  set str abc
24f0: 64 65 66 5b 73 74 72 69 6e 67 20 72 65 70 65 61  def[string repea
2500: 74 20 5c 22 20 5b 65 78 70 72 20 7b 24 69 2b 35  t \" [expr {$i+5
2510: 30 7d 5d 5d 75 76 77 78 79 7a 0a 20 20 64 6f 5f  0}]]uvwxyz.  do_
2520: 74 65 73 74 20 6a 73 6f 6e 31 30 32 2d 5b 66 6f  test json102-[fo
2530: 72 6d 61 74 20 25 64 20 5b 65 78 70 72 20 7b 24  rmat %d [expr {$
2540: 69 2b 31 33 30 30 7d 5d 5d 20 7b 0a 20 20 20 20  i+1300}]] {.    
2550: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
2560: 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 6a 73 6f  json_extract(jso
2570: 6e 5f 61 72 72 61 79 28 24 3a 3a 73 74 72 29 2c  n_array($::str),
2580: 27 24 5b 30 5d 27 29 3d 3d 24 3a 3a 73 74 72 7d  '$[0]')==$::str}
2590: 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 66 69 6e 69  .  } {1}.}..fini
25a0: 73 68 5f 74 65 73 74 0a                          sh_test.