Enhance the command-line completion extension to return the names of
[sqlite.git] / ext / session / session6.test
blob8a1f172cde6d8be02900a27a97e6472b42ad17fe
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}
23 set testprefix session6
25 proc do_then_apply_tcl {tcl {dbname main}} {
26   proc xConflict args { return "OMIT" }
27   set rc [catch {
28     sqlite3session S db $dbname
29     db eval "SELECT name FROM $dbname.sqlite_master WHERE type = 'table'" {
30       S attach $name
31     }
32     eval $tcl
33     sqlite3changeset_apply db2 [S changeset] xConflict
34   } msg]
36   catch { S delete }
37   if {$rc} {error $msg}
40 test_sqlite3_log x
41 proc x {args} {puts $args}
43 forcedelete test.db2
44 sqlite3 db2 test.db2
46 do_common_sql {
47   CREATE TABLE t1(a PRIMARY KEY, b);
48   CREATE TABLE t2(c PRIMARY KEY, d);
51 # Test a blob update.
53 do_test 1.1 {
54   do_then_apply_tcl {
55     db eval { INSERT INTO t1 VALUES(1, 'helloworld') }
56     db eval { INSERT INTO t2 VALUES(2, 'onetwothree') }
57   }
58   compare_db db db2
59 } {}
60 do_test 1.2 {
61   do_then_apply_tcl {
62     set fd [db incrblob t1 b 1]
63     puts -nonewline $fd 1234567890
64     close $fd
65   }
66   compare_db db db2
67 } {}
69 # Test an attached database.
71 do_test 2.1 {
72   forcedelete test.db3
73   file copy test.db2 test.db3
74   execsql { ATTACH 'test.db3' AS aux; }
76   do_then_apply_tcl {
77     set fd [db incrblob aux t2 d 1]
78     puts -nonewline $fd fourfivesix
79     close $fd
80   } aux
82   sqlite3 db3 test.db3
83   compare_db db2 db3
84 } {}
87 db3 close
88 db2 close
90 finish_test