Index: third_party/sqlite/src/test/delete_db.test |
diff --git a/third_party/sqlite/src/test/delete_db.test b/third_party/sqlite/src/test/delete_db.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..09c44ff9f397ed6ca0fc529ea06c6b4d8b3cc01a |
--- /dev/null |
+++ b/third_party/sqlite/src/test/delete_db.test |
@@ -0,0 +1,217 @@ |
+# 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 |
+ |
+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 |