Snapshot of upstream SQLite 3.37.2
[sqlcipher.git] / ext / session / session6.test
blob22fa93cb3575d523cd499eb726019dccb8e1599f
1 # 2011 July 11
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
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.
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 ifcapable !incrblob {finish_test; return}
24 set testprefix session6
26 proc do_then_apply_tcl {tcl {dbname main}} {
27   proc xConflict args { return "OMIT" }
28   set rc [catch {
29     sqlite3session S db $dbname
30     db eval "SELECT name FROM $dbname.sqlite_master WHERE type = 'table'" {
31       S attach $name
32     }
33     eval $tcl
34     sqlite3changeset_apply db2 [S changeset] xConflict
35   } msg]
37   catch { S delete }
38   if {$rc} {error $msg}
41 test_sqlite3_log x
42 proc x {args} {puts $args}
44 forcedelete test.db2
45 sqlite3 db2 test.db2
47 do_common_sql {
48   CREATE TABLE t1(a PRIMARY KEY, b);
49   CREATE TABLE t2(c PRIMARY KEY, d);
52 # Test a blob update.
54 do_test 1.1 {
55   do_then_apply_tcl {
56     db eval { INSERT INTO t1 VALUES(1, 'helloworld') }
57     db eval { INSERT INTO t2 VALUES(2, 'onetwothree') }
58   }
59   compare_db db db2
60 } {}
61 do_test 1.2 {
62   do_then_apply_tcl {
63     set fd [db incrblob t1 b 1]
64     puts -nonewline $fd 1234567890
65     close $fd
66   }
67   compare_db db db2
68 } {}
70 # Test an attached database.
72 do_test 2.1 {
73   forcedelete test.db3
74   file copy test.db2 test.db3
75   execsql { ATTACH 'test.db3' AS aux; }
77   do_then_apply_tcl {
78     set fd [db incrblob aux t2 d 1]
79     puts -nonewline $fd fourfivesix
80     close $fd
81   } aux
83   sqlite3 db3 test.db3
84   compare_db db2 db3
85 } {}
88 db3 close
89 db2 close
91 finish_test