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