github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/delete_db.test (about) 1 # 2016 September 10 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 file is testing the code in test_delete.c (the 13 # sqlite3_delete_database() API). 14 # 15 16 set testdir [file dirname $argv0] 17 source $testdir/tester.tcl 18 set testprefix delete_db 19 20 if {[atomic_batch_write test.db]} { 21 finish_test 22 return 23 } 24 25 proc delete_all {} { 26 foreach f [glob -nocomplain test2*] { file delete $f } 27 foreach f [glob -nocomplain test3*] { file delete $f } 28 } 29 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 } 36 } 37 38 proc files {} { 39 lsort [glob -nocomplain test3*] 40 } 41 42 db close 43 delete_all 44 sqlite3 db test2.database 45 46 #------------------------------------------------------------------------- 47 # 48 # 1.1: Journal files. 49 # 1.2: Wal files. 50 # 1.3: Multiplexor with journal file. 51 # 1.4: Multiplexor with wal file. 52 # 53 # 2.* are a copy of 1.* with the multiplexor enabled. 54 # 55 # 3.* tests errors. 56 # 57 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} 67 68 do_test 1.1.1 { 69 sqlite3_delete_database test3.database 70 files 71 } {} 72 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 } {} 86 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 92 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 107 }] 108 do_test 1.3.1 { 109 sqlite3_delete_database test3.database 110 files 111 } {} 112 113 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 125 }] 126 do_test 1.4.1 { 127 sqlite3_delete_database test3.database 128 files 129 } {} 130 131 132 ifcapable 8_3_names { 133 db close 134 delete_all 135 sqlite3 db file:test2.db?8_3_names=1 -uri 1 136 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 } {} 165 166 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 } {} 208 } 209 210 db close 211 delete_all 212 sqlite3_multiplex_shutdown 213 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} 221 222 finish_test