OLD | NEW |
| (Empty) |
1 # 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 # | |
14 # $Id: pagesize.test,v 1.13 2008/08/26 21:07:27 drh Exp $ | |
15 | |
16 | |
17 set testdir [file dirname $argv0] | |
18 source $testdir/tester.tcl | |
19 | |
20 # This test script depends entirely on "PRAGMA page_size". So if this | |
21 # pragma is not available, omit the whole file. | |
22 ifcapable !pager_pragmas { | |
23 finish_test | |
24 return | |
25 } | |
26 | |
27 do_test pagesize-1.1 { | |
28 execsql {PRAGMA page_size} | |
29 } 1024 | |
30 ifcapable {explain} { | |
31 do_test pagesize-1.2 { | |
32 catch {execsql {EXPLAIN PRAGMA page_size}} | |
33 } 0 | |
34 } | |
35 do_test pagesize-1.3 { | |
36 execsql { | |
37 CREATE TABLE t1(a); | |
38 PRAGMA page_size=2048; | |
39 PRAGMA page_size; | |
40 } | |
41 } 1024 | |
42 | |
43 do_test pagesize-1.4 { | |
44 db close | |
45 forcedelete test.db | |
46 sqlite3 db test.db | |
47 execsql { | |
48 PRAGMA page_size=511; | |
49 PRAGMA page_size; | |
50 } | |
51 } 1024 | |
52 do_test pagesize-1.5 { | |
53 execsql { | |
54 PRAGMA page_size=512; | |
55 PRAGMA page_size; | |
56 } | |
57 } 512 | |
58 if {![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 } | |
78 foreach PGSZ {512 2048 4096 8192} { | |
79 if {[info exists SQLITE_MAX_PAGE_SIZE] | |
80 && $SQLITE_MAX_PAGE_SIZE<$PGSZ} continue | |
81 ifcapable memorydb { | |
82 do_test pagesize-2.$PGSZ.0.1 { | |
83 db close | |
84 sqlite3 db :memory: | |
85 execsql "PRAGMA page_size=$PGSZ;" | |
86 execsql {PRAGMA page_size} | |
87 } $PGSZ | |
88 do_test pagesize-2.$PGSZ.0.2 { | |
89 execsql {CREATE TABLE t1(x UNIQUE, y UNIQUE, z UNIQUE)} | |
90 execsql {PRAGMA page_size} | |
91 } $PGSZ | |
92 do_test pagesize-2.$PGSZ.0.3 { | |
93 execsql { | |
94 INSERT INTO t1 VALUES(1,2,3); | |
95 INSERT INTO t1 VALUES(2,3,4); | |
96 SELECT * FROM t1; | |
97 } | |
98 } {1 2 3 2 3 4} | |
99 } | |
100 do_test pagesize-2.$PGSZ.1 { | |
101 db close | |
102 forcedelete test.db | |
103 sqlite3 db test.db | |
104 execsql "PRAGMA page_size=$PGSZ" | |
105 execsql { | |
106 CREATE TABLE t1(x); | |
107 PRAGMA page_size; | |
108 } | |
109 } $PGSZ | |
110 do_test pagesize-2.$PGSZ.2 { | |
111 db close | |
112 sqlite3 db test.db | |
113 execsql { | |
114 PRAGMA page_size | |
115 } | |
116 } $PGSZ | |
117 do_test pagesize-2.$PGSZ.3 { | |
118 file size test.db | |
119 } [expr {$PGSZ*($AUTOVACUUM?3:2)}] | |
120 ifcapable {vacuum} { | |
121 do_test pagesize-2.$PGSZ.4 { | |
122 execsql {VACUUM} | |
123 } {} | |
124 } | |
125 integrity_check pagesize-2.$PGSZ.5 | |
126 do_test pagesize-2.$PGSZ.6 { | |
127 db close | |
128 sqlite3 db test.db | |
129 execsql {PRAGMA page_size} | |
130 } $PGSZ | |
131 do_test pagesize-2.$PGSZ.7 { | |
132 execsql { | |
133 INSERT INTO t1 VALUES(randstr(10,9000)); | |
134 INSERT INTO t1 VALUES(randstr(10,9000)); | |
135 INSERT INTO t1 VALUES(randstr(10,9000)); | |
136 BEGIN; | |
137 INSERT INTO t1 SELECT x||x FROM t1; | |
138 INSERT INTO t1 SELECT x||x FROM t1; | |
139 INSERT INTO t1 SELECT x||x FROM t1; | |
140 INSERT INTO t1 SELECT x||x FROM t1; | |
141 SELECT count(*) FROM t1; | |
142 } | |
143 } 48 | |
144 do_test pagesize-2.$PGSZ.8 { | |
145 execsql { | |
146 ROLLBACK; | |
147 SELECT count(*) FROM t1; | |
148 } | |
149 } 3 | |
150 integrity_check pagesize-2.$PGSZ.9 | |
151 do_test pagesize-2.$PGSZ.10 { | |
152 db close | |
153 sqlite3 db test.db | |
154 execsql {PRAGMA page_size} | |
155 } $PGSZ | |
156 do_test pagesize-2.$PGSZ.11 { | |
157 execsql { | |
158 INSERT INTO t1 SELECT x||x FROM t1; | |
159 INSERT INTO t1 SELECT x||x FROM t1; | |
160 INSERT INTO t1 SELECT x||x FROM t1; | |
161 INSERT INTO t1 SELECT x||x FROM t1; | |
162 INSERT INTO t1 SELECT x||x FROM t1; | |
163 INSERT INTO t1 SELECT x||x FROM t1; | |
164 SELECT count(*) FROM t1; | |
165 } | |
166 } 192 | |
167 do_test pagesize-2.$PGSZ.12 { | |
168 execsql { | |
169 BEGIN; | |
170 DELETE FROM t1 WHERE rowid%5!=0; | |
171 SELECT count(*) FROM t1; | |
172 } | |
173 } 38 | |
174 do_test pagesize-2.$PGSZ.13 { | |
175 execsql { | |
176 ROLLBACK; | |
177 SELECT count(*) FROM t1; | |
178 } | |
179 } 192 | |
180 integrity_check pagesize-2.$PGSZ.14 | |
181 do_test pagesize-2.$PGSZ.15 { | |
182 execsql {DELETE FROM t1 WHERE rowid%5!=0} | |
183 ifcapable {vacuum} {execsql VACUUM} | |
184 execsql {SELECT count(*) FROM t1} | |
185 } 38 | |
186 do_test pagesize-2.$PGSZ.16 { | |
187 execsql {DROP TABLE t1} | |
188 ifcapable {vacuum} {execsql VACUUM} | |
189 } {} | |
190 integrity_check pagesize-2.$PGSZ.17 | |
191 | |
192 db close | |
193 forcedelete test.db | |
194 sqlite3 db test.db | |
195 do_test pagesize-2.$PGSZ.30 { | |
196 execsql " | |
197 CREATE TABLE t1(x); | |
198 PRAGMA temp.page_size=$PGSZ; | |
199 CREATE TEMP TABLE t2(y); | |
200 PRAGMA main.page_size; | |
201 PRAGMA temp.page_size; | |
202 " | |
203 } [list 1024 $PGSZ] | |
204 | |
205 db close | |
206 forcedelete test.db | |
207 sqlite3 db test.db | |
208 do_test pagesize-2.$PGSZ.40 { | |
209 execsql " | |
210 PRAGMA page_size=$PGSZ; | |
211 CREATE TABLE t1(x); | |
212 CREATE TEMP TABLE t2(y); | |
213 PRAGMA main.page_size; | |
214 PRAGMA temp.page_size; | |
215 " | |
216 } [list $PGSZ $PGSZ] | |
217 } | |
218 | |
219 finish_test | |
OLD | NEW |