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