blob: a598b9f860d4f7d7cec50d5a5b64dc6a85949374 [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#
drh1e9daa62007-04-06 21:42:22 +000014# $Id: pagesize.test,v 1.12 2007/04/06 21:42:22 drh 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
drh1e9daa62007-04-06 21:42:22 +000058if {![info exists SQLITE_MAX_PAGE_SIZE] || $SQLITE_MAX_PAGE_SIZE>=8192} {
59 do_test pagesize-1.6 {
60 execsql {
61 PRAGMA page_size=8192;
62 PRAGMA page_size;
63 }
64 } 8192
65 do_test pagesize-1.7 {
66 execsql {
67 PRAGMA page_size=65537;
68 PRAGMA page_size;
69 }
70 } 8192
71 do_test pagesize-1.8 {
72 execsql {
73 PRAGMA page_size=1234;
74 PRAGMA page_size
75 }
76 } 8192
77}
drh06f50212004-11-02 14:24:33 +000078foreach PGSZ {512 2048 4096 8192} {
drh1e9daa62007-04-06 21:42:22 +000079 if {[info exists SQLITE_MAX_PAGE_SIZE]
80 && $SQLITE_MAX_PAGE_SIZE<$PGSZ} continue
danielk19773bdca9c2006-01-17 09:35:01 +000081 ifcapable memorydb {
82 do_test pagesize-2.$PGSZ.0 {
83 db close
84 sqlite3 db :memory:
85 execsql "PRAGMA page_size=$PGSZ;"
86 execsql {PRAGMA page_size}
87 } 1024
88 }
drhf2a611c2004-09-05 00:33:43 +000089 do_test pagesize-2.$PGSZ.1 {
90 db close
91 file delete -force test.db
92 sqlite3 db test.db
93 execsql "PRAGMA page_size=$PGSZ"
94 execsql {
95 CREATE TABLE t1(x);
96 PRAGMA page_size;
97 }
98 } $PGSZ
99 do_test pagesize-2.$PGSZ.2 {
100 db close
101 sqlite3 db test.db
102 execsql {
103 PRAGMA page_size
104 }
105 } $PGSZ
106 do_test pagesize-2.$PGSZ.3 {
107 file size test.db
danielk197745901d62004-11-10 15:27:38 +0000108 } [expr {$PGSZ*($AUTOVACUUM?3:2)}]
drh798da522004-11-04 04:42:28 +0000109 ifcapable {vacuum} {
110 do_test pagesize-2.$PGSZ.4 {
111 execsql {VACUUM}
112 } {}
113 }
drhf2a611c2004-09-05 00:33:43 +0000114 integrity_check pagesize-2.$PGSZ.5
115 do_test pagesize-2.$PGSZ.6 {
116 db close
117 sqlite3 db test.db
118 execsql {PRAGMA page_size}
119 } $PGSZ
120 do_test pagesize-2.$PGSZ.7 {
121 execsql {
122 INSERT INTO t1 VALUES(randstr(10,9000));
123 INSERT INTO t1 VALUES(randstr(10,9000));
124 INSERT INTO t1 VALUES(randstr(10,9000));
125 BEGIN;
126 INSERT INTO t1 SELECT x||x FROM t1;
127 INSERT INTO t1 SELECT x||x FROM t1;
128 INSERT INTO t1 SELECT x||x FROM t1;
129 INSERT INTO t1 SELECT x||x FROM t1;
130 SELECT count(*) FROM t1;
131 }
132 } 48
133 do_test pagesize-2.$PGSZ.8 {
134 execsql {
135 ROLLBACK;
136 SELECT count(*) FROM t1;
137 }
138 } 3
139 integrity_check pagesize-2.$PGSZ.9
140 do_test pagesize-2.$PGSZ.10 {
141 db close
142 sqlite3 db test.db
143 execsql {PRAGMA page_size}
144 } $PGSZ
145 do_test pagesize-2.$PGSZ.11 {
146 execsql {
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 INSERT INTO t1 SELECT x||x FROM t1;
151 INSERT INTO t1 SELECT x||x FROM t1;
152 INSERT INTO t1 SELECT x||x FROM t1;
153 SELECT count(*) FROM t1;
154 }
155 } 192
156 do_test pagesize-2.$PGSZ.12 {
157 execsql {
158 BEGIN;
159 DELETE FROM t1 WHERE rowid%5!=0;
160 SELECT count(*) FROM t1;
161 }
162 } 38
163 do_test pagesize-2.$PGSZ.13 {
164 execsql {
165 ROLLBACK;
166 SELECT count(*) FROM t1;
167 }
168 } 192
169 integrity_check pagesize-2.$PGSZ.14
170 do_test pagesize-2.$PGSZ.15 {
drh798da522004-11-04 04:42:28 +0000171 execsql {DELETE FROM t1 WHERE rowid%5!=0}
172 ifcapable {vacuum} {execsql VACUUM}
173 execsql {SELECT count(*) FROM t1}
drhf2a611c2004-09-05 00:33:43 +0000174 } 38
175 do_test pagesize-2.$PGSZ.16 {
drh798da522004-11-04 04:42:28 +0000176 execsql {DROP TABLE t1}
177 ifcapable {vacuum} {execsql VACUUM}
drhf2a611c2004-09-05 00:33:43 +0000178 } {}
179 integrity_check pagesize-2.$PGSZ.17
180}
drh5bb7ffe2004-09-02 15:14:00 +0000181
182finish_test