diff options
author | dan miller | 2007-10-20 02:49:29 +0000 |
---|---|---|
committer | dan miller | 2007-10-20 02:49:29 +0000 |
commit | e36d23a85ebff914d74bb541558c2b6082b78edb (patch) | |
tree | 54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/test/analyze.test | |
parent | * Fixed an issue whereby avatar chat distances were being calculated against ... (diff) | |
download | opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.zip opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.gz opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.bz2 opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.xz |
sqlite source (unix build) added to libraries
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/analyze.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/analyze.test | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/analyze.test b/libraries/sqlite/unix/sqlite-3.5.1/test/analyze.test new file mode 100644 index 0000000..ded287e --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/analyze.test | |||
@@ -0,0 +1,257 @@ | |||
1 | # 2005 July 22 | ||
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 ANALYZE command. | ||
13 | # | ||
14 | # $Id: analyze.test,v 1.5 2005/09/10 22:40:54 drh Exp $ | ||
15 | |||
16 | set testdir [file dirname $argv0] | ||
17 | source $testdir/tester.tcl | ||
18 | |||
19 | # There is nothing to test if ANALYZE is disable for this build. | ||
20 | # | ||
21 | ifcapable {!analyze} { | ||
22 | finish_test | ||
23 | return | ||
24 | } | ||
25 | |||
26 | # Basic sanity checks. | ||
27 | # | ||
28 | do_test analyze-1.1 { | ||
29 | catchsql { | ||
30 | ANALYZE no_such_table | ||
31 | } | ||
32 | } {1 {no such table: no_such_table}} | ||
33 | do_test analyze-1.2 { | ||
34 | execsql { | ||
35 | SELECT count(*) FROM sqlite_master WHERE name='sqlite_stat1' | ||
36 | } | ||
37 | } {0} | ||
38 | do_test analyze-1.3 { | ||
39 | catchsql { | ||
40 | ANALYZE no_such_db.no_such_table | ||
41 | } | ||
42 | } {1 {unknown database no_such_db}} | ||
43 | do_test analyze-1.4 { | ||
44 | execsql { | ||
45 | SELECT count(*) FROM sqlite_master WHERE name='sqlite_stat1' | ||
46 | } | ||
47 | } {0} | ||
48 | do_test analyze-1.5.1 { | ||
49 | catchsql { | ||
50 | ANALYZE | ||
51 | } | ||
52 | } {0 {}} | ||
53 | do_test analyze-1.5.2 { | ||
54 | catchsql { | ||
55 | PRAGMA empty_result_callbacks=1; | ||
56 | ANALYZE | ||
57 | } | ||
58 | } {0 {}} | ||
59 | do_test analyze-1.6 { | ||
60 | execsql { | ||
61 | SELECT count(*) FROM sqlite_master WHERE name='sqlite_stat1' | ||
62 | } | ||
63 | } {1} | ||
64 | do_test analyze-1.7 { | ||
65 | execsql { | ||
66 | SELECT * FROM sqlite_stat1 | ||
67 | } | ||
68 | } {} | ||
69 | do_test analyze-1.8 { | ||
70 | catchsql { | ||
71 | ANALYZE main | ||
72 | } | ||
73 | } {0 {}} | ||
74 | do_test analyze-1.9 { | ||
75 | execsql { | ||
76 | SELECT * FROM sqlite_stat1 | ||
77 | } | ||
78 | } {} | ||
79 | do_test analyze-1.10 { | ||
80 | catchsql { | ||
81 | CREATE TABLE t1(a,b); | ||
82 | ANALYZE main.t1; | ||
83 | } | ||
84 | } {0 {}} | ||
85 | do_test analyze-1.11 { | ||
86 | execsql { | ||
87 | SELECT * FROM sqlite_stat1 | ||
88 | } | ||
89 | } {} | ||
90 | do_test analyze-1.12 { | ||
91 | catchsql { | ||
92 | ANALYZE t1; | ||
93 | } | ||
94 | } {0 {}} | ||
95 | do_test analyze-1.13 { | ||
96 | execsql { | ||
97 | SELECT * FROM sqlite_stat1 | ||
98 | } | ||
99 | } {} | ||
100 | |||
101 | # Create some indices that can be analyzed. But do not yet add | ||
102 | # data. Without data in the tables, no analysis is done. | ||
103 | # | ||
104 | do_test analyze-2.1 { | ||
105 | execsql { | ||
106 | CREATE INDEX t1i1 ON t1(a); | ||
107 | ANALYZE main.t1; | ||
108 | SELECT * FROM sqlite_stat1 ORDER BY idx; | ||
109 | } | ||
110 | } {} | ||
111 | do_test analyze-2.2 { | ||
112 | execsql { | ||
113 | CREATE INDEX t1i2 ON t1(b); | ||
114 | ANALYZE t1; | ||
115 | SELECT * FROM sqlite_stat1 ORDER BY idx; | ||
116 | } | ||
117 | } {} | ||
118 | do_test analyze-2.3 { | ||
119 | execsql { | ||
120 | CREATE INDEX t1i3 ON t1(a,b); | ||
121 | ANALYZE main; | ||
122 | SELECT * FROM sqlite_stat1 ORDER BY idx; | ||
123 | } | ||
124 | } {} | ||
125 | |||
126 | # Start adding data to the table. Verify that the analysis | ||
127 | # is done correctly. | ||
128 | # | ||
129 | do_test analyze-3.1 { | ||
130 | execsql { | ||
131 | INSERT INTO t1 VALUES(1,2); | ||
132 | INSERT INTO t1 VALUES(1,3); | ||
133 | ANALYZE main.t1; | ||
134 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
135 | } | ||
136 | } {t1i1 {2 2} t1i2 {2 1} t1i3 {2 2 1}} | ||
137 | do_test analyze-3.2 { | ||
138 | execsql { | ||
139 | INSERT INTO t1 VALUES(1,4); | ||
140 | INSERT INTO t1 VALUES(1,5); | ||
141 | ANALYZE t1; | ||
142 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
143 | } | ||
144 | } {t1i1 {4 4} t1i2 {4 1} t1i3 {4 4 1}} | ||
145 | do_test analyze-3.3 { | ||
146 | execsql { | ||
147 | INSERT INTO t1 VALUES(2,5); | ||
148 | ANALYZE main; | ||
149 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
150 | } | ||
151 | } {t1i1 {5 3} t1i2 {5 2} t1i3 {5 3 1}} | ||
152 | do_test analyze-3.4 { | ||
153 | execsql { | ||
154 | CREATE TABLE t2 AS SELECT * FROM t1; | ||
155 | CREATE INDEX t2i1 ON t2(a); | ||
156 | CREATE INDEX t2i2 ON t2(b); | ||
157 | CREATE INDEX t2i3 ON t2(a,b); | ||
158 | ANALYZE; | ||
159 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
160 | } | ||
161 | } {t1i1 {5 3} t1i2 {5 2} t1i3 {5 3 1} t2i1 {5 3} t2i2 {5 2} t2i3 {5 3 1}} | ||
162 | do_test analyze-3.5 { | ||
163 | execsql { | ||
164 | DROP INDEX t2i3; | ||
165 | ANALYZE t1; | ||
166 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
167 | } | ||
168 | } {t1i1 {5 3} t1i2 {5 2} t1i3 {5 3 1} t2i1 {5 3} t2i2 {5 2} t2i3 {5 3 1}} | ||
169 | do_test analyze-3.6 { | ||
170 | execsql { | ||
171 | ANALYZE t2; | ||
172 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
173 | } | ||
174 | } {t1i1 {5 3} t1i2 {5 2} t1i3 {5 3 1} t2i1 {5 3} t2i2 {5 2}} | ||
175 | do_test analyze-3.7 { | ||
176 | execsql { | ||
177 | DROP INDEX t2i2; | ||
178 | ANALYZE t2; | ||
179 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
180 | } | ||
181 | } {t1i1 {5 3} t1i2 {5 2} t1i3 {5 3 1} t2i1 {5 3}} | ||
182 | do_test analyze-3.8 { | ||
183 | execsql { | ||
184 | CREATE TABLE t3 AS SELECT a, b, rowid AS c, 'hi' AS d FROM t1; | ||
185 | CREATE INDEX t3i1 ON t3(a); | ||
186 | CREATE INDEX t3i2 ON t3(a,b,c,d); | ||
187 | CREATE INDEX t3i3 ON t3(d,b,c,a); | ||
188 | DROP TABLE t1; | ||
189 | DROP TABLE t2; | ||
190 | ANALYZE; | ||
191 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
192 | } | ||
193 | } {t3i1 {5 3} t3i2 {5 3 1 1 1} t3i3 {5 5 2 1 1}} | ||
194 | |||
195 | # Try corrupting the sqlite_stat1 table and make sure the | ||
196 | # database is still able to function. | ||
197 | # | ||
198 | do_test analyze-4.0 { | ||
199 | sqlite3 db2 test.db | ||
200 | db2 eval { | ||
201 | CREATE TABLE t4(x,y,z); | ||
202 | CREATE INDEX t4i1 ON t4(x); | ||
203 | CREATE INDEX t4i2 ON t4(y); | ||
204 | INSERT INTO t4 SELECT a,b,c FROM t3; | ||
205 | } | ||
206 | db2 close | ||
207 | db close | ||
208 | sqlite3 db test.db | ||
209 | execsql { | ||
210 | ANALYZE; | ||
211 | SELECT idx, stat FROM sqlite_stat1 ORDER BY idx; | ||
212 | } | ||
213 | } {t3i1 {5 3} t3i2 {5 3 1 1 1} t3i3 {5 5 2 1 1} t4i1 {5 3} t4i2 {5 2}} | ||
214 | do_test analyze-4.1 { | ||
215 | execsql { | ||
216 | PRAGMA writable_schema=on; | ||
217 | INSERT INTO sqlite_stat1 VALUES(null,null,null); | ||
218 | PRAGMA writable_schema=off; | ||
219 | } | ||
220 | db close | ||
221 | sqlite3 db test.db | ||
222 | execsql { | ||
223 | SELECT * FROM t4 WHERE x=1234; | ||
224 | } | ||
225 | } {} | ||
226 | do_test analyze-4.2 { | ||
227 | execsql { | ||
228 | PRAGMA writable_schema=on; | ||
229 | DELETE FROM sqlite_stat1; | ||
230 | INSERT INTO sqlite_stat1 VALUES('t4','t4i1','nonsense'); | ||
231 | INSERT INTO sqlite_stat1 VALUES('t4','t4i2','120897349817238741092873198273409187234918720394817209384710928374109827172901827349871928741910'); | ||
232 | PRAGMA writable_schema=off; | ||
233 | } | ||
234 | db close | ||
235 | sqlite3 db test.db | ||
236 | execsql { | ||
237 | SELECT * FROM t4 WHERE x=1234; | ||
238 | } | ||
239 | } {} | ||
240 | |||
241 | # This test corrupts the database file so it must be the last test | ||
242 | # in the series. | ||
243 | # | ||
244 | do_test analyze-99.1 { | ||
245 | execsql { | ||
246 | PRAGMA writable_schema=on; | ||
247 | UPDATE sqlite_master SET sql='nonsense'; | ||
248 | } | ||
249 | db close | ||
250 | sqlite3 db test.db | ||
251 | catchsql { | ||
252 | ANALYZE | ||
253 | } | ||
254 | } {1 {malformed database schema - near "nonsense": syntax error}} | ||
255 | |||
256 | |||
257 | finish_test | ||