gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/json104.test (about) 1 # 2017-03-22 2 # 3 # The author disclaims copyright to this source code. In place of 4 # a legal notice, here is a blessing: 5 # 6 # May you do good and not evil. 7 # May you find forgiveness for yourself and forgive others. 8 # May you share freely, never taking more than you give. 9 # 10 #*********************************************************************** 11 # This file implements tests for json_patch(A,B) SQL function. 12 # 13 14 set testdir [file dirname $argv0] 15 source $testdir/tester.tcl 16 set testprefix json104 17 18 # This is the example from pages 2 and 3 of RFC-7396 19 do_execsql_test json104-100 { 20 SELECT json_patch('{ 21 "a": "b", 22 "c": { 23 "d": "e", 24 "f": "g" 25 } 26 }','{ 27 "a":"z", 28 "c": { 29 "f": null 30 } 31 }'); 32 } {{{"a":"z","c":{"d":"e"}}}} 33 34 35 # This is the example from pages 4 and 5 of RFC-7396 36 do_execsql_test json104-110 { 37 SELECT json_patch('{ 38 "title": "Goodbye!", 39 "author" : { 40 "givenName" : "John", 41 "familyName" : "Doe" 42 }, 43 "tags":[ "example", "sample" ], 44 "content": "This will be unchanged" 45 }','{ 46 "title": "Hello!", 47 "phoneNumber": "+01-123-456-7890", 48 "author": { 49 "familyName": null 50 }, 51 "tags": [ "example" ] 52 }'); 53 } {{{"title":"Hello!","author":{"givenName":"John"},"tags":["example"],"content":"This will be unchanged","phoneNumber":"+01-123-456-7890"}}} 54 55 do_execsql_test json104-200 { 56 SELECT json_patch('[1,2,3]','{"x":null}'); 57 } {{{}}} 58 do_execsql_test json104-210 { 59 SELECT json_patch('[1,2,3]','{"x":null,"y":1,"z":null}'); 60 } {{{"y":1}}} 61 do_execsql_test json104-220 { 62 SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}'); 63 } {{{"a":{"bb":{}}}}} 64 do_execsql_test json104-221 { 65 SELECT json_patch('{}','{"a":{"bb":{"ccc":[1,null,3]}}}'); 66 } {{{"a":{"bb":{"ccc":[1,null,3]}}}}} 67 do_execsql_test json104-222 { 68 SELECT json_patch('{}','{"a":{"bb":{"ccc":[1,{"dddd":null},3]}}}'); 69 } {{{"a":{"bb":{"ccc":[1,{"dddd":null},3]}}}}} 70 71 # Example test cases at the end of the RFC-7396 document 72 do_execsql_test json104-300 { 73 SELECT json_patch('{"a":"b"}','{"a":"c"}'); 74 } {{{"a":"c"}}} 75 do_execsql_test json104-300a { 76 SELECT coalesce(json_patch(null,'{"a":"c"}'), 'real-null'); 77 } {{real-null}} 78 do_execsql_test json104-301 { 79 SELECT json_patch('{"a":"b"}','{"b":"c"}'); 80 } {{{"a":"b","b":"c"}}} 81 do_execsql_test json104-302 { 82 SELECT json_patch('{"a":"b"}','{"a":null}'); 83 } {{{}}} 84 do_execsql_test json104-303 { 85 SELECT json_patch('{"a":"b","b":"c"}','{"a":null}'); 86 } {{{"b":"c"}}} 87 do_execsql_test json104-304 { 88 SELECT json_patch('{"a":["b"]}','{"a":"c"}'); 89 } {{{"a":"c"}}} 90 do_execsql_test json104-305 { 91 SELECT json_patch('{"a":"c"}','{"a":["b"]}'); 92 } {{{"a":["b"]}}} 93 do_execsql_test json104-306 { 94 SELECT json_patch('{"a":{"b":"c"}}','{"a":{"b":"d","c":null}}'); 95 } {{{"a":{"b":"d"}}}} 96 do_execsql_test json104-307 { 97 SELECT json_patch('{"a":[{"b":"c"}]}','{"a":[1]}'); 98 } {{{"a":[1]}}} 99 do_execsql_test json104-308 { 100 SELECT json_patch('["a","b"]','["c","d"]'); 101 } {{["c","d"]}} 102 do_execsql_test json104-309 { 103 SELECT json_patch('{"a":"b"}','["c"]'); 104 } {{["c"]}} 105 do_execsql_test json104-310 { 106 SELECT json_patch('{"a":"foo"}','null'); 107 } {{null}} 108 do_execsql_test json104-310a { 109 SELECT coalesce(json_patch('{"a":"foo"}',null), 'real-null'); 110 } {{real-null}} 111 do_execsql_test json104-311 { 112 SELECT json_patch('{"a":"foo"}','"bar"'); 113 } {{"bar"}} 114 do_execsql_test json104-312 { 115 SELECT json_patch('{"e":null}','{"a":1}'); 116 } {{{"e":null,"a":1}}} 117 do_execsql_test json104-313 { 118 SELECT json_patch('[1,2]','{"a":"b","c":null}'); 119 } {{{"a":"b"}}} 120 do_execsql_test json104-314 { 121 SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}'); 122 } {{{"a":{"bb":{}}}}} 123 do_execsql_test json104-320 { 124 SELECT json_patch('{"x":{"one":1}}','{"x":{"two":2},"x":"three"}'); 125 } {{{"x":"three"}}} 126 127 #------------------------------------------------------------------------- 128 129 do_execsql_test 401 { 130 CREATE TABLE obj(x); 131 INSERT INTO obj VALUES('{"a":1,"b":2}'); 132 SELECT * FROM obj; 133 } {{{"a":1,"b":2}}} 134 do_execsql_test 402 { 135 UPDATE obj SET x = json_insert(x, '$.c', 3); 136 SELECT * FROM obj; 137 } {{{"a":1,"b":2,"c":3}}} 138 do_execsql_test 403 { 139 SELECT json_extract(x, '$.b') FROM obj; 140 SELECT json_extract(x, '$."b"') FROM obj; 141 } {2 2} 142 do_execsql_test 404 { 143 UPDATE obj SET x = json_set(x, '$."b"', 555); 144 SELECT json_extract(x, '$.b') FROM obj; 145 SELECT json_extract(x, '$."b"') FROM obj; 146 } {555 555} 147 do_execsql_test 405 { 148 UPDATE obj SET x = json_set(x, '$."d"', 4); 149 SELECT json_extract(x, '$."d"') FROM obj; 150 } {4} 151 152 153 finish_test