fts5ac.test 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. # 2014 June 17
  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. # This file implements regression tests for SQLite library. The
  12. # focus of this script is testing the FTS5 module.
  13. #
  14. #
  15. source [file join [file dirname [info script]] fts5_common.tcl]
  16. set testprefix fts5ac
  17. # If SQLITE_ENABLE_FTS5 is not defined, omit this file.
  18. ifcapable !fts5 {
  19. finish_test
  20. return
  21. }
  22. foreach_detail_mode $testprefix {
  23. set data {
  24. 0 {p o q e z k z p n f y u z y n y} {l o o l v v k}
  25. 1 {p k h h p y l l h i p v n} {p p l u r i f a j g e r r x w}
  26. 2 {l s z j k i m p s} {l w e j t j e e i t w r o p o}
  27. 3 {x g y m y m h p} {k j j b r e y y a k y}
  28. 4 {q m a i y i z} {o w a g k x g j m w e u k}
  29. 5 {k o a w y b s z} {s g l m m l m g p}
  30. 6 {d a q i z h b l c p k j g k} {p x u j x t v c z}
  31. 7 {f d a g o c t i} {w f c x l d r k i j}
  32. 8 {y g w u b q p o m j y b p a e k} {r i d k y w o z q m a t p}
  33. 9 {r k o m c c j s x m x m x m q r} {y r c a q d z k n x n}
  34. 10 {k j q m g q a j d} {d d e z g w h c d o o g x d}
  35. 11 {j z u m o y q j f w e e w t r j w} {g m o r x n t n w i f g l z f}
  36. 12 {s y w a w d o h x m k} {c w k z b p o r a}
  37. 13 {u t h x e g s k n g i} {f j w g c s r}
  38. 14 {b f i c s u z t k} {c k q s j u i z o}
  39. 15 {n a f n u s w h y n s i q e w} {x g e g a s s h n}
  40. 16 {k s q e j n p} {t r j f t o e k k l m i}
  41. 17 {g d t u w r o p m n m n p h b o u} {h s w o s l j e}
  42. 18 {f l q y q q g e e x j r} {n b r r g e i r t x q k}
  43. 19 {f i r g o a w e p i l o a w} {e k r z t d g h g i b d i e m}
  44. 20 {l d u u f p y} {g o m m u x m g l j t t x x u}
  45. 21 {m c d k x i c z l} {m i a i e u h}
  46. 22 {w b f o c g x y j} {z d w x d f h i p}
  47. 23 {w u i u x t c h k i b} {b y k h b v r t g j}
  48. 24 {h f d j s w s b a p k} {a q y u z e y m m j q r}
  49. 25 {d i x y x x k i y f s d j h z p n} {l l q m e t c w g y h t s v g}
  50. 26 {g s q w t d k x g f m j p k y} {r m b x e l t d}
  51. 27 {j l s q u g y v e c l o} {m f l m m m h g x x l n c}
  52. 28 {c t j g v r s b z j} {l c f y d t q n}
  53. 29 {e x z y w i h l} {b n b x e y q e n u m}
  54. 30 {g y y h j b w r} {q b q f u s k c k g r}
  55. 31 {g u l x l b r c m z b u c} {k g t b x k x n t e z d h o}
  56. 32 {w g v l z f b z h p s c v h} {g e w v m h k r g w a r f q}
  57. 33 {c g n f u d o y o b} {e y o h x x y y i z s b h a j}
  58. 34 {v y h c q u u s q y x x k s q} {d n r m y k n t i r n w e}
  59. 35 {o u c x l e b t a} {y b a x y f z x r}
  60. 36 {x p h l j a a u u j h} {x o f s z m b c q p}
  61. 37 {k q t i c a q n m v v} {v r z e f m y o}
  62. 38 {r w t t t t r v v o e p g h} {l w x a g a u h y}
  63. 39 {o p v g v b a g o} {j t q c r b b g y z}
  64. 40 {f s o r o d t h q f x l} {r d b m k i f s t d l m y x j w}
  65. 41 {t m o t m f m f} {i p i q j v n v m b q}
  66. 42 {t x w a r l w d t b c o d o} {a h f h w z d n s}
  67. 43 {t u q c d g p q x j o l c x c} {m n t o z z j a y}
  68. 44 {v d i i k b f s z r v r z y} {g n q y s x x m b x c l w}
  69. 45 {p v v a c s z y e o l} {m v t u d k m k q b d c v z r}
  70. 46 {f y k l d r q w r s t r e} {h m v r r l r r t f q e x y}
  71. 47 {w l n l t y x} {n h s l a f c h u f l x x m v n o}
  72. 48 {t n v i k e b p z p d j j l i o} {i v z p g u e j s i k n h w d c}
  73. 49 {z v x p n l t a j c} {e j l e n c e t a d}
  74. 50 {w u b x u i v h a i y m m r p m s} {s r h d o g z y f f x e}
  75. 51 {d c c x b c a x g} {p r a j v u y}
  76. 52 {f w g r c o d l t u e z h i} {j l l s s b j m}
  77. 53 {p m t f k i x} {u v y a z g w v v m x h i}
  78. 54 {l c z g l o j i c d e b} {b f v y w u i b e i y}
  79. 55 {r h c x f x a d s} {z x y k f l r b q c v}
  80. 56 {v x x c y h z x b g m o q n c} {h n b i t g h a q b c o r u}
  81. 57 {d g l o h t b s b r} {n u e p t i m u}
  82. 58 {t d y e t d c w u o s w x f c h} {i o s v y b r d r}
  83. 59 {l b a p q n d r} {k d c c d n y q h g a o p e x}
  84. 60 {f r z v m p k r} {x x r i s b a g f c}
  85. 61 {s a z i e r f i w c n y v z t k s} {y y i r y n l s b w i e k n}
  86. 62 {n x p r e x q r m v i b y} {f o o z n b s r q j}
  87. 63 {y j s u j x o n r q t f} {f v k n v x u s o a d e f e}
  88. 64 {u s i l y c x q} {r k c h p c h b o s s u s p b}
  89. 65 {m p i o s h o} {s w h u n d m n q t y k b w c}
  90. 66 {l d f g m x x x o} {s w d d f b y j j h h t i y p j o}
  91. 67 {c b m h f n v w n h} {i r w i e x r w l z p x u g u l s}
  92. 68 {y a h u h i m a y q} {d d r x h e v q n z y c j}
  93. 69 {c x f d x o n p o b r t b l p l} {m i t k b x v f p t m l l y r o}
  94. 70 {u t l w w m s} {m f m o l t k o p e}
  95. 71 {f g q e l n d m z x q} {z s i i i m f w w f n g p e q}
  96. 72 {n l h a v u o d f j d e x} {v v s l f g d g r a j x i f z x}
  97. 73 {x v m v f i g q e w} {r y s j i k m j j e d g r n o i f}
  98. 74 {g d y n o h p s y q z j d w n h w} {x o d l t j i b r d o r y}
  99. 75 {p g b i u r b e q d v o a g w m k} {q y z s f q o h}
  100. 76 {u z a q u f i f f b} {b s p b a a d x r r i q f}
  101. 77 {w h h z t h p o a h h e e} {h w r p h k z v y f r x}
  102. 78 {c a r k i a p u x} {f w l p t e m l}
  103. 79 {q q u k o t r k z} {f b m c w p s s o z}
  104. 80 {t i g v y q s r x m r x z e f} {x o j w a u e y s j c b u p p r o}
  105. 81 {n j n h r l a r e o z w e} {v o r r j a v b}
  106. 82 {i f i d k w d n h} {o i d z i z l m w s b q v u}
  107. 83 {m d g q q b k b w f q q p p} {j m q f b y c i z k y q p l e a}
  108. 84 {m x o n y f g} {y c n x n q j i y c l h b r q z}
  109. 85 {v o z l n p c} {g n j n t b b x n c l d a g j v}
  110. 86 {z n a y f b t k k t d b z a v} {r p c n r u k u}
  111. 87 {b q t x z e c w} {q a o a l o a h i m j r}
  112. 88 {j f h o x x a z g b a f a m i b} {j z c z y x e x w t}
  113. 89 {t c t p r s u c q n} {z x l i k n f q l n t}
  114. 90 {w t d q j g m r f k n} {l e w f w w a l y q k i q t p c t}
  115. 91 {c b o k l i c b s j n m b l} {y f p q o w g}
  116. 92 {f y d j o q t c c q m f j s t} {f h e d y m o k}
  117. 93 {k x j r m a d o i z j} {r t t t f e b r x i v j v g o}
  118. 94 {s f e a e t i h h d q p z t q} {b k m k w h c}
  119. 95 {h b n j t k i h o q u} {w n g i t o k c a m y p f l x c p}
  120. 96 {f c x p y r b m o l m o a} {p c a q s u n n x d c f a o}
  121. 97 {u h h k m n k} {u b v n u a o c}
  122. 98 {s p e t c z d f n w f} {l s f j b l c e s h}
  123. 99 {r c v w i v h a t a c v c r e} {h h u m g o f b a e o}
  124. }
  125. foreach {tn2 sql} {
  126. 1 {}
  127. 2 {BEGIN}
  128. } {
  129. reset_db
  130. fts5_aux_test_functions db
  131. do_execsql_test 1.$tn2.0 {
  132. CREATE VIRTUAL TABLE xx USING fts5(x,y, detail=%DETAIL%);
  133. INSERT INTO xx(xx, rank) VALUES('pgsz', 32);
  134. }
  135. execsql $sql
  136. do_test 1.$tn2.1.1 {
  137. foreach {id x y} $data {
  138. execsql { INSERT INTO xx(rowid, x, y) VALUES($id, $x, $y) }
  139. }
  140. execsql { INSERT INTO xx(xx) VALUES('integrity-check') }
  141. } {}
  142. #-------------------------------------------------------------------------
  143. #
  144. do_execsql_test 1.$tn2.integrity {
  145. INSERT INTO xx(xx) VALUES('integrity-check');
  146. }
  147. #-------------------------------------------------------------------------
  148. #
  149. foreach {tn expr} {
  150. 1.1 "a AND b"
  151. 1.2 "a OR b"
  152. 1.3 "o"
  153. 1.4 "b q"
  154. 1.5 "e a e"
  155. 1.6 "m d g q q b k b w f q q p p"
  156. 1.7 "l o o l v v k"
  157. 1.8 "a"
  158. 1.9 "b"
  159. 1.10 "c"
  160. 1.11 "no"
  161. 1.12 "L O O L V V K"
  162. 1.13 "a AND b AND c"
  163. 1.14 "x:a"
  164. 2.1 "x:a"
  165. 2.2 "y:a"
  166. 2.3 "x:b"
  167. 2.4 "y:b"
  168. 3.1 "{x}:a"
  169. 3.2 "{y}:a"
  170. 3.3 "{x}:b"
  171. 3.4 "{y}:b"
  172. 4.1 "{x y}:a"
  173. 4.2 "{y x}:a"
  174. 4.3 "{x x}:b"
  175. 4.4 "{y y}:b"
  176. 5.1 {{"x" "y"}:a}
  177. 5.2 {{"y" x}:a}
  178. 5.3 {{x "x"}:b}
  179. 5.4 {{"y" y}:b}
  180. 6.1 "b + q"
  181. 6.2 "e + a + e"
  182. 6.3 "m + d + g + q + q + b + k + b + w + f + q + q + p + p"
  183. 6.4 "l + o + o + l + v + v + k"
  184. 6.5 "L + O + O + L + V + V + K"
  185. 7.1 "a+b AND c"
  186. 7.2 "d+c AND u"
  187. 7.3 "d+c AND u+d"
  188. 7.4 "a+b OR c"
  189. 7.5 "d+c OR u"
  190. 7.6 "d+c OR u+d"
  191. 8.1 "NEAR(a b)"
  192. 8.2 "NEAR(r c)"
  193. 8.2 { NEAR(r c, 5) }
  194. 8.3 { NEAR(r c, 3) }
  195. 8.4 { NEAR(r c, 2) }
  196. 8.5 { NEAR(r c, 0) }
  197. 8.6 { NEAR(a b c) }
  198. 8.7 { NEAR(a b c, 8) }
  199. 8.8 { x : NEAR(r c) }
  200. 8.9 { y : NEAR(r c) }
  201. 9.1 { NEAR(r c) }
  202. 9.2 { NEAR(r c, 5) }
  203. 9.3 { NEAR(r c, 3) }
  204. 9.4 { NEAR(r c, 2) }
  205. 9.5 { NEAR(r c, 0) }
  206. 9.6 { NEAR(a b c) }
  207. 9.7 { NEAR(a b c, 8) }
  208. 9.8 { x : NEAR(r c) }
  209. 9.9 { y : NEAR(r c) }
  210. 9.10 { x : "r c" }
  211. 9.11 { y : "r c" }
  212. 9.12 { a AND b }
  213. 9.13 { a AND b AND c }
  214. 9.14a { a }
  215. 9.14b { a OR b }
  216. 9.15 { a OR b AND c }
  217. 9.16 { c AND b OR a }
  218. 9.17 { c AND (b OR a) }
  219. 9.18 { c NOT (b OR a) }
  220. 9.19 { (c NOT b) OR (a AND d) }
  221. } {
  222. if {[fts5_expr_ok $expr xx]==0} {
  223. do_test 1.$tn2.$tn.OMITTED { list } [list]
  224. continue
  225. }
  226. set res [fts5_query_data $expr xx]
  227. do_execsql_test 1.$tn2.$tn.[llength $res].asc {
  228. SELECT rowid, fts5_test_poslist(xx), fts5_test_collist(xx)
  229. FROM xx WHERE xx match $expr
  230. } $res
  231. set res [fts5_query_data $expr xx DESC]
  232. do_execsql_test 1.$tn2.$tn.[llength $res].desc {
  233. SELECT rowid, fts5_test_poslist(xx), fts5_test_collist(xx)
  234. FROM xx WHERE xx match $expr ORDER BY 1 DESC
  235. } $res
  236. }
  237. }
  238. }
  239. do_execsql_test 2.1 {
  240. SELECT fts5_expr_tcl('a AND b');
  241. } {{AND [nearset -- {a}] [nearset -- {b}]}}
  242. do_test 2.2.1 { nearset {{a b c}} -- a } {0.0.0}
  243. do_test 2.2.2 { nearset {{a b c}} -- c } {0.0.2}
  244. foreach {tn expr tclexpr} {
  245. 1 {a b} {AND [N $x -- {a}] [N $x -- {b}]}
  246. } {
  247. do_execsql_test 2.3.$tn {
  248. SELECT fts5_expr_tcl($expr, 'N $x')
  249. } [list $tclexpr]
  250. }
  251. finish_test