add PRAGMA cipher_memory_security to control settings; lock/unlock memory in manager
[sqlcipher.git] / test / attach4.test
blob77dd7e41154f4a0523ddd110fb50b26b4a8c65b9
1 # 200 July 1
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 library.  The
12 # focus of this script is attaching many database files to a single
13 # connection.
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
19 set testprefix attach4
21 ifcapable !attach {
22   finish_test
23   return
26 puts "Testing with SQLITE_MAX_ATTACHED=$SQLITE_MAX_ATTACHED"
28 set files {main test.db}
29 for {set ii 0} {$ii < $SQLITE_MAX_ATTACHED} {incr ii} {
30   lappend files aux$ii "test.db$ii"
33 do_test 1.1 {
34   sqlite3_limit db SQLITE_LIMIT_ATTACHED -1
35 } $SQLITE_MAX_ATTACHED
37 do_test 1.2.1 {
38   db close
39   foreach {name f} $files { forcedelete $f }
40   sqlite3 db test.db
41   
42   foreach {name f} $files {
43     if {$name == "main"} continue
44     execsql "ATTACH '$f' AS $name"
45   }
47   db eval {PRAGMA database_list} {
48     lappend L $name [file tail $file]
49   }
50   set L
51 } $files
53 do_catchsql_test 1.2.2 {
54   ATTACH 'x.db' AS next;
55 } [list 1 "too many attached databases - max $SQLITE_MAX_ATTACHED"]
57 do_test 1.3 {
58   execsql BEGIN;
59   foreach {name f} $files {
60     execsql "CREATE TABLE $name.tbl(x)"
61     execsql "INSERT INTO $name.tbl VALUES('$f')"
62   }
63   execsql COMMIT;
64 } {}
66 do_test 1.4 {
67   set L [list]
68   foreach {name f} $files {
69     lappend L $name [execsql "SELECT x FROM $name.tbl"]
70   }
71   set L
72 } $files
74 set L [list]
75 set S ""
76 foreach {name f} $files {
77   if {[permutation] == "journaltest"} {
78     set mode delete
79   } else {
80     set mode wal
81   }
82   ifcapable !wal { set mode delete }
83   lappend L $mode
84   append S "
85     PRAGMA $name.journal_mode = WAL;
86     UPDATE $name.tbl SET x = '$name';
87   "
89 do_execsql_test 1.5 $S $L
91 do_test 1.6 {
92   set L [list]
93   foreach {name f} $files {
94     lappend L [execsql "SELECT x FROM $name.tbl"] $f
95   }
96   set L
97 } $files
99 do_test 1.7 {
100   execsql BEGIN;
101   foreach {name f} $files {
102     execsql "UPDATE $name.tbl SET x = '$f'"
103   }
104   execsql COMMIT;
105 } {}
107 do_test 1.8 {
108   set L [list]
109   foreach {name f} $files {
110     lappend L $name [execsql "SELECT x FROM $name.tbl"]
111   }
112   set L
113 } $files
115 db close
116 foreach {name f} $files { forcedelete $f }
118 finish_test