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