Annotation of embedaddon/sqlite3/test/zerodamage.test, revision 1.1
1.1 ! misho 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>