blob: 8887e2fe30c17daf14ee0e152bcef584e7f41d71 [file] [log] [blame]
drh5bb7ffe2004-09-02 15:14:00 +00001# 2004 September 2
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.
12# This file implements tests for the page_size PRAGMA.
13#
danielk19773bdca9c2006-01-17 09:35:01 +000014# $Id: pagesize.test,v 1.11 2006/01/17 09:35:02 danielk1977 Exp $
drh5bb7ffe2004-09-02 15:14:00 +000015
16
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
danielk1977c7b4a442004-11-23 10:52:51 +000020# This test script depends entirely on "PRAGMA page_size". So if this
21# pragma is not available, omit the whole file.
22ifcapable !pager_pragmas {
23 finish_test
24 return
25}
26
drh5bb7ffe2004-09-02 15:14:00 +000027do_test pagesize-1.1 {
28 execsql {PRAGMA page_size}
29} 1024
drh6bf89572004-11-03 16:27:01 +000030ifcapable {explain} {
31 do_test pagesize-1.2 {
32 catch {execsql {EXPLAIN PRAGMA page_size}}
33 } 0
34}
drh5bb7ffe2004-09-02 15:14:00 +000035do_test pagesize-1.3 {
36 execsql {
37 CREATE TABLE t1(a);
38 PRAGMA page_size=2048;
39 PRAGMA page_size;
40 }
41} 1024
drhf2a611c2004-09-05 00:33:43 +000042
drh5bb7ffe2004-09-02 15:14:00 +000043do_test pagesize-1.4 {
44 db close
45 file delete -force test.db
46 sqlite3 db test.db
47 execsql {
drhf2a611c2004-09-05 00:33:43 +000048 PRAGMA page_size=511;
drh5bb7ffe2004-09-02 15:14:00 +000049 PRAGMA page_size;
50 }
drhf2a611c2004-09-05 00:33:43 +000051} 1024
drh5bb7ffe2004-09-02 15:14:00 +000052do_test pagesize-1.5 {
drh5bb7ffe2004-09-02 15:14:00 +000053 execsql {
drhf2a611c2004-09-05 00:33:43 +000054 PRAGMA page_size=512;
55 PRAGMA page_size;
drh5bb7ffe2004-09-02 15:14:00 +000056 }
drhf2a611c2004-09-05 00:33:43 +000057} 512
drh5bb7ffe2004-09-02 15:14:00 +000058do_test pagesize-1.6 {
drhf2a611c2004-09-05 00:33:43 +000059 execsql {
60 PRAGMA page_size=8192;
61 PRAGMA page_size;
62 }
63} 8192
64do_test pagesize-1.7 {
65 execsql {
66 PRAGMA page_size=65537;
67 PRAGMA page_size;
68 }
69} 8192
drh06f50212004-11-02 14:24:33 +000070do_test pagesize-1.8 {
71 execsql {
72 PRAGMA page_size=1234;
73 PRAGMA page_size
74 }
75} 8192
drh5bb7ffe2004-09-02 15:14:00 +000076
drh06f50212004-11-02 14:24:33 +000077foreach PGSZ {512 2048 4096 8192} {
danielk19773bdca9c2006-01-17 09:35:01 +000078 ifcapable memorydb {
79 do_test pagesize-2.$PGSZ.0 {
80 db close
81 sqlite3 db :memory:
82 execsql "PRAGMA page_size=$PGSZ;"
83 execsql {PRAGMA page_size}
84 } 1024
85 }
drhf2a611c2004-09-05 00:33:43 +000086 do_test pagesize-2.$PGSZ.1 {
87 db close
88 file delete -force test.db
89 sqlite3 db test.db
90 execsql "PRAGMA page_size=$PGSZ"
91 execsql {
92 CREATE TABLE t1(x);
93 PRAGMA page_size;
94 }
95 } $PGSZ
96 do_test pagesize-2.$PGSZ.2 {
97 db close
98 sqlite3 db test.db
99 execsql {
100 PRAGMA page_size
101 }
102 } $PGSZ
103 do_test pagesize-2.$PGSZ.3 {
104 file size test.db
danielk197745901d62004-11-10 15:27:38 +0000105 } [expr {$PGSZ*($AUTOVACUUM?3:2)}]
drh798da522004-11-04 04:42:28 +0000106 ifcapable {vacuum} {
107 do_test pagesize-2.$PGSZ.4 {
108 execsql {VACUUM}
109 } {}
110 }
drhf2a611c2004-09-05 00:33:43 +0000111 integrity_check pagesize-2.$PGSZ.5
112 do_test pagesize-2.$PGSZ.6 {
113 db close
114 sqlite3 db test.db
115 execsql {PRAGMA page_size}
116 } $PGSZ
117 do_test pagesize-2.$PGSZ.7 {
118 execsql {
119 INSERT INTO t1 VALUES(randstr(10,9000));
120 INSERT INTO t1 VALUES(randstr(10,9000));
121 INSERT INTO t1 VALUES(randstr(10,9000));
122 BEGIN;
123 INSERT INTO t1 SELECT x||x FROM t1;
124 INSERT INTO t1 SELECT x||x FROM t1;
125 INSERT INTO t1 SELECT x||x FROM t1;
126 INSERT INTO t1 SELECT x||x FROM t1;
127 SELECT count(*) FROM t1;
128 }
129 } 48
130 do_test pagesize-2.$PGSZ.8 {
131 execsql {
132 ROLLBACK;
133 SELECT count(*) FROM t1;
134 }
135 } 3
136 integrity_check pagesize-2.$PGSZ.9
137 do_test pagesize-2.$PGSZ.10 {
138 db close
139 sqlite3 db test.db
140 execsql {PRAGMA page_size}
141 } $PGSZ
142 do_test pagesize-2.$PGSZ.11 {
143 execsql {
144 INSERT INTO t1 SELECT x||x FROM t1;
145 INSERT INTO t1 SELECT x||x FROM t1;
146 INSERT INTO t1 SELECT x||x FROM t1;
147 INSERT INTO t1 SELECT x||x FROM t1;
148 INSERT INTO t1 SELECT x||x FROM t1;
149 INSERT INTO t1 SELECT x||x FROM t1;
150 SELECT count(*) FROM t1;
151 }
152 } 192
153 do_test pagesize-2.$PGSZ.12 {
154 execsql {
155 BEGIN;
156 DELETE FROM t1 WHERE rowid%5!=0;
157 SELECT count(*) FROM t1;
158 }
159 } 38
160 do_test pagesize-2.$PGSZ.13 {
161 execsql {
162 ROLLBACK;
163 SELECT count(*) FROM t1;
164 }
165 } 192
166 integrity_check pagesize-2.$PGSZ.14
167 do_test pagesize-2.$PGSZ.15 {
drh798da522004-11-04 04:42:28 +0000168 execsql {DELETE FROM t1 WHERE rowid%5!=0}
169 ifcapable {vacuum} {execsql VACUUM}
170 execsql {SELECT count(*) FROM t1}
drhf2a611c2004-09-05 00:33:43 +0000171 } 38
172 do_test pagesize-2.$PGSZ.16 {
drh798da522004-11-04 04:42:28 +0000173 execsql {DROP TABLE t1}
174 ifcapable {vacuum} {execsql VACUUM}
drhf2a611c2004-09-05 00:33:43 +0000175 } {}
176 integrity_check pagesize-2.$PGSZ.17
177}
drh5bb7ffe2004-09-02 15:14:00 +0000178
179finish_test