/ Hex Artifact Content
Login

Artifact 877d5845f6303899b7889ea5dd1bea99076e3100574d5c536082245c5805dcaa:


0000: 23 20 32 30 31 37 2d 30 33 2d 32 32 0a 23 0a 23  # 2017-03-22.#.#
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 6a 73 6f 6e 5f 70 61 74 63 68 28 41  for json_patch(A
0190: 2c 42 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ,B) SQL function
01a0: 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72  ..#..set testdir
01b0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
01c0: 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74  argv0].source $t
01d0: 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63  estdir/tester.tc
01e0: 6c 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 6a 73  l..ifcapable !js
01f0: 6f 6e 31 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  on1 {.  finish_t
0200: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0210: 23 20 54 68 69 73 20 69 73 20 74 68 65 20 65 78  # This is the ex
0220: 61 6d 70 6c 65 20 66 72 6f 6d 20 70 61 67 65 73  ample from pages
0230: 20 32 20 61 6e 64 20 33 20 6f 66 20 52 46 43 2d   2 and 3 of RFC-
0240: 37 33 39 36 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  7396.do_execsql_
0250: 74 65 73 74 20 6a 73 6f 6e 31 30 34 2d 31 30 30  test json104-100
0260: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
0270: 5f 70 61 74 63 68 28 27 7b 0a 20 20 20 20 20 20  _patch('{.      
0280: 20 22 61 22 3a 20 22 62 22 2c 0a 20 20 20 20 20   "a": "b",.     
0290: 20 20 22 63 22 3a 20 7b 0a 20 20 20 20 20 20 20    "c": {.       
02a0: 20 20 22 64 22 3a 20 22 65 22 2c 0a 20 20 20 20    "d": "e",.    
02b0: 20 20 20 20 20 22 66 22 3a 20 22 67 22 0a 20 20       "f": "g".  
02c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 7d 27 2c 27       }.     }','
02d0: 7b 0a 20 20 20 20 20 20 20 22 61 22 3a 22 7a 22  {.       "a":"z"
02e0: 2c 0a 20 20 20 20 20 20 20 22 63 22 3a 20 7b 0a  ,.       "c": {.
02f0: 20 20 20 20 20 20 20 20 20 22 66 22 3a 20 6e 75           "f": nu
0300: 6c 6c 0a 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ll.       }.    
0310: 20 7d 27 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 22   }');.} {{{"a":"
0320: 7a 22 2c 22 63 22 3a 7b 22 64 22 3a 22 65 22 7d  z","c":{"d":"e"}
0330: 7d 7d 7d 0a 0a 0a 23 20 54 68 69 73 20 69 73 20  }}}...# This is 
0340: 74 68 65 20 65 78 61 6d 70 6c 65 20 66 72 6f 6d  the example from
0350: 20 70 61 67 65 73 20 34 20 61 6e 64 20 35 20 6f   pages 4 and 5 o
0360: 66 20 52 46 43 2d 37 33 39 36 20 0a 64 6f 5f 65  f RFC-7396 .do_e
0370: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
0380: 31 30 34 2d 31 31 30 20 7b 0a 20 20 53 45 4c 45  104-110 {.  SELE
0390: 43 54 20 6a 73 6f 6e 5f 70 61 74 63 68 28 27 7b  CT json_patch('{
03a0: 0a 20 20 20 20 20 20 20 22 74 69 74 6c 65 22 3a  .       "title":
03b0: 20 22 47 6f 6f 64 62 79 65 21 22 2c 0a 20 20 20   "Goodbye!",.   
03c0: 20 20 20 20 22 61 75 74 68 6f 72 22 20 3a 20 7b      "author" : {
03d0: 0a 20 20 20 20 20 20 20 20 20 22 67 69 76 65 6e  .         "given
03e0: 4e 61 6d 65 22 20 3a 20 22 4a 6f 68 6e 22 2c 0a  Name" : "John",.
03f0: 20 20 20 20 20 20 20 20 20 22 66 61 6d 69 6c 79           "family
0400: 4e 61 6d 65 22 20 3a 20 22 44 6f 65 22 0a 20 20  Name" : "Doe".  
0410: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 22       },.       "
0420: 74 61 67 73 22 3a 5b 20 22 65 78 61 6d 70 6c 65  tags":[ "example
0430: 22 2c 20 22 73 61 6d 70 6c 65 22 20 5d 2c 0a 20  ", "sample" ],. 
0440: 20 20 20 20 20 20 22 63 6f 6e 74 65 6e 74 22 3a        "content":
0450: 20 22 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75   "This will be u
0460: 6e 63 68 61 6e 67 65 64 22 0a 20 20 20 20 20 7d  nchanged".     }
0470: 27 2c 27 7b 0a 20 20 20 20 20 20 20 22 74 69 74  ','{.       "tit
0480: 6c 65 22 3a 20 22 48 65 6c 6c 6f 21 22 2c 0a 20  le": "Hello!",. 
0490: 20 20 20 20 20 20 22 70 68 6f 6e 65 4e 75 6d 62        "phoneNumb
04a0: 65 72 22 3a 20 22 2b 30 31 2d 31 32 33 2d 34 35  er": "+01-123-45
04b0: 36 2d 37 38 39 30 22 2c 0a 20 20 20 20 20 20 20  6-7890",.       
04c0: 22 61 75 74 68 6f 72 22 3a 20 7b 0a 20 20 20 20  "author": {.    
04d0: 20 20 20 20 20 22 66 61 6d 69 6c 79 4e 61 6d 65       "familyName
04e0: 22 3a 20 6e 75 6c 6c 0a 20 20 20 20 20 20 20 7d  ": null.       }
04f0: 2c 0a 20 20 20 20 20 20 20 22 74 61 67 73 22 3a  ,.       "tags":
0500: 20 5b 20 22 65 78 61 6d 70 6c 65 22 20 5d 0a 20   [ "example" ]. 
0510: 20 20 20 20 7d 27 29 3b 0a 7d 20 7b 7b 7b 22 74      }');.} {{{"t
0520: 69 74 6c 65 22 3a 22 48 65 6c 6c 6f 21 22 2c 22  itle":"Hello!","
0530: 61 75 74 68 6f 72 22 3a 7b 22 67 69 76 65 6e 4e  author":{"givenN
0540: 61 6d 65 22 3a 22 4a 6f 68 6e 22 7d 2c 22 74 61  ame":"John"},"ta
0550: 67 73 22 3a 5b 22 65 78 61 6d 70 6c 65 22 5d 2c  gs":["example"],
0560: 22 63 6f 6e 74 65 6e 74 22 3a 22 54 68 69 73 20  "content":"This 
0570: 77 69 6c 6c 20 62 65 20 75 6e 63 68 61 6e 67 65  will be unchange
0580: 64 22 2c 22 70 68 6f 6e 65 4e 75 6d 62 65 72 22  d","phoneNumber"
0590: 3a 22 2b 30 31 2d 31 32 33 2d 34 35 36 2d 37 38  :"+01-123-456-78
05a0: 39 30 22 7d 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73  90"}}}..do_execs
05b0: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 34 2d  ql_test json104-
05c0: 32 30 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a  200 {.  SELECT j
05d0: 73 6f 6e 5f 70 61 74 63 68 28 27 5b 31 2c 32 2c  son_patch('[1,2,
05e0: 33 5d 27 2c 27 7b 22 78 22 3a 6e 75 6c 6c 7d 27  3]','{"x":null}'
05f0: 29 3b 0a 7d 20 7b 7b 7b 7d 7d 7d 0a 64 6f 5f 65  );.} {{{}}}.do_e
0600: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
0610: 31 30 34 2d 32 31 30 20 7b 0a 20 20 53 45 4c 45  104-210 {.  SELE
0620: 43 54 20 6a 73 6f 6e 5f 70 61 74 63 68 28 27 5b  CT json_patch('[
0630: 31 2c 32 2c 33 5d 27 2c 27 7b 22 78 22 3a 6e 75  1,2,3]','{"x":nu
0640: 6c 6c 2c 22 79 22 3a 31 2c 22 7a 22 3a 6e 75 6c  ll,"y":1,"z":nul
0650: 6c 7d 27 29 3b 0a 7d 20 7b 7b 7b 22 79 22 3a 31  l}');.} {{{"y":1
0660: 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }}}.do_execsql_t
0670: 65 73 74 20 6a 73 6f 6e 31 30 34 2d 32 32 30 20  est json104-220 
0680: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
0690: 70 61 74 63 68 28 27 7b 7d 27 2c 27 7b 22 61 22  patch('{}','{"a"
06a0: 3a 7b 22 62 62 22 3a 7b 22 63 63 63 22 3a 6e 75  :{"bb":{"ccc":nu
06b0: 6c 6c 7d 7d 7d 27 29 3b 0a 7d 20 7b 7b 7b 22 61  ll}}}');.} {{{"a
06c0: 22 3a 7b 22 62 62 22 3a 7b 7d 7d 7d 7d 7d 0a 64  ":{"bb":{}}}}}.d
06d0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
06e0: 73 6f 6e 31 30 34 2d 32 32 31 20 7b 0a 20 20 53  son104-221 {.  S
06f0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 70 61 74 63 68  ELECT json_patch
0700: 28 27 7b 7d 27 2c 27 7b 22 61 22 3a 7b 22 62 62  ('{}','{"a":{"bb
0710: 22 3a 7b 22 63 63 63 22 3a 5b 31 2c 6e 75 6c 6c  ":{"ccc":[1,null
0720: 2c 33 5d 7d 7d 7d 27 29 3b 0a 7d 20 7b 7b 7b 22  ,3]}}}');.} {{{"
0730: 61 22 3a 7b 22 62 62 22 3a 7b 22 63 63 63 22 3a  a":{"bb":{"ccc":
0740: 5b 31 2c 6e 75 6c 6c 2c 33 5d 7d 7d 7d 7d 7d 0a  [1,null,3]}}}}}.
0750: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0760: 6a 73 6f 6e 31 30 34 2d 32 32 32 20 7b 0a 20 20  json104-222 {.  
0770: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 70 61 74 63  SELECT json_patc
0780: 68 28 27 7b 7d 27 2c 27 7b 22 61 22 3a 7b 22 62  h('{}','{"a":{"b
0790: 62 22 3a 7b 22 63 63 63 22 3a 5b 31 2c 7b 22 64  b":{"ccc":[1,{"d
07a0: 64 64 64 22 3a 6e 75 6c 6c 7d 2c 33 5d 7d 7d 7d  ddd":null},3]}}}
07b0: 27 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 7b 22 62  ');.} {{{"a":{"b
07c0: 62 22 3a 7b 22 63 63 63 22 3a 5b 31 2c 7b 22 64  b":{"ccc":[1,{"d
07d0: 64 64 64 22 3a 6e 75 6c 6c 7d 2c 33 5d 7d 7d 7d  ddd":null},3]}}}
07e0: 7d 7d 0a 0a 23 20 45 78 61 6d 70 6c 65 20 74 65  }}..# Example te
07f0: 73 74 20 63 61 73 65 73 20 61 74 20 74 68 65 20  st cases at the 
0800: 65 6e 64 20 6f 66 20 74 68 65 20 52 46 43 2d 37  end of the RFC-7
0810: 33 39 36 20 64 6f 63 75 6d 65 6e 74 0a 64 6f 5f  396 document.do_
0820: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
0830: 6e 31 30 34 2d 33 30 30 20 7b 0a 20 20 53 45 4c  n104-300 {.  SEL
0840: 45 43 54 20 6a 73 6f 6e 5f 70 61 74 63 68 28 27  ECT json_patch('
0850: 7b 22 61 22 3a 22 62 22 7d 27 2c 27 7b 22 61 22  {"a":"b"}','{"a"
0860: 3a 22 63 22 7d 27 29 3b 0a 7d 20 7b 7b 7b 22 61  :"c"}');.} {{{"a
0870: 22 3a 22 63 22 7d 7d 7d 0a 64 6f 5f 65 78 65 63  ":"c"}}}.do_exec
0880: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 34  sql_test json104
0890: 2d 33 30 30 61 20 7b 0a 20 20 53 45 4c 45 43 54  -300a {.  SELECT
08a0: 20 63 6f 61 6c 65 73 63 65 28 6a 73 6f 6e 5f 70   coalesce(json_p
08b0: 61 74 63 68 28 6e 75 6c 6c 2c 27 7b 22 61 22 3a  atch(null,'{"a":
08c0: 22 63 22 7d 27 29 2c 20 27 72 65 61 6c 2d 6e 75  "c"}'), 'real-nu
08d0: 6c 6c 27 29 3b 0a 7d 20 7b 7b 72 65 61 6c 2d 6e  ll');.} {{real-n
08e0: 75 6c 6c 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  ull}}.do_execsql
08f0: 5f 74 65 73 74 20 6a 73 6f 6e 31 30 34 2d 33 30  _test json104-30
0900: 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  1 {.  SELECT jso
0910: 6e 5f 70 61 74 63 68 28 27 7b 22 61 22 3a 22 62  n_patch('{"a":"b
0920: 22 7d 27 2c 27 7b 22 62 22 3a 22 63 22 7d 27 29  "}','{"b":"c"}')
0930: 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 22 62 22 2c 22  ;.} {{{"a":"b","
0940: 62 22 3a 22 63 22 7d 7d 7d 0a 64 6f 5f 65 78 65  b":"c"}}}.do_exe
0950: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
0960: 34 2d 33 30 32 20 7b 0a 20 20 53 45 4c 45 43 54  4-302 {.  SELECT
0970: 20 6a 73 6f 6e 5f 70 61 74 63 68 28 27 7b 22 61   json_patch('{"a
0980: 22 3a 22 62 22 7d 27 2c 27 7b 22 61 22 3a 6e 75  ":"b"}','{"a":nu
0990: 6c 6c 7d 27 29 3b 0a 7d 20 7b 7b 7b 7d 7d 7d 0a  ll}');.} {{{}}}.
09a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
09b0: 6a 73 6f 6e 31 30 34 2d 33 30 33 20 7b 0a 20 20  json104-303 {.  
09c0: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 70 61 74 63  SELECT json_patc
09d0: 68 28 27 7b 22 61 22 3a 22 62 22 2c 22 62 22 3a  h('{"a":"b","b":
09e0: 22 63 22 7d 27 2c 27 7b 22 61 22 3a 6e 75 6c 6c  "c"}','{"a":null
09f0: 7d 27 29 3b 0a 7d 20 7b 7b 7b 22 62 22 3a 22 63  }');.} {{{"b":"c
0a00: 22 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  "}}}.do_execsql_
0a10: 74 65 73 74 20 6a 73 6f 6e 31 30 34 2d 33 30 34  test json104-304
0a20: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
0a30: 5f 70 61 74 63 68 28 27 7b 22 61 22 3a 5b 22 62  _patch('{"a":["b
0a40: 22 5d 7d 27 2c 27 7b 22 61 22 3a 22 63 22 7d 27  "]}','{"a":"c"}'
0a50: 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 22 63 22 7d  );.} {{{"a":"c"}
0a60: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
0a70: 73 74 20 6a 73 6f 6e 31 30 34 2d 33 30 35 20 7b  st json104-305 {
0a80: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 70  .  SELECT json_p
0a90: 61 74 63 68 28 27 7b 22 61 22 3a 22 63 22 7d 27  atch('{"a":"c"}'
0aa0: 2c 27 7b 22 61 22 3a 5b 22 62 22 5d 7d 27 29 3b  ,'{"a":["b"]}');
0ab0: 0a 7d 20 7b 7b 7b 22 61 22 3a 5b 22 62 22 5d 7d  .} {{{"a":["b"]}
0ac0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
0ad0: 73 74 20 6a 73 6f 6e 31 30 34 2d 33 30 36 20 7b  st json104-306 {
0ae0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 70  .  SELECT json_p
0af0: 61 74 63 68 28 27 7b 22 61 22 3a 7b 22 62 22 3a  atch('{"a":{"b":
0b00: 22 63 22 7d 7d 27 2c 27 7b 22 61 22 3a 7b 22 62  "c"}}','{"a":{"b
0b10: 22 3a 22 64 22 2c 22 63 22 3a 6e 75 6c 6c 7d 7d  ":"d","c":null}}
0b20: 27 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 7b 22 62  ');.} {{{"a":{"b
0b30: 22 3a 22 64 22 7d 7d 7d 7d 0a 64 6f 5f 65 78 65  ":"d"}}}}.do_exe
0b40: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
0b50: 34 2d 33 30 37 20 7b 0a 20 20 53 45 4c 45 43 54  4-307 {.  SELECT
0b60: 20 6a 73 6f 6e 5f 70 61 74 63 68 28 27 7b 22 61   json_patch('{"a
0b70: 22 3a 5b 7b 22 62 22 3a 22 63 22 7d 5d 7d 27 2c  ":[{"b":"c"}]}',
0b80: 27 7b 22 61 22 3a 5b 31 5d 7d 27 29 3b 0a 7d 20  '{"a":[1]}');.} 
0b90: 7b 7b 7b 22 61 22 3a 5b 31 5d 7d 7d 7d 0a 64 6f  {{{"a":[1]}}}.do
0ba0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0bb0: 6f 6e 31 30 34 2d 33 30 38 20 7b 0a 20 20 53 45  on104-308 {.  SE
0bc0: 4c 45 43 54 20 6a 73 6f 6e 5f 70 61 74 63 68 28  LECT json_patch(
0bd0: 27 5b 22 61 22 2c 22 62 22 5d 27 2c 27 5b 22 63  '["a","b"]','["c
0be0: 22 2c 22 64 22 5d 27 29 3b 0a 7d 20 7b 7b 5b 22  ","d"]');.} {{["
0bf0: 63 22 2c 22 64 22 5d 7d 7d 0a 64 6f 5f 65 78 65  c","d"]}}.do_exe
0c00: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
0c10: 34 2d 33 30 39 20 7b 0a 20 20 53 45 4c 45 43 54  4-309 {.  SELECT
0c20: 20 6a 73 6f 6e 5f 70 61 74 63 68 28 27 7b 22 61   json_patch('{"a
0c30: 22 3a 22 62 22 7d 27 2c 27 5b 22 63 22 5d 27 29  ":"b"}','["c"]')
0c40: 3b 0a 7d 20 7b 7b 5b 22 63 22 5d 7d 7d 0a 64 6f  ;.} {{["c"]}}.do
0c50: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0c60: 6f 6e 31 30 34 2d 33 31 30 20 7b 0a 20 20 53 45  on104-310 {.  SE
0c70: 4c 45 43 54 20 6a 73 6f 6e 5f 70 61 74 63 68 28  LECT json_patch(
0c80: 27 7b 22 61 22 3a 22 66 6f 6f 22 7d 27 2c 27 6e  '{"a":"foo"}','n
0c90: 75 6c 6c 27 29 3b 0a 7d 20 7b 7b 6e 75 6c 6c 7d  ull');.} {{null}
0ca0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0cb0: 74 20 6a 73 6f 6e 31 30 34 2d 33 31 30 61 20 7b  t json104-310a {
0cc0: 0a 20 20 53 45 4c 45 43 54 20 63 6f 61 6c 65 73  .  SELECT coales
0cd0: 63 65 28 6a 73 6f 6e 5f 70 61 74 63 68 28 27 7b  ce(json_patch('{
0ce0: 22 61 22 3a 22 66 6f 6f 22 7d 27 2c 6e 75 6c 6c  "a":"foo"}',null
0cf0: 29 2c 20 27 72 65 61 6c 2d 6e 75 6c 6c 27 29 3b  ), 'real-null');
0d00: 0a 7d 20 7b 7b 72 65 61 6c 2d 6e 75 6c 6c 7d 7d  .} {{real-null}}
0d10: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0d20: 20 6a 73 6f 6e 31 30 34 2d 33 31 31 20 7b 0a 20   json104-311 {. 
0d30: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 70 61 74   SELECT json_pat
0d40: 63 68 28 27 7b 22 61 22 3a 22 66 6f 6f 22 7d 27  ch('{"a":"foo"}'
0d50: 2c 27 22 62 61 72 22 27 29 3b 0a 7d 20 7b 7b 22  ,'"bar"');.} {{"
0d60: 62 61 72 22 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  bar"}}.do_execsq
0d70: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 34 2d 33  l_test json104-3
0d80: 31 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  12 {.  SELECT js
0d90: 6f 6e 5f 70 61 74 63 68 28 27 7b 22 65 22 3a 6e  on_patch('{"e":n
0da0: 75 6c 6c 7d 27 2c 27 7b 22 61 22 3a 31 7d 27 29  ull}','{"a":1}')
0db0: 3b 0a 7d 20 7b 7b 7b 22 65 22 3a 6e 75 6c 6c 2c  ;.} {{{"e":null,
0dc0: 22 61 22 3a 31 7d 7d 7d 0a 64 6f 5f 65 78 65 63  "a":1}}}.do_exec
0dd0: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 34  sql_test json104
0de0: 2d 33 31 33 20 7b 0a 20 20 53 45 4c 45 43 54 20  -313 {.  SELECT 
0df0: 6a 73 6f 6e 5f 70 61 74 63 68 28 27 5b 31 2c 32  json_patch('[1,2
0e00: 5d 27 2c 27 7b 22 61 22 3a 22 62 22 2c 22 63 22  ]','{"a":"b","c"
0e10: 3a 6e 75 6c 6c 7d 27 29 3b 0a 7d 20 7b 7b 7b 22  :null}');.} {{{"
0e20: 61 22 3a 22 62 22 7d 7d 7d 0a 64 6f 5f 65 78 65  a":"b"}}}.do_exe
0e30: 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  csql_test json10
0e40: 34 2d 33 31 34 20 7b 0a 20 20 53 45 4c 45 43 54  4-314 {.  SELECT
0e50: 20 6a 73 6f 6e 5f 70 61 74 63 68 28 27 7b 7d 27   json_patch('{}'
0e60: 2c 27 7b 22 61 22 3a 7b 22 62 62 22 3a 7b 22 63  ,'{"a":{"bb":{"c
0e70: 63 63 22 3a 6e 75 6c 6c 7d 7d 7d 27 29 3b 0a 7d  cc":null}}}');.}
0e80: 20 7b 7b 7b 22 61 22 3a 7b 22 62 62 22 3a 7b 7d   {{{"a":{"bb":{}
0e90: 7d 7d 7d 7d 0a 0a 0a 0a 66 69 6e 69 73 68 5f 74  }}}}....finish_t
0ea0: 65 73 74 0a                                      est.