Annotation of embedaddon/sqlite3/test/vacuum3.test, revision 1.1.1.1

1.1       misho       1: # 2007 March 19
                      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 changing the database page size using a 
                     13: # VACUUM statement.
                     14: #
                     15: # $Id: vacuum3.test,v 1.9 2008/08/26 21:07:27 drh Exp $
                     16: 
                     17: set testdir [file dirname $argv0]
                     18: source $testdir/tester.tcl
                     19: 
                     20: # If the VACUUM statement is disabled in the current build, skip all
                     21: # the tests in this file.
                     22: #
                     23: ifcapable !vacuum {
                     24:   finish_test
                     25:   return
                     26: }
                     27: 
                     28: 
                     29: #-------------------------------------------------------------------
                     30: # Test cases vacuum3-1.* convert a simple 2-page database between a 
                     31: # few different page sizes.
                     32: #
                     33: do_test vacuum3-1.1 {
                     34:   execsql {
                     35:     PRAGMA auto_vacuum=OFF;
                     36:     PRAGMA page_size = 1024;
                     37:     CREATE TABLE t1(a, b, c);
                     38:     INSERT INTO t1 VALUES(1, 2, 3);
                     39:   }
                     40: } {}
                     41: do_test vacuum3-1.2 {
                     42:   execsql { PRAGMA page_size }
                     43: } {1024}
                     44: do_test vacuum3-1.3 {
                     45:   file size test.db
                     46: } {2048}
                     47: 
                     48: set I 4
                     49: foreach {request actual database} [list \
                     50:   2048 2048 4096                        \
                     51:   1024 1024 2048                        \
                     52:   1170 1024 2048                        \
                     53:   256  1024 2048                        \
                     54:   512  512  1024                        \
                     55:   4096 4096 8192                        \
                     56:   1024 1024 2048                        \
                     57: ] {
                     58:   do_test vacuum3-1.$I.1 {
                     59:     execsql " 
                     60:       PRAGMA page_size = $request;
                     61:       VACUUM;
                     62:     "
                     63:     execsql { PRAGMA page_size }
                     64:   } $actual
                     65:   do_test vacuum3-1.$I.2 {
                     66:     file size test.db
                     67:   } $database
                     68:   do_test vacuum3-1.$I.3 {
                     69:     execsql { SELECT * FROM t1 }
                     70:   } {1 2 3}
                     71:   integrity_check vacuum3-1.$I.4
                     72: 
                     73:   incr I
                     74: }
                     75: 
                     76: #-------------------------------------------------------------------
                     77: # Test cases vacuum3-2.* convert a simple 3-page database between a 
                     78: # few different page sizes.
                     79: #
                     80: do_test vacuum3-2.1 {
                     81:   execsql {
                     82:     PRAGMA page_size = 1024;
                     83:     VACUUM;
                     84:     ALTER TABLE t1 ADD COLUMN d;
                     85:     UPDATE t1 SET d = randomblob(1000);
                     86:   }
                     87:   file size test.db
                     88: } {3072}
                     89: do_test vacuum3-2.2 {
                     90:   execsql { PRAGMA page_size }
                     91: } {1024}
                     92: do_test vacuum3-2.3 {
                     93:   set blob [db one {select d from t1}]
                     94:   string length $blob
                     95: } {1000}
                     96: 
                     97: set I 4
                     98: foreach {request actual database} [list \
                     99:   2048 2048 4096                        \
                    100:   1024 1024 3072                        \
                    101:   1170 1024 3072                        \
                    102:   256  1024 3072                        \
                    103:   512  512  2048                        \
                    104:   4096 4096 8192                        \
                    105:   1024 1024 3072                        \
                    106: ] {
                    107:   do_test vacuum3-2.$I.1 {
                    108:     execsql " 
                    109:       PRAGMA page_size = $request;
                    110:       VACUUM;
                    111:     "
                    112:     execsql { PRAGMA page_size }
                    113:   } $actual
                    114:   do_test vacuum3-2.$I.2 {
                    115:     file size test.db
                    116:   } $database
                    117:   do_test vacuum3-2.$I.3 {
                    118:     execsql { SELECT * FROM t1 }
                    119:   } [list 1 2 3 $blob]
                    120:   integrity_check vacuum3-1.$I.4
                    121: 
                    122:   incr I
                    123: }
                    124: 
                    125: #-------------------------------------------------------------------
                    126: # Test cases vacuum3-3.* converts a database large enough to include
                    127: # the locking page (in a test environment) between few different 
                    128: # page sizes.
                    129: #
                    130: proc signature {} {
                    131:   return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
                    132: }
                    133: do_test vacuum3-3.1 {
                    134:   execsql "
                    135:     PRAGMA page_size = 1024;
                    136:     BEGIN;
                    137:     CREATE TABLE abc(a PRIMARY KEY, b, c);
                    138:     INSERT INTO abc VALUES(randomblob(100), randomblob(200), randomblob(1000));
                    139:     INSERT INTO abc 
                    140:         SELECT randomblob(1000), randomblob(200), randomblob(100)
                    141:         FROM abc;
                    142:     INSERT INTO abc 
                    143:         SELECT randomblob(100), randomblob(200), randomblob(1000)
                    144:         FROM abc;
                    145:     INSERT INTO abc 
                    146:         SELECT randomblob(100), randomblob(200), randomblob(1000)
                    147:         FROM abc;
                    148:     INSERT INTO abc 
                    149:         SELECT randomblob(100), randomblob(200), randomblob(1000)
                    150:         FROM abc;
                    151:     INSERT INTO abc 
                    152:         SELECT randomblob(100), randomblob(200), randomblob(1000)
                    153:         FROM abc;
                    154:     INSERT INTO abc 
                    155:         SELECT randomblob(25), randomblob(45), randomblob(9456)
                    156:         FROM abc;
                    157:     INSERT INTO abc 
                    158:         SELECT randomblob(100), randomblob(200), randomblob(1000)
                    159:         FROM abc;
                    160:     INSERT INTO abc 
                    161:         SELECT randomblob(25), randomblob(45), randomblob(9456)
                    162:         FROM abc;
                    163:     COMMIT;
                    164:   "
                    165: } {}
                    166: do_test vacuum3-3.2 {
                    167:   execsql { PRAGMA page_size }
                    168: } {1024}
                    169: 
                    170: set ::sig [signature]
                    171: 
                    172: set I 3
                    173: foreach {request actual} [list \
                    174:   2048 2048                    \
                    175:   1024 1024                    \
                    176:   1170 1024                    \
                    177:   256  1024                    \
                    178:   512  512                     \
                    179:   4096 4096                    \
                    180:   1024 1024                    \
                    181: ] {
                    182:   do_test vacuum3-3.$I.1 {
                    183:     execsql " 
                    184:       PRAGMA page_size = $request;
                    185:       VACUUM;
                    186:     "
                    187:     execsql { PRAGMA page_size }
                    188:   } $actual
                    189:   do_test vacuum3-3.$I.2 {
                    190:     signature
                    191:   } $::sig
                    192:   integrity_check vacuum3-3.$I.3
                    193: 
                    194:   incr I
                    195: }
                    196: 
                    197: do_test vacuum3-4.1 {
                    198:   db close
                    199:   delete_file test.db
                    200:   sqlite3 db test.db
                    201:   execsql {
                    202:     PRAGMA page_size=1024;
                    203:     CREATE TABLE abc(a, b, c);
                    204:     INSERT INTO abc VALUES(1, 2, 3);
                    205:     INSERT INTO abc VALUES(4, 5, 6);
                    206:   }
                    207:   execsql { SELECT * FROM abc }
                    208: } {1 2 3 4 5 6}
                    209: do_test vacuum3-4.2 {
                    210:   sqlite3 db2 test.db
                    211:   execsql { SELECT * FROM abc } db2
                    212: } {1 2 3 4 5 6}
                    213: do_test vacuum3-4.3 {
                    214:   execsql { 
                    215:     PRAGMA page_size = 2048;
                    216:     VACUUM;
                    217:   }
                    218:   execsql { SELECT * FROM abc }
                    219: } {1 2 3 4 5 6}
                    220: do_test vacuum3-4.4 {
                    221:   execsql { SELECT * FROM abc } db2
                    222: } {1 2 3 4 5 6}
                    223: do_test vacuum3-4.5 {
                    224:   execsql {
                    225:     PRAGMA page_size=16384;
                    226:     VACUUM;
                    227:   } db2
                    228:   execsql { SELECT * FROM abc } db2
                    229: } {1 2 3 4 5 6}
                    230: do_test vacuum3-4.6 {
                    231:   execsql {
                    232:     PRAGMA page_size=1024;
                    233:     VACUUM;
                    234:   }
                    235:   execsql { SELECT * FROM abc } db2
                    236: } {1 2 3 4 5 6}
                    237: 
                    238: # Unable to change the page-size of an in-memory using vacuum.
                    239: db2 close
                    240: sqlite3 db2 :memory:
                    241: do_test vacuum3-5.1 {
                    242:   db2 eval {
                    243:     CREATE TABLE t1(x);
                    244:     INSERT INTO t1 VALUES(1234);
                    245:     PRAGMA page_size=4096;
                    246:     VACUUM;
                    247:     SELECT * FROM t1;
                    248:   }
                    249: } {1234}
                    250: do_test vacuum3-5.2 {
                    251:   db2 eval {
                    252:     PRAGMA page_size
                    253:   }
                    254: } {1024}
                    255: 
                    256: set create_database_sql {
                    257:   BEGIN; 
                    258:   CREATE TABLE t1(a, b, c); 
                    259:   INSERT INTO t1 VALUES(1, randstr(50,50), randstr(50,50)); 
                    260:   INSERT INTO t1 SELECT a+2, b||'-'||rowid, c||'-'||rowid FROM t1; 
                    261:   INSERT INTO t1 SELECT a+4, b||'-'||rowid, c||'-'||rowid FROM t1;
                    262:   INSERT INTO t1 SELECT a+8, b||'-'||rowid, c||'-'||rowid FROM t1;
                    263:   INSERT INTO t1 SELECT a+16, b||'-'||rowid, c||'-'||rowid FROM t1;
                    264:   INSERT INTO t1 SELECT a+32, b||'-'||rowid, c||'-'||rowid FROM t1;
                    265:   INSERT INTO t1 SELECT a+64, b||'-'||rowid, c||'-'||rowid FROM t1;
                    266:   INSERT INTO t1 SELECT a+128, b||'-'||rowid, c||'-'||rowid FROM t1;
                    267:   INSERT INTO t1 VALUES(1, randstr(600,600), randstr(600,600));
                    268:   CREATE TABLE t2 AS SELECT * FROM t1;
                    269:   CREATE TABLE t3 AS SELECT * FROM t1;
                    270:   COMMIT;
                    271:   DROP TABLE t2;
                    272: }
                    273: 
                    274: do_ioerr_test vacuum3-ioerr-1 -cksum true -sqlprep "
                    275:   PRAGMA page_size = 1024;
                    276:   $create_database_sql
                    277: " -sqlbody {
                    278:   PRAGMA page_size = 4096;
                    279:   VACUUM;
                    280: } 
                    281: do_ioerr_test vacuum3-ioerr-2 -cksum true -sqlprep " 
                    282:   PRAGMA page_size = 2048;
                    283:   $create_database_sql
                    284: " -sqlbody {
                    285:   PRAGMA page_size = 512;
                    286:   VACUUM;
                    287: } 
                    288: 
                    289: ifcapable autovacuum {
                    290:   do_ioerr_test vacuum3-ioerr-3 -cksum true -sqlprep "
                    291:     PRAGMA auto_vacuum = 0;
                    292:     $create_database_sql
                    293:   " -sqlbody {
                    294:     PRAGMA auto_vacuum = 1;
                    295:     VACUUM;
                    296:   } 
                    297:   do_ioerr_test vacuum3-ioerr-4 -cksum true -sqlprep "
                    298:     PRAGMA auto_vacuum = 1;
                    299:     $create_database_sql
                    300:   " -sqlbody {
                    301:     PRAGMA auto_vacuum = 0;
                    302:     VACUUM;
                    303:   } 
                    304: }
                    305: 
                    306: source $testdir/malloc_common.tcl
                    307: if {$MEMDEBUG} {
                    308:   do_malloc_test vacuum3-malloc-1 -sqlprep { 
                    309:     PRAGMA page_size = 2048;
                    310:     BEGIN; 
                    311:     CREATE TABLE t1(a, b, c); 
                    312:     INSERT INTO t1 VALUES(1, randstr(50,50), randstr(50,50)); 
                    313:     INSERT INTO t1 SELECT a+2, b||'-'||rowid, c||'-'||rowid FROM t1; 
                    314:     INSERT INTO t1 SELECT a+4, b||'-'||rowid, c||'-'||rowid FROM t1;
                    315:     INSERT INTO t1 SELECT a+8, b||'-'||rowid, c||'-'||rowid FROM t1;
                    316:     INSERT INTO t1 SELECT a+16, b||'-'||rowid, c||'-'||rowid FROM t1;
                    317:     INSERT INTO t1 SELECT a+32, b||'-'||rowid, c||'-'||rowid FROM t1;
                    318:     INSERT INTO t1 SELECT a+64, b||'-'||rowid, c||'-'||rowid FROM t1;
                    319:     INSERT INTO t1 SELECT a+128, b||'-'||rowid, c||'-'||rowid FROM t1;
                    320:     INSERT INTO t1 VALUES(1, randstr(600,600), randstr(600,600));
                    321:     CREATE TABLE t2 AS SELECT * FROM t1;
                    322:     CREATE TABLE t3 AS SELECT * FROM t1;
                    323:     COMMIT;
                    324:     DROP TABLE t2;
                    325:   } -sqlbody {
                    326:     PRAGMA page_size = 512;
                    327:     VACUUM;
                    328:   } 
                    329:   do_malloc_test vacuum3-malloc-2 -sqlprep { 
                    330:     PRAGMA encoding=UTF16;
                    331:     CREATE TABLE t1(a, b, c);
                    332:     INSERT INTO t1 VALUES(1, 2, 3);
                    333:     CREATE TABLE t2(x,y,z);
                    334:     INSERT INTO t2 SELECT * FROM t1;
                    335:   } -sqlbody {
                    336:     VACUUM;
                    337:   } 
                    338: }
                    339: 
                    340: finish_test

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