Reformulate [34439fe3aeea7cbb] slightly to resolve a false-positive OOM reported...
[sqlite.git] / test / delete_db.test
blob6edd9c242e01d5502d16200eba95b1a59a52dd3b
1 # 2016 September 10
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 file is testing the code in test_delete.c (the
13 # sqlite3_delete_database() API).
16 set testdir [file dirname $argv0]
17 source $testdir/tester.tcl
18 set testprefix delete_db
20 if {[atomic_batch_write test.db]} {
21   finish_test
22   return
25 proc delete_all {} {
26   foreach f [glob -nocomplain test2*] { file delete $f }
27   foreach f [glob -nocomplain test3*] { file delete $f }
30 proc copydb {} {
31   foreach f [glob -nocomplain test3*] { file delete $f }
32   foreach f [glob -nocomplain test2*] { 
33     set p [string range $f 5 end]
34     file copy "test2$p" "test3$p"
35   }
38 proc files {} {
39   lsort [glob -nocomplain test3*]
42 db close
43 delete_all
44 sqlite3 db test2.database
46 #-------------------------------------------------------------------------
48 # 1.1: Journal files.
49 # 1.2: Wal files.
50 # 1.3: Multiplexor with journal file.
51 # 1.4: Multiplexor with wal file.
53 # 2.* are a copy of 1.* with the multiplexor enabled.
55 # 3.* tests errors.
58 do_test 1.1.0 {
59   execsql {
60     CREATE TABLE t1(x, y);
61     BEGIN;
62       INSERT INTO t1 VALUES(1, 2);
63   }
64   copydb
65   files
66 } {test3.database test3.database-journal}
68 do_test 1.1.1 {
69   sqlite3_delete_database test3.database
70   files
71 } {}
73 do_test 1.2.0 {
74   execsql {
75     COMMIT;
76     PRAGMA journal_mode = wal;
77     INSERT INTO t1 VALUES(3, 4);
78   }
79   copydb
80   files
81 } {test3.database test3.database-shm test3.database-wal}
82 do_test 1.2.1 {
83   sqlite3_delete_database test3.database
84   files
85 } {}
87 db close
88 delete_all
89 sqlite3_multiplex_initialize "" 0
90 sqlite3 db test2.database -vfs multiplex
91 sqlite3_multiplex_control db "main" chunk_size 32768
93 do_test 1.3.0 {
94   execsql { PRAGMA auto_vacuum = 0; }
95   execsql {
96     CREATE TABLE x1(a, b);
97     WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 )
98     INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s;
99     BEGIN;
100       UPDATE x1 SET a=randomblob(101)
101   }
102   copydb
103   files
104 } [list {*}{
105   test3.database test3.database-journal test3.database001 
106   test3.database002 test3.database003
108 do_test 1.3.1 {
109   sqlite3_delete_database test3.database
110   files
111 } {}
114 do_test 1.4.0 {
115   execsql {
116     COMMIT;
117     PRAGMA journal_mode = wal;
118     UPDATE x1 SET a=randomblob(102)
119   }
120   copydb
121   files
122 } [list {*}{
123   test3.database test3.database-shm test3.database-wal test3.database001 
124   test3.database002 test3.database003
126 do_test 1.4.1 {
127   sqlite3_delete_database test3.database
128   files
129 } {}
132 ifcapable 8_3_names {
133   db close
134   delete_all
135   sqlite3 db file:test2.db?8_3_names=1 -uri 1
137   do_test 2.1.0 {
138     execsql {
139       CREATE TABLE t1(x, y);
140       BEGIN;
141         INSERT INTO t1 VALUES(1, 2);
142     }
143     copydb
144     files
145   } {test3.db test3.nal}
146   
147   do_test 2.1.1 {
148     sqlite3_delete_database test3.db
149     files
150   } {}
151   
152   do_test 2.2.0 {
153     execsql {
154       COMMIT;
155       PRAGMA journal_mode = wal;
156       INSERT INTO t1 VALUES(3, 4);
157     }
158     copydb
159     files
160   } {test3.db test3.shm test3.wal}
161   do_test 2.2.1 {
162     sqlite3_delete_database test3.db
163     files
164   } {}
167   db close
168   delete_all
169   sqlite3_multiplex_initialize "" 0
170   sqlite3 db file:test2.db?8_3_names=1 -uri 1 -vfs multiplex
171   sqlite3_multiplex_control db "main" chunk_size 32768
172   
173   do_test 2.3.0 {
174     execsql { PRAGMA auto_vacuum = 0; }
175     execsql {
176       CREATE TABLE x1(a, b);
177       WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 )
178       INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s;
179       BEGIN;
180         UPDATE x1 SET a=randomblob(101)
181     }
182     copydb
183     files
184   } [list {*}{
185     test3.001 test3.002 test3.003 test3.db test3.nal 
186   }]
187   do_test 2.3.1 {
188     sqlite3_delete_database test3.db
189     files
190   } {}
191   
192   
193   do_test 2.4.0 {
194     execsql {
195       COMMIT;
196       PRAGMA journal_mode = wal;
197       UPDATE x1 SET a=randomblob(102)
198     }
199     copydb
200     files
201   } [list {*}{
202     test3.001 test3.002 test3.003 test3.db test3.db-shm test3.wal 
203   }]
204   do_test 2.4.1 {
205     sqlite3_delete_database test3.db
206     files
207   } {}
210 db close
211 delete_all
212 sqlite3_multiplex_shutdown 
214 do_test 3.0 {
215   file mkdir dir2.db
216   sqlite3_delete_database dir2.db
217 } {SQLITE_ERROR}
218 do_test 3.1 {
219   sqlite3_delete_database dir2.db/test.db
220 } {SQLITE_OK}
222 finish_test