Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: third_party/sqlite/test/descidx1.test

Issue 3108030: Move bundled copy of sqlite one level deeper to better separate it... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/sqlite/test/delete3.test ('k') | third_party/sqlite/test/descidx2.test » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # 2005 December 21
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 script is descending indices.
13 #
14 # $Id: descidx1.test,v 1.10 2008/03/19 00:21:31 drh Exp $
15 #
16
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
19
20 db eval {PRAGMA legacy_file_format=OFF}
21
22 # This procedure sets the value of the file-format in file 'test.db'
23 # to $newval. Also, the schema cookie is incremented.
24 #
25 proc set_file_format {newval} {
26 hexio_write test.db 44 [hexio_render_int32 $newval]
27 set schemacookie [hexio_get_int [hexio_read test.db 40 4]]
28 incr schemacookie
29 hexio_write test.db 40 [hexio_render_int32 $schemacookie]
30 return {}
31 }
32
33 # This procedure returns the value of the file-format in file 'test.db'.
34 #
35 proc get_file_format {{fname test.db}} {
36 return [hexio_get_int [hexio_read $fname 44 4]]
37 }
38
39
40 # Verify that the file format starts as 4.
41 #
42 do_test descidx1-1.1 {
43 execsql {
44 CREATE TABLE t1(a,b);
45 CREATE INDEX i1 ON t1(b ASC);
46 }
47 get_file_format
48 } {4}
49 do_test descidx1-1.2 {
50 execsql {
51 CREATE INDEX i2 ON t1(a DESC);
52 }
53 get_file_format
54 } {4}
55
56 # Put some information in the table and verify that the descending
57 # index actually works.
58 #
59 do_test descidx1-2.1 {
60 execsql {
61 INSERT INTO t1 VALUES(1,1);
62 INSERT INTO t1 VALUES(2,2);
63 INSERT INTO t1 SELECT a+2, a+2 FROM t1;
64 INSERT INTO t1 SELECT a+4, a+4 FROM t1;
65 SELECT b FROM t1 WHERE a>3 AND a<7;
66 }
67 } {6 5 4}
68 do_test descidx1-2.2 {
69 execsql {
70 SELECT a FROM t1 WHERE b>3 AND b<7;
71 }
72 } {4 5 6}
73 do_test descidx1-2.3 {
74 execsql {
75 SELECT b FROM t1 WHERE a>=3 AND a<7;
76 }
77 } {6 5 4 3}
78 do_test descidx1-2.4 {
79 execsql {
80 SELECT b FROM t1 WHERE a>3 AND a<=7;
81 }
82 } {7 6 5 4}
83 do_test descidx1-2.5 {
84 execsql {
85 SELECT b FROM t1 WHERE a>=3 AND a<=7;
86 }
87 } {7 6 5 4 3}
88 do_test descidx1-2.6 {
89 execsql {
90 SELECT a FROM t1 WHERE b>=3 AND b<=7;
91 }
92 } {3 4 5 6 7}
93
94 # This procedure executes the SQL. Then it checks to see if the OP_Sort
95 # opcode was executed. If an OP_Sort did occur, then "sort" is appended
96 # to the result. If no OP_Sort happened, then "nosort" is appended.
97 #
98 # This procedure is used to check to make sure sorting is or is not
99 # occurring as expected.
100 #
101 proc cksort {sql} {
102 set ::sqlite_sort_count 0
103 set data [execsql $sql]
104 if {$::sqlite_sort_count} {set x sort} {set x nosort}
105 lappend data $x
106 return $data
107 }
108
109 # Test sorting using a descending index.
110 #
111 do_test descidx1-3.1 {
112 cksort {SELECT a FROM t1 ORDER BY a}
113 } {1 2 3 4 5 6 7 8 nosort}
114 do_test descidx1-3.2 {
115 cksort {SELECT a FROM t1 ORDER BY a ASC}
116 } {1 2 3 4 5 6 7 8 nosort}
117 do_test descidx1-3.3 {
118 cksort {SELECT a FROM t1 ORDER BY a DESC}
119 } {8 7 6 5 4 3 2 1 nosort}
120 do_test descidx1-3.4 {
121 cksort {SELECT b FROM t1 ORDER BY a}
122 } {1 2 3 4 5 6 7 8 nosort}
123 do_test descidx1-3.5 {
124 cksort {SELECT b FROM t1 ORDER BY a ASC}
125 } {1 2 3 4 5 6 7 8 nosort}
126 do_test descidx1-3.6 {
127 cksort {SELECT b FROM t1 ORDER BY a DESC}
128 } {8 7 6 5 4 3 2 1 nosort}
129 do_test descidx1-3.7 {
130 cksort {SELECT a FROM t1 ORDER BY b}
131 } {1 2 3 4 5 6 7 8 nosort}
132 do_test descidx1-3.8 {
133 cksort {SELECT a FROM t1 ORDER BY b ASC}
134 } {1 2 3 4 5 6 7 8 nosort}
135 do_test descidx1-3.9 {
136 cksort {SELECT a FROM t1 ORDER BY b DESC}
137 } {8 7 6 5 4 3 2 1 nosort}
138 do_test descidx1-3.10 {
139 cksort {SELECT b FROM t1 ORDER BY b}
140 } {1 2 3 4 5 6 7 8 nosort}
141 do_test descidx1-3.11 {
142 cksort {SELECT b FROM t1 ORDER BY b ASC}
143 } {1 2 3 4 5 6 7 8 nosort}
144 do_test descidx1-3.12 {
145 cksort {SELECT b FROM t1 ORDER BY b DESC}
146 } {8 7 6 5 4 3 2 1 nosort}
147
148 do_test descidx1-3.21 {
149 cksort {SELECT a FROM t1 WHERE a>3 AND a<8 ORDER BY a}
150 } {4 5 6 7 nosort}
151 do_test descidx1-3.22 {
152 cksort {SELECT a FROM t1 WHERE a>3 AND a<8 ORDER BY a ASC}
153 } {4 5 6 7 nosort}
154 do_test descidx1-3.23 {
155 cksort {SELECT a FROM t1 WHERE a>3 AND a<8 ORDER BY a DESC}
156 } {7 6 5 4 nosort}
157 do_test descidx1-3.24 {
158 cksort {SELECT b FROM t1 WHERE a>3 AND a<8 ORDER BY a}
159 } {4 5 6 7 nosort}
160 do_test descidx1-3.25 {
161 cksort {SELECT b FROM t1 WHERE a>3 AND a<8 ORDER BY a ASC}
162 } {4 5 6 7 nosort}
163 do_test descidx1-3.26 {
164 cksort {SELECT b FROM t1 WHERE a>3 AND a<8 ORDER BY a DESC}
165 } {7 6 5 4 nosort}
166
167 # Create a table with indices that are descending on some terms and
168 # ascending on others.
169 #
170 ifcapable bloblit {
171 do_test descidx1-4.1 {
172 execsql {
173 CREATE TABLE t2(a INT, b TEXT, c BLOB, d REAL);
174 CREATE INDEX i3 ON t2(a ASC, b DESC, c ASC);
175 CREATE INDEX i4 ON t2(b DESC, a ASC, d DESC);
176 INSERT INTO t2 VALUES(1,'one',x'31',1.0);
177 INSERT INTO t2 VALUES(2,'two',x'3232',2.0);
178 INSERT INTO t2 VALUES(3,'three',x'333333',3.0);
179 INSERT INTO t2 VALUES(4,'four',x'34343434',4.0);
180 INSERT INTO t2 VALUES(5,'five',x'3535353535',5.0);
181 INSERT INTO t2 VALUES(6,'six',x'363636363636',6.0);
182 INSERT INTO t2 VALUES(2,'two',x'323232',2.1);
183 INSERT INTO t2 VALUES(2,'zwei',x'3232',2.2);
184 INSERT INTO t2 VALUES(2,NULL,NULL,2.3);
185 SELECT count(*) FROM t2;
186 }
187 } {9}
188 do_test descidx1-4.2 {
189 execsql {
190 SELECT d FROM t2 ORDER BY a;
191 }
192 } {1.0 2.2 2.0 2.1 2.3 3.0 4.0 5.0 6.0}
193 do_test descidx1-4.3 {
194 execsql {
195 SELECT d FROM t2 WHERE a>=2;
196 }
197 } {2.2 2.0 2.1 2.3 3.0 4.0 5.0 6.0}
198 do_test descidx1-4.4 {
199 execsql {
200 SELECT d FROM t2 WHERE a>2;
201 }
202 } {3.0 4.0 5.0 6.0}
203 do_test descidx1-4.5 {
204 execsql {
205 SELECT d FROM t2 WHERE a=2 AND b>'two';
206 }
207 } {2.2}
208 do_test descidx1-4.6 {
209 execsql {
210 SELECT d FROM t2 WHERE a=2 AND b>='two';
211 }
212 } {2.2 2.0 2.1}
213 do_test descidx1-4.7 {
214 execsql {
215 SELECT d FROM t2 WHERE a=2 AND b<'two';
216 }
217 } {}
218 do_test descidx1-4.8 {
219 execsql {
220 SELECT d FROM t2 WHERE a=2 AND b<='two';
221 }
222 } {2.0 2.1}
223 }
224
225 do_test descidx1-5.1 {
226 execsql {
227 CREATE TABLE t3(a,b,c,d);
228 CREATE INDEX t3i1 ON t3(a DESC, b ASC, c DESC, d ASC);
229 INSERT INTO t3 VALUES(0,0,0,0);
230 INSERT INTO t3 VALUES(0,0,0,1);
231 INSERT INTO t3 VALUES(0,0,1,0);
232 INSERT INTO t3 VALUES(0,0,1,1);
233 INSERT INTO t3 VALUES(0,1,0,0);
234 INSERT INTO t3 VALUES(0,1,0,1);
235 INSERT INTO t3 VALUES(0,1,1,0);
236 INSERT INTO t3 VALUES(0,1,1,1);
237 INSERT INTO t3 VALUES(1,0,0,0);
238 INSERT INTO t3 VALUES(1,0,0,1);
239 INSERT INTO t3 VALUES(1,0,1,0);
240 INSERT INTO t3 VALUES(1,0,1,1);
241 INSERT INTO t3 VALUES(1,1,0,0);
242 INSERT INTO t3 VALUES(1,1,0,1);
243 INSERT INTO t3 VALUES(1,1,1,0);
244 INSERT INTO t3 VALUES(1,1,1,1);
245 SELECT count(*) FROM t3;
246 }
247 } {16}
248 do_test descidx1-5.2 {
249 cksort {
250 SELECT a||b||c||d FROM t3 ORDER BY a,b,c,d;
251 }
252 } {0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11 11 sort}
253 do_test descidx1-5.3 {
254 cksort {
255 SELECT a||b||c||d FROM t3 ORDER BY a DESC, b ASC, c DESC, d ASC;
256 }
257 } {1010 1011 1000 1001 1110 1111 1100 1101 0010 0011 0000 0001 0110 0111 0100 01 01 nosort}
258 do_test descidx1-5.4 {
259 cksort {
260 SELECT a||b||c||d FROM t3 ORDER BY a ASC, b DESC, c ASC, d DESC;
261 }
262 } {0101 0100 0111 0110 0001 0000 0011 0010 1101 1100 1111 1110 1001 1000 1011 10 10 nosort}
263 do_test descidx1-5.5 {
264 cksort {
265 SELECT a||b||c FROM t3 WHERE d=0 ORDER BY a DESC, b ASC, c DESC
266 }
267 } {101 100 111 110 001 000 011 010 nosort}
268 do_test descidx1-5.6 {
269 cksort {
270 SELECT a||b||c FROM t3 WHERE d=0 ORDER BY a ASC, b DESC, c ASC
271 }
272 } {010 011 000 001 110 111 100 101 nosort}
273 do_test descidx1-5.7 {
274 cksort {
275 SELECT a||b||c FROM t3 WHERE d=0 ORDER BY a ASC, b DESC, c DESC
276 }
277 } {011 010 001 000 111 110 101 100 sort}
278 do_test descidx1-5.8 {
279 cksort {
280 SELECT a||b||c FROM t3 WHERE d=0 ORDER BY a ASC, b ASC, c ASC
281 }
282 } {000 001 010 011 100 101 110 111 sort}
283 do_test descidx1-5.9 {
284 cksort {
285 SELECT a||b||c FROM t3 WHERE d=0 ORDER BY a DESC, b DESC, c ASC
286 }
287 } {110 111 100 101 010 011 000 001 sort}
288
289 # Test the legacy_file_format pragma here because we have access to
290 # the get_file_format command.
291 #
292 ifcapable legacyformat {
293 do_test descidx1-6.1 {
294 db close
295 file delete -force test.db test.db-journal
296 sqlite3 db test.db
297 execsql {PRAGMA legacy_file_format}
298 } {1}
299 } else {
300 do_test descidx1-6.1 {
301 db close
302 file delete -force test.db test.db-journal
303 sqlite3 db test.db
304 execsql {PRAGMA legacy_file_format}
305 } {0}
306 }
307 do_test descidx1-6.2 {
308 execsql {PRAGMA legacy_file_format=YES}
309 execsql {PRAGMA legacy_file_format}
310 } {1}
311 do_test descidx1-6.3 {
312 execsql {
313 CREATE TABLE t1(a,b,c);
314 }
315 get_file_format
316 } {1}
317 ifcapable vacuum {
318 # Verify that the file format is preserved across a vacuum.
319 do_test descidx1-6.3.1 {
320 execsql {VACUUM}
321 get_file_format
322 } {1}
323 }
324 do_test descidx1-6.4 {
325 db close
326 file delete -force test.db test.db-journal
327 sqlite3 db test.db
328 execsql {PRAGMA legacy_file_format=NO}
329 execsql {PRAGMA legacy_file_format}
330 } {0}
331 do_test descidx1-6.5 {
332 execsql {
333 CREATE TABLE t1(a,b,c);
334 CREATE INDEX i1 ON t1(a ASC, b DESC, c ASC);
335 INSERT INTO t1 VALUES(1,2,3);
336 INSERT INTO t1 VALUES(1,1,0);
337 INSERT INTO t1 VALUES(1,2,1);
338 INSERT INTO t1 VALUES(1,3,4);
339 }
340 get_file_format
341 } {4}
342 ifcapable vacuum {
343 # Verify that the file format is preserved across a vacuum.
344 do_test descidx1-6.6 {
345 execsql {VACUUM}
346 get_file_format
347 } {4}
348 do_test descidx1-6.7 {
349 execsql {
350 PRAGMA legacy_file_format=ON;
351 VACUUM;
352 }
353 get_file_format
354 } {4}
355 }
356
357
358
359 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/test/delete3.test ('k') | third_party/sqlite/test/descidx2.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698