gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/json105.test (about)

     1  # 2019-11-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 "[#]" extension to json-path
    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  db eval {
    20    CREATE TABLE t1(j);
    21    INSERT INTO t1(j) VALUES('{"a":1,"b":[1,[2,3],4],"c":99}');
    22  }
    23  proc json_extract_test {testnum path result} {
    24    do_execsql_test json105-1.$testnum "SELECT quote(json_extract(j,$path)) FROM t1" $result
    25  }
    26  json_extract_test 10 {'$.b[#]'}   NULL
    27  json_extract_test 20 {'$.b[#-1]'} 4
    28  json_extract_test 30 {'$.b[#-2]'} {'[2,3]'}
    29  json_extract_test 31 {'$.b[#-02]'} {'[2,3]'}
    30  json_extract_test 40 {'$.b[#-3]'} 1
    31  json_extract_test 50 {'$.b[#-4]'} NULL
    32  json_extract_test 60 {'$.b[#-2][#-1]'} 3
    33  json_extract_test 70 {'$.b[0]','$.b[#-1]'} {'[1,4]'}
    34  
    35  json_extract_test 100 {'$.a[#-1]'} NULL
    36  json_extract_test 110 {'$.b[#-000001]'} 4
    37  
    38  proc json_remove_test {testnum path result} {
    39    do_execsql_test json105-2.$testnum "SELECT quote(json_remove(j,$path)) FROM t1" $result
    40  }
    41  json_remove_test 10 {'$.b[#]'}    {'{"a":1,"b":[1,[2,3],4],"c":99}'}
    42  json_remove_test 20 {'$.b[#-0]'}  {'{"a":1,"b":[1,[2,3],4],"c":99}'}
    43  json_remove_test 30 {'$.b[#-1]'}  {'{"a":1,"b":[1,[2,3]],"c":99}'}
    44  json_remove_test 40 {'$.b[#-2]'}  {'{"a":1,"b":[1,4],"c":99}'}
    45  json_remove_test 50 {'$.b[#-3]'}  {'{"a":1,"b":[[2,3],4],"c":99}'}
    46  json_remove_test 60 {'$.b[#-4]'}  {'{"a":1,"b":[1,[2,3],4],"c":99}'}
    47  json_remove_test 70 {'$.b[#-2][#-1]'}  {'{"a":1,"b":[1,[2],4],"c":99}'}
    48  
    49  json_remove_test 100 {'$.b[0]','$.b[#-1]'} {'{"a":1,"b":[[2,3]],"c":99}'}
    50  json_remove_test 110 {'$.b[#-1]','$.b[0]'} {'{"a":1,"b":[[2,3]],"c":99}'}
    51  json_remove_test 120 {'$.b[#-1]','$.b[#-2]'} {'{"a":1,"b":[[2,3]],"c":99}'}
    52  json_remove_test 130 {'$.b[#-1]','$.b[#-1]'} {'{"a":1,"b":[1],"c":99}'}
    53  json_remove_test 140 {'$.b[#-2]','$.b[#-1]'} {'{"a":1,"b":[1],"c":99}'}
    54  
    55  proc json_insert_test {testnum x result} {
    56    do_execsql_test json105-3.$testnum "SELECT quote(json_insert(j,$x)) FROM t1" $result
    57  }
    58  json_insert_test 10 {'$.b[#]','AAA'} {'{"a":1,"b":[1,[2,3],4,"AAA"],"c":99}'}
    59  json_insert_test 20 {'$.b[1][#]','AAA'} {'{"a":1,"b":[1,[2,3,"AAA"],4],"c":99}'}
    60  json_insert_test 30 {'$.b[1][#]','AAA','$.b[#]','BBB'} \
    61       {'{"a":1,"b":[1,[2,3,"AAA"],4,"BBB"],"c":99}'}
    62  json_insert_test 40 {'$.b[#]','AAA','$.b[#]','BBB'} \
    63       {'{"a":1,"b":[1,[2,3],4,"AAA","BBB"],"c":99}'}
    64  
    65  proc json_set_test {testnum x result} {
    66    do_execsql_test json105-4.$testnum "SELECT quote(json_set(j,$x)) FROM t1" $result
    67  }
    68  json_set_test 10 {'$.b[#]','AAA'} {'{"a":1,"b":[1,[2,3],4,"AAA"],"c":99}'}
    69  json_set_test 20 {'$.b[1][#]','AAA'} {'{"a":1,"b":[1,[2,3,"AAA"],4],"c":99}'}
    70  json_set_test 30 {'$.b[1][#]','AAA','$.b[#]','BBB'} \
    71       {'{"a":1,"b":[1,[2,3,"AAA"],4,"BBB"],"c":99}'}
    72  json_set_test 40 {'$.b[#]','AAA','$.b[#]','BBB'} \
    73       {'{"a":1,"b":[1,[2,3],4,"AAA","BBB"],"c":99}'}
    74  json_set_test 50 {'$.b[#-1]','AAA'} {'{"a":1,"b":[1,[2,3],"AAA"],"c":99}'}
    75  json_set_test 60 {'$.b[1][#-1]','AAA'} {'{"a":1,"b":[1,[2,"AAA"],4],"c":99}'}
    76  json_set_test 70 {'$.b[1][#-1]','AAA','$.b[#-1]','BBB'} \
    77       {'{"a":1,"b":[1,[2,"AAA"],"BBB"],"c":99}'}
    78  json_set_test 80 {'$.b[#-1]','AAA','$.b[#-1]','BBB'} \
    79       {'{"a":1,"b":[1,[2,3],"BBB"],"c":99}'}
    80  
    81  proc json_replace_test {testnum x result} {
    82    do_execsql_test json105-5.$testnum "SELECT quote(json_replace(j,$x)) FROM t1" $result
    83  }
    84  json_replace_test 10 {'$.b[#]','AAA'} {'{"a":1,"b":[1,[2,3],4],"c":99}'}
    85  json_replace_test 20 {'$.b[1][#]','AAA'} {'{"a":1,"b":[1,[2,3],4],"c":99}'}
    86  json_replace_test 30 {'$.b[1][#]','AAA','$.b[#]','BBB'} \
    87       {'{"a":1,"b":[1,[2,3],4],"c":99}'}
    88  json_replace_test 40 {'$.b[#]','AAA','$.b[#]','BBB'} \
    89       {'{"a":1,"b":[1,[2,3],4],"c":99}'}
    90  json_replace_test 50 {'$.b[#-1]','AAA'} {'{"a":1,"b":[1,[2,3],"AAA"],"c":99}'}
    91  json_replace_test 60 {'$.b[1][#-1]','AAA'} {'{"a":1,"b":[1,[2,"AAA"],4],"c":99}'}
    92  json_replace_test 70 {'$.b[1][#-1]','AAA','$.b[#-1]','BBB'} \
    93       {'{"a":1,"b":[1,[2,"AAA"],"BBB"],"c":99}'}
    94  json_replace_test 80 {'$.b[#-1]','AAA','$.b[#-1]','BBB'} \
    95       {'{"a":1,"b":[1,[2,3],"BBB"],"c":99}'}
    96  
    97  do_catchsql_test json105-6.10 {
    98    SELECT json_extract(j, '$.b[#-]') FROM t1;
    99  } {1 {JSON path error near '[#-]'}}
   100  do_catchsql_test json105-6.20 {
   101    SELECT json_extract(j, '$.b[#9]') FROM t1;
   102  } {1 {JSON path error near '[#9]'}}
   103  do_catchsql_test json105-6.30 {
   104    SELECT json_extract(j, '$.b[#+2]') FROM t1;
   105  } {1 {JSON path error near '[#+2]'}}
   106  do_catchsql_test json105-6.40 {
   107    SELECT json_extract(j, '$.b[#-1') FROM t1;
   108  } {1 {JSON path error near '[#-1'}}
   109  do_catchsql_test json105-6.50 {
   110    SELECT json_extract(j, '$.b[#-1x]') FROM t1;
   111  } {1 {JSON path error near '[#-1x]'}}
   112  
   113  finish_test