xref: /sqlite-3.40.0/test/tkt2920.test (revision 755beb45)
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