xref: /sqlite-3.40.0/test/delete_db.test (revision 69aedc8d)
1000f95b1Sdan# 2016 September 10
2000f95b1Sdan#
3000f95b1Sdan# The author disclaims copyright to this source code.  In place of
4000f95b1Sdan# a legal notice, here is a blessing:
5000f95b1Sdan#
6000f95b1Sdan#    May you do good and not evil.
7000f95b1Sdan#    May you find forgiveness for yourself and forgive others.
8000f95b1Sdan#    May you share freely, never taking more than you give.
9000f95b1Sdan#
10000f95b1Sdan#***********************************************************************
11000f95b1Sdan# This file implements regression tests for SQLite library.  The
12b3906816Sdan# focus of this file is testing the code in test_delete.c (the
13b3906816Sdan# sqlite3_delete_database() API).
14000f95b1Sdan#
15000f95b1Sdan
16000f95b1Sdanset testdir [file dirname $argv0]
17000f95b1Sdansource $testdir/tester.tcl
18000f95b1Sdanset testprefix delete_db
19000f95b1Sdan
20*69aedc8dSdanif {[atomic_batch_write test.db]} {
21*69aedc8dSdan  finish_test
22*69aedc8dSdan  return
23*69aedc8dSdan}
24*69aedc8dSdan
25000f95b1Sdanproc delete_all {} {
26000f95b1Sdan  foreach f [glob -nocomplain test2*] { file delete $f }
27000f95b1Sdan  foreach f [glob -nocomplain test3*] { file delete $f }
28000f95b1Sdan}
29000f95b1Sdan
30000f95b1Sdanproc copydb {} {
31000f95b1Sdan  foreach f [glob -nocomplain test3*] { file delete $f }
32000f95b1Sdan  foreach f [glob -nocomplain test2*] {
33000f95b1Sdan    set p [string range $f 5 end]
34000f95b1Sdan    file copy "test2$p" "test3$p"
35000f95b1Sdan  }
36000f95b1Sdan}
37000f95b1Sdan
38000f95b1Sdanproc files {} {
39000f95b1Sdan  lsort [glob -nocomplain test3*]
40000f95b1Sdan}
41000f95b1Sdan
42000f95b1Sdandb close
43000f95b1Sdandelete_all
44000f95b1Sdansqlite3 db test2.database
45000f95b1Sdan
46000f95b1Sdan#-------------------------------------------------------------------------
47000f95b1Sdan#
48000f95b1Sdan# 1.1: Journal files.
49000f95b1Sdan# 1.2: Wal files.
50000f95b1Sdan# 1.3: Multiplexor with journal file.
51000f95b1Sdan# 1.4: Multiplexor with wal file.
52000f95b1Sdan#
53000f95b1Sdan# 2.* are a copy of 1.* with the multiplexor enabled.
54000f95b1Sdan#
55000f95b1Sdan# 3.* tests errors.
56000f95b1Sdan#
57000f95b1Sdan
58000f95b1Sdando_test 1.1.0 {
59000f95b1Sdan  execsql {
60000f95b1Sdan    CREATE TABLE t1(x, y);
61000f95b1Sdan    BEGIN;
62000f95b1Sdan      INSERT INTO t1 VALUES(1, 2);
63000f95b1Sdan  }
64000f95b1Sdan  copydb
65000f95b1Sdan  files
66000f95b1Sdan} {test3.database test3.database-journal}
67000f95b1Sdan
68000f95b1Sdando_test 1.1.1 {
69000f95b1Sdan  sqlite3_delete_database test3.database
70000f95b1Sdan  files
71000f95b1Sdan} {}
72000f95b1Sdan
73000f95b1Sdando_test 1.2.0 {
74000f95b1Sdan  execsql {
75000f95b1Sdan    COMMIT;
76000f95b1Sdan    PRAGMA journal_mode = wal;
77000f95b1Sdan    INSERT INTO t1 VALUES(3, 4);
78000f95b1Sdan  }
79000f95b1Sdan  copydb
80000f95b1Sdan  files
81000f95b1Sdan} {test3.database test3.database-shm test3.database-wal}
82000f95b1Sdando_test 1.2.1 {
83000f95b1Sdan  sqlite3_delete_database test3.database
84000f95b1Sdan  files
85000f95b1Sdan} {}
86000f95b1Sdan
87000f95b1Sdandb close
88000f95b1Sdandelete_all
89000f95b1Sdansqlite3_multiplex_initialize "" 0
90000f95b1Sdansqlite3 db test2.database -vfs multiplex
91000f95b1Sdansqlite3_multiplex_control db "main" chunk_size 32768
92000f95b1Sdan
93000f95b1Sdando_test 1.3.0 {
94b3906816Sdan  execsql { PRAGMA auto_vacuum = 0; }
95000f95b1Sdan  execsql {
96000f95b1Sdan    CREATE TABLE x1(a, b);
97000f95b1Sdan    WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 )
98000f95b1Sdan    INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s;
99000f95b1Sdan    BEGIN;
100000f95b1Sdan      UPDATE x1 SET a=randomblob(101)
101000f95b1Sdan  }
102000f95b1Sdan  copydb
103000f95b1Sdan  files
104000f95b1Sdan} [list {*}{
105000f95b1Sdan  test3.database test3.database-journal test3.database001
106000f95b1Sdan  test3.database002 test3.database003
107000f95b1Sdan}]
108000f95b1Sdando_test 1.3.1 {
109000f95b1Sdan  sqlite3_delete_database test3.database
110000f95b1Sdan  files
111000f95b1Sdan} {}
112000f95b1Sdan
113000f95b1Sdan
114000f95b1Sdando_test 1.4.0 {
115000f95b1Sdan  execsql {
116000f95b1Sdan    COMMIT;
117000f95b1Sdan    PRAGMA journal_mode = wal;
118000f95b1Sdan    UPDATE x1 SET a=randomblob(102)
119000f95b1Sdan  }
120000f95b1Sdan  copydb
121000f95b1Sdan  files
122000f95b1Sdan} [list {*}{
123000f95b1Sdan  test3.database test3.database-shm test3.database-wal test3.database001
124000f95b1Sdan  test3.database002 test3.database003
125000f95b1Sdan}]
126000f95b1Sdando_test 1.4.1 {
127000f95b1Sdan  sqlite3_delete_database test3.database
128000f95b1Sdan  files
129000f95b1Sdan} {}
130000f95b1Sdan
131000f95b1Sdan
132000f95b1Sdanifcapable 8_3_names {
133000f95b1Sdan  db close
134000f95b1Sdan  delete_all
135000f95b1Sdan  sqlite3 db file:test2.db?8_3_names=1 -uri 1
136000f95b1Sdan
137000f95b1Sdan  do_test 2.1.0 {
138000f95b1Sdan    execsql {
139000f95b1Sdan      CREATE TABLE t1(x, y);
140000f95b1Sdan      BEGIN;
141000f95b1Sdan        INSERT INTO t1 VALUES(1, 2);
142000f95b1Sdan    }
143000f95b1Sdan    copydb
144000f95b1Sdan    files
145000f95b1Sdan  } {test3.db test3.nal}
146000f95b1Sdan
147000f95b1Sdan  do_test 2.1.1 {
148000f95b1Sdan    sqlite3_delete_database test3.db
149000f95b1Sdan    files
150000f95b1Sdan  } {}
151000f95b1Sdan
152000f95b1Sdan  do_test 2.2.0 {
153000f95b1Sdan    execsql {
154000f95b1Sdan      COMMIT;
155000f95b1Sdan      PRAGMA journal_mode = wal;
156000f95b1Sdan      INSERT INTO t1 VALUES(3, 4);
157000f95b1Sdan    }
158000f95b1Sdan    copydb
159000f95b1Sdan    files
160000f95b1Sdan  } {test3.db test3.shm test3.wal}
161000f95b1Sdan  do_test 2.2.1 {
162000f95b1Sdan    sqlite3_delete_database test3.db
163000f95b1Sdan    files
164000f95b1Sdan  } {}
165000f95b1Sdan
166000f95b1Sdan
167000f95b1Sdan  db close
168000f95b1Sdan  delete_all
169000f95b1Sdan  sqlite3_multiplex_initialize "" 0
170000f95b1Sdan  sqlite3 db file:test2.db?8_3_names=1 -uri 1 -vfs multiplex
171000f95b1Sdan  sqlite3_multiplex_control db "main" chunk_size 32768
172000f95b1Sdan
173000f95b1Sdan  do_test 2.3.0 {
174b3906816Sdan    execsql { PRAGMA auto_vacuum = 0; }
175000f95b1Sdan    execsql {
176000f95b1Sdan      CREATE TABLE x1(a, b);
177000f95b1Sdan      WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 )
178000f95b1Sdan      INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s;
179000f95b1Sdan      BEGIN;
180000f95b1Sdan        UPDATE x1 SET a=randomblob(101)
181000f95b1Sdan    }
182000f95b1Sdan    copydb
183000f95b1Sdan    files
184000f95b1Sdan  } [list {*}{
185000f95b1Sdan    test3.001 test3.002 test3.003 test3.db test3.nal
186000f95b1Sdan  }]
187000f95b1Sdan  do_test 2.3.1 {
188000f95b1Sdan    sqlite3_delete_database test3.db
189000f95b1Sdan    files
190000f95b1Sdan  } {}
191000f95b1Sdan
192000f95b1Sdan
193000f95b1Sdan  do_test 2.4.0 {
194000f95b1Sdan    execsql {
195000f95b1Sdan      COMMIT;
196000f95b1Sdan      PRAGMA journal_mode = wal;
197000f95b1Sdan      UPDATE x1 SET a=randomblob(102)
198000f95b1Sdan    }
199000f95b1Sdan    copydb
200000f95b1Sdan    files
201000f95b1Sdan  } [list {*}{
202000f95b1Sdan    test3.001 test3.002 test3.003 test3.db test3.db-shm test3.wal
203000f95b1Sdan  }]
204000f95b1Sdan  do_test 2.4.1 {
205000f95b1Sdan    sqlite3_delete_database test3.db
206000f95b1Sdan    files
207000f95b1Sdan  } {}
208000f95b1Sdan}
209000f95b1Sdan
210000f95b1Sdandb close
211000f95b1Sdandelete_all
212000f95b1Sdansqlite3_multiplex_shutdown
213000f95b1Sdan
214000f95b1Sdando_test 3.0 {
215000f95b1Sdan  file mkdir dir2.db
216000f95b1Sdan  sqlite3_delete_database dir2.db
217000f95b1Sdan} {SQLITE_ERROR}
218000f95b1Sdando_test 3.1 {
219000f95b1Sdan  sqlite3_delete_database dir2.db/test.db
220000f95b1Sdan} {SQLITE_OK}
221000f95b1Sdan
222000f95b1Sdanfinish_test
223