gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/tkt2920.test (about)

     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  
    17  set testdir [file dirname $argv0]
    18  source $testdir/tester.tcl
    19  
    20  # Create a database file that is full.
    21  #
    22  do_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}
    31  do_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  #
    42  do_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}}
    48  integrity_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  #
    53  do_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}}
    59  integrity_check tkt2920-1.6
    60  
    61  # Increase the maximum size of the database by one more page.
    62  # This time the insert works.
    63  #
    64  do_test tkt2920-1.7 {
    65    db eval {PRAGMA max_page_count=42}
    66    catchsql {
    67       INSERT INTO filler VALUES(randomblob(2048))
    68    }
    69  } {0 {}}
    70  integrity_check tkt2920-1.8
    71  
    72  # The previous errors cancelled the transaction.
    73  #
    74  do_test tkt2920-1.9 {
    75    catchsql {COMMIT}
    76  } {1 {cannot commit - no transaction is active}}
    77  
    78  finish_test