/ Hex Artifact Content
Login

Artifact 420fe3917c9a6a0fb7f967f1f641054509acd0e2:


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 6c 6f 61 64 5f  ester.tcl..load_
0200: 73 74 61 74 69 63 5f 65 78 74 65 6e 73 69 6f 6e  static_extension
0210: 20 64 62 20 6a 73 6f 6e 0a 64 6f 5f 65 78 65 63   db json.do_exec
0220: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 2d 31  sql_test json1-1
0230: 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  .1 {.  SELECT js
0240: 6f 6e 5f 61 72 72 61 79 28 31 2c 32 2e 35 2c 6e  on_array(1,2.5,n
0250: 75 6c 6c 2c 27 68 65 6c 6c 6f 27 29 3b 0a 7d 20  ull,'hello');.} 
0260: 7b 5b 31 2c 32 2e 35 2c 6e 75 6c 6c 2c 22 68 65  {[1,2.5,null,"he
0270: 6c 6c 6f 22 5d 7d 0a 64 6f 5f 65 78 65 63 73 71  llo"]}.do_execsq
0280: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 2d 31 2e 32  l_test json1-1.2
0290: 20 7b 0a 20 20 53 45 4c 45 43 54 20 68 65 78 28   {.  SELECT hex(
02a0: 6a 73 6f 6e 5f 61 72 72 61 79 28 27 53 74 72 69  json_array('Stri
02b0: 6e 67 20 22 5c 20 54 65 73 74 27 29 29 3b 0a 7d  ng "\ Test'));.}
02c0: 20 7b 35 42 32 32 35 33 37 34 37 32 36 39 36 45   {5B22537472696E
02d0: 36 37 32 30 35 43 32 32 35 43 35 43 32 30 35 34  67205C225C5C2054
02e0: 36 35 37 33 37 34 32 32 35 44 7d 0a 64 6f 5f 63  657374225D}.do_c
02f0: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 6a 73 6f  atchsql_test jso
0300: 6e 31 2d 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43  n1-1.3 {.  SELEC
0310: 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28 31 2c 32  T json_array(1,2
0320: 2c 78 27 61 62 63 64 27 2c 33 29 3b 0a 7d 20 7b  ,x'abcd',3);.} {
0330: 31 20 7b 4a 53 4f 4e 20 63 61 6e 6e 6f 74 20 68  1 {JSON cannot h
0340: 6f 6c 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 7d  old BLOB values}
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 2d 31 2e 34 20 7b 0a 20 20  t json1-1.4 {.  
0370: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61  SELECT json_arra
0380: 79 28 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  y(-9223372036854
0390: 37 37 35 38 30 38 2c 39 32 32 33 33 37 32 30 33  775808,922337203
03a0: 36 38 35 34 37 37 35 38 30 37 2c 30 2c 31 2c 2d  6854775807,0,1,-
03b0: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
03c0: 20 20 20 20 20 20 20 30 2e 30 2c 20 31 2e 30 2c         0.0, 1.0,
03d0: 20 2d 31 2e 30 2c 20 2d 31 65 39 39 2c 20 2b 32   -1.0, -1e99, +2
03e0: 65 31 30 30 2c 0a 20 20 20 20 20 20 20 20 20 20  e100,.          
03f0: 20 20 20 20 20 20 20 20 20 20 27 6f 6e 65 27 2c            'one',
0400: 27 74 77 6f 27 2c 27 74 68 72 65 65 27 2c 0a 20  'two','three',. 
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 34 2c 20 35 2c 20 36 2c 20 37 2c 20 38     4, 5, 6, 7, 8
0430: 2c 20 39 2c 20 31 30 2c 20 31 31 2c 20 31 32 2c  , 9, 10, 11, 12,
0440: 20 31 33 2c 20 31 34 2c 20 31 35 2c 20 31 36 2c   13, 14, 15, 16,
0450: 20 31 37 2c 20 31 38 2c 0a 20 20 20 20 20 20 20   17, 18,.       
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 39 2c               19,
0470: 20 4e 55 4c 4c 2c 20 32 31 2c 20 32 32 2c 20 32   NULL, 21, 22, 2
0480: 33 2c 20 32 34 2c 20 32 35 2c 20 32 36 2c 20 32  3, 24, 25, 26, 2
0490: 37 2c 20 32 38 2c 20 32 39 2c 20 33 30 2c 20 33  7, 28, 29, 30, 3
04a0: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
04b0: 20 20 20 20 20 20 20 27 61 62 63 64 65 66 67 68         'abcdefgh
04c0: 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 79  ijklmnopqrstuvwy
04d0: 78 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e  xzABCDEFGHIJKLMN
04e0: 4f 50 51 52 53 54 55 56 57 58 59 5a 27 2c 0a 20  OPQRSTUVWXYZ',. 
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 20 27 61 62 63 64 65 66 67 68 69 6a 6b 6c     'abcdefghijkl
0510: 6d 6e 6f 70 71 72 73 74 75 76 77 79 78 7a 41 42  mnopqrstuvwyxzAB
0520: 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52  CDEFGHIJKLMNOPQR
0530: 53 54 55 56 57 58 59 5a 27 2c 0a 20 20 20 20 20  STUVWXYZ',.     
0540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27                 '
0550: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70  abcdefghijklmnop
0560: 71 72 73 74 75 76 77 79 78 7a 41 42 43 44 45 46  qrstuvwyxzABCDEF
0570: 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56  GHIJKLMNOPQRSTUV
0580: 57 58 59 5a 27 2c 0a 20 20 20 20 20 20 20 20 20  WXYZ',.         
0590: 20 20 20 20 20 20 20 20 20 20 20 39 39 29 3b 0a             99);.
05a0: 7d 20 7b 5b 2d 39 32 32 33 33 37 32 30 33 36 38  } {[-92233720368
05b0: 35 34 37 37 35 38 30 38 2c 39 32 32 33 33 37 32  54775808,9223372
05c0: 30 33 36 38 35 34 37 37 35 38 30 37 2c 30 2c 31  036854775807,0,1
05d0: 2c 2d 31 2c 30 2e 30 2c 31 2e 30 2c 2d 31 2e 30  ,-1,0.0,1.0,-1.0
05e0: 2c 2d 31 2e 30 65 2b 39 39 2c 32 2e 30 65 2b 31  ,-1.0e+99,2.0e+1
05f0: 30 30 2c 22 6f 6e 65 22 2c 22 74 77 6f 22 2c 22  00,"one","two","
0600: 74 68 72 65 65 22 2c 34 2c 35 2c 36 2c 37 2c 38  three",4,5,6,7,8
0610: 2c 39 2c 31 30 2c 31 31 2c 31 32 2c 31 33 2c 31  ,9,10,11,12,13,1
0620: 34 2c 31 35 2c 31 36 2c 31 37 2c 31 38 2c 31 39  4,15,16,17,18,19
0630: 2c 6e 75 6c 6c 2c 32 31 2c 32 32 2c 32 33 2c 32  ,null,21,22,23,2
0640: 34 2c 32 35 2c 32 36 2c 32 37 2c 32 38 2c 32 39  4,25,26,27,28,29
0650: 2c 33 30 2c 33 31 2c 22 61 62 63 64 65 66 67 68  ,30,31,"abcdefgh
0660: 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 79  ijklmnopqrstuvwy
0670: 78 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e  xzABCDEFGHIJKLMN
0680: 4f 50 51 52 53 54 55 56 57 58 59 5a 22 2c 22 61  OPQRSTUVWXYZ","a
0690: 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71  bcdefghijklmnopq
06a0: 72 73 74 75 76 77 79 78 7a 41 42 43 44 45 46 47  rstuvwyxzABCDEFG
06b0: 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57  HIJKLMNOPQRSTUVW
06c0: 58 59 5a 22 2c 22 61 62 63 64 65 66 67 68 69 6a  XYZ","abcdefghij
06d0: 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 79 78 7a  klmnopqrstuvwyxz
06e0: 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50  ABCDEFGHIJKLMNOP
06f0: 51 52 53 54 55 56 57 58 59 5a 22 2c 39 39 5d 7d  QRSTUVWXYZ",99]}
0700: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0710: 74 20 6a 73 6f 6e 31 2d 32 2e 31 20 7b 0a 20 20  t json1-2.1 {.  
0720: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 6f 62 6a 65  SELECT json_obje
0730: 63 74 28 27 61 27 2c 31 2c 27 62 27 2c 32 2e 35  ct('a',1,'b',2.5
0740: 2c 27 63 27 2c 6e 75 6c 6c 2c 27 64 27 2c 27 53  ,'c',null,'d','S
0750: 74 72 69 6e 67 20 54 65 73 74 27 29 3b 0a 7d 20  tring Test');.} 
0760: 7b 7b 7b 22 61 22 3a 31 2c 22 62 22 3a 32 2e 35  {{{"a":1,"b":2.5
0770: 2c 22 63 22 3a 6e 75 6c 6c 2c 22 64 22 3a 22 53  ,"c":null,"d":"S
0780: 74 72 69 6e 67 20 54 65 73 74 22 7d 7d 7d 0a 64  tring Test"}}}.d
0790: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
07a0: 6a 73 6f 6e 31 2d 32 2e 32 20 7b 0a 20 20 53 45  json1-2.2 {.  SE
07b0: 4c 45 43 54 20 6a 73 6f 6e 5f 6f 62 6a 65 63 74  LECT json_object
07c0: 28 27 61 27 2c 31 2c 32 2c 32 2e 35 29 3b 0a 7d  ('a',1,2,2.5);.}
07d0: 20 7b 31 20 7b 6a 73 6f 6e 5f 6f 62 6a 65 63 74   {1 {json_object
07e0: 28 29 20 6c 61 62 65 6c 73 20 6d 75 73 74 20 62  () labels must b
07f0: 65 20 54 45 58 54 7d 7d 0a 64 6f 5f 63 61 74 63  e TEXT}}.do_catc
0800: 68 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 2d  hsql_test json1-
0810: 32 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  2.3 {.  SELECT j
0820: 73 6f 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 31  son_object('a',1
0830: 2c 27 62 27 29 3b 0a 7d 20 7b 31 20 7b 6a 73 6f  ,'b');.} {1 {jso
0840: 6e 5f 6f 62 6a 65 63 74 28 29 20 72 65 71 75 69  n_object() requi
0850: 72 65 73 20 61 6e 20 65 76 65 6e 20 6e 75 6d 62  res an even numb
0860: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 7d  er of arguments}
0870: 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
0880: 73 74 20 6a 73 6f 6e 31 2d 32 2e 34 20 7b 0a 20  st json1-2.4 {. 
0890: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 6f 62 6a   SELECT json_obj
08a0: 65 63 74 28 27 61 27 2c 31 2c 27 62 27 2c 78 27  ect('a',1,'b',x'
08b0: 61 62 63 64 27 29 3b 0a 7d 20 7b 31 20 7b 4a 53  abcd');.} {1 {JS
08c0: 4f 4e 20 63 61 6e 6e 6f 74 20 68 6f 6c 64 20 42  ON cannot hold B
08d0: 4c 4f 42 20 76 61 6c 75 65 73 7d 7d 0a 0a 64 6f  LOB values}}..do
08e0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
08f0: 6f 6e 31 2d 33 2e 31 20 7b 0a 20 20 53 45 4c 45  on1-3.1 {.  SELE
0900: 43 54 20 6a 73 6f 6e 5f 72 65 70 6c 61 63 65 28  CT json_replace(
0910: 27 7b 22 61 22 3a 31 2c 22 62 22 3a 32 7d 27 2c  '{"a":1,"b":2}',
0920: 27 24 2e 61 27 2c 27 5b 33 2c 34 2c 35 5d 27 29  '$.a','[3,4,5]')
0930: 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 22 5b 33 2c 34  ;.} {{{"a":"[3,4
0940: 2c 35 5d 22 2c 22 62 22 3a 32 7d 7d 7d 0a 64 6f  ,5]","b":2}}}.do
0950: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0960: 6f 6e 31 2d 33 2e 32 20 7b 0a 20 20 53 45 4c 45  on1-3.2 {.  SELE
0970: 43 54 20 6a 73 6f 6e 5f 72 65 70 6c 61 63 65 28  CT json_replace(
0980: 27 7b 22 61 22 3a 31 2c 22 62 22 3a 32 7d 27 2c  '{"a":1,"b":2}',
0990: 27 24 24 2e 61 27 2c 27 5b 33 2c 34 2c 35 5d 27  '$$.a','[3,4,5]'
09a0: 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 5b 33 2c 34  );.} {{{"a":[3,4
09b0: 2c 35 5d 2c 22 62 22 3a 32 7d 7d 7d 0a 64 6f 5f  ,5],"b":2}}}.do_
09c0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
09d0: 6e 31 2d 33 2e 33 20 7b 0a 20 20 53 45 4c 45 43  n1-3.3 {.  SELEC
09e0: 54 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73 6f 6e  T json_type(json
09f0: 5f 73 65 74 28 27 7b 22 61 22 3a 31 2c 22 62 22  _set('{"a":1,"b"
0a00: 3a 32 7d 27 2c 27 24 2e 62 27 2c 27 7b 22 78 22  :2}','$.b','{"x"
0a10: 3a 33 2c 22 79 22 3a 34 7d 27 29 2c 27 24 2e 62  :3,"y":4}'),'$.b
0a20: 27 29 3b 0a 7d 20 7b 74 65 78 74 7d 0a 64 6f 5f  ');.} {text}.do_
0a30: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
0a40: 6e 31 2d 33 2e 34 20 7b 0a 20 20 53 45 4c 45 43  n1-3.4 {.  SELEC
0a50: 54 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73 6f 6e  T json_type(json
0a60: 5f 73 65 74 28 27 7b 22 61 22 3a 31 2c 22 62 22  _set('{"a":1,"b"
0a70: 3a 32 7d 27 2c 27 24 24 2e 62 27 2c 27 7b 22 78  :2}','$$.b','{"x
0a80: 22 3a 33 2c 22 79 22 3a 34 7d 27 29 2c 27 24 2e  ":3,"y":4}'),'$.
0a90: 62 27 29 3b 0a 7d 20 7b 6f 62 6a 65 63 74 7d 0a  b');.} {object}.
0aa0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0ab0: 20 6a 73 6f 6e 31 2d 34 2e 31 20 7b 0a 20 20 53   json1-4.1 {.  S
0ac0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 63 68 65 63 6b  ELECT json_check
0ad0: 28 27 20 20 5b 20 20 31 2c 20 20 20 32 5d 20 20  ('  [  1,   2]  
0ae0: 20 27 29 3b 0a 7d 20 7b 5b 31 2c 32 5d 7d 0a 64   ');.} {[1,2]}.d
0af0: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
0b00: 6a 73 6f 6e 31 2d 34 2e 32 20 7b 0a 20 20 53 45  json1-4.2 {.  SE
0b10: 4c 45 43 54 20 6a 73 6f 6e 5f 63 68 65 63 6b 28  LECT json_check(
0b20: 27 20 20 5b 20 20 31 2c 20 20 20 32 20 20 20 20  '  [  1,   2    
0b30: 27 29 3b 0a 7d 20 7b 31 20 7b 6d 61 6c 66 6f 72  ');.} {1 {malfor
0b40: 6d 65 64 20 4a 53 4f 4e 7d 7d 0a 0a 66 69 6e 69  med JSON}}..fini
0b50: 73 68 5f 74 65 73 74 0a                          sh_test.