AryaWu/sqlite
0
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 