# 2016 September 10 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the code in test_delete.c (the # sqlite3_delete_database() API). # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix delete_db if {[atomic_batch_write test.db]} { finish_test return } proc delete_all {} { foreach f [glob -nocomplain test2*] { file delete $f } foreach f [glob -nocomplain test3*] { file delete $f } } proc copydb {} { foreach f [glob -nocomplain test3*] { file delete $f } foreach f [glob -nocomplain test2*] { set p [string range $f 5 end] file copy "test2$p" "test3$p" } } proc files {} { lsort [glob -nocomplain test3*] } db close delete_all sqlite3 db test2.database #------------------------------------------------------------------------- # # 1.1: Journal files. # 1.2: Wal files. # 1.3: Multiplexor with journal file. # 1.4: Multiplexor with wal file. # # 2.* are a copy of 1.* with the multiplexor enabled. # # 3.* tests errors. # do_test 1.1.0 { execsql { CREATE TABLE t1(x, y); BEGIN; INSERT INTO t1 VALUES(1, 2); } copydb files } {test3.database test3.database-journal} do_test 1.1.1 { sqlite3_delete_database test3.database files } {} do_test 1.2.0 { execsql { COMMIT; PRAGMA journal_mode = wal; INSERT INTO t1 VALUES(3, 4); } copydb files } {test3.database test3.database-shm test3.database-wal} do_test 1.2.1 { sqlite3_delete_database test3.database files } {} db close delete_all sqlite3_multiplex_initialize "" 0 sqlite3 db test2.database -vfs multiplex sqlite3_multiplex_control db "main" chunk_size 32768 do_test 1.3.0 { execsql { PRAGMA auto_vacuum = 0; } execsql { CREATE TABLE x1(a, b); WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 ) INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s; BEGIN; UPDATE x1 SET a=randomblob(101) } copydb files } [list {*}{ test3.database test3.database-journal test3.database001 test3.database002 test3.database003 }] do_test 1.3.1 { sqlite3_delete_database test3.database files } {} do_test 1.4.0 { execsql { COMMIT; PRAGMA journal_mode = wal; UPDATE x1 SET a=randomblob(102) } copydb files } [list {*}{ test3.database test3.database-shm test3.database-wal test3.database001 test3.database002 test3.database003 }] do_test 1.4.1 { sqlite3_delete_database test3.database files } {} ifcapable 8_3_names { db close delete_all sqlite3 db file:test2.db?8_3_names=1 -uri 1 do_test 2.1.0 { execsql { CREATE TABLE t1(x, y); BEGIN; INSERT INTO t1 VALUES(1, 2); } copydb files } {test3.db test3.nal} do_test 2.1.1 { sqlite3_delete_database test3.db files } {} do_test 2.2.0 { execsql { COMMIT; PRAGMA journal_mode = wal; INSERT INTO t1 VALUES(3, 4); } copydb files } {test3.db test3.shm test3.wal} do_test 2.2.1 { sqlite3_delete_database test3.db files } {} db close delete_all sqlite3_multiplex_initialize "" 0 sqlite3 db file:test2.db?8_3_names=1 -uri 1 -vfs multiplex sqlite3_multiplex_control db "main" chunk_size 32768 do_test 2.3.0 { execsql { PRAGMA auto_vacuum = 0; } execsql { CREATE TABLE x1(a, b); WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 ) INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s; BEGIN; UPDATE x1 SET a=randomblob(101) } copydb files } [list {*}{ test3.001 test3.002 test3.003 test3.db test3.nal }] do_test 2.3.1 { sqlite3_delete_database test3.db files } {} do_test 2.4.0 { execsql { COMMIT; PRAGMA journal_mode = wal; UPDATE x1 SET a=randomblob(102) } copydb files } [list {*}{ test3.001 test3.002 test3.003 test3.db test3.db-shm test3.wal }] do_test 2.4.1 { sqlite3_delete_database test3.db files } {} } db close delete_all sqlite3_multiplex_shutdown do_test 3.0 { file mkdir dir2.db sqlite3_delete_database dir2.db } {SQLITE_ERROR} do_test 3.1 { sqlite3_delete_database dir2.db/test.db } {SQLITE_OK} finish_test