| # 2011 July 11 |
| # |
| # 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 sessions extension. |
| # Specifically, it tests that sessions work when the database is modified |
| # using incremental blob handles. |
| # |
| |
| 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} |
| ifcapable !incrblob {finish_test; return} |
| |
| set testprefix session6 |
| |
| proc do_then_apply_tcl {tcl {dbname main}} { |
| proc xConflict args { return "OMIT" } |
| set rc [catch { |
| sqlite3session S db $dbname |
| db eval "SELECT name FROM $dbname.sqlite_master WHERE type = 'table'" { |
| S attach $name |
| } |
| eval $tcl |
| sqlite3changeset_apply db2 [S changeset] xConflict |
| } msg] |
| |
| catch { S delete } |
| if {$rc} {error $msg} |
| } |
| |
| test_sqlite3_log x |
| proc x {args} {puts $args} |
| |
| forcedelete test.db2 |
| sqlite3 db2 test.db2 |
| |
| do_common_sql { |
| CREATE TABLE t1(a PRIMARY KEY, b); |
| CREATE TABLE t2(c PRIMARY KEY, d); |
| } |
| |
| # Test a blob update. |
| # |
| do_test 1.1 { |
| do_then_apply_tcl { |
| db eval { INSERT INTO t1 VALUES(1, 'helloworld') } |
| db eval { INSERT INTO t2 VALUES(2, 'onetwothree') } |
| } |
| compare_db db db2 |
| } {} |
| do_test 1.2 { |
| do_then_apply_tcl { |
| set fd [db incrblob t1 b 1] |
| puts -nonewline $fd 1234567890 |
| close $fd |
| } |
| compare_db db db2 |
| } {} |
| |
| # Test an attached database. |
| # |
| do_test 2.1 { |
| forcedelete test.db3 |
| file copy test.db2 test.db3 |
| execsql { ATTACH 'test.db3' AS aux; } |
| |
| do_then_apply_tcl { |
| set fd [db incrblob aux t2 d 1] |
| puts -nonewline $fd fourfivesix |
| close $fd |
| } aux |
| |
| sqlite3 db3 test.db3 |
| compare_db db2 db3 |
| } {} |
| |
| |
| db3 close |
| db2 close |
| |
| finish_test |