Annotation of embedaddon/sqlite3/test/vacuum2.test, revision 1.1

1.1     ! misho       1: # 2005 February 15
        !             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: # This file implements regression tests for SQLite library.  The
        !            12: # focus of this file is testing the VACUUM statement.
        !            13: #
        !            14: # $Id: vacuum2.test,v 1.10 2009/02/18 20:31:18 drh Exp $
        !            15: 
        !            16: set testdir [file dirname $argv0]
        !            17: source $testdir/tester.tcl
        !            18: 
        !            19: # Do not use a codec for tests in this file, as the database file is
        !            20: # manipulated directly using tcl scripts (using the [hexio_write] command).
        !            21: #
        !            22: do_not_use_codec
        !            23: 
        !            24: # If the VACUUM statement is disabled in the current build, skip all
        !            25: # the tests in this file.
        !            26: #
        !            27: ifcapable {!vacuum||!autoinc} {
        !            28:   finish_test
        !            29:   return
        !            30: }
        !            31: if $AUTOVACUUM {
        !            32:   finish_test
        !            33:   return
        !            34: }
        !            35: 
        !            36: # Ticket #1121 - make sure vacuum works if all autoincrement tables
        !            37: # have been deleted.
        !            38: #
        !            39: do_test vacuum2-1.1 {
        !            40:   execsql {
        !            41:     CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
        !            42:     DROP TABLE t1;
        !            43:     VACUUM;
        !            44:   }
        !            45: } {}
        !            46: 
        !            47: # Ticket #2518.  Make sure vacuum increments the change counter
        !            48: # in the database header.
        !            49: #
        !            50: do_test vacuum2-2.1 {
        !            51:   execsql {
        !            52:     CREATE TABLE t1(x);
        !            53:     CREATE TABLE t2(y);
        !            54:     INSERT INTO t1 VALUES(1);
        !            55:   }
        !            56:   hexio_get_int [hexio_read test.db 24 4]
        !            57: } [expr {[hexio_get_int [hexio_read test.db 24 4]]+3}]
        !            58: do_test vacuum2-2.1 {
        !            59:   execsql {
        !            60:     VACUUM
        !            61:   }
        !            62:   hexio_get_int [hexio_read test.db 24 4]
        !            63: } [expr {[hexio_get_int [hexio_read test.db 24 4]]+1}]
        !            64: 
        !            65: ############################################################################
        !            66: # Verify that we can use the auto_vacuum pragma to request a new
        !            67: # autovacuum setting, do a VACUUM, and the new setting takes effect.
        !            68: # Make sure this happens correctly even if there are multiple open
        !            69: # connections to the same database file.
        !            70: #
        !            71: sqlite3 db2 test.db
        !            72: set pageSize [db eval {pragma page_size}]
        !            73: 
        !            74: # We are currently not autovacuuming so the database should be 3 pages
        !            75: # in size.  1 page for each of sqlite_master, t1, and t2.
        !            76: #
        !            77: do_test vacuum2-3.1 {
        !            78:   execsql {
        !            79:     INSERT INTO t1 VALUES('hello');
        !            80:     INSERT INTO t2 VALUES('out there');
        !            81:   }
        !            82:   expr {[file size test.db]/$pageSize}
        !            83: } {3}
        !            84: set cksum [cksum]
        !            85: do_test vacuum2-3.2 {
        !            86:   cksum db2
        !            87: } $cksum
        !            88: 
        !            89: # Convert the database to an autovacuumed database.
        !            90: ifcapable autovacuum {
        !            91:   do_test vacuum2-3.3 {
        !            92:     execsql {
        !            93:       PRAGMA auto_vacuum=FULL;
        !            94:       VACUUM;
        !            95:     }
        !            96:     expr {[file size test.db]/$pageSize}
        !            97:   } {4}
        !            98: }
        !            99: do_test vacuum2-3.4 {
        !           100:   cksum db2
        !           101: } $cksum
        !           102: do_test vacuum2-3.5 {
        !           103:   cksum
        !           104: } $cksum
        !           105: do_test vacuum2-3.6 {
        !           106:   execsql {PRAGMA integrity_check} db2
        !           107: } {ok}
        !           108: do_test vacuum2-3.7 {
        !           109:   execsql {PRAGMA integrity_check} db
        !           110: } {ok}
        !           111: 
        !           112: # Convert the database back to a non-autovacuumed database.
        !           113: do_test vacuum2-3.13 {
        !           114:   execsql {
        !           115:     PRAGMA auto_vacuum=NONE;
        !           116:     VACUUM;
        !           117:   }
        !           118:   expr {[file size test.db]/$pageSize}
        !           119: } {3}
        !           120: do_test vacuum2-3.14 {
        !           121:   cksum db2
        !           122: } $cksum
        !           123: do_test vacuum2-3.15 {
        !           124:   cksum
        !           125: } $cksum
        !           126: do_test vacuum2-3.16 {
        !           127:   execsql {PRAGMA integrity_check} db2
        !           128: } {ok}
        !           129: do_test vacuum2-3.17 {
        !           130:   execsql {PRAGMA integrity_check} db
        !           131: } {ok}
        !           132: 
        !           133: db2 close
        !           134: 
        !           135: ifcapable autovacuum {
        !           136:   do_test vacuum2-4.1 {
        !           137:     db close
        !           138:     forcedelete test.db
        !           139:     sqlite3 db test.db
        !           140:     execsql {
        !           141:       pragma auto_vacuum=1;
        !           142:       create table t(a, b);
        !           143:       insert into t values(1, 2);
        !           144:       insert into t values(1, 2);
        !           145:       pragma auto_vacuum=0;
        !           146:       vacuum;
        !           147:       pragma auto_vacuum;
        !           148:     }
        !           149:   } {0}
        !           150:   do_test vacuum2-4.2 {
        !           151:     execsql {
        !           152:       pragma auto_vacuum=1;
        !           153:       vacuum;
        !           154:       pragma auto_vacuum;
        !           155:     }
        !           156:   } {1}
        !           157:   do_test vacuum2-4.3 {
        !           158:     execsql {
        !           159:       pragma integrity_check
        !           160:     }
        !           161:   } {ok}
        !           162:   do_test vacuum2-4.4 {
        !           163:     db close
        !           164:     sqlite3 db test.db
        !           165:     execsql {
        !           166:       pragma auto_vacuum;
        !           167:     }
        !           168:   } {1}
        !           169:   do_test vacuum2-4.5 {  # Ticket #3663
        !           170:     execsql {
        !           171:       pragma auto_vacuum=2;
        !           172:       vacuum;
        !           173:       pragma auto_vacuum;
        !           174:     }
        !           175:   } {2}
        !           176:   do_test vacuum2-4.6 {
        !           177:     execsql {
        !           178:       pragma integrity_check
        !           179:     }
        !           180:   } {ok}
        !           181:   do_test vacuum2-4.7 {
        !           182:     db close
        !           183:     sqlite3 db test.db
        !           184:     execsql {
        !           185:       pragma auto_vacuum;
        !           186:     }
        !           187:   } {2}
        !           188: }
        !           189: 
        !           190: 
        !           191: #-------------------------------------------------------------------------
        !           192: # The following block of tests verify the behaviour of the library when
        !           193: # a database is VACUUMed when there are one or more unfinalized SQL 
        !           194: # statements reading the same database using the same db handle.
        !           195: #
        !           196: db close
        !           197: forcedelete test.db
        !           198: sqlite3 db test.db
        !           199: do_execsql_test vacuum2-5.1 {
        !           200:   CREATE TABLE t1(a PRIMARY KEY, b UNIQUE);
        !           201:   INSERT INTO t1 VALUES(1, randomblob(500));
        !           202:   INSERT INTO t1 SELECT a+1, randomblob(500) FROM t1;      -- 2
        !           203:   INSERT INTO t1 SELECT a+2, randomblob(500) FROM t1;      -- 4 
        !           204:   INSERT INTO t1 SELECT a+4, randomblob(500) FROM t1;      -- 8 
        !           205:   INSERT INTO t1 SELECT a+8, randomblob(500) FROM t1;      -- 16 
        !           206: } {}
        !           207: 
        !           208: do_test vacuum2-5.2 {
        !           209:   list [catch {
        !           210:     db eval {SELECT a, b FROM t1} { if {$a == 8} { execsql VACUUM } }
        !           211:   } msg] $msg
        !           212: } {1 {cannot VACUUM - SQL statements in progress}}
        !           213: 
        !           214: do_test vacuum2-5.3 {
        !           215:   list [catch {
        !           216:     db eval {SELECT 1, 2, 3} { execsql VACUUM }
        !           217:   } msg] $msg
        !           218: } {1 {cannot VACUUM - SQL statements in progress}}
        !           219: 
        !           220: do_test vacuum2-5.4 {
        !           221:   set res ""
        !           222:   set res2 ""
        !           223:   db eval {SELECT a, b FROM t1 WHERE a<=10} {
        !           224:     if {$a==6} { set res [catchsql VACUUM] }
        !           225:     lappend res2 $a
        !           226:   }
        !           227:   lappend res2 $res
        !           228: } {1 2 3 4 5 6 7 8 9 10 {1 {cannot VACUUM - SQL statements in progress}}}
        !           229: 
        !           230: 
        !           231: finish_test

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