File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / zerodamage.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 4 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: # 2011 December 21
    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 implements tests of the SQLITE_IOCAP_POWERSAFE_OVERWRITE property
   13: # and the SQLITE_FCNTL_POWERSAFE_OVERWRITE file-control for manipulating it.
   14: #
   15: # The name of this file comes from the fact that we used to call the
   16: # POWERSAFE_OVERWRITE property ZERO_DAMAGE.
   17: #
   18: 
   19: set testdir [file dirname $argv0]
   20: source $testdir/tester.tcl
   21: set testprefix wal5
   22: 
   23: ifcapable !vtab {
   24:   finish_test
   25:   return
   26: }
   27: 
   28: # POWERSAFE_OVERWRITE defaults to true
   29: #
   30: do_test zerodamage-1.0 {
   31:   file_control_powersafe_overwrite db -1
   32: } {0 1}
   33: 
   34: # Check the ability to turn zero-damage on and off.
   35: #
   36: do_test zerodamage-1.1 {
   37:   file_control_powersafe_overwrite db 0
   38:   file_control_powersafe_overwrite db -1
   39: } {0 0}
   40: do_test zerodamage-1.2 {
   41:   file_control_powersafe_overwrite db 1
   42:   file_control_powersafe_overwrite db -1
   43: } {0 1}
   44: 
   45: # Run a transaction with zero-damage on, a small page size and a much larger
   46: # sectorsize.  Verify that the maximum journal size is small - that the
   47: # rollback journal is not being padded.
   48: #
   49: do_test zerodamage-2.0 {
   50:   db close
   51:   testvfs tv -default 1
   52:   tv sectorsize 8192
   53:   sqlite3 db file:test.db?psow=TRUE -uri 1
   54:   unset -nocomplain ::max_journal_size
   55:   set ::max_journal_size 0
   56:   proc xDeleteCallback {method file args} {
   57:     set sz [file size $file]
   58:     if {$sz>$::max_journal_size} {set ::max_journal_size $sz}
   59:   }
   60:   tv filter xDelete
   61:   tv script xDeleteCallback
   62:   register_wholenumber_module db
   63:   db eval {
   64:     PRAGMA page_size=1024;
   65:     PRAGMA journal_mode=DELETE;
   66:     PRAGMA cache_size=5;
   67:     CREATE VIRTUAL TABLE nums USING wholenumber;
   68:     CREATE TABLE t1(x, y);
   69:     INSERT INTO t1 SELECT value, randomblob(100) FROM nums
   70:                     WHERE value BETWEEN 1 AND 400;
   71:   }
   72:   set ::max_journal_size 0
   73:   db eval {
   74:     UPDATE t1 SET y=randomblob(50) WHERE x=123;
   75:   }
   76:   concat [file_control_powersafe_overwrite db -1] [set ::max_journal_size]
   77: } {0 1 2576}
   78: 
   79: # Repeat the previous step with zero-damage turned off.  This time the
   80: # maximum rollback journal size should be much larger.
   81: #
   82: do_test zerodamage-2.1 {
   83:   set ::max_journal_size 0
   84:   db close
   85:   sqlite3 db file:test.db?psow=FALSE -uri 1
   86:   db eval {
   87:     UPDATE t1 SET y=randomblob(50) WHERE x=124;
   88:   }
   89:   concat [file_control_powersafe_overwrite db -1] [set ::max_journal_size]
   90: } {0 0 24704}
   91: 
   92: # Run a WAL-mode transaction with POWERSAFE_OVERWRITE on to verify that the
   93: # WAL file does not get too big.
   94: #
   95: do_test zerodamage-3.0 {
   96:   db eval {
   97:      PRAGMA journal_mode=WAL;
   98:   }
   99:   db close
  100:   sqlite3 db file:test.db?psow=TRUE -uri 1
  101:   db eval {
  102:      UPDATE t1 SET y=randomblob(50) WHERE x=124;
  103:   }
  104:   file size test.db-wal
  105: } {1080}
  106: 
  107: # Repeat the previous with POWERSAFE_OVERWRITE off.  Verify that the WAL file
  108: # is padded.
  109: #
  110: do_test zerodamage-3.1 {
  111:   db close
  112:   sqlite3 db file:test.db?psow=FALSE -uri 1
  113:   db eval {
  114:      UPDATE t1 SET y=randomblob(50) WHERE x=124;
  115:   }
  116:   file size test.db-wal
  117: } {8416}
  118: 
  119: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>