github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/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  ifcapable !json1 {
    19    finish_test
    20    return
    21  }
    22  
    23  # This is the example from pages 2 and 3 of RFC-7396
    24  do_execsql_test json104-100 {
    25    SELECT json_patch('{
    26         "a": "b",
    27         "c": {
    28           "d": "e",
    29           "f": "g"
    30         }
    31       }','{
    32         "a":"z",
    33         "c": {
    34           "f": null
    35         }
    36       }');
    37  } {{{"a":"z","c":{"d":"e"}}}}
    38  
    39  
    40  # This is the example from pages 4 and 5 of RFC-7396 
    41  do_execsql_test json104-110 {
    42    SELECT json_patch('{
    43         "title": "Goodbye!",
    44         "author" : {
    45           "givenName" : "John",
    46           "familyName" : "Doe"
    47         },
    48         "tags":[ "example", "sample" ],
    49         "content": "This will be unchanged"
    50       }','{
    51         "title": "Hello!",
    52         "phoneNumber": "+01-123-456-7890",
    53         "author": {
    54           "familyName": null
    55         },
    56         "tags": [ "example" ]
    57       }');
    58  } {{{"title":"Hello!","author":{"givenName":"John"},"tags":["example"],"content":"This will be unchanged","phoneNumber":"+01-123-456-7890"}}}
    59  
    60  do_execsql_test json104-200 {
    61    SELECT json_patch('[1,2,3]','{"x":null}');
    62  } {{{}}}
    63  do_execsql_test json104-210 {
    64    SELECT json_patch('[1,2,3]','{"x":null,"y":1,"z":null}');
    65  } {{{"y":1}}}
    66  do_execsql_test json104-220 {
    67    SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}');
    68  } {{{"a":{"bb":{}}}}}
    69  do_execsql_test json104-221 {
    70    SELECT json_patch('{}','{"a":{"bb":{"ccc":[1,null,3]}}}');
    71  } {{{"a":{"bb":{"ccc":[1,null,3]}}}}}
    72  do_execsql_test json104-222 {
    73    SELECT json_patch('{}','{"a":{"bb":{"ccc":[1,{"dddd":null},3]}}}');
    74  } {{{"a":{"bb":{"ccc":[1,{"dddd":null},3]}}}}}
    75  
    76  # Example test cases at the end of the RFC-7396 document
    77  do_execsql_test json104-300 {
    78    SELECT json_patch('{"a":"b"}','{"a":"c"}');
    79  } {{{"a":"c"}}}
    80  do_execsql_test json104-300a {
    81    SELECT coalesce(json_patch(null,'{"a":"c"}'), 'real-null');
    82  } {{real-null}}
    83  do_execsql_test json104-301 {
    84    SELECT json_patch('{"a":"b"}','{"b":"c"}');
    85  } {{{"a":"b","b":"c"}}}
    86  do_execsql_test json104-302 {
    87    SELECT json_patch('{"a":"b"}','{"a":null}');
    88  } {{{}}}
    89  do_execsql_test json104-303 {
    90    SELECT json_patch('{"a":"b","b":"c"}','{"a":null}');
    91  } {{{"b":"c"}}}
    92  do_execsql_test json104-304 {
    93    SELECT json_patch('{"a":["b"]}','{"a":"c"}');
    94  } {{{"a":"c"}}}
    95  do_execsql_test json104-305 {
    96    SELECT json_patch('{"a":"c"}','{"a":["b"]}');
    97  } {{{"a":["b"]}}}
    98  do_execsql_test json104-306 {
    99    SELECT json_patch('{"a":{"b":"c"}}','{"a":{"b":"d","c":null}}');
   100  } {{{"a":{"b":"d"}}}}
   101  do_execsql_test json104-307 {
   102    SELECT json_patch('{"a":[{"b":"c"}]}','{"a":[1]}');
   103  } {{{"a":[1]}}}
   104  do_execsql_test json104-308 {
   105    SELECT json_patch('["a","b"]','["c","d"]');
   106  } {{["c","d"]}}
   107  do_execsql_test json104-309 {
   108    SELECT json_patch('{"a":"b"}','["c"]');
   109  } {{["c"]}}
   110  do_execsql_test json104-310 {
   111    SELECT json_patch('{"a":"foo"}','null');
   112  } {{null}}
   113  do_execsql_test json104-310a {
   114    SELECT coalesce(json_patch('{"a":"foo"}',null), 'real-null');
   115  } {{real-null}}
   116  do_execsql_test json104-311 {
   117    SELECT json_patch('{"a":"foo"}','"bar"');
   118  } {{"bar"}}
   119  do_execsql_test json104-312 {
   120    SELECT json_patch('{"e":null}','{"a":1}');
   121  } {{{"e":null,"a":1}}}
   122  do_execsql_test json104-313 {
   123    SELECT json_patch('[1,2]','{"a":"b","c":null}');
   124  } {{{"a":"b"}}}
   125  do_execsql_test json104-314 {
   126    SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}');
   127  } {{{"a":{"bb":{}}}}}
   128  
   129  #-------------------------------------------------------------------------
   130  
   131  do_execsql_test 401 {
   132    CREATE TABLE obj(x);
   133    INSERT INTO obj VALUES('{"a":1,"b":2}');
   134    SELECT * FROM obj;
   135  } {{{"a":1,"b":2}}}
   136  do_execsql_test 402 {
   137    UPDATE obj SET x = json_insert(x, '$.c', 3);
   138    SELECT * FROM obj;
   139  } {{{"a":1,"b":2,"c":3}}}
   140  do_execsql_test 403 {
   141    SELECT json_extract(x, '$.b') FROM obj;
   142    SELECT json_extract(x, '$."b"') FROM obj;
   143  } {2 2}
   144  do_execsql_test 404 {
   145    UPDATE obj SET x = json_set(x, '$."b"', 555);
   146    SELECT json_extract(x, '$.b') FROM obj;
   147    SELECT json_extract(x, '$."b"') FROM obj;
   148  } {555 555}
   149  do_execsql_test 405 {
   150    UPDATE obj SET x = json_set(x, '$."d"', 4);
   151    SELECT json_extract(x, '$."d"') FROM obj;
   152  } {4}
   153  
   154  
   155  finish_test