119 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# 2011 May 16
 | 
						|
#
 | 
						|
# 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 PRAGMA journal_size_limit when
 | 
						|
# in WAL mode.
 | 
						|
#
 | 
						|
 | 
						|
set testdir [file dirname $argv0]
 | 
						|
source $testdir/tester.tcl
 | 
						|
ifcapable !wal {finish_test ; return }
 | 
						|
 | 
						|
# Case 1:  No size limit.  Journal can get large.
 | 
						|
#
 | 
						|
do_test wal7-1.0 {
 | 
						|
  db close
 | 
						|
  forcedelete test.db
 | 
						|
  sqlite3 db test.db
 | 
						|
  db eval {
 | 
						|
    PRAGMA page_size=1024;
 | 
						|
    PRAGMA journal_mode=WAL;
 | 
						|
    PRAGMA wal_autocheckpoint=50;  -- 50 pages
 | 
						|
    CREATE TABLE t1(x, y UNIQUE);
 | 
						|
    INSERT INTO t1 VALUES(1,2);
 | 
						|
    INSERT INTO t1 VALUES(zeroblob(200000),4);
 | 
						|
    CREATE TABLE t2(z);
 | 
						|
    DELETE FROM t1;
 | 
						|
    INSERT INTO t2 SELECT x FROM t1;
 | 
						|
  }
 | 
						|
  expr {[file size test.db-wal]>50*1100}
 | 
						|
} 1
 | 
						|
do_test wal7-1.1 {
 | 
						|
  db eval {PRAGMA wal_checkpoint}
 | 
						|
  expr {[file size test.db-wal]>50*1100}
 | 
						|
} 1
 | 
						|
do_test wal7-1.2 {
 | 
						|
  db eval {INSERT INTO t2 VALUES('hi');}
 | 
						|
  expr {[file size test.db-wal]>50*1100}
 | 
						|
} 1
 | 
						|
 | 
						|
# Case 2:  Size limit at half the autocheckpoint size.
 | 
						|
#
 | 
						|
do_test wal7-2.0 {
 | 
						|
  db close
 | 
						|
  forcedelete test.db
 | 
						|
  sqlite3 db test.db
 | 
						|
  db eval {
 | 
						|
    PRAGMA page_size=1024;
 | 
						|
    PRAGMA journal_mode=WAL;
 | 
						|
    PRAGMA wal_autocheckpoint=50;  -- 50 pages
 | 
						|
    PRAGMA journal_size_limit=25000;
 | 
						|
    CREATE TABLE t1(x, y UNIQUE);
 | 
						|
    INSERT INTO t1 VALUES(1,2);
 | 
						|
    INSERT INTO t1 VALUES(zeroblob(200000),4);
 | 
						|
    CREATE TABLE t2(z);
 | 
						|
    DELETE FROM t1;
 | 
						|
    INSERT INTO t2 VALUES(1);
 | 
						|
  }
 | 
						|
  file size test.db-wal
 | 
						|
} 25000
 | 
						|
 | 
						|
 | 
						|
# Case 3:  Size limit of zero.
 | 
						|
#
 | 
						|
do_test wal7-3.0 {
 | 
						|
  db close
 | 
						|
  forcedelete test.db
 | 
						|
  sqlite3 db test.db
 | 
						|
  db eval {
 | 
						|
    PRAGMA page_size=1024;
 | 
						|
    PRAGMA journal_mode=WAL;
 | 
						|
    PRAGMA wal_autocheckpoint=50;  -- 50 pages
 | 
						|
    PRAGMA journal_size_limit=0;
 | 
						|
    CREATE TABLE t1(x, y UNIQUE);
 | 
						|
    INSERT INTO t1 VALUES(1,2);
 | 
						|
    INSERT INTO t1 VALUES(zeroblob(200000),4);
 | 
						|
    CREATE TABLE t2(z);
 | 
						|
    DELETE FROM t1;
 | 
						|
    INSERT INTO t2 VALUES(1);
 | 
						|
  }
 | 
						|
  set sz [file size test.db-wal]
 | 
						|
  expr {$sz>0 && $sz<13700}
 | 
						|
} 1
 | 
						|
 | 
						|
 | 
						|
# Case 4:  Size limit set before going WAL
 | 
						|
#
 | 
						|
do_test wal7-4.0 {
 | 
						|
  db close
 | 
						|
  forcedelete test.db
 | 
						|
  sqlite3 db test.db
 | 
						|
  db eval {
 | 
						|
    PRAGMA page_size=1024;
 | 
						|
    PRAGMA journal_size_limit=25000;
 | 
						|
    PRAGMA journal_mode=WAL;
 | 
						|
    PRAGMA wal_autocheckpoint=50;  -- 50 pages
 | 
						|
    CREATE TABLE t1(x, y UNIQUE);
 | 
						|
    INSERT INTO t1 VALUES(1,2);
 | 
						|
    INSERT INTO t1 VALUES(zeroblob(200000),4);
 | 
						|
    CREATE TABLE t2(z);
 | 
						|
    DELETE FROM t1;
 | 
						|
    INSERT INTO t2 VALUES(1);
 | 
						|
  }
 | 
						|
  set sz [file size test.db-wal]
 | 
						|
} 25000
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
finish_test
 |