8354 sync regcomp(3C) with upstream (fix make catalog)
[unleashed/tickless.git] / usr / src / lib / libsqlite / test / attach2.test
blob2ed427205af0740624ccb557e17b50f36f784fc9
2 #pragma ident   "%Z%%M% %I%     %E% SMI"
4 # 2003 July 1
6 # The author disclaims copyright to this source code.  In place of
7 # a legal notice, here is a blessing:
9 #    May you do good and not evil.
10 #    May you find forgiveness for yourself and forgive others.
11 #    May you share freely, never taking more than you give.
13 #***********************************************************************
14 # This file implements regression tests for SQLite library.  The
15 # focus of this script is testing the ATTACH and DETACH commands
16 # and related functionality.
18 # $Id: attach2.test,v 1.5 2004/02/12 15:31:22 drh Exp $
22 set testdir [file dirname $argv0]
23 source $testdir/tester.tcl
25 # Ticket #354
27 do_test attach2-1.1 {
28   db eval {
29     CREATE TABLE t1(a,b);
30     CREATE INDEX x1 ON t1(a);
31   }
32   file delete -force test2.db
33   file delete -force test2.db-journal
34   sqlite db2 test2.db
35   db2 eval {
36     CREATE TABLE t1(a,b);
37     CREATE INDEX x1 ON t1(a);
38   }
39   catchsql {
40     ATTACH 'test2.db' AS t2;
41   }
42 } {0 {}}
44 # Ticket #514
46 proc db_list {db} {
47   set list {}
48   foreach {idx name file} [execsql {PRAGMA database_list} $db] {
49     lappend list $idx $name
50   }
51   return $list
53 db eval {DETACH t2}
54 do_test attach2-2.1 {
55   # lock test2.db then try to attach it.  Should get an error.
56   db2 eval {BEGIN}
57   catchsql {
58     ATTACH 'test2.db' AS t2;
59   }
60 } {1 {database is locked}}
61 do_test attach2-2.2 {
62   # make sure test2.db did not get attached.
63   db_list db
64 } {0 main 1 temp}
65 do_test attach2-2.3 {
66   # unlock test2.db and try to attach again.  should work this time.
67   db2 eval {COMMIT}
68   catchsql {
69     ATTACH 'test2.db' AS t2;
70   }
71 } {0 {}}
72 do_test attach2-2.4 {
73   db_list db
74 } {0 main 1 temp 2 t2}
75 do_test attach2-2.5 {
76   catchsql {
77     SELECT name FROM t2.sqlite_master;
78   }
79 } {0 {t1 x1}}
80 do_test attach2-2.6 {
81   # lock test2.db and try to read from it.  should get an error.
82   db2 eval BEGIN
83   catchsql {
84     SELECT name FROM t2.sqlite_master;
85   }
86 } {1 {database is locked}}
87 do_test attach2-2.7 {
88   # but we can still read from test1.db even though test2.db is locked.
89   catchsql {
90     SELECT name FROM main.sqlite_master;
91   }
92 } {0 {t1 x1}}
93 do_test attach2-2.8 {
94   # start a transaction on test.db even though test2.db is locked.
95   catchsql {
96     BEGIN;
97     INSERT INTO t1 VALUES(8,9);
98   }
99 } {0 {}}
100 do_test attach2-2.9 {
101   execsql {
102     SELECT * FROM t1
103   }
104 } {8 9}
105 do_test attach2-2.10 {
106   # now try to write to test2.db.  the write should fail
107   catchsql {
108     INSERT INTO t2.t1 VALUES(1,2);
109   }
110 } {1 {database is locked}}
111 do_test attach2-2.11 {
112   # when the write failed in the previous test, the transaction should
113   # have rolled back.
114   db2 eval ROLLBACK
115   execsql {
116     SELECT * FROM t1
117   }
118 } {}
119 do_test attach2-2.12 {
120   catchsql {
121     COMMIT
122   }
123 } {1 {cannot commit - no transaction is active}}
125 # Ticket #574:  Make sure it works usingi the non-callback API
127 do_test attach2-3.1 {
128   db close
129   set DB [sqlite db test.db]
130   set rc [catch {sqlite_compile $DB "ATTACH 'test2.db' AS t2" TAIL} VM]
131   if {$rc} {lappend rc $VM}
132   sqlite_finalize $VM
133   set rc
134 } {0}
135 do_test attach2-3.2 {
136   set rc [catch {sqlite_compile $DB "DETACH t2" TAIL} VM]
137   if {$rc} {lappend rc $VM}
138   sqlite_finalize $VM
139   set rc
140 } {0}
142 db close
143 for {set i 2} {$i<=15} {incr i} {
144   catch {db$i close}
146 file delete -force test2.db
149 finish_test