# 2011 March 07 # # 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 regression tests for SQLite library. # if {![info exists testdir]} { set testdir [file join [file dirname [info script]] .. .. test] } source [file join [file dirname [info script]] session_common.tcl] source $testdir/tester.tcl ifcapable !session {finish_test; return} set testprefix sessionconflict db close sqlite3_shutdown test_sqlite3_log log proc log {code msg} { puts "LOG $code $msg" } sqlite3 db test.db forcedelete test.db2 sqlite3 db2 test.db2 do_test 1.0 { do_common_sql { CREATE TABLE t1(a PRIMARY KEY, b, c UNIQUE); INSERT INTO t1 VALUES(1, 1, 1); INSERT INTO t1 VALUES(2, 2, 2); INSERT INTO t1 VALUES(3, 3, 3); } } {} do_execsql_test -db db2 1.1 { INSERT INTO t1 VALUES(6, 6, 6); } proc xConflict {args} { return "ABORT" } do_test 1.2 { set chng [changeset_from_sql { UPDATE t1 SET b=10, c=10 WHERE a=1; UPDATE t1 SET b=444 WHERE a=2; INSERT INTO t1 VALUES(4, 4, 4); INSERT INTO t1 VALUES(5, 5, 5); INSERT INTO t1 VALUES(6, 6, 6); }] execsql BEGIN db2 set res [list [catch { sqlite3changeset_apply db2 $chng xConflict } msg] $msg] execsql ROLLBACK db2 set res } {1 SQLITE_ABORT} do_execsql_test -db db2 1.3 { SELECT * FROM t1; } { 1 1 1 2 2 2 3 3 3 6 6 6 } finish_test