Index: third_party/sqlite/sqlite-src-3070603/test/autovacuum_ioerr2.test |
diff --git a/third_party/sqlite/sqlite-src-3070603/test/autovacuum_ioerr2.test b/third_party/sqlite/sqlite-src-3070603/test/autovacuum_ioerr2.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dadb29c0c525c7bcbbac7bbc4e7d5119cd1b1db2 |
--- /dev/null |
+++ b/third_party/sqlite/sqlite-src-3070603/test/autovacuum_ioerr2.test |
@@ -0,0 +1,132 @@ |
+# 2001 October 12 |
+# |
+# 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 for correct handling of I/O errors |
+# such as writes failing because the disk is full. |
+# |
+# The tests in this file use special facilities that are only |
+# available in the SQLite test fixture. |
+# |
+# $Id: autovacuum_ioerr2.test,v 1.7 2008/07/12 14:52:20 drh Exp $ |
+ |
+set testdir [file dirname $argv0] |
+source $testdir/tester.tcl |
+ |
+# If this build of the library does not support auto-vacuum, omit this |
+# whole file. |
+ifcapable {!autovacuum} { |
+ finish_test |
+ return |
+} |
+ |
+do_ioerr_test autovacuum-ioerr2-1 -sqlprep { |
+ PRAGMA auto_vacuum = 1; |
+ CREATE TABLE abc(a); |
+ INSERT INTO abc VALUES(randstr(1500,1500)); |
+} -sqlbody { |
+ CREATE TABLE abc2(a); |
+ BEGIN; |
+ DELETE FROM abc; |
+ INSERT INTO abc VALUES(randstr(1500,1500)); |
+ CREATE TABLE abc3(a); |
+ COMMIT; |
+} |
+ |
+do_ioerr_test autovacuum-ioerr2-2 -tclprep { |
+ execsql { |
+ PRAGMA auto_vacuum = 1; |
+ PRAGMA cache_size = 10; |
+ BEGIN; |
+ CREATE TABLE abc(a); |
+ INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 4 is overflow |
+ INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 5 is overflow |
+ } |
+ for {set i 0} {$i<150} {incr i} { |
+ execsql { |
+ INSERT INTO abc VALUES(randstr(100,100)); |
+ } |
+ } |
+ execsql COMMIT |
+} -sqlbody { |
+ BEGIN; |
+ DELETE FROM abc WHERE length(a)>100; |
+ UPDATE abc SET a = randstr(90,90); |
+ CREATE TABLE abc3(a); |
+ COMMIT; |
+} |
+ |
+do_ioerr_test autovacuum-ioerr2-3 -sqlprep { |
+ PRAGMA auto_vacuum = 1; |
+ CREATE TABLE abc(a); |
+ CREATE TABLE abc2(b); |
+} -sqlbody { |
+ BEGIN; |
+ INSERT INTO abc2 VALUES(10); |
+ DROP TABLE abc; |
+ COMMIT; |
+ DROP TABLE abc2; |
+} |
+ |
+file delete -force backup.db |
+ifcapable subquery { |
+ do_ioerr_test autovacuum-ioerr2-4 -tclprep { |
+ if {![file exists backup.db]} { |
+ sqlite3 dbb backup.db |
+ execsql { |
+ PRAGMA auto_vacuum = 1; |
+ BEGIN; |
+ CREATE TABLE abc(a); |
+ INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 4 is overflow |
+ INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 5 is overflow |
+ } dbb |
+ for {set i 0} {$i<2500} {incr i} { |
+ execsql { |
+ INSERT INTO abc VALUES(randstr(100,100)); |
+ } dbb |
+ } |
+ execsql { |
+ COMMIT; |
+ PRAGMA cache_size = 10; |
+ } dbb |
+ dbb close |
+ } |
+ db close |
+ file delete -force test.db |
+ file delete -force test.db-journal |
+ copy_file backup.db test.db |
+ set ::DB [sqlite3 db test.db] |
+ execsql { |
+ PRAGMA cache_size = 10; |
+ } |
+ } -sqlbody { |
+ BEGIN; |
+ DELETE FROM abc WHERE oid < 3; |
+ UPDATE abc SET a = randstr(100,100) WHERE oid > 2300; |
+ UPDATE abc SET a = randstr(1100,1100) WHERE oid = |
+ (select max(oid) from abc); |
+ COMMIT; |
+ } |
+} |
+ |
+do_ioerr_test autovacuum-ioerr2-1 -sqlprep { |
+ PRAGMA auto_vacuum = 1; |
+ CREATE TABLE abc(a); |
+ INSERT INTO abc VALUES(randstr(1500,1500)); |
+} -sqlbody { |
+ CREATE TABLE abc2(a); |
+ BEGIN; |
+ DELETE FROM abc; |
+ INSERT INTO abc VALUES(randstr(1500,1500)); |
+ CREATE TABLE abc3(a); |
+ COMMIT; |
+} |
+ |
+finish_test |