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

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

Issue 1610543003: [sql] Import reference version of SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
(Empty)
1 # 2015 Apr 24
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 #
12 # The tests in this file focus on testing the fts5vocab module.
13 #
14
15 source [file join [file dirname [info script]] fts5_common.tcl]
16 set testprefix fts5vocab
17
18 # If SQLITE_ENABLE_FTS5 is defined, omit this file.
19 ifcapable !fts5 {
20 finish_test
21 return
22 }
23
24
25 do_execsql_test 1.1.1 {
26 CREATE VIRTUAL TABLE t1 USING fts5(one, prefix=1);
27 CREATE VIRTUAL TABLE v1 USING fts5vocab(t1, 'row');
28 PRAGMA table_info = v1;
29 } {
30 0 term {} 0 {} 0
31 1 doc {} 0 {} 0
32 2 cnt {} 0 {} 0
33 }
34
35 do_execsql_test 1.1.2 {
36 CREATE VIRTUAL TABLE v2 USING fts5vocab(t1, 'col');
37 PRAGMA table_info = v2;
38 } {
39 0 term {} 0 {} 0
40 1 col {} 0 {} 0
41 2 doc {} 0 {} 0
42 3 cnt {} 0 {} 0
43 }
44
45 do_execsql_test 1.2.1 { SELECT * FROM v1 } { }
46 do_execsql_test 1.2.2 { SELECT * FROM v2 } { }
47
48 do_execsql_test 1.3 {
49 INSERT INTO t1 VALUES('x y z');
50 INSERT INTO t1 VALUES('x x x');
51 }
52
53 do_execsql_test 1.4.1 {
54 SELECT * FROM v1;
55 } {x 2 4 y 1 1 z 1 1}
56
57 do_execsql_test 1.4.2 {
58 SELECT * FROM v2;
59 } {x one 2 4 y one 1 1 z one 1 1}
60
61 do_execsql_test 1.5.1 {
62 BEGIN;
63 INSERT INTO t1 VALUES('a b c');
64 SELECT * FROM v1 WHERE term<'d';
65 } {a 1 1 b 1 1 c 1 1}
66
67 do_execsql_test 1.5.2 {
68 SELECT * FROM v2 WHERE term<'d';
69 COMMIT;
70 } {a one 1 1 b one 1 1 c one 1 1}
71
72 do_execsql_test 1.6 {
73 DELETE FROM t1 WHERE one = 'a b c';
74 SELECT * FROM v1;
75 } {x 2 4 y 1 1 z 1 1}
76
77 #-------------------------------------------------------------------------
78 #
79 do_execsql_test 2.0 {
80 CREATE VIRTUAL TABLE tt USING fts5(a, b);
81 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');
83 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');
85 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');
87 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');
89 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');
91 }
92
93 set res_col {
94 a a 6 11 a b 7 9
95 b a 6 7 b b 7 7
96 c a 6 12 c b 5 8
97 d a 4 6 d b 9 13
98 e a 6 7 e b 6 6
99 f a 9 10 f b 7 10
100 g a 5 7 g b 5 7
101 x a 1 1 y b 1 1
102 }
103 set res_row {
104 a 10 20 b 9 14 c 9 20 d 9 19
105 e 8 13 f 10 20 g 7 14 x 1 1
106 y 1 1
107 }
108
109 foreach {tn tbl resname} {
110 1 "fts5vocab(tt, 'col')" res_col
111 2 "fts5vocab(tt, 'row')" res_row
112 3 "fts5vocab(tt, \"row\")" res_row
113 4 "fts5vocab(tt, [row])" res_row
114 5 "fts5vocab(tt, `row`)" res_row
115
116 6 "fts5vocab('tt', 'row')" res_row
117 7 "fts5vocab(\"tt\", \"row\")" res_row
118 8 "fts5vocab([tt], [row])" res_row
119 9 "fts5vocab(`tt`, `row`)" res_row
120 } {
121 do_execsql_test 2.$tn "
122 DROP TABLE IF EXISTS tv;
123 CREATE VIRTUAL TABLE tv USING $tbl;
124 SELECT * FROM tv;
125 " [set $resname]
126 }
127
128 #-------------------------------------------------------------------------
129 # Test errors in the CREATE VIRTUAL TABLE statement.
130 #
131 foreach {tn sql} {
132 1 { CREATE VIRTUAL TABLE aa USING fts5vocab() }
133 2 { CREATE VIRTUAL TABLE aa USING fts5vocab(x) }
134 3 { CREATE VIRTUAL TABLE aa USING fts5vocab(x,y,z) }
135 4 { CREATE VIRTUAL TABLE temp.aa USING fts5vocab(x,y,z,y) }
136 } {
137 do_catchsql_test 3.$tn $sql {1 {wrong number of vtable arguments}}
138 }
139
140 do_catchsql_test 4.0 {
141 CREATE VIRTUAL TABLE cc USING fts5vocab(tbl, unknown);
142 } {1 {fts5vocab: unknown table type: 'unknown'}}
143
144 do_catchsql_test 4.1 {
145 ATTACH 'test.db' AS aux;
146 CREATE VIRTUAL TABLE aux.cc USING fts5vocab(main, tbl, row);
147 } {1 {wrong number of vtable arguments}}
148
149 #-------------------------------------------------------------------------
150 # Test fts5vocab tables created in the temp schema.
151 #
152 reset_db
153 forcedelete test.db2
154 do_execsql_test 5.0 {
155 ATTACH 'test.db2' AS aux;
156 CREATE VIRTUAL TABLE t1 USING fts5(x);
157 CREATE VIRTUAL TABLE temp.t1 USING fts5(x);
158 CREATE VIRTUAL TABLE aux.t1 USING fts5(x);
159
160 INSERT INTO main.t1 VALUES('a b c');
161 INSERT INTO main.t1 VALUES('d e f');
162 INSERT INTO main.t1 VALUES('a e c');
163
164 INSERT INTO temp.t1 VALUES('1 2 3');
165 INSERT INTO temp.t1 VALUES('4 5 6');
166 INSERT INTO temp.t1 VALUES('1 5 3');
167
168 INSERT INTO aux.t1 VALUES('x y z');
169 INSERT INTO aux.t1 VALUES('m n o');
170 INSERT INTO aux.t1 VALUES('x n z');
171 }
172
173 breakpoint
174 do_execsql_test 5.1 {
175 CREATE VIRTUAL TABLE temp.vm USING fts5vocab(main, t1, row);
176 CREATE VIRTUAL TABLE temp.vt1 USING fts5vocab(t1, row);
177 CREATE VIRTUAL TABLE temp.vt2 USING fts5vocab(temp, t1, row);
178 CREATE VIRTUAL TABLE temp.va USING fts5vocab(aux, t1, row);
179 }
180
181 do_execsql_test 5.2 { SELECT * FROM vm } {
182 a 2 2 b 1 1 c 2 2 d 1 1 e 2 2 f 1 1
183 }
184 do_execsql_test 5.3 { SELECT * FROM vt1 } {
185 1 2 2 2 1 1 3 2 2 4 1 1 5 2 2 6 1 1
186 }
187 do_execsql_test 5.4 { SELECT * FROM vt2 } {
188 1 2 2 2 1 1 3 2 2 4 1 1 5 2 2 6 1 1
189 }
190 do_execsql_test 5.5 { SELECT * FROM va } {
191 m 1 1 n 2 2 o 1 1 x 2 2 y 1 1 z 2 2
192 }
193
194 #-------------------------------------------------------------------------
195 #
196 do_execsql_test 6.0 {
197 CREATE TABLE iii(iii);
198 CREATE TABLE jjj(x);
199 }
200
201 do_catchsql_test 6.1 {
202 CREATE VIRTUAL TABLE vocab1 USING fts5vocab(iii, row);
203 SELECT * FROM vocab1;
204 } {1 {no such fts5 table: main.iii}}
205
206 do_catchsql_test 6.2 {
207 CREATE VIRTUAL TABLE vocab2 USING fts5vocab(jjj, row);
208 SELECT * FROM vocab2;
209 } {1 {no such fts5 table: main.jjj}}
210
211 do_catchsql_test 6.2 {
212 CREATE VIRTUAL TABLE vocab3 USING fts5vocab(lll, row);
213 SELECT * FROM vocab3;
214 } {1 {no such fts5 table: main.lll}}
215
216 #-------------------------------------------------------------------------
217 # Test single term queries on fts5vocab tables (i.e. those with term=?
218 # constraints in the WHERE clause).
219 #
220 do_execsql_test 7.0 {
221 CREATE VIRTUAL TABLE tx USING fts5(one, two);
222 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');
224 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');
226 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');
228 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');
230 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');
232 INSERT INTO tx VALUES('hh dd h b g ff i', 'ccc bb cc ccc f a d');
233 INSERT INTO tx VALUES('g d b ggg jj', 'fff jj ff jj g gg ee');
234 INSERT INTO tx VALUES('g ee ggg ggg cc bb eee', 'aa j jjj bbb dd eee ff');
235 INSERT INTO tx VALUES('c jjj hh ddd dd h', 'e aaa h jjj gg');
236
237 CREATE VIRTUAL TABLE txr USING fts5vocab(tx, row);
238 CREATE VIRTUAL TABLE txc USING fts5vocab(tx, col);
239 }
240
241 proc cont {L elem} {
242 set n 0
243 foreach e $L { if {$elem==$e} {incr n} }
244 set n
245 }
246 db func cont cont
247
248 foreach {term} {
249 a aa aaa
250 b bb bbb
251 c cc ccc
252 d dd ddd
253 e ee eee
254 f ff fff
255 g gg ggg
256 h hh hhh
257 i ii iii
258 j jj jjj
259 } {
260 set resr [db eval {
261 SELECT $term,
262 sum(cont(one || ' ' || two, $term) > 0),
263 sum(cont(one || ' ' || two, $term))
264 FROM tx
265 }]
266 if {[lindex $resr 1]==0} {set resr [list]}
267
268 set r1 [db eval {
269 SELECT $term, 'one', sum(cont(one, $term)>0), sum(cont(one, $term)) FROM tx
270 }]
271 if {[lindex $r1 2]==0} {set r1 [list]}
272
273 set r2 [db eval {
274 SELECT $term, 'two', sum(cont(two, $term)>0), sum(cont(two, $term)) FROM tx
275 }]
276 if {[lindex $r2 2]==0} {set r2 [list]}
277
278 set resc [concat $r1 $r2]
279 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
281 }
282
283 do_execsql_test 7.1 {
284 CREATE TABLE txr_c AS SELECT * FROM txr;
285 CREATE TABLE txc_c AS SELECT * FROM txc;
286 }
287
288 # Test range queries on the fts5vocab tables created above.
289 #
290 foreach {tn a b} {
291 1 a jjj
292 2 bb j
293 3 ccc ddd
294 4 dd xyz
295 5 xzy dd
296 6 h hh
297 } {
298 do_execsql_test 7.2.$tn.1 {
299 SELECT * FROM txr WHERE term>=$a
300 } [db eval {SELECT * FROM txr_c WHERE term>=$a}]
301 do_execsql_test 7.2.$tn.2 {
302 SELECT * FROM txr WHERE term<=$b
303 } [db eval {SELECT * FROM txr_c WHERE term <=$b}]
304 do_execsql_test 7.2.$tn.3 {
305 SELECT * FROM txr WHERE term>=$a AND term<=$b
306 } [db eval {SELECT * FROM txr_c WHERE term>=$a AND term <=$b}]
307
308 do_execsql_test 7.2.$tn.4 {
309 SELECT * FROM txc WHERE term>=$a
310 } [db eval {SELECT * FROM txc_c WHERE term>=$a}]
311 do_execsql_test 7.2.$tn.5 {
312 SELECT * FROM txc WHERE term<=$b
313 } [db eval {SELECT * FROM txc_c WHERE term <=$b}]
314 do_execsql_test 7.2.$tn.6 {
315 SELECT * FROM txc WHERE term>=$a AND term<=$b
316 } [db eval {SELECT * FROM txc_c WHERE term>=$a AND term <=$b}]
317
318 do_execsql_test 7.2.$tn.7 {
319 SELECT * FROM txr WHERE term>$a
320 } [db eval {SELECT * FROM txr_c WHERE term>$a}]
321 do_execsql_test 7.2.$tn.8 {
322 SELECT * FROM txr WHERE term<$b
323 } [db eval {SELECT * FROM txr_c WHERE term<$b}]
324 do_execsql_test 7.2.$tn.9 {
325 SELECT * FROM txr WHERE term>$a AND term<$b
326 } [db eval {SELECT * FROM txr_c WHERE term>$a AND term <$b}]
327
328 do_execsql_test 7.2.$tn.10 {
329 SELECT * FROM txc WHERE term>$a
330 } [db eval {SELECT * FROM txc_c WHERE term>$a}]
331 do_execsql_test 7.2.$tn.11 {
332 SELECT * FROM txc WHERE term<$b
333 } [db eval {SELECT * FROM txc_c WHERE term<$b}]
334 do_execsql_test 7.2.$tn.12 {
335 SELECT * FROM txc WHERE term>$a AND term<$b
336 } [db eval {SELECT * FROM txc_c WHERE term>$a AND term <$b}]
337 }
338
339 do_execsql_test 7.3.1 {
340 SELECT count(*) FROM txr, txr_c WHERE txr.term = txr_c.term;
341 } {30}
342
343 do_execsql_test 7.3.2 {
344 SELECT count(*) FROM txc, txc_c
345 WHERE txc.term = txc_c.term AND txc.col=txc_c.col;
346 } {57}
347
348 finish_test
349
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698