xref: /sqlite-3.40.0/ext/fts5/test/fts5af.test (revision 76c3ae68)
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# More specifically, the tests in this file focus on the built-in
15# snippet() function.
16#
17
18source [file join [file dirname [info script]] fts5_common.tcl]
19set testprefix fts5af
20
21# If SQLITE_ENABLE_FTS5 is defined, omit this file.
22ifcapable !fts5 {
23  finish_test
24  return
25}
26
27foreach_detail_mode $testprefix {
28
29do_execsql_test 1.0 {
30  CREATE VIRTUAL TABLE t1 USING fts5(x, y, detail=%DETAIL%);
31}
32
33proc do_snippet_test {tn doc match res} {
34
35  uplevel #0 [list set v1 $doc]
36  uplevel #0 [list set v2 $match]
37
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]
43
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]
49
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]
56
57
58}
59
60
61foreach {tn doc res} {
62
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]}
70
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]}
79
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...}
84
85
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...}
90
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]}
96
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]}
100
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]}
105
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]}
111
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]}
118
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
127}
128
129if {[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]}
137
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]}
145
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  }
157}
158
159do_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...}
165}
166
167do_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  );
173}
174do_execsql_test 5.1 {
175  SELECT snippet(p1, 0, '[', ']', '...', 6) FROM p1('x');
176} {{[x] a a a a a...}}
177
178do_execsql_test 5.2 {
179  SELECT snippet(p1, 0, '[', ']', NULL, 6) FROM p1('x');
180} {{[x] a a a a a}}
181do_execsql_test 5.3 {
182  SELECT snippet(p1, 0, NULL, ']', '...', 6) FROM p1('x');
183} {{x] a a a a a...}}
184do_execsql_test 5.4 {
185  SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x');
186} {{[x a a a a a...}}
187do_execsql_test 5.5 {
188  SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ""');
189} {{[x a a a a a...}}
190do_execsql_test 5.6 {
191  SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ' || x'DB');
192} {{[x a a a a a...}}
193
194} ;# foreach_detail_mode
195
196finish_test
197