modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/session/session6.test (about) 1 # 2011 July 11 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 regression tests for SQLite sessions extension. 12 # Specifically, it tests that sessions work when the database is modified 13 # using incremental blob handles. 14 # 15 16 if {![info exists testdir]} { 17 set testdir [file join [file dirname [info script]] .. .. test] 18 } 19 source [file join [file dirname [info script]] session_common.tcl] 20 source $testdir/tester.tcl 21 ifcapable !session {finish_test; return} 22 23 set testprefix session6 24 25 proc do_then_apply_tcl {tcl {dbname main}} { 26 proc xConflict args { return "OMIT" } 27 set rc [catch { 28 sqlite3session S db $dbname 29 db eval "SELECT name FROM $dbname.sqlite_master WHERE type = 'table'" { 30 S attach $name 31 } 32 eval $tcl 33 sqlite3changeset_apply db2 [S changeset] xConflict 34 } msg] 35 36 catch { S delete } 37 if {$rc} {error $msg} 38 } 39 40 test_sqlite3_log x 41 proc x {args} {puts $args} 42 43 forcedelete test.db2 44 sqlite3 db2 test.db2 45 46 do_common_sql { 47 CREATE TABLE t1(a PRIMARY KEY, b); 48 CREATE TABLE t2(c PRIMARY KEY, d); 49 } 50 51 # Test a blob update. 52 # 53 do_test 1.1 { 54 do_then_apply_tcl { 55 db eval { INSERT INTO t1 VALUES(1, 'helloworld') } 56 db eval { INSERT INTO t2 VALUES(2, 'onetwothree') } 57 } 58 compare_db db db2 59 } {} 60 do_test 1.2 { 61 do_then_apply_tcl { 62 set fd [db incrblob t1 b 1] 63 puts -nonewline $fd 1234567890 64 close $fd 65 } 66 compare_db db db2 67 } {} 68 69 # Test an attached database. 70 # 71 do_test 2.1 { 72 forcedelete test.db3 73 file copy test.db2 test.db3 74 execsql { ATTACH 'test.db3' AS aux; } 75 76 do_then_apply_tcl { 77 set fd [db incrblob aux t2 d 1] 78 puts -nonewline $fd fourfivesix 79 close $fd 80 } aux 81 82 sqlite3 db3 test.db3 83 compare_db db2 db3 84 } {} 85 86 87 db3 close 88 db2 close 89 90 finish_test