modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/session/sessiondiff.test (about) 1 # 2015-07-31 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 # 12 # Tests for the [sqldiff --changeset] command. 13 # 14 # 15 if {![info exists testdir]} { 16 set testdir [file join [file dirname [info script]] .. .. test] 17 } 18 source $testdir/tester.tcl 19 ifcapable !session {finish_test; return} 20 set testprefix sessiondiff 21 22 set PROG [test_find_sqldiff] 23 db close 24 25 proc sqlesc {id} { 26 set ret "'[string map {' ''} $id]'" 27 set ret 28 } 29 30 proc database_cksum {db1} { 31 set txt "" 32 33 sqlite3 dbtmp $db1 34 foreach tbl [dbtmp eval {SELECT name FROM sqlite_master WHERE type='table'}] { 35 set cols [list] 36 dbtmp eval "PRAGMA table_info = [sqlesc $tbl]" { 37 lappend cols "quote( $name )" 38 } 39 append txt [dbtmp eval \ 40 "SELECT [join $cols {||'.'||}] FROM [sqlesc $tbl] ORDER BY 1" 41 ] 42 } 43 dbtmp close 44 45 md5 $txt 46 } 47 48 proc readfile {filename} { 49 set fd [open $filename] 50 fconfigure $fd -translation binary -encoding binary 51 set data [read $fd] 52 close $fd 53 set data 54 } 55 56 proc get_changeset {db1 db2} { 57 exec $::PROG --changeset changeset.bin $db1 $db2 58 set bin [readfile changeset.bin] 59 return $bin 60 } 61 62 proc xConflict {args} { 63 return "" 64 } 65 66 proc do_changeset_test {tn sql1 sql2} { 67 forcedelete test.db123 test.db124 68 69 sqlite3 db test.db123 70 db eval $sql1 71 db close 72 73 sqlite3 db test.db124 74 db eval $sql2 75 76 set cs [get_changeset test.db124 test.db123] 77 sqlite3changeset_apply db $cs xConflict 78 db close 79 80 set database_cksum1 [database_cksum test.db123] 81 set database_cksum2 [database_cksum test.db124] 82 83 uplevel [list \ 84 do_test $tn [list string compare $database_cksum1 $database_cksum2] 0 85 ] 86 } 87 88 do_changeset_test 1.0 { 89 CREATE TABLE t1(x PRIMARY KEY); 90 } { 91 CREATE TABLE t1(x PRIMARY KEY); 92 } 93 94 do_changeset_test 1.1 { 95 CREATE TABLE t1(x PRIMARY KEY); 96 CREATE TABLE t2(x PRIMARY KEY, y); 97 INSERT INTO t2 VALUES(1, 2); 98 } { 99 CREATE TABLE t1(x PRIMARY KEY); 100 CREATE TABLE t2(x PRIMARY KEY, y); 101 INSERT INTO t2 VALUES(3, 4); 102 } 103 104 do_changeset_test 1.2 { 105 CREATE TABLE t2(a, b, c, PRIMARY KEY(b, c)); 106 INSERT INTO t2 VALUES(1, 2, 3); 107 INSERT INTO t2 VALUES(4, 5, 6); 108 } { 109 CREATE TABLE t2(a, b, c, PRIMARY KEY(b, c)); 110 INSERT INTO t2 VALUES(1, 2, 11); 111 INSERT INTO t2 VALUES(7, 8, 9); 112 } 113 114 finish_test