wasCSharpSQLite – Blame information for rev 4

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 #
2 # 2001 September 15
3 #
4 # The author disclaims copyright to this source code. In place of
5 # a legal notice, here is a blessing:
6 #
7 # May you do good and not evil.
8 # May you find forgiveness for yourself and forgive others.
9 # May you share freely, never taking more than you give.
10 #
11 #***********************************************************************
12 # This file implements regression tests for SQLite library. The
13 # focus of this script is page cache subsystem.
14 #
15 # $Id: collate1.test,v 1.5 2007/02/01 23:02:46 drh Exp $
16  
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
19  
20 #
21 # Tests are roughly organised as follows:
22 #
23 # collate1-1.* - Single-field ORDER BY with an explicit COLLATE clause.
24 # collate1-2.* - Multi-field ORDER BY with an explicit COLLATE clause.
25 # collate1-3.* - ORDER BY using a default collation type. Also that an
26 # explict collate type overrides a default collate type.
27 # collate1-4.* - ORDER BY using a data type.
28 #
29  
30 #
31 # Collation type 'HEX'. If an argument can be interpreted as a hexadecimal
32 # number, then it is converted to one before the comparison is performed.
33 # Numbers are less than other strings. If neither argument is a number,
34 # [string compare] is used.
35 #
36 db collate HEX hex_collate
37 proc hex_collate {lhs rhs} {
38 set lhs_ishex [regexp {^(0x|)[1234567890abcdefABCDEF]+$} $lhs]
39 set rhs_ishex [regexp {^(0x|)[1234567890abcdefABCDEF]+$} $rhs]
40 if {$lhs_ishex && $rhs_ishex} {
41 set lhsx [scan $lhs %x]
42 set rhsx [scan $rhs %x]
43 if {$lhs < $rhs} {return -1}
44 if {$lhs == $rhs} {return 0}
45 if {$lhs > $rhs} {return 1}
46 }
47 if {$lhs_ishex} {
48 return -1;
49 }
50 if {$rhs_ishex} {
51 return 1;
52 }
53 return [string compare $lhs $rhs]
54 }
55 db function hex {format 0x%X}
56  
57 # Mimic the SQLite 2 collation type NUMERIC.
58 db collate numeric numeric_collate
59 proc numeric_collate {lhs rhs} {
60 if {$lhs == $rhs} {return 0}
61 return [expr ($lhs>$rhs)?1:-1]
62 }
63  
64 do_test collate1-1.0 {
65 execsql {
66 CREATE TABLE collate1t1(c1, c2);
67 INSERT INTO collate1t1 VALUES(45, hex(45));
68 INSERT INTO collate1t1 VALUES(NULL, NULL);
69 INSERT INTO collate1t1 VALUES(281, hex(281));
70 }
71 } {}
72 do_test collate1-1.1 {
73 execsql {
74 SELECT c2 FROM collate1t1 ORDER BY 1;
75 }
76 } {{} 0x119 0x2D}
77 do_test collate1-1.2 {
78 execsql {
79 SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex;
80 }
81 } {{} 0x2D 0x119}
82 do_test collate1-1.3 {
83 execsql {
84 SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex DESC;
85 }
86 } {0x119 0x2D {}}
87 do_test collate1-1.4 {
88 execsql {
89 SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex ASC;
90 }
91 } {{} 0x2D 0x119}
92 do_test collate1-1.5 {
93 execsql {
94 SELECT c2 COLLATE hex FROM collate1t1 ORDER BY 1
95 }
96 } {{} 0x2D 0x119}
97 do_test collate1-1.6 {
98 execsql {
99 SELECT c2 COLLATE hex FROM collate1t1 ORDER BY 1 ASC
100 }
101 } {{} 0x2D 0x119}
102 do_test collate1-1.7 {
103 execsql {
104 SELECT c2 COLLATE hex FROM collate1t1 ORDER BY 1 DESC
105 }
106 } {0x119 0x2D {}}
107 do_test collate1-1.99 {
108 execsql {
109 DROP TABLE collate1t1;
110 }
111 } {}
112  
113 do_test collate1-2.0 {
114 execsql {
115 CREATE TABLE collate1t1(c1, c2);
116 INSERT INTO collate1t1 VALUES('5', '0x11');
117 INSERT INTO collate1t1 VALUES('5', '0xA');
118 INSERT INTO collate1t1 VALUES(NULL, NULL);
119 INSERT INTO collate1t1 VALUES('7', '0xA');
120 INSERT INTO collate1t1 VALUES('11', '0x11');
121 INSERT INTO collate1t1 VALUES('11', '0x101');
122 }
123 } {}
124 do_test collate1-2.2 {
125 execsql {
126 SELECT c1, c2 FROM collate1t1 ORDER BY 1 COLLATE numeric, 2 COLLATE hex;
127 }
128 } {{} {} 5 0xA 5 0x11 7 0xA 11 0x11 11 0x101}
129 do_test collate1-2.3 {
130 execsql {
131 SELECT c1, c2 FROM collate1t1 ORDER BY 1 COLLATE binary, 2 COLLATE hex;
132 }
133 } {{} {} 11 0x11 11 0x101 5 0xA 5 0x11 7 0xA}
134 do_test collate1-2.4 {
135 execsql {
136 SELECT c1, c2 FROM collate1t1 ORDER BY 1 COLLATE binary DESC, 2 COLLATE hex;
137 }
138 } {7 0xA 5 0xA 5 0x11 11 0x11 11 0x101 {} {}}
139 do_test collate1-2.5 {
140 execsql {
141 SELECT c1, c2 FROM collate1t1
142 ORDER BY 1 COLLATE binary DESC, 2 COLLATE hex DESC;
143 }
144 } {7 0xA 5 0x11 5 0xA 11 0x101 11 0x11 {} {}}
145 do_test collate1-2.6 {
146 execsql {
147 SELECT c1, c2 FROM collate1t1
148 ORDER BY 1 COLLATE binary ASC, 2 COLLATE hex ASC;
149 }
150 } {{} {} 11 0x11 11 0x101 5 0xA 5 0x11 7 0xA}
151 do_test collate1-2.12.1 {
152 execsql {
153 SELECT c1 COLLATE numeric, c2 FROM collate1t1
154 ORDER BY 1, 2 COLLATE hex;
155 }
156 } {{} {} 5 0xA 5 0x11 7 0xA 11 0x11 11 0x101}
157 do_test collate1-2.12.2 {
158 execsql {
159 SELECT c1 COLLATE hex, c2 FROM collate1t1
160 ORDER BY 1 COLLATE numeric, 2 COLLATE hex;
161 }
162 } {{} {} 5 0xA 5 0x11 7 0xA 11 0x11 11 0x101}
163 do_test collate1-2.12.3 {
164 execsql {
165 SELECT c1, c2 COLLATE hex FROM collate1t1
166 ORDER BY 1 COLLATE numeric, 2;
167 }
168 } {{} {} 5 0xA 5 0x11 7 0xA 11 0x11 11 0x101}
169 do_test collate1-2.12.4 {
170 execsql {
171 SELECT c1 COLLATE numeric, c2 COLLATE hex
172 FROM collate1t1
173 ORDER BY 1, 2;
174 }
175 } {{} {} 5 0xA 5 0x11 7 0xA 11 0x11 11 0x101}
176 do_test collate1-2.13 {
177 execsql {
178 SELECT c1 COLLATE binary, c2 COLLATE hex
179 FROM collate1t1
180 ORDER BY 1, 2;
181 }
182 } {{} {} 11 0x11 11 0x101 5 0xA 5 0x11 7 0xA}
183 do_test collate1-2.14 {
184 execsql {
185 SELECT c1, c2
186 FROM collate1t1 ORDER BY 1 COLLATE binary DESC, 2 COLLATE hex;
187 }
188 } {7 0xA 5 0xA 5 0x11 11 0x11 11 0x101 {} {}}
189 do_test collate1-2.15 {
190 execsql {
191 SELECT c1 COLLATE binary, c2 COLLATE hex
192 FROM collate1t1
193 ORDER BY 1 DESC, 2 DESC;
194 }
195 } {7 0xA 5 0x11 5 0xA 11 0x101 11 0x11 {} {}}
196 do_test collate1-2.16 {
197 execsql {
198 SELECT c1 COLLATE hex, c2 COLLATE binary
199 FROM collate1t1
200 ORDER BY 1 COLLATE binary ASC, 2 COLLATE hex ASC;
201 }
202 } {{} {} 11 0x11 11 0x101 5 0xA 5 0x11 7 0xA}
203 do_test collate1-2.99 {
204 execsql {
205 DROP TABLE collate1t1;
206 }
207 } {}
208  
209 #
210 # These tests ensure that the default collation type for a column is used
211 # by an ORDER BY clause correctly. The focus is all the different ways
212 # the column can be referenced. i.e. a, collate2t1.a, main.collate2t1.a etc.
213 #
214 do_test collate1-3.0 {
215 execsql {
216 CREATE TABLE collate1t1(a COLLATE hex, b);
217 INSERT INTO collate1t1 VALUES( '0x5', 5 );
218 INSERT INTO collate1t1 VALUES( '1', 1 );
219 INSERT INTO collate1t1 VALUES( '0x45', 69 );
220 INSERT INTO collate1t1 VALUES( NULL, NULL );
221 SELECT * FROM collate1t1 ORDER BY a;
222 }
223 } {{} {} 1 1 0x5 5 0x45 69}
224  
225 do_test collate1-3.1 {
226 execsql {
227 SELECT * FROM collate1t1 ORDER BY 1;
228 }
229 } {{} {} 1 1 0x5 5 0x45 69}
230 do_test collate1-3.2 {
231 execsql {
232 SELECT * FROM collate1t1 ORDER BY collate1t1.a;
233 }
234 } {{} {} 1 1 0x5 5 0x45 69}
235 do_test collate1-3.3 {
236 execsql {
237 SELECT * FROM collate1t1 ORDER BY main.collate1t1.a;
238 }
239 } {{} {} 1 1 0x5 5 0x45 69}
240 do_test collate1-3.4 {
241 execsql {
242 SELECT a as c1, b as c2 FROM collate1t1 ORDER BY c1;
243 }
244 } {{} {} 1 1 0x5 5 0x45 69}
245 do_test collate1-3.5 {
246 execsql {
247 SELECT a as c1, b as c2 FROM collate1t1 ORDER BY c1 COLLATE binary;
248 }
249 } {{} {} 0x45 69 0x5 5 1 1}
250 do_test collate1-3.5.1 {
251 execsql {
252 SELECT a COLLATE binary as c1, b as c2
253 FROM collate1t1 ORDER BY c1;
254 }
255 } {{} {} 0x45 69 0x5 5 1 1}
256 do_test collate1-3.6 {
257 execsql {
258 DROP TABLE collate1t1;
259 }
260 } {}
261  
262 # Update for SQLite version 3. The collate1-4.* test cases were written
263 # before manifest types were introduced. The following test cases still
264 # work, due to the 'affinity' mechanism, but they don't prove anything
265 # about collation sequences.
266 #
267 do_test collate1-4.0 {
268 execsql {
269 CREATE TABLE collate1t1(c1 numeric, c2 text);
270 INSERT INTO collate1t1 VALUES(1, 1);
271 INSERT INTO collate1t1 VALUES(12, 12);
272 INSERT INTO collate1t1 VALUES(NULL, NULL);
273 INSERT INTO collate1t1 VALUES(101, 101);
274 }
275 } {}
276 do_test collate1-4.1 {
277 execsql {
278 SELECT c1 FROM collate1t1 ORDER BY 1;
279 }
280 } {{} 1 12 101}
281 do_test collate1-4.2 {
282 execsql {
283 SELECT c2 FROM collate1t1 ORDER BY 1;
284 }
285 } {{} 1 101 12}
286 do_test collate1-4.3 {
287 execsql {
288 SELECT c2+0 FROM collate1t1 ORDER BY 1;
289 }
290 } {{} 1 12 101}
291 do_test collate1-4.4 {
292 execsql {
293 SELECT c1||'' FROM collate1t1 ORDER BY 1;
294 }
295 } {{} 1 101 12}
296 do_test collate1-4.4.1 {
297 execsql {
298 SELECT (c1||'') COLLATE numeric FROM collate1t1 ORDER BY 1;
299 }
300 } {{} 1 12 101}
301 do_test collate1-4.5 {
302 execsql {
303 DROP TABLE collate1t1;
304 }
305 } {}
306  
307 finish_test