1# 2008 Feb 1 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# 12# This file is to test that ticket #2920 is fixed. 13# 14# $Id: tkt2920.test,v 1.1 2008/02/02 02:48:52 drh Exp $ 15# 16 17set testdir [file dirname $argv0] 18source $testdir/tester.tcl 19 20# Create a database file that is full. 21# 22do_test tkt2920-1.1 { 23 db eval { 24 PRAGMA page_size=1024; 25 PRAGMA max_page_count=40; 26 PRAGMA auto_vacuum=0; 27 CREATE TABLE filler (fill); 28 } 29 file size test.db 30} {2048} 31do_test tkt2920-1.2 { 32 db eval BEGIN 33 for {set i 0} {$i<34} {incr i} { 34 db eval {INSERT INTO filler VALUES(randomblob(1024))} 35 } 36 db eval COMMIT 37} {} 38 39# Try to add a single new page to the full database. We get 40# a disk full error. But this does not corrupt the database. 41# 42do_test tkt2920-1.3 { 43 db eval BEGIN 44 catchsql { 45 INSERT INTO filler VALUES(randomblob(1024)) 46 } 47} {1 {database or disk is full}} 48integrity_check tkt2920-1.4 49 50# Increase the maximum size of the database file by 1 page, 51# but then try to add a two-page record. This also fails. 52# 53do_test tkt2920-1.5 { 54 db eval {PRAGMA max_page_count=41} 55 catchsql { 56 INSERT INTO filler VALUES(randomblob(2048)) 57 } 58} {1 {database or disk is full}} 59integrity_check tkt2920-1.6 60 61# Increase the maximum size of the database by one more page. 62# This time the insert works. 63# 64do_test tkt2920-1.7 { 65 db eval {PRAGMA max_page_count=42} 66 catchsql { 67 INSERT INTO filler VALUES(randomblob(2048)) 68 } 69} {0 {}} 70integrity_check tkt2920-1.8 71 72# The previous errors cancelled the transaction. 73# 74do_test tkt2920-1.9 { 75 catchsql {COMMIT} 76} {1 {cannot commit - no transaction is active}} 77 78finish_test 79