Snapshot of upstream SQLite 3.42.0
[sqlcipher.git] / ext / fts5 / test / fts5af.test
blob3d79295092ea54c485a7454c022fb83887860868
1 # 2014 June 17
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #*************************************************************************
11 # This file implements regression tests for SQLite library.  The
12 # focus of this script is testing the FTS5 module.
13
14 # More specifically, the tests in this file focus on the built-in 
15 # snippet() function.
18 source [file join [file dirname [info script]] fts5_common.tcl]
19 set testprefix fts5af
21 # If SQLITE_ENABLE_FTS5 is defined, omit this file.
22 ifcapable !fts5 {
23   finish_test
24   return
27 foreach_detail_mode $testprefix {
29 do_execsql_test 1.0 {
30   CREATE VIRTUAL TABLE t1 USING fts5(x, y, detail=%DETAIL%);
33 proc do_snippet_test {tn doc match res} {
35   uplevel #0 [list set v1 $doc]
36   uplevel #0 [list set v2 $match]
38   do_execsql_test $tn.1 {
39     DELETE FROM t1;
40     INSERT INTO t1 VALUES($v1, NULL);
41     SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2;
42   } [list $res]
44   do_execsql_test $tn.2 {
45     DELETE FROM t1;
46     INSERT INTO t1 VALUES(NULL, $v1);
47     SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2;
48   } [list $res]
50   do_execsql_test $tn.3 {
51     DELETE FROM t1;
52     INSERT INTO t1 VALUES($v1, NULL);
53     SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2
54     ORDER BY rank DESC;
55   } [list $res]
61 foreach {tn doc res} {
63   1.1 {X o o o o o o} {[X] o o o o o o}
64   1.2 {o X o o o o o} {o [X] o o o o o}
65   1.3 {o o X o o o o} {o o [X] o o o o}
66   1.4 {o o o X o o o} {o o o [X] o o o}
67   1.5 {o o o o X o o} {o o o o [X] o o}
68   1.6 {o o o o o X o} {o o o o o [X] o}
69   1.7 {o o o o o o X} {o o o o o o [X]}
71   2.1 {X o o o o o o o} {[X] o o o o o o...}
72   2.2 {o X o o o o o o} {o [X] o o o o o...}
73   2.3 {o o X o o o o o} {o o [X] o o o o...}
74   2.4 {o o o X o o o o} {o o o [X] o o o...}
75   2.5 {o o o o X o o o} {o o o o [X] o o...}
76   2.6 {o o o o o X o o} {o o o o o [X] o...}
77   2.7 {o o o o o o X o} {o o o o o o [X]...}
78   2.8 {o o o o o o o X} {...o o o o o o [X]}
80   2.9  {o o o o o o o X o}       {...o o o o o [X] o}
81   2.10 {o o o o o o o X o o}     {...o o o o [X] o o}
82   2.11 {o o o o o o o X o o o}   {...o o o [X] o o o}
83   2.12 {o o o o o o o X o o o o} {...o o o [X] o o o...}
86   3.1 {X o o o o o o o o} {[X] o o o o o o...}
87   3.2 {o X o o o o o o o} {o [X] o o o o o...}
88   3.3 {o o X o o o o o o} {o o [X] o o o o...}
89   3.4 {o o o X o o o o o} {o o o [X] o o o...}
91   3.5 {o o o o o o o X o o o o} {...o o o [X] o o o...}
92   3.6 {o o o o o o o o X o o o} {...o o o [X] o o o}
93   3.7 {o o o o o o o o o X o o} {...o o o o [X] o o}
94   3.8 {o o o o o o o o o o X o} {...o o o o o [X] o}
95   3.9 {o o o o o o o o o o o X} {...o o o o o o [X]}
97   4.1 {X o o o o o X o o} {[X] o o o o o [X]...}
98   4.2 {o o o o o o o X o o o o o X o} {...[X] o o o o o [X]...}
99   4.3 {o o o o o o o o X o o o o o X} {...[X] o o o o o [X]}
101   5.1 {X o o o o X o o o} {[X] o o o o [X] o...}
102   5.2 {o o o o o o o X o o o o X o o} {...[X] o o o o [X] o...}
103   5.3 {o o o o o o o o X o o o o X o} {...[X] o o o o [X] o}
104   5.4 {o o o o o o o o o X o o o o X} {...o [X] o o o o [X]}
106   6.1 {X o o o X o o o} {[X] o o o [X] o o...}
107   6.2 {o X o o o X o o o} {o [X] o o o [X] o...}
108   6.3 {o o o o o o o X o o o X o o} {...o [X] o o o [X] o...}
109   6.4 {o o o o o o o o X o o o X o} {...o [X] o o o [X] o}
110   6.5 {o o o o o o o o o X o o o X} {...o o [X] o o o [X]}
112   7.1 {X o o X o o o o o} {[X] o o [X] o o o...}
113   7.2 {o X o o X o o o o} {o [X] o o [X] o o...}
114   7.3 {o o o o o o o X o o X o o o} {...o [X] o o [X] o o...}
115   7.4 {o o o o o o o o X o o X o o} {...o [X] o o [X] o o}
116   7.5 {o o o o o o o o o X o o X o} {...o o [X] o o [X] o}
117   7.6 {o o o o o o o o o o X o o X} {...o o o [X] o o [X]}
119   8.1 {o o o o o o o o o X o o o o o o o o o o o o o o o o X X X o o o}
120       {...o o [X] [X] [X] o o...}
121   8.2 {o o o o o o o. o o X o o o o o o o o o o o o o o o o X X X o o o} 
122       {...o o [X] o o o o...}
123   8.3 {o o o o X o o o o o o o o o o o o o o o o o o o o o X X X o o o} 
124       {o o o o [X] o o...}
125 } {
126   do_snippet_test 1.$tn $doc X $res
129 if {[detail_is_full]} {
130   foreach {tn doc res} {
131     1.1 {X Y o o o o o} {[X Y] o o o o o}
132     1.2 {o X Y o o o o} {o [X Y] o o o o}
133     1.3 {o o X Y o o o} {o o [X Y] o o o}
134     1.4 {o o o X Y o o} {o o o [X Y] o o}
135     1.5 {o o o o X Y o} {o o o o [X Y] o}
136     1.6 {o o o o o X Y} {o o o o o [X Y]}
138     2.1 {X Y o o o o o o} {[X Y] o o o o o...}
139     2.2 {o X Y o o o o o} {o [X Y] o o o o...}
140     2.3 {o o X Y o o o o} {o o [X Y] o o o...}
141     2.4 {o o o o o o o X Y o o o} {...o o [X Y] o o o}
142     2.5 {o o o o o o o o X Y o o} {...o o o [X Y] o o}
143     2.6 {o o o o o o o o o X Y o} {...o o o o [X Y] o}
144     2.7 {o o o o o o o o o o X Y} {...o o o o o [X Y]}
146     3.1 {X Y o o o o o o o} {[X Y] o o o o o...}
147     3.2 {o X Y o o o o o o} {o [X Y] o o o o...}
148     3.3 {o o X Y o o o o o} {o o [X Y] o o o...}
149     3.4 {o o o o o o o X Y o o o o} {...o o [X Y] o o o...}
150     3.5 {o o o o o o o o X Y o o o} {...o o [X Y] o o o}
151     3.6 {o o o o o o o o o X Y o o} {...o o o [X Y] o o}
152     3.7 {o o o o o o o o o o X Y o} {...o o o o [X Y] o}
153     3.8 {o o o o o o o o o o o X Y} {...o o o o o [X Y]}
154   } {
155     do_snippet_test 2.$tn $doc "X + Y" $res
156   }
159 do_execsql_test 4.0 {
160   CREATE VIRTUAL TABLE x1 USING fts5(a, b);
161   INSERT INTO x1 VALUES('xyz', '1 2 3 4 5 6 7 8 9 10 11 12 13');
162   SELECT snippet(x1, 1, '[', ']', '...', 5) FROM x1('xyz');
163 } {
164   {1 2 3 4 5...}
167 do_execsql_test 5.0 {
168   CREATE VIRTUAL TABLE p1 USING fts5(a, b, detail=%DETAIL%);
169   INSERT INTO p1 VALUES(
170     'x a a a a a a a a a a',
171     'a a a a a a a a a a a a a a a a a a a x'
172   );
174 do_execsql_test 5.1 {
175   SELECT snippet(p1, 0, '[', ']', '...', 6) FROM p1('x');
176 } {{[x] a a a a a...}}
178 do_execsql_test 5.2 {
179   SELECT snippet(p1, 0, '[', ']', NULL, 6) FROM p1('x');
180 } {{[x] a a a a a}}
181 do_execsql_test 5.3 {
182   SELECT snippet(p1, 0, NULL, ']', '...', 6) FROM p1('x');
183 } {{x] a a a a a...}}
184 do_execsql_test 5.4 {
185   SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x');
186 } {{[x a a a a a...}}
187 do_execsql_test 5.5 {
188   SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ""');
189 } {{[x a a a a a...}}
190 do_execsql_test 5.6 {
191   SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ' || x'DB');
192 } {{[x a a a a a...}}
194 } ;# foreach_detail_mode 
196 reset_db
197 do_execsql_test 6.0 {
198   CREATE VIRTUAL TABLE t1 USING fts5(colA, colB);
199   INSERT INTO t1 VALUES('A B C', 'D E F');
202 do_execsql_test 6.1 {
203   SELECT colA, colB, snippet(t1,0,'[', ']','...',1) FROM t1 WHERE t1 MATCH 'B';
204 } {{A B C} {D E F} ...[B]...}
205 breakpoint
206 do_execsql_test 6.2 {
207   SELECT colA, colB, snippet(t1, 1,'[',']','...',2) FROM t1 WHERE t1 MATCH 'B';
208 } {{A B C} {D E F} {D E...}}
209 do_execsql_test 6.3 {
210   SELECT colA, colB, snippet(t1, 1,'[',']','...',1) FROM t1 WHERE t1 MATCH 'B';
211 } {{A B C} {D E F} {D...}}
213 do_execsql_test 6.1 {
214   SELECT colA, colB, snippet(t1,0,'[', ']','...',1) FROM t1 WHERE t1 MATCH 'A';
215 } {{A B C} {D E F} [A]...}
216 breakpoint
217 do_execsql_test 6.2 {
218   SELECT colA, colB, snippet(t1, 1,'[',']','...',2) FROM t1 WHERE t1 MATCH 'A';
219 } {{A B C} {D E F} {D E...}}
220 do_execsql_test 6.3 {
221   SELECT colA, colB, snippet(t1, 1,'[',']','...',1) FROM t1 WHERE t1 MATCH 'A';
222 } {{A B C} {D E F} {D...}}
226 finish_test