blob: 77dd7e41154f4a0523ddd110fb50b26b4a8c65b9 [file] [log] [blame]
dan56089732011-04-06 12:37:09 +00001# 200 July 1
2#
3# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
5#
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.
9#
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.
14#
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18
19set testprefix attach4
20
21ifcapable !attach {
22 finish_test
23 return
24}
25
26puts "Testing with SQLITE_MAX_ATTACHED=$SQLITE_MAX_ATTACHED"
27
28set files {main test.db}
29for {set ii 0} {$ii < $SQLITE_MAX_ATTACHED} {incr ii} {
30 lappend files aux$ii "test.db$ii"
31}
32
33do_test 1.1 {
34 sqlite3_limit db SQLITE_LIMIT_ATTACHED -1
35} $SQLITE_MAX_ATTACHED
36
37do_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 }
46
47 db eval {PRAGMA database_list} {
48 lappend L $name [file tail $file]
49 }
50 set L
51} $files
52
53do_catchsql_test 1.2.2 {
54 ATTACH 'x.db' AS next;
55} [list 1 "too many attached databases - max $SQLITE_MAX_ATTACHED"]
56
57do_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} {}
65
66do_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
73
74set L [list]
75set S ""
76foreach {name f} $files {
danb73da5b2011-04-07 05:17:32 +000077 if {[permutation] == "journaltest"} {
dan52091322011-09-24 05:55:36 +000078 set mode delete
danb73da5b2011-04-07 05:17:32 +000079 } else {
dan52091322011-09-24 05:55:36 +000080 set mode wal
danb73da5b2011-04-07 05:17:32 +000081 }
dan52091322011-09-24 05:55:36 +000082 ifcapable !wal { set mode delete }
83 lappend L $mode
dan56089732011-04-06 12:37:09 +000084 append S "
85 PRAGMA $name.journal_mode = WAL;
86 UPDATE $name.tbl SET x = '$name';
87 "
88}
89do_execsql_test 1.5 $S $L
90
91do_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
98
99do_test 1.7 {
100 execsql BEGIN;
101 foreach {name f} $files {
102 execsql "UPDATE $name.tbl SET x = '$f'"
103 }
104 execsql COMMIT;
105} {}
106
107do_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
114
115db close
116foreach {name f} $files { forcedelete $f }
117
118finish_test