OLD | NEW |
| (Empty) |
1 # 2015 May 30 | |
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 # This file contains automatically generated tests for various types | |
13 # of MATCH expressions. | |
14 # | |
15 | |
16 source [file join [file dirname [info script]] fts5_common.tcl] | |
17 set testprefix fts5auto | |
18 | |
19 # If SQLITE_ENABLE_FTS5 is defined, omit this file. | |
20 ifcapable !fts5 { | |
21 finish_test | |
22 return | |
23 } | |
24 | |
25 | |
26 set data { | |
27 -4026076 | |
28 {n x w k b p x b n t t d s} {f j j s p j o} | |
29 {w v i y r} {i p y s} | |
30 {a o q v e n q r} {q v g u c y a z y} | |
31 3995120 | |
32 {c} {e e w d t} | |
33 {x c p f w r s m l r b f d} {g g u e} | |
34 {s n u t d v p d} {b k v p m f} | |
35 -2913881 | |
36 {k m} {a} | |
37 {w r j z n s l} {m j i w d t w e l} | |
38 {z n c} {v f b m} | |
39 174082 | |
40 {j} {q l w u k e q v r i} | |
41 {j l} {u v w r s p e l} | |
42 {p i k j k q c t g u s} {g u y s m h q k g t e s o r} | |
43 3207399 | |
44 {e t} {} | |
45 {p} {y v r b e k h d e v} | |
46 {t m w z b g q t s d d h} {o n v u i t o y k j} | |
47 182399 | |
48 {} {m o s o x d y f a x j z} | |
49 {x n z r c d} {n r x i r} | |
50 {s v s} {a u} | |
51 768994 | |
52 {e u t q v z q k j p u f j p} {y c b} | |
53 {p s d} {k n w p m p p} | |
54 {u o x s d} {f s g r d b d r m m m z y} | |
55 3931037 | |
56 {c j p x e} {c n k t h z o i} | |
57 {} {r r p j k x w q} | |
58 {o r d z d} {x} | |
59 3105748 | |
60 {p x r u} {x i s w o t o g x m z i w} | |
61 {q x m z} {h c j w b l y w x c o} | |
62 {m b k v} {t v q i s a d x} | |
63 -2501642 | |
64 {o u d n w o m o o s n t r h} {k p e u y p e z d j r y g} | |
65 {v b b h d d q y j q j} {a m w d t} | |
66 {y e f n} {a k x i x} | |
67 -1745680 | |
68 {z u w j f d b f} {j w i c g u d w e} | |
69 {m f p v m a s p v c o s} {s c r z o t w l b e a q} | |
70 {m k q} {k b a v o} | |
71 -932328 | |
72 {r v i u m q d r} {f z u v h c m r f g} | |
73 {r x r} {k p i d h h w h z u a x} | |
74 {k m j p} {h l j a e u c i q x x f x g} | |
75 -3923818 | |
76 {t t p b n u i h e c k} {m z} | |
77 {v u d c} {v y y j s g} | |
78 {o a f k k q p h g x e n z x} {h d w c o l} | |
79 -2145922 | |
80 {z z l f a l g e d c d h} {j b j p k o o u b q} | |
81 {d i g q t f d r h k} {n w g j c x r p t y f l c t} | |
82 {d o c u k f o} {r y s x z s p p h g t p y c} | |
83 4552917 | |
84 {j w j y h l k u} {n a} | |
85 {y h w c n k} {b} | |
86 {w} {z l r t s i m v c y} | |
87 2292008 | |
88 {q v q j w y y x u t} {r q z n h a b o} | |
89 {d q y} {y v o e j} | |
90 {} {a b h c d l p d x} | |
91 1407892 | |
92 {n j j u q d o a u c f} {r d b w o q n g} | |
93 {d e v w s} {v d v o u o x s l s j z y} | |
94 {j y w h i f g i h m} {v n z b n y} | |
95 -4412544 | |
96 {g h h r s} {h e r e} | |
97 {n q s} {o p z r m l l t} | |
98 {p} {f s u o b j} | |
99 1209110 | |
100 {o a a z t t u h j} {z z i r k r} | |
101 {i c x q w g v o x z i z p} {q o g k i n z x e d v w v} | |
102 {p f v b g f e d n p u c y k} {q z z a i p a a s r e z} | |
103 3448977 | |
104 {i v} {l u x t b o k} | |
105 {f h u v p} {k a o y j} | |
106 {d m k c j} {v c e r u e f i t} | |
107 -4703774 | |
108 {d h v w u z r e h x o l t} {p s f y w y r q d a m w} | |
109 {c h g c g j j f t b i c q} {s e} | |
110 {c t q j g f} {v n r w y r a g e j d} | |
111 2414151 | |
112 {s o o s d s k q b f q v p e} {j r o b t o p d l o o x} | |
113 {d d k t v e} {} | |
114 {t v o d w} {w e q w h y c y y i j b a m} | |
115 -3342407 | |
116 {m c h n e p d o c r w n t} {j d k s p q l} | |
117 {t g s r w x j l r z r} {h} | |
118 {r q v x i r a n h s} {m y p b v w r a u o g q r} | |
119 -993951 | |
120 {l n p u o j d x t u u c o j} {k r n a r e k v i t o e} | |
121 {q f t t a a c z v f} {o n m p v f o e n} | |
122 {h z h i p s b j z h} {i t w m k c u g n i} | |
123 1575251 | |
124 {} {z s i j d o x j a r t} | |
125 {h g j u j n v e n z} {p z j n n f} | |
126 {s q q f d w r l y i z d o m} {b a n d h t b y g h d} | |
127 4263668 | |
128 {q g t h f s} {s g x p f q z i s o f l i} | |
129 {q k} {w v h a x n a r b} | |
130 {m j a h o b i x k r w z q u} {m t r g j o e q t m p u l} | |
131 2487819 | |
132 {m w g x r n e u t s r} {b x a t u u j c r n} | |
133 {j} {w f j r e e y l p} | |
134 {o u h b} {o c a c a b v} | |
135 167966 | |
136 {o d b s d o a u m o x y} {c} | |
137 {r w d o b v} {z e b} | |
138 {i n z a f g z o} {m u b a g} | |
139 1948599 | |
140 {n r g q d j s} {n k} | |
141 {l b p d v t k h y y} {u m k e c} | |
142 {t b n y o t b} {j w c i r x x} | |
143 2941631 | |
144 {l d p l b g f} {e k e} | |
145 {p j} {m c s w t b k n l d x} | |
146 {f o v y v l} {c w p s w j w c u t y} | |
147 3561104 | |
148 {d r j j r j i g p} {u} | |
149 {g r j q} {z l p d s n f c h t d c v z} | |
150 {w r c f s x z y} {g f o k g g} | |
151 -2223281 | |
152 {y e t j j z f p o m m z} {h k o g o} | |
153 {m x a t} {l q x l} | |
154 {r w k d l s y b} {q g k b} | |
155 -4502874 | |
156 {k k b x k l f} {r} | |
157 {} {q m z b k h k u n e z} | |
158 {z q g y m y u} {} | |
159 1757599 | |
160 {d p z j y u r} {z p l q w j t j} | |
161 {n i r x r y j} {} | |
162 {h} {w t d q c x z z x e e} | |
163 -4809589 | |
164 {} {z p x u h i i n g} | |
165 {w q s u d b f x n} {l y k b b r x t i} | |
166 {n d v j q o t o d p z e} {u r y u v u c} | |
167 1068408 | |
168 {y e} {e g s k e w t p v o b k} | |
169 {z c m s} {r u r u h n h b p q g b} | |
170 {j k b l} {m c d t s r s q a d b o f} | |
171 -1972554 | |
172 {m s w} {d k v s a r k p a r i v} | |
173 {g j z k p} {y k c v r e u o q f i b a} | |
174 {i p i} {c z w c y b n z i v} | |
175 -2052385 | |
176 {} {x e u f f g n c i x n e i e} | |
177 {} {p s w d x p g} | |
178 {} {s j a h n} | |
179 2805981 | |
180 {m x g c w o e} {k g u y r y i u e g g} | |
181 {f k j v t x p h x k u} {w i} | |
182 {b l f z f v t n} {i u d o d p h s m u} | |
183 2507621 | |
184 {} {u b n l x f n j t} | |
185 {u r x l h} {h r l m r} | |
186 {d y e n b s q v t k n q q} {x l t v w h a s k} | |
187 -3138375 | |
188 {e o f j y x u w v e w z} {r d q g k n n v r c z n e w} | |
189 {l y i q z k j p u f q s k} {c i l l i m a a g a z r x f} | |
190 {a v k h m q z b y n z} {q g w c y r r o a} | |
191 -457971 | |
192 {j x a w e c s h f l f} {q} | |
193 {j f v j u m d q r v v} {x n v a w} | |
194 {i e h d h f u w t t z} {v s u l s v o v i k n e} | |
195 2265221 | |
196 {z t c y w n y r t} {n b a x s} | |
197 {q w a v} {a b s d x i g w t e z h} | |
198 {t l} {j k r w f f y j o k u} | |
199 -3941280 | |
200 {r x t o z} {f j n z k} | |
201 {t x e b t d b k w i s} {j t y h i h} | |
202 {y q g n g s u v c z j z n g} {n n g t l p h} | |
203 2084745 | |
204 {z d z d} {j} | |
205 {o e k t b k a z l w} {o p i h k c x} | |
206 {c r b t i j f} {z e n m} | |
207 1265843 | |
208 {} {j s g j j x u y} | |
209 {u q t f} {g o g} | |
210 {w o j e d} {w q n a c t q x j} | |
211 -2941116 | |
212 {i n c u o} {f b} | |
213 {o m s q d o z a q} {f s v o b b} | |
214 {o a z c h r} {j e w h b f z} | |
215 -1265441 | |
216 {p g z q v a o a x a} {s t h} | |
217 {w i p o c} {s n d g f z w q o d v v l j} | |
218 {y f b i a s v} {u m o z k k s t s d p b l p} | |
219 -1989158 | |
220 {r i c n} {r e w w i n z} | |
221 {q u s y b w u g y g f o} {y} | |
222 {d} {j x i b x u y d c p v a h} | |
223 2391989 | |
224 {b n w x w f q h p i} {e u b b i n a i o c d g} | |
225 {v a z o i e n l x l r} {r u f o r k w m d w} | |
226 {k s} {r f e j q p w} | |
227 } | |
228 | |
229 do_execsql_test 1.0 { | |
230 CREATE VIRTUAL TABLE tt USING fts5(a, b, c, d, e, f); | |
231 } {} | |
232 | |
233 fts5_aux_test_functions db | |
234 | |
235 proc matchdata {expr tbl collist {order ASC}} { | |
236 | |
237 set cols "" | |
238 foreach e $collist { | |
239 append cols ", '$e'" | |
240 } | |
241 | |
242 set tclexpr [db one [subst -novar { | |
243 SELECT fts5_expr_tcl( | |
244 $expr, 'nearset $cols -pc ::pc' [set cols] | |
245 ) | |
246 }]] | |
247 set res [list] | |
248 | |
249 db eval "SELECT rowid, * FROM $tbl ORDER BY rowid $order" x { | |
250 set cols [list] | |
251 foreach col $x(*) { | |
252 if {$col != "rowid"} { lappend cols $x($col) } | |
253 } | |
254 # set cols [list $a $b $c $d $e $f] | |
255 set ::pc 0 | |
256 set rowdata [eval $tclexpr] | |
257 if {$rowdata != ""} { lappend res $x(rowid) $rowdata } | |
258 } | |
259 | |
260 set res | |
261 } | |
262 | |
263 proc do_auto_test {tn tbl cols expr} { | |
264 foreach order {asc desc} { | |
265 set res [matchdata $expr $tbl $cols $order] | |
266 set testname "$tn.[string range $order 0 0].rows=[expr [llength $res]/2]" | |
267 | |
268 set ::autotest_expr $expr | |
269 do_execsql_test $testname [subst -novar { | |
270 SELECT rowid, fts5_test_poslist([set tbl]) FROM [set tbl] | |
271 WHERE [set tbl] MATCH $::autotest_expr ORDER BY rowid [set order] | |
272 }] $res | |
273 } | |
274 | |
275 | |
276 } | |
277 | |
278 #------------------------------------------------------------------------- | |
279 # | |
280 | |
281 for {set fold 0} {$fold < 3} {incr fold} { | |
282 switch $fold { | |
283 0 { set map {} } | |
284 1 { set map { | |
285 a a b a c b d b e c f c g d h d | |
286 i e j e k f l f m g g g o h p h | |
287 q i r i s j t j u k v k w l x l | |
288 y m z m | |
289 }} | |
290 | |
291 2 { set map { | |
292 a a b a c a d a e a f a g a h a | |
293 i b j b k b l b m b g b o b p b | |
294 q c r c s c t c u c v c w c x c | |
295 }} | |
296 } | |
297 | |
298 execsql { | |
299 BEGIN; | |
300 DELETE FROM tt; | |
301 } | |
302 foreach {rowid a b c d e f} [string map $map $data] { | |
303 if {$rowid==-4703774} { | |
304 execsql { | |
305 INSERT INTO tt(rowid, a, b, c, d, e, f) | |
306 VALUES($rowid, $a, $b, $c, $d, $e, $f) | |
307 } | |
308 } | |
309 } | |
310 execsql COMMIT | |
311 | |
312 | |
313 foreach {tn expr} { | |
314 A.1 { {a} : x } | |
315 A.2 { {a b} : x } | |
316 A.3 { {a b f} : x } | |
317 A.4 { {f a b} : x } | |
318 A.5 { {f a b} : x y } | |
319 A.6 { {f a b} : x + y } | |
320 A.7 { {c a b} : x + c } | |
321 A.8 { {c d} : "l m" } | |
322 A.9 { {c e} : "l m" } | |
323 A.10 { {a b c a b c a b c f f e} : "l m" } | |
324 | |
325 B.1 { a NOT b } | |
326 B.2 { a NOT a:b } | |
327 B.3 { a OR (b AND c) } | |
328 B.4 { a OR (b AND {a b c}:c) } | |
329 B.5 { a OR "b c" } | |
330 B.6 { a OR b OR c } | |
331 | |
332 C.1 { a OR (b AND "b c") } | |
333 C.2 { a OR (b AND "z c") } | |
334 } { | |
335 do_auto_test 3.$fold.$tn tt {a b c d e f} $expr | |
336 } | |
337 } | |
338 | |
339 proc replace_elems {list args} { | |
340 set ret $list | |
341 foreach {idx elem} $args { | |
342 set ret [lreplace $ret $idx $idx $elem] | |
343 } | |
344 set ret | |
345 } | |
346 | |
347 #------------------------------------------------------------------------- | |
348 # | |
349 set bigdoc [string trim [string repeat "a " 1000]] | |
350 do_test 4.0 { | |
351 set a [replace_elems $bigdoc 50 x 950 x] | |
352 set b [replace_elems $bigdoc 20 y 21 x 887 x 888 y] | |
353 set c [replace_elems $bigdoc 1 z 444 z 789 z] | |
354 execsql { | |
355 CREATE VIRTUAL TABLE yy USING fts5(c1, c2, c3); | |
356 INSERT INTO yy(rowid, c1, c2, c3) VALUES(-56789, $a, $b, $c); | |
357 INSERT INTO yy(rowid, c1, c2, c3) VALUES(250, $a, $b, $c); | |
358 } | |
359 } {} | |
360 | |
361 foreach {tn expr} { | |
362 1 x | |
363 2 y | |
364 3 z | |
365 | |
366 4 {c1 : x} 5 {c2 : x} 6 {c3 : x} | |
367 7 {c1 : y} 8 {c2 : y} 9 {c3 : y} | |
368 10 {c1 : z} 11 {c2 : z} 12 {c3 : z} | |
369 | |
370 | |
371 } { | |
372 breakpoint | |
373 do_auto_test 4.$tn yy {c1 c2 c3} $expr | |
374 } | |
375 | |
376 | |
377 | |
378 finish_test | |
379 | |
OLD | NEW |