| Index: third_party/sqlite/src/test/backup.test
|
| diff --git a/third_party/sqlite/src/test/backup.test b/third_party/sqlite/src/test/backup.test
|
| index ae1559593f95d0af23859dcd99f1c2bf3489015b..0e2c26f33b8f84b4e0928f48902f61e7da33b2b6 100644
|
| --- a/third_party/sqlite/src/test/backup.test
|
| +++ b/third_party/sqlite/src/test/backup.test
|
| @@ -16,6 +16,8 @@
|
| set testdir [file dirname $argv0]
|
| source $testdir/tester.tcl
|
|
|
| +do_not_use_codec
|
| +
|
| #---------------------------------------------------------------------
|
| # Test organization:
|
| #
|
| @@ -38,6 +40,8 @@ source $testdir/tester.tcl
|
| #
|
| # backup-9.*: Test that passing a negative argument to backup_step() is
|
| # interpreted as "copy the whole file".
|
| +#
|
| +# backup-10.*: Test writing the source database mid backup.
|
| #
|
|
|
| proc data_checksum {db file} { $db one "SELECT md5sum(a, b) FROM ${file}.t1" }
|
| @@ -173,7 +177,7 @@ foreach nPagePerStep {1 200} {
|
| # page size is the same as the source page size (in this case 1024 bytes).
|
| #
|
| set isMemDest [expr {
|
| - $zDestFile eq ":memory:" || $file_dest eq "temp" && $TEMP_STORE==3
|
| + $zDestFile eq ":memory:" || $file_dest eq "temp" && $TEMP_STORE>=2
|
| }]
|
|
|
| if { $isMemDest==0 || $pgsz_dest == 1024 } {
|
| @@ -487,6 +491,7 @@ db2 close
|
| # 3) Backing up memory-to-file.
|
| #
|
| set iTest 0
|
| +file delete -force bak.db-wal
|
| foreach {writer file} {db test.db db3 test.db db :memory:} {
|
| incr iTest
|
| catch { file delete bak.db }
|
| @@ -904,4 +909,64 @@ ifcapable memorymanage {
|
| db3 close
|
| }
|
|
|
| +
|
| +#-----------------------------------------------------------------------
|
| +# Test that if the database is written to via the same database handle being
|
| +# used as the source by a backup operation:
|
| +#
|
| +# 10.1.*: If the db is in-memory, the backup is restarted.
|
| +# 10.2.*: If the db is a file, the backup is not restarted.
|
| +#
|
| +db close
|
| +file delete -force test.db test.db-journal
|
| +foreach {tn file rc} {
|
| + 1 test.db SQLITE_DONE
|
| + 2 :memory: SQLITE_OK
|
| +} {
|
| + do_test backup-10.$tn.1 {
|
| + sqlite3 db $file
|
| + execsql {
|
| + CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB);
|
| + BEGIN;
|
| + INSERT INTO t1 VALUES(NULL, randomblob(200));
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + INSERT INTO t1 SELECT NULL, randomblob(200) FROM t1;
|
| + COMMIT;
|
| + SELECT count(*) FROM t1;
|
| + }
|
| + } {256}
|
| +
|
| + do_test backup-10.$tn.2 {
|
| + set pgs [execsql {pragma page_count}]
|
| + expr {$pgs > 50 && $pgs < 75}
|
| + } {1}
|
| +
|
| + do_test backup-10.$tn.3 {
|
| + file delete -force bak.db bak.db-journal
|
| + sqlite3 db2 bak.db
|
| + sqlite3_backup B db2 main db main
|
| + B step 50
|
| + } {SQLITE_OK}
|
| +
|
| + do_test backup-10.$tn.4 {
|
| + execsql { UPDATE t1 SET b = randomblob(200) WHERE a IN (1, 250) }
|
| + } {}
|
| +
|
| + do_test backup-10.$tn.5 {
|
| + B step 50
|
| + } $rc
|
| +
|
| + do_test backup-10.$tn.6 {
|
| + B finish
|
| + } {SQLITE_OK}
|
| +
|
| + db2 close
|
| +}
|
| +
|
| finish_test
|
|
|