mirror of
				https://github.com/glebarez/go-sqlite.git
				synced 2025-10-31 11:06:26 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			159 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 2017-03-22
 | |
| #
 | |
| # The author disclaims copyright to this source code.  In place of
 | |
| # a legal notice, here is a blessing:
 | |
| #
 | |
| #    May you do good and not evil.
 | |
| #    May you find forgiveness for yourself and forgive others.
 | |
| #    May you share freely, never taking more than you give.
 | |
| #
 | |
| #***********************************************************************
 | |
| # This file implements tests for json_patch(A,B) SQL function.
 | |
| #
 | |
| 
 | |
| set testdir [file dirname $argv0]
 | |
| source $testdir/tester.tcl
 | |
| set testprefix json104
 | |
| 
 | |
| ifcapable !json1 {
 | |
|   finish_test
 | |
|   return
 | |
| }
 | |
| 
 | |
| # This is the example from pages 2 and 3 of RFC-7396
 | |
| do_execsql_test json104-100 {
 | |
|   SELECT json_patch('{
 | |
|        "a": "b",
 | |
|        "c": {
 | |
|          "d": "e",
 | |
|          "f": "g"
 | |
|        }
 | |
|      }','{
 | |
|        "a":"z",
 | |
|        "c": {
 | |
|          "f": null
 | |
|        }
 | |
|      }');
 | |
| } {{{"a":"z","c":{"d":"e"}}}}
 | |
| 
 | |
| 
 | |
| # This is the example from pages 4 and 5 of RFC-7396 
 | |
| do_execsql_test json104-110 {
 | |
|   SELECT json_patch('{
 | |
|        "title": "Goodbye!",
 | |
|        "author" : {
 | |
|          "givenName" : "John",
 | |
|          "familyName" : "Doe"
 | |
|        },
 | |
|        "tags":[ "example", "sample" ],
 | |
|        "content": "This will be unchanged"
 | |
|      }','{
 | |
|        "title": "Hello!",
 | |
|        "phoneNumber": "+01-123-456-7890",
 | |
|        "author": {
 | |
|          "familyName": null
 | |
|        },
 | |
|        "tags": [ "example" ]
 | |
|      }');
 | |
| } {{{"title":"Hello!","author":{"givenName":"John"},"tags":["example"],"content":"This will be unchanged","phoneNumber":"+01-123-456-7890"}}}
 | |
| 
 | |
| do_execsql_test json104-200 {
 | |
|   SELECT json_patch('[1,2,3]','{"x":null}');
 | |
| } {{{}}}
 | |
| do_execsql_test json104-210 {
 | |
|   SELECT json_patch('[1,2,3]','{"x":null,"y":1,"z":null}');
 | |
| } {{{"y":1}}}
 | |
| do_execsql_test json104-220 {
 | |
|   SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}');
 | |
| } {{{"a":{"bb":{}}}}}
 | |
| do_execsql_test json104-221 {
 | |
|   SELECT json_patch('{}','{"a":{"bb":{"ccc":[1,null,3]}}}');
 | |
| } {{{"a":{"bb":{"ccc":[1,null,3]}}}}}
 | |
| do_execsql_test json104-222 {
 | |
|   SELECT json_patch('{}','{"a":{"bb":{"ccc":[1,{"dddd":null},3]}}}');
 | |
| } {{{"a":{"bb":{"ccc":[1,{"dddd":null},3]}}}}}
 | |
| 
 | |
| # Example test cases at the end of the RFC-7396 document
 | |
| do_execsql_test json104-300 {
 | |
|   SELECT json_patch('{"a":"b"}','{"a":"c"}');
 | |
| } {{{"a":"c"}}}
 | |
| do_execsql_test json104-300a {
 | |
|   SELECT coalesce(json_patch(null,'{"a":"c"}'), 'real-null');
 | |
| } {{real-null}}
 | |
| do_execsql_test json104-301 {
 | |
|   SELECT json_patch('{"a":"b"}','{"b":"c"}');
 | |
| } {{{"a":"b","b":"c"}}}
 | |
| do_execsql_test json104-302 {
 | |
|   SELECT json_patch('{"a":"b"}','{"a":null}');
 | |
| } {{{}}}
 | |
| do_execsql_test json104-303 {
 | |
|   SELECT json_patch('{"a":"b","b":"c"}','{"a":null}');
 | |
| } {{{"b":"c"}}}
 | |
| do_execsql_test json104-304 {
 | |
|   SELECT json_patch('{"a":["b"]}','{"a":"c"}');
 | |
| } {{{"a":"c"}}}
 | |
| do_execsql_test json104-305 {
 | |
|   SELECT json_patch('{"a":"c"}','{"a":["b"]}');
 | |
| } {{{"a":["b"]}}}
 | |
| do_execsql_test json104-306 {
 | |
|   SELECT json_patch('{"a":{"b":"c"}}','{"a":{"b":"d","c":null}}');
 | |
| } {{{"a":{"b":"d"}}}}
 | |
| do_execsql_test json104-307 {
 | |
|   SELECT json_patch('{"a":[{"b":"c"}]}','{"a":[1]}');
 | |
| } {{{"a":[1]}}}
 | |
| do_execsql_test json104-308 {
 | |
|   SELECT json_patch('["a","b"]','["c","d"]');
 | |
| } {{["c","d"]}}
 | |
| do_execsql_test json104-309 {
 | |
|   SELECT json_patch('{"a":"b"}','["c"]');
 | |
| } {{["c"]}}
 | |
| do_execsql_test json104-310 {
 | |
|   SELECT json_patch('{"a":"foo"}','null');
 | |
| } {{null}}
 | |
| do_execsql_test json104-310a {
 | |
|   SELECT coalesce(json_patch('{"a":"foo"}',null), 'real-null');
 | |
| } {{real-null}}
 | |
| do_execsql_test json104-311 {
 | |
|   SELECT json_patch('{"a":"foo"}','"bar"');
 | |
| } {{"bar"}}
 | |
| do_execsql_test json104-312 {
 | |
|   SELECT json_patch('{"e":null}','{"a":1}');
 | |
| } {{{"e":null,"a":1}}}
 | |
| do_execsql_test json104-313 {
 | |
|   SELECT json_patch('[1,2]','{"a":"b","c":null}');
 | |
| } {{{"a":"b"}}}
 | |
| do_execsql_test json104-314 {
 | |
|   SELECT json_patch('{}','{"a":{"bb":{"ccc":null}}}');
 | |
| } {{{"a":{"bb":{}}}}}
 | |
| do_execsql_test json104-320 {
 | |
|   SELECT json_patch('{"x":{"one":1}}','{"x":{"two":2},"x":"three"}');
 | |
| } {{{"x":"three"}}}
 | |
| 
 | |
| #-------------------------------------------------------------------------
 | |
| 
 | |
| do_execsql_test 401 {
 | |
|   CREATE TABLE obj(x);
 | |
|   INSERT INTO obj VALUES('{"a":1,"b":2}');
 | |
|   SELECT * FROM obj;
 | |
| } {{{"a":1,"b":2}}}
 | |
| do_execsql_test 402 {
 | |
|   UPDATE obj SET x = json_insert(x, '$.c', 3);
 | |
|   SELECT * FROM obj;
 | |
| } {{{"a":1,"b":2,"c":3}}}
 | |
| do_execsql_test 403 {
 | |
|   SELECT json_extract(x, '$.b') FROM obj;
 | |
|   SELECT json_extract(x, '$."b"') FROM obj;
 | |
| } {2 2}
 | |
| do_execsql_test 404 {
 | |
|   UPDATE obj SET x = json_set(x, '$."b"', 555);
 | |
|   SELECT json_extract(x, '$.b') FROM obj;
 | |
|   SELECT json_extract(x, '$."b"') FROM obj;
 | |
| } {555 555}
 | |
| do_execsql_test 405 {
 | |
|   UPDATE obj SET x = json_set(x, '$."d"', 4);
 | |
|   SELECT json_extract(x, '$."d"') FROM obj;
 | |
| } {4}
 | |
| 
 | |
| 
 | |
| finish_test
 | 
