CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
fallocate.test158 linesDownload Raw Back to test
1# 2010 July 282#3# The author disclaims copyright to this source code.  In place of4# 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 13set testdir [file dirname $argv0]14source $testdir/tester.tcl15 16file_control_chunksize_test db main [expr 1024*1024]17 18do_test fallocate-1.1 {19  execsql {20    PRAGMA page_size = 1024;21    PRAGMA auto_vacuum = 1;22    CREATE TABLE t1(a, b);23  }24  file size test.db25} [expr 1*1024*1024]26 27do_test fallocate-1.2 {28  execsql { INSERT INTO t1 VALUES(1, zeroblob(1024*900)) }29  file size test.db30} [expr 1*1024*1024]31 32do_test fallocate-1.3 {33  execsql { INSERT INTO t1 VALUES(2, zeroblob(1024*900)) }34  file size test.db35} [expr 2*1024*1024]36 37do_test fallocate-1.4 {38  execsql { DELETE FROM t1 WHERE a = 1 }39  file size test.db40} [expr 1*1024*1024]41 42do_test fallocate-1.5 {43  execsql { DELETE FROM t1 WHERE a = 2 }44  file size test.db45} [expr 1*1024*1024]46 47do_test fallocate-1.6 {48  execsql { PRAGMA freelist_count }49} {0}50 51# Start a write-transaction and read the "database file size" field from52# the journal file. This field should be set to the number of pages in53# the database file based on the size of the file on disk, not the actual54# logical size of the database within the file.55#56# We need to check this to verify that if in the unlikely event a rollback57# causes a database file to grow, the database grows to its previous size58# on disk, not to the minimum size required to hold the database image.59#60do_test fallocate-1.7 {61  execsql { BEGIN; INSERT INTO t1 VALUES(1, 2); }62  if {[permutation] != "inmemory_journal"63   && [permutation] != "atomic-batch-write"64   && [atomic_batch_write test.db]==065  } {66    hexio_get_int [hexio_read test.db-journal 16 4]67  } else {68    set {} 102469  }70} {1024}71do_test fallocate-1.8 { execsql { COMMIT } } {}72 73do_test fallocate-1.8 {74  set nPg [db one {PRAGMA page_count}]75  set nFile [expr [file size test.db] / 1024]76  list [expr $nPg<100] [expr $nFile>100]77} {1 1}78 79do_execsql_test fallocate-1.9 {80  PRAGMA max_page_count = 100;81} {100}82 83#-------------------------------------------------------------------------84# The following tests - fallocate-2.* - test that things work in WAL85# mode as well.86#87set skipwaltests [expr {88  [permutation]=="journaltest" || [permutation]=="inmemory_journal"89}]90ifcapable !wal { set skipwaltests 1 }91 92if {!$skipwaltests} {93  db close94  forcedelete test.db95  sqlite3 db test.db96  file_control_chunksize_test db main [expr 32*1024]97  98  do_test fallocate-2.1 {99    execsql {100      PRAGMA page_size = 1024;101      PRAGMA journal_mode = WAL;102      CREATE TABLE t1(a, b);103    }104    file size test.db105  } [expr 32*1024]106  107  do_test fallocate-2.2 {108    execsql { INSERT INTO t1 VALUES(1, zeroblob(35*1024)) }109    execsql { PRAGMA wal_checkpoint }110    file size test.db111  } [expr 64*1024]112  113  do_test fallocate-2.3 {114    execsql { DELETE FROM t1 }115    execsql { VACUUM }116    file size test.db117  } [expr 64*1024]118  119  do_test fallocate-2.4 {120    execsql { PRAGMA wal_checkpoint }121    file size test.db122  } [expr 32*1024]123  124  do_test fallocate-2.5 {125    execsql { 126      INSERT INTO t1 VALUES(2, randomblob(35*1024));127      PRAGMA wal_checkpoint;128      INSERT INTO t1 VALUES(3, randomblob(128));129      DELETE FROM t1 WHERE a = 2;130      VACUUM;131    }132    file size test.db133  } [expr 64*1024]134  135  do_test fallocate-2.6 {136    sqlite3 db2 test.db137    execsql { BEGIN ; SELECT count(a) FROM t1 } db2138    execsql {  139      INSERT INTO t1 VALUES(4, randomblob(128));140      PRAGMA wal_checkpoint;141    }142    file size test.db143  } [expr 64*1024]144  145  do_test fallocate-2.7 {146    execsql { SELECT count(b) FROM t1 } db2147  } {1}148  149  do_test fallocate-2.8 {150    execsql { COMMIT } db2151    execsql { PRAGMA wal_checkpoint }152    file size test.db153  } [expr 32*1024]154}155 156 157finish_test158