summaryrefslogtreecommitdiffstats
path: root/test/delete_db.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/delete_db.test')
-rw-r--r--test/delete_db.test222
1 files changed, 222 insertions, 0 deletions
diff --git a/test/delete_db.test b/test/delete_db.test
new file mode 100644
index 0000000..6edd9c2
--- /dev/null
+++ b/test/delete_db.test
@@ -0,0 +1,222 @@
+# 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