OLD | NEW |
| (Empty) |
1 # 2004 November 5 | |
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 REINDEX command. | |
13 # | |
14 # $Id: reindex.test,v 1.4 2008/07/12 14:52:20 drh Exp $ | |
15 | |
16 set testdir [file dirname $argv0] | |
17 source $testdir/tester.tcl | |
18 | |
19 # There is nothing to test if REINDEX is disable for this build. | |
20 # | |
21 ifcapable {!reindex} { | |
22 finish_test | |
23 return | |
24 } | |
25 | |
26 # Basic sanity checks. | |
27 # | |
28 do_test reindex-1.1 { | |
29 execsql { | |
30 CREATE TABLE t1(a,b); | |
31 INSERT INTO t1 VALUES(1,2); | |
32 INSERT INTO t1 VALUES(3,4); | |
33 CREATE INDEX i1 ON t1(a); | |
34 REINDEX; | |
35 } | |
36 } {} | |
37 integrity_check reindex-1.2 | |
38 do_test reindex-1.3 { | |
39 execsql { | |
40 REINDEX t1; | |
41 } | |
42 } {} | |
43 integrity_check reindex-1.4 | |
44 do_test reindex-1.5 { | |
45 execsql { | |
46 REINDEX i1; | |
47 } | |
48 } {} | |
49 integrity_check reindex-1.6 | |
50 do_test reindex-1.7 { | |
51 execsql { | |
52 REINDEX main.t1; | |
53 } | |
54 } {} | |
55 do_test reindex-1.8 { | |
56 execsql { | |
57 REINDEX main.i1; | |
58 } | |
59 } {} | |
60 do_test reindex-1.9 { | |
61 catchsql { | |
62 REINDEX bogus | |
63 } | |
64 } {1 {unable to identify the object to be reindexed}} | |
65 | |
66 # Set up a table for testing that includes several different collating | |
67 # sequences including some that we can modify. | |
68 # | |
69 do_test reindex-2.1 { | |
70 proc c1 {a b} { | |
71 return [expr {-[string compare $a $b]}] | |
72 } | |
73 proc c2 {a b} { | |
74 return [expr {-[string compare [string tolower $a] [string tolower $b]]}] | |
75 } | |
76 db collate c1 c1 | |
77 db collate c2 c2 | |
78 execsql { | |
79 CREATE TABLE t2( | |
80 a TEXT PRIMARY KEY COLLATE c1, | |
81 b TEXT UNIQUE COLLATE c2, | |
82 c TEXT COLLATE nocase, | |
83 d TEST COLLATE binary | |
84 ); | |
85 INSERT INTO t2 VALUES('abc','abc','abc','abc'); | |
86 INSERT INTO t2 VALUES('ABCD','ABCD','ABCD','ABCD'); | |
87 INSERT INTO t2 VALUES('bcd','bcd','bcd','bcd'); | |
88 INSERT INTO t2 VALUES('BCDE','BCDE','BCDE','BCDE'); | |
89 SELECT a FROM t2 ORDER BY a; | |
90 } | |
91 } {bcd abc BCDE ABCD} | |
92 do_test reindex-2.2 { | |
93 execsql { | |
94 SELECT b FROM t2 ORDER BY b; | |
95 } | |
96 } {BCDE bcd ABCD abc} | |
97 do_test reindex-2.3 { | |
98 execsql { | |
99 SELECT c FROM t2 ORDER BY c; | |
100 } | |
101 } {abc ABCD bcd BCDE} | |
102 do_test reindex-2.4 { | |
103 execsql { | |
104 SELECT d FROM t2 ORDER BY d; | |
105 } | |
106 } {ABCD BCDE abc bcd} | |
107 | |
108 # Change a collating sequence function. Verify that REINDEX rebuilds | |
109 # the index. | |
110 # | |
111 do_test reindex-2.5 { | |
112 proc c1 {a b} { | |
113 return [string compare $a $b] | |
114 } | |
115 execsql { | |
116 SELECT a FROM t2 ORDER BY a; | |
117 } | |
118 } {bcd abc BCDE ABCD} | |
119 ifcapable {integrityck} { | |
120 do_test reindex-2.5.1 { | |
121 string equal ok [execsql {PRAGMA integrity_check}] | |
122 } {0} | |
123 } | |
124 do_test reindex-2.6 { | |
125 execsql { | |
126 REINDEX c2; | |
127 SELECT a FROM t2 ORDER BY a; | |
128 } | |
129 } {bcd abc BCDE ABCD} | |
130 do_test reindex-2.7 { | |
131 execsql { | |
132 REINDEX t1; | |
133 SELECT a FROM t2 ORDER BY a; | |
134 } | |
135 } {bcd abc BCDE ABCD} | |
136 do_test reindex-2.8 { | |
137 execsql { | |
138 REINDEX c1; | |
139 SELECT a FROM t2 ORDER BY a; | |
140 } | |
141 } {ABCD BCDE abc bcd} | |
142 integrity_check reindex-2.8.1 | |
143 | |
144 # Try to REINDEX an index for which the collation sequence is not available. | |
145 # | |
146 do_test reindex-3.1 { | |
147 sqlite3 db2 test.db | |
148 catchsql { | |
149 REINDEX c1; | |
150 } db2 | |
151 } {1 {no such collation sequence: c1}} | |
152 do_test reindex-3.2 { | |
153 proc need_collate {collation} { | |
154 db2 collate c1 c1 | |
155 } | |
156 db2 collation_needed need_collate | |
157 catchsql { | |
158 REINDEX c1; | |
159 } db2 | |
160 } {0 {}} | |
161 do_test reindex-3.3 { | |
162 catchsql { | |
163 REINDEX; | |
164 } db2 | |
165 } {1 {no such collation sequence: c2}} | |
166 | |
167 do_test reindex-3.99 { | |
168 db2 close | |
169 } {} | |
170 | |
171 finish_test | |
OLD | NEW |