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

Side by Side Diff: third_party/sqlite/src/ext/fts5/test/fts5vocab.test

Issue 2751253002: [sql] Import SQLite 3.17.0. (Closed)
Patch Set: also clang on Linux i386 Created 3 years, 9 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
OLDNEW
1 # 2015 Apr 24 1 # 2015 Apr 24
2 # 2 #
3 # The author disclaims copyright to this source code. In place of 3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing: 4 # a legal notice, here is a blessing:
5 # 5 #
6 # May you do good and not evil. 6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others. 7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give. 8 # May you share freely, never taking more than you give.
9 # 9 #
10 #*********************************************************************** 10 #***********************************************************************
11 # 11 #
12 # The tests in this file focus on testing the fts5vocab module. 12 # The tests in this file focus on testing the fts5vocab module.
13 # 13 #
14 14
15 source [file join [file dirname [info script]] fts5_common.tcl] 15 source [file join [file dirname [info script]] fts5_common.tcl]
16 set testprefix fts5vocab 16 set testprefix fts5vocab
17 17
18 # If SQLITE_ENABLE_FTS5 is defined, omit this file. 18 # If SQLITE_ENABLE_FTS5 is defined, omit this file.
19 ifcapable !fts5 { 19 ifcapable !fts5 {
20 finish_test 20 finish_test
21 return 21 return
22 } 22 }
23 23
24 foreach_detail_mode $testprefix {
25
26 proc null_list_entries {iFirst nInterval L} {
27 for {set i $iFirst} {$i < [llength $L]} {incr i $nInterval} {
28 lset L $i {}
29 }
30 return $L
31 }
32
33 proc star_from_row {L} {
34 if {[detail_is_full]==0} {
35 set L [null_list_entries 2 3 $L]
36 }
37 return $L
38 }
39
40 proc star_from_col {L} {
41 if {[detail_is_col]} {
42 set L [null_list_entries 3 4 $L]
43 }
44 if {[detail_is_none]} {
45 set L [null_list_entries 1 4 $L]
46 set L [null_list_entries 3 4 $L]
47 }
48 return $L
49 }
50
51 proc row_to_col {L} {
52 if {[detail_is_none]==0} { error "this is for detail=none mode" }
53 set ret [list]
54 foreach {a b c} $L {
55 lappend ret $a {} $b {}
56 }
57 set ret
58 }
59
60 if 1 {
24 61
25 do_execsql_test 1.1.1 { 62 do_execsql_test 1.1.1 {
26 CREATE VIRTUAL TABLE t1 USING fts5(one, prefix=1); 63 CREATE VIRTUAL TABLE t1 USING fts5(one, prefix=1, detail=%DETAIL%);
27 CREATE VIRTUAL TABLE v1 USING fts5vocab(t1, 'row'); 64 CREATE VIRTUAL TABLE v1 USING fts5vocab(t1, 'row');
28 PRAGMA table_info = v1; 65 PRAGMA table_info = v1;
29 } { 66 } {
30 0 term {} 0 {} 0 67 0 term {} 0 {} 0
31 1 doc {} 0 {} 0 68 1 doc {} 0 {} 0
32 2 cnt {} 0 {} 0 69 2 cnt {} 0 {} 0
33 } 70 }
34 71
35 do_execsql_test 1.1.2 { 72 do_execsql_test 1.1.2 {
36 CREATE VIRTUAL TABLE v2 USING fts5vocab(t1, 'col'); 73 CREATE VIRTUAL TABLE v2 USING fts5vocab(t1, 'col');
37 PRAGMA table_info = v2; 74 PRAGMA table_info = v2;
38 } { 75 } {
39 0 term {} 0 {} 0 76 0 term {} 0 {} 0
40 1 col {} 0 {} 0 77 1 col {} 0 {} 0
41 2 doc {} 0 {} 0 78 2 doc {} 0 {} 0
42 3 cnt {} 0 {} 0 79 3 cnt {} 0 {} 0
43 } 80 }
44 81
45 do_execsql_test 1.2.1 { SELECT * FROM v1 } { } 82 do_execsql_test 1.2.1 { SELECT * FROM v1 } { }
46 do_execsql_test 1.2.2 { SELECT * FROM v2 } { } 83 do_execsql_test 1.2.2 { SELECT * FROM v2 } { }
47 84
48 do_execsql_test 1.3 { 85 do_execsql_test 1.3 {
49 INSERT INTO t1 VALUES('x y z'); 86 INSERT INTO t1 VALUES('x y z');
50 INSERT INTO t1 VALUES('x x x'); 87 INSERT INTO t1 VALUES('x x x');
51 } 88 }
52 89
53 do_execsql_test 1.4.1 { 90 do_execsql_test 1.4.1 {
54 SELECT * FROM v1; 91 SELECT * FROM v1;
55 } {x 2 4 y 1 1 z 1 1} 92 } [star_from_row {x 2 4 y 1 1 z 1 1}]
56 93
57 do_execsql_test 1.4.2 { 94 do_execsql_test 1.4.2 {
58 SELECT * FROM v2; 95 SELECT * FROM v2;
59 } {x one 2 4 y one 1 1 z one 1 1} 96 } [star_from_col {x one 2 4 y one 1 1 z one 1 1}]
60 97
61 do_execsql_test 1.5.1 { 98 do_execsql_test 1.5.1 {
62 BEGIN; 99 BEGIN;
63 INSERT INTO t1 VALUES('a b c'); 100 INSERT INTO t1 VALUES('a b c');
64 SELECT * FROM v1 WHERE term<'d'; 101 SELECT * FROM v1 WHERE term<'d';
65 } {a 1 1 b 1 1 c 1 1} 102 } [star_from_row {a 1 1 b 1 1 c 1 1}]
66 103
67 do_execsql_test 1.5.2 { 104 do_execsql_test 1.5.2 {
68 SELECT * FROM v2 WHERE term<'d'; 105 SELECT * FROM v2 WHERE term<'d';
69 COMMIT; 106 COMMIT;
70 } {a one 1 1 b one 1 1 c one 1 1} 107 } [star_from_col {a one 1 1 b one 1 1 c one 1 1}]
71 108
72 do_execsql_test 1.6 { 109 do_execsql_test 1.6 {
73 DELETE FROM t1 WHERE one = 'a b c'; 110 DELETE FROM t1 WHERE one = 'a b c';
74 SELECT * FROM v1; 111 SELECT * FROM v1;
75 } {x 2 4 y 1 1 z 1 1} 112 } [star_from_row {x 2 4 y 1 1 z 1 1}]
76 113
77 #------------------------------------------------------------------------- 114 #-------------------------------------------------------------------------
78 # 115 #
79 do_execsql_test 2.0 { 116 do_execsql_test 2.0 {
80 CREATE VIRTUAL TABLE tt USING fts5(a, b); 117 CREATE VIRTUAL TABLE tt USING fts5(a, b, detail=%DETAIL%);
81 INSERT INTO tt VALUES('d g b f d f', 'f c e c d a'); 118 INSERT INTO tt VALUES('d g b f d f', 'f c e c d a');
82 INSERT INTO tt VALUES('f a e a a b', 'e d c f d d'); 119 INSERT INTO tt VALUES('f a e a a b', 'e d c f d d');
83 INSERT INTO tt VALUES('b c a a a b', 'f f c c b c'); 120 INSERT INTO tt VALUES('b c a a a b', 'f f c c b c');
84 INSERT INTO tt VALUES('f d c a c e', 'd g d e g d'); 121 INSERT INTO tt VALUES('f d c a c e', 'd g d e g d');
85 INSERT INTO tt VALUES('g d e f a g x', 'f f d a a b'); 122 INSERT INTO tt VALUES('g d e f a g x', 'f f d a a b');
86 INSERT INTO tt VALUES('g c f b c g', 'a g f d c b'); 123 INSERT INTO tt VALUES('g c f b c g', 'a g f d c b');
87 INSERT INTO tt VALUES('c e c f g b', 'f e d b g a'); 124 INSERT INTO tt VALUES('c e c f g b', 'f e d b g a');
88 INSERT INTO tt VALUES('g d e f d e', 'a c d b a g'); 125 INSERT INTO tt VALUES('g d e f d e', 'a c d b a g');
89 INSERT INTO tt VALUES('e f a c c b', 'b f e a f d y'); 126 INSERT INTO tt VALUES('e f a c c b', 'b f e a f d y');
90 INSERT INTO tt VALUES('c c a a c f', 'd g a e b g'); 127 INSERT INTO tt VALUES('c c a a c f', 'd g a e b g');
91 } 128 }
92 129
93 set res_col { 130 set res_row [star_from_row {
131 a 10 20 b 9 14 c 9 20 d 9 19
132 e 8 13 f 10 20 g 7 14 x 1 1
133 y 1 1
134 }]
135 set res_col [star_from_col {
94 a a 6 11 a b 7 9 136 a a 6 11 a b 7 9
95 b a 6 7 b b 7 7 137 b a 6 7 b b 7 7
96 c a 6 12 c b 5 8 138 c a 6 12 c b 5 8
97 d a 4 6 d b 9 13 139 d a 4 6 d b 9 13
98 e a 6 7 e b 6 6 140 e a 6 7 e b 6 6
99 f a 9 10 f b 7 10 141 f a 9 10 f b 7 10
100 g a 5 7 g b 5 7 142 g a 5 7 g b 5 7
101 x a 1 1 y b 1 1 143 x a 1 1 y b 1 1
102 } 144 }]
103 set res_row { 145 if {[detail_is_none]} {
104 a 10 20 b 9 14 c 9 20 d 9 19 146 set res_col [row_to_col $res_row]
105 e 8 13 f 10 20 g 7 14 x 1 1
106 y 1 1
107 } 147 }
108 148
109 foreach {tn tbl resname} { 149 foreach {tn tbl resname} {
110 1 "fts5vocab(tt, 'col')" res_col 150 1 "fts5vocab(tt, 'col')" res_col
111 2 "fts5vocab(tt, 'row')" res_row 151 2 "fts5vocab(tt, 'row')" res_row
112 3 "fts5vocab(tt, \"row\")" res_row 152 3 "fts5vocab(tt, \"row\")" res_row
113 4 "fts5vocab(tt, [row])" res_row 153 4 "fts5vocab(tt, [row])" res_row
114 5 "fts5vocab(tt, `row`)" res_row 154 5 "fts5vocab(tt, `row`)" res_row
115 155
116 6 "fts5vocab('tt', 'row')" res_row 156 6 "fts5vocab('tt', 'row')" res_row
(...skipping 29 matching lines...) Expand all
146 CREATE VIRTUAL TABLE aux.cc USING fts5vocab(main, tbl, row); 186 CREATE VIRTUAL TABLE aux.cc USING fts5vocab(main, tbl, row);
147 } {1 {wrong number of vtable arguments}} 187 } {1 {wrong number of vtable arguments}}
148 188
149 #------------------------------------------------------------------------- 189 #-------------------------------------------------------------------------
150 # Test fts5vocab tables created in the temp schema. 190 # Test fts5vocab tables created in the temp schema.
151 # 191 #
152 reset_db 192 reset_db
153 forcedelete test.db2 193 forcedelete test.db2
154 do_execsql_test 5.0 { 194 do_execsql_test 5.0 {
155 ATTACH 'test.db2' AS aux; 195 ATTACH 'test.db2' AS aux;
156 CREATE VIRTUAL TABLE t1 USING fts5(x); 196 CREATE VIRTUAL TABLE t1 USING fts5(x, detail=%DETAIL%);
157 CREATE VIRTUAL TABLE temp.t1 USING fts5(x); 197 CREATE VIRTUAL TABLE temp.t1 USING fts5(x, detail=%DETAIL%);
158 CREATE VIRTUAL TABLE aux.t1 USING fts5(x); 198 CREATE VIRTUAL TABLE aux.t1 USING fts5(x, detail=%DETAIL%);
159 199
160 INSERT INTO main.t1 VALUES('a b c'); 200 INSERT INTO main.t1 VALUES('a b c');
161 INSERT INTO main.t1 VALUES('d e f'); 201 INSERT INTO main.t1 VALUES('d e f');
162 INSERT INTO main.t1 VALUES('a e c'); 202 INSERT INTO main.t1 VALUES('a e c');
163 203
164 INSERT INTO temp.t1 VALUES('1 2 3'); 204 INSERT INTO temp.t1 VALUES('1 2 3');
165 INSERT INTO temp.t1 VALUES('4 5 6'); 205 INSERT INTO temp.t1 VALUES('4 5 6');
166 INSERT INTO temp.t1 VALUES('1 5 3'); 206 INSERT INTO temp.t1 VALUES('1 5 3');
167 207
168 INSERT INTO aux.t1 VALUES('x y z'); 208 INSERT INTO aux.t1 VALUES('x y z');
169 INSERT INTO aux.t1 VALUES('m n o'); 209 INSERT INTO aux.t1 VALUES('m n o');
170 INSERT INTO aux.t1 VALUES('x n z'); 210 INSERT INTO aux.t1 VALUES('x n z');
171 } 211 }
172 212
173 breakpoint 213 breakpoint
174 do_execsql_test 5.1 { 214 do_execsql_test 5.1 {
175 CREATE VIRTUAL TABLE temp.vm USING fts5vocab(main, t1, row); 215 CREATE VIRTUAL TABLE temp.vm USING fts5vocab(main, t1, row);
176 CREATE VIRTUAL TABLE temp.vt1 USING fts5vocab(t1, row); 216 CREATE VIRTUAL TABLE temp.vt1 USING fts5vocab(t1, row);
177 CREATE VIRTUAL TABLE temp.vt2 USING fts5vocab(temp, t1, row); 217 CREATE VIRTUAL TABLE temp.vt2 USING fts5vocab(temp, t1, row);
178 CREATE VIRTUAL TABLE temp.va USING fts5vocab(aux, t1, row); 218 CREATE VIRTUAL TABLE temp.va USING fts5vocab(aux, t1, row);
179 } 219 }
180 220
181 do_execsql_test 5.2 { SELECT * FROM vm } { 221 do_execsql_test 5.2 { SELECT * FROM vm } [star_from_row {
182 a 2 2 b 1 1 c 2 2 d 1 1 e 2 2 f 1 1 222 a 2 2 b 1 1 c 2 2 d 1 1 e 2 2 f 1 1
183 } 223 }]
184 do_execsql_test 5.3 { SELECT * FROM vt1 } { 224 do_execsql_test 5.3 { SELECT * FROM vt1 } [star_from_row {
185 1 2 2 2 1 1 3 2 2 4 1 1 5 2 2 6 1 1 225 1 2 2 2 1 1 3 2 2 4 1 1 5 2 2 6 1 1
186 } 226 }]
187 do_execsql_test 5.4 { SELECT * FROM vt2 } { 227 do_execsql_test 5.4 { SELECT * FROM vt2 } [star_from_row {
188 1 2 2 2 1 1 3 2 2 4 1 1 5 2 2 6 1 1 228 1 2 2 2 1 1 3 2 2 4 1 1 5 2 2 6 1 1
189 } 229 }]
190 do_execsql_test 5.5 { SELECT * FROM va } { 230 do_execsql_test 5.5 { SELECT * FROM va } [star_from_row {
191 m 1 1 n 2 2 o 1 1 x 2 2 y 1 1 z 2 2 231 m 1 1 n 2 2 o 1 1 x 2 2 y 1 1 z 2 2
192 } 232 }]
193 233
194 #------------------------------------------------------------------------- 234 #-------------------------------------------------------------------------
195 # 235 #
196 do_execsql_test 6.0 { 236 do_execsql_test 6.0 {
197 CREATE TABLE iii(iii); 237 CREATE TABLE iii(iii);
198 CREATE TABLE jjj(x); 238 CREATE TABLE jjj(x);
199 } 239 }
200 240
201 do_catchsql_test 6.1 { 241 do_catchsql_test 6.1 {
202 CREATE VIRTUAL TABLE vocab1 USING fts5vocab(iii, row); 242 CREATE VIRTUAL TABLE vocab1 USING fts5vocab(iii, row);
203 SELECT * FROM vocab1; 243 SELECT * FROM vocab1;
204 } {1 {no such fts5 table: main.iii}} 244 } {1 {no such fts5 table: main.iii}}
205 245
206 do_catchsql_test 6.2 { 246 do_catchsql_test 6.2 {
207 CREATE VIRTUAL TABLE vocab2 USING fts5vocab(jjj, row); 247 CREATE VIRTUAL TABLE vocab2 USING fts5vocab(jjj, row);
208 SELECT * FROM vocab2; 248 SELECT * FROM vocab2;
209 } {1 {no such fts5 table: main.jjj}} 249 } {1 {no such fts5 table: main.jjj}}
210 250
211 do_catchsql_test 6.2 { 251 do_catchsql_test 6.2 {
212 CREATE VIRTUAL TABLE vocab3 USING fts5vocab(lll, row); 252 CREATE VIRTUAL TABLE vocab3 USING fts5vocab(lll, row);
213 SELECT * FROM vocab3; 253 SELECT * FROM vocab3;
214 } {1 {no such fts5 table: main.lll}} 254 } {1 {no such fts5 table: main.lll}}
215 255
216 #------------------------------------------------------------------------- 256 #-------------------------------------------------------------------------
217 # Test single term queries on fts5vocab tables (i.e. those with term=? 257 # Test single term queries on fts5vocab tables (i.e. those with term=?
218 # constraints in the WHERE clause). 258 # constraints in the WHERE clause).
219 # 259 #
220 do_execsql_test 7.0 { 260 do_execsql_test 7.0 {
221 CREATE VIRTUAL TABLE tx USING fts5(one, two); 261 CREATE VIRTUAL TABLE tx USING fts5(one, two, detail=%DETAIL%);
222 INSERT INTO tx VALUES('g a ggg g a b eee', 'cc d aa ff g ee'); 262 INSERT INTO tx VALUES('g a ggg g a b eee', 'cc d aa ff g ee');
223 INSERT INTO tx VALUES('dd fff i a i jjj', 'f fff hh jj e f'); 263 INSERT INTO tx VALUES('dd fff i a i jjj', 'f fff hh jj e f');
224 INSERT INTO tx VALUES('ggg a f f fff dd aa', 'd ggg f f j gg ddd'); 264 INSERT INTO tx VALUES('ggg a f f fff dd aa', 'd ggg f f j gg ddd');
225 INSERT INTO tx VALUES('e bb h jjj ii gg', 'e aa e f c fff'); 265 INSERT INTO tx VALUES('e bb h jjj ii gg', 'e aa e f c fff');
226 INSERT INTO tx VALUES('j ff aa a h', 'h a j bbb bb'); 266 INSERT INTO tx VALUES('j ff aa a h', 'h a j bbb bb');
227 INSERT INTO tx VALUES('cc i ff c d f', 'dd ii fff f c cc d'); 267 INSERT INTO tx VALUES('cc i ff c d f', 'dd ii fff f c cc d');
228 INSERT INTO tx VALUES('jjj g i bb cc eee', 'hhh iii aaa b bbb aaa'); 268 INSERT INTO tx VALUES('jjj g i bb cc eee', 'hhh iii aaa b bbb aaa');
229 INSERT INTO tx VALUES('hhh hhh hhh bb fff f', 'fff gg aa ii h a'); 269 INSERT INTO tx VALUES('hhh hhh hhh bb fff f', 'fff gg aa ii h a');
230 INSERT INTO tx VALUES('b c cc aaa iii ggg f', 'iii ff ee a ff c cc'); 270 INSERT INTO tx VALUES('b c cc aaa iii ggg f', 'iii ff ee a ff c cc');
231 INSERT INTO tx VALUES('hhh b hhh aaa j i i', 'dd ee ee aa bbb iii'); 271 INSERT INTO tx VALUES('hhh b hhh aaa j i i', 'dd ee ee aa bbb iii');
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 SELECT $term, 'one', sum(cont(one, $term)>0), sum(cont(one, $term)) FROM tx 309 SELECT $term, 'one', sum(cont(one, $term)>0), sum(cont(one, $term)) FROM tx
270 }] 310 }]
271 if {[lindex $r1 2]==0} {set r1 [list]} 311 if {[lindex $r1 2]==0} {set r1 [list]}
272 312
273 set r2 [db eval { 313 set r2 [db eval {
274 SELECT $term, 'two', sum(cont(two, $term)>0), sum(cont(two, $term)) FROM tx 314 SELECT $term, 'two', sum(cont(two, $term)>0), sum(cont(two, $term)) FROM tx
275 }] 315 }]
276 if {[lindex $r2 2]==0} {set r2 [list]} 316 if {[lindex $r2 2]==0} {set r2 [list]}
277 317
278 set resc [concat $r1 $r2] 318 set resc [concat $r1 $r2]
319
320 set resc [star_from_col $resc]
321 set resr [star_from_row $resr]
322 if {[detail_is_none]} { set resc [row_to_col $resr] }
279 do_execsql_test 7.$term.1 {SELECT * FROM txc WHERE term=$term} $resc 323 do_execsql_test 7.$term.1 {SELECT * FROM txc WHERE term=$term} $resc
280 do_execsql_test 7.$term.2 {SELECT * FROM txr WHERE term=$term} $resr 324 do_execsql_test 7.$term.2 {SELECT * FROM txr WHERE term=$term} $resr
281 } 325 }
282 326
283 do_execsql_test 7.1 { 327 do_execsql_test 7.1 {
284 CREATE TABLE txr_c AS SELECT * FROM txr; 328 CREATE TABLE txr_c AS SELECT * FROM txr;
285 CREATE TABLE txc_c AS SELECT * FROM txc; 329 CREATE TABLE txc_c AS SELECT * FROM txc;
286 } 330 }
287 331
288 # Test range queries on the fts5vocab tables created above. 332 # Test range queries on the fts5vocab tables created above.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 } [db eval {SELECT * FROM txc_c WHERE term<$b}] 377 } [db eval {SELECT * FROM txc_c WHERE term<$b}]
334 do_execsql_test 7.2.$tn.12 { 378 do_execsql_test 7.2.$tn.12 {
335 SELECT * FROM txc WHERE term>$a AND term<$b 379 SELECT * FROM txc WHERE term>$a AND term<$b
336 } [db eval {SELECT * FROM txc_c WHERE term>$a AND term <$b}] 380 } [db eval {SELECT * FROM txc_c WHERE term>$a AND term <$b}]
337 } 381 }
338 382
339 do_execsql_test 7.3.1 { 383 do_execsql_test 7.3.1 {
340 SELECT count(*) FROM txr, txr_c WHERE txr.term = txr_c.term; 384 SELECT count(*) FROM txr, txr_c WHERE txr.term = txr_c.term;
341 } {30} 385 } {30}
342 386
343 do_execsql_test 7.3.2 { 387 if {![detail_is_none]} {
344 SELECT count(*) FROM txc, txc_c 388 do_execsql_test 7.3.2 {
345 WHERE txc.term = txc_c.term AND txc.col=txc_c.col; 389 SELECT count(*) FROM txc, txc_c
346 } {57} 390 WHERE txc.term = txc_c.term AND txc.col=txc_c.col;
391 } {57}
392 }
393
394 }
395
396 #-------------------------------------------------------------------------
397 # Test the fts5vocab tables response to a specific types of corruption:
398 # where the fts5 index contains hits for columns that do not exist.
399 #
400 do_execsql_test 8.0 {
401 CREATE VIRTUAL TABLE x1 USING fts5(a, b, c, detail=%DETAIL%);
402 INSERT INTO x1 VALUES('a b c', 'd e f', 'g h i');
403 INSERT INTO x1 VALUES('g h i', 'a b c', 'd e f');
404 INSERT INTO x1 VALUES('d e f', 'g h i', 'a b c');
405 CREATE VIRTUAL TABLE x1_r USING fts5vocab(x1, row);
406 CREATE VIRTUAL TABLE x1_c USING fts5vocab(x1, col);
407 }
408
409 set resr [star_from_row {a 3 3 b 3 3 c 3 3 d 3 3 e 3 3 f 3 3 g 3 3 h 3 3 i 3 3}]
410 set resc [star_from_col {
411 a a 1 1 a b 1 1 a c 1 1 b a 1 1
412 b b 1 1 b c 1 1 c a 1 1 c b 1 1
413 c c 1 1 d a 1 1 d b 1 1 d c 1 1
414 e a 1 1 e b 1 1 e c 1 1 f a 1 1
415 f b 1 1 f c 1 1 g a 1 1 g b 1 1
416 g c 1 1 h a 1 1 h b 1 1 h c 1 1
417 i a 1 1 i b 1 1 i c 1 1
418 }]
419 if {[detail_is_none]} { set resc [row_to_col $resr] }
420
421 do_execsql_test 8.1.1 { SELECT * FROM x1_r; } $resr
422 do_execsql_test 8.1.2 { SELECT * FROM x1_c } $resc
423
424 do_execsql_test 8.2 {
425 PRAGMA writable_schema = 1;
426 UPDATE sqlite_master
427 SET sql = 'CREATE VIRTUAL TABLE x1 USING fts5(a, detail=%DETAIL%)'
428 WHERE name = 'x1';
429 }
430 db close
431 sqlite3 db test.db
432 sqlite3_fts5_may_be_corrupt 1
433
434 do_execsql_test 8.2.1 { SELECT * FROM x1_r } $resr
435
436 if {[detail_is_none]} {
437 do_execsql_test 8.2.2 { SELECT * FROM x1_c } $resc
438 } else {
439 do_catchsql_test 8.2.2 {
440 SELECT * FROM x1_c
441 } {1 {database disk image is malformed}}
442 }
443
444 sqlite3_fts5_may_be_corrupt 0
445 }
446
447 #-------------------------------------------------------------------------
448 # Test that both "ORDER BY term" and "ORDER BY term DESC" work.
449 #
450 reset_db
451 do_execsql_test 9.1 {
452 CREATE VIRTUAL TABLE x1 USING fts5(x);
453 INSERT INTO x1 VALUES('def ABC ghi');
454 INSERT INTO x1 VALUES('DEF abc GHI');
455 }
456
457 do_execsql_test 9.2 {
458 CREATE VIRTUAL TABLE rrr USING fts5vocab(x1, row);
459 SELECT * FROM rrr
460 } {
461 abc 2 2 def 2 2 ghi 2 2
462 }
463 do_execsql_test 9.3 {
464 SELECT * FROM rrr ORDER BY term ASC
465 } {
466 abc 2 2 def 2 2 ghi 2 2
467 }
468 do_execsql_test 9.4 {
469 SELECT * FROM rrr ORDER BY term DESC
470 } {
471 ghi 2 2 def 2 2 abc 2 2
472 }
473 do_test 9.5 {
474 set e2 [db eval { EXPLAIN SELECT * FROM rrr ORDER BY term ASC }]
475 expr [lsearch $e2 SorterSort]<0
476 } 1
477 do_test 9.6 {
478 set e2 [db eval { EXPLAIN SELECT * FROM rrr ORDER BY term DESC }]
479 expr [lsearch $e2 SorterSort]<0
480 } 0
481
482
347 483
348 finish_test 484 finish_test
349 485
OLDNEW
« no previous file with comments | « third_party/sqlite/src/ext/fts5/test/fts5update.test ('k') | third_party/sqlite/src/ext/fts5/tool/fts5speed.tcl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698