| # 2015-07-31 |
| # |
| # 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. |
| # |
| #*********************************************************************** |
| # |
| # Tests for the [sqldiff --changeset] command. |
| # |
| # |
| if {![info exists testdir]} { |
| set testdir [file join [file dirname [info script]] .. .. test] |
| } |
| source $testdir/tester.tcl |
| ifcapable !session {finish_test; return} |
| set testprefix sessiondiff |
| |
| set PROG [test_find_sqldiff] |
| db close |
| |
| proc sqlesc {id} { |
| set ret "'[string map {' ''} $id]'" |
| set ret |
| } |
| |
| proc database_cksum {db1} { |
| set txt "" |
| |
| sqlite3 dbtmp $db1 |
| foreach tbl [dbtmp eval {SELECT name FROM sqlite_master WHERE type='table'}] { |
| set cols [list] |
| dbtmp eval "PRAGMA table_info = [sqlesc $tbl]" { |
| lappend cols "quote( $name )" |
| } |
| append txt [dbtmp eval \ |
| "SELECT [join $cols {||'.'||}] FROM [sqlesc $tbl] ORDER BY 1" |
| ] |
| } |
| dbtmp close |
| |
| md5 $txt |
| } |
| |
| proc readfile {filename} { |
| set fd [open $filename] |
| fconfigure $fd -translation binary -encoding binary |
| set data [read $fd] |
| close $fd |
| set data |
| } |
| |
| proc get_changeset {db1 db2} { |
| exec $::PROG --changeset changeset.bin $db1 $db2 |
| set bin [readfile changeset.bin] |
| return $bin |
| } |
| |
| proc xConflict {args} { |
| return "" |
| } |
| |
| proc do_changeset_test {tn sql1 sql2} { |
| forcedelete test.db123 test.db124 |
| |
| sqlite3 db test.db123 |
| db eval $sql1 |
| db close |
| |
| sqlite3 db test.db124 |
| db eval $sql2 |
| |
| set cs [get_changeset test.db124 test.db123] |
| sqlite3changeset_apply db $cs xConflict |
| db close |
| |
| set database_cksum1 [database_cksum test.db123] |
| set database_cksum2 [database_cksum test.db124] |
| |
| uplevel [list \ |
| do_test $tn [list string compare $database_cksum1 $database_cksum2] 0 |
| ] |
| } |
| |
| do_changeset_test 1.0 { |
| CREATE TABLE t1(x PRIMARY KEY); |
| } { |
| CREATE TABLE t1(x PRIMARY KEY); |
| } |
| |
| do_changeset_test 1.1 { |
| CREATE TABLE t1(x PRIMARY KEY); |
| CREATE TABLE t2(x PRIMARY KEY, y); |
| INSERT INTO t2 VALUES(1, 2); |
| } { |
| CREATE TABLE t1(x PRIMARY KEY); |
| CREATE TABLE t2(x PRIMARY KEY, y); |
| INSERT INTO t2 VALUES(3, 4); |
| } |
| |
| do_changeset_test 1.2 { |
| CREATE TABLE t2(a, b, c, PRIMARY KEY(b, c)); |
| INSERT INTO t2 VALUES(1, 2, 3); |
| INSERT INTO t2 VALUES(4, 5, 6); |
| } { |
| CREATE TABLE t2(a, b, c, PRIMARY KEY(b, c)); |
| INSERT INTO t2 VALUES(1, 2, 11); |
| INSERT INTO t2 VALUES(7, 8, 9); |
| } |
| |
| finish_test |