# 2010 July 28
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
#

set testdir [file dirname $argv0]
source $testdir/tester.tcl

file_control_chunksize_test db main [expr 1024*1024]

do_test fallocate-1.1 {
  execsql {
    PRAGMA page_size = 1024;
    PRAGMA auto_vacuum = 1;
    CREATE TABLE t1(a, b);
  }
  file size test.db
} [expr 1*1024*1024]

do_test fallocate-1.2 {
  execsql { INSERT INTO t1 VALUES(1, zeroblob(1024*900)) }
  file size test.db
} [expr 1*1024*1024]

do_test fallocate-1.3 {
  execsql { INSERT INTO t1 VALUES(2, zeroblob(1024*900)) }
  file size test.db
} [expr 2*1024*1024]

do_test fallocate-1.4 {
  execsql { DELETE FROM t1 WHERE a = 1 }
  file size test.db
} [expr 1*1024*1024]

do_test fallocate-1.5 {
  execsql { DELETE FROM t1 WHERE a = 2 }
  file size test.db
} [expr 1*1024*1024]

do_test fallocate-1.6 {
  execsql { PRAGMA freelist_count }
} {0}

# Start a write-transaction and read the "database file size" field from
# the journal file. This field should be set to the number of pages in
# the database file based on the size of the file on disk, not the actual
# logical size of the database within the file.
#
# We need to check this to verify that if in the unlikely event a rollback
# causes a database file to grow, the database grows to its previous size
# on disk, not to the minimum size required to hold the database image.
#
do_test fallocate-1.7 {
  execsql { BEGIN; INSERT INTO t1 VALUES(1, 2); }
  if {[permutation] != "inmemory_journal"} {
    hexio_get_int [hexio_read test.db-journal 16 4]
  } else {
    set {} 1024
  }
} {1024}
do_test fallocate-1.8 { execsql { COMMIT } } {}


#-------------------------------------------------------------------------
# The following tests - fallocate-2.* - test that things work in WAL
# mode as well.
#
set skipwaltests [expr {
  [permutation]=="journaltest" || [permutation]=="inmemory_journal"
}]
ifcapable !wal { set skipwaltests 1 }

if {!$skipwaltests} {
  db close
  forcedelete test.db
  sqlite3 db test.db
  file_control_chunksize_test db main [expr 32*1024]
  
  do_test fallocate-2.1 {
    execsql {
      PRAGMA page_size = 1024;
      PRAGMA journal_mode = WAL;
      CREATE TABLE t1(a, b);
    }
    file size test.db
  } [expr 32*1024]
  
  do_test fallocate-2.2 {
    execsql { INSERT INTO t1 VALUES(1, zeroblob(35*1024)) }
    execsql { PRAGMA wal_checkpoint }
    file size test.db
  } [expr 64*1024]
  
  do_test fallocate-2.3 {
    execsql { DELETE FROM t1 }
    execsql { VACUUM }
    file size test.db
  } [expr 64*1024]
  
  do_test fallocate-2.4 {
    execsql { PRAGMA wal_checkpoint }
    file size test.db
  } [expr 32*1024]
  
  do_test fallocate-2.5 {
    execsql { 
      INSERT INTO t1 VALUES(2, randomblob(35*1024));
      PRAGMA wal_checkpoint;
      INSERT INTO t1 VALUES(3, randomblob(128));
      DELETE FROM t1 WHERE a = 2;
      VACUUM;
    }
    file size test.db
  } [expr 64*1024]
  
  do_test fallocate-2.6 {
    sqlite3 db2 test.db
    execsql { BEGIN ; SELECT count(a) FROM t1 } db2
    execsql {  
      INSERT INTO t1 VALUES(4, randomblob(128));
      PRAGMA wal_checkpoint;
    }
    file size test.db
  } [expr 64*1024]
  
  do_test fallocate-2.7 {
    execsql { SELECT count(b) FROM t1 } db2
  } {1}
  
  do_test fallocate-2.8 {
    execsql { COMMIT } db2
    execsql { PRAGMA wal_checkpoint }
    file size test.db
  } [expr 32*1024]
}


finish_test
