123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- # 2014 June 17
- #
- # The author disclaims copyright to this source code. In place of
- # a legal notice, here is a blessing:
- #
- # May you do good and not evil.
- # May you find forgiveness for yourself and forgive others.
- # May you share freely, never taking more than you give.
- #
- #*************************************************************************
- # This file implements regression tests for SQLite library. The
- # focus of this script is testing the FTS5 module.
- #
- # More specifically, the tests in this file focus on the built-in
- # snippet() function.
- #
- source [file join [file dirname [info script]] fts5_common.tcl]
- set testprefix fts5af
- # If SQLITE_ENABLE_FTS5 is not defined, omit this file.
- ifcapable
- testprefix {
- do_execsql_test 1.0 {
- CREATE VIRTUAL TABLE t1 USING fts5(x, y, detail=%DETAIL%);
- }
- proc do_snippet_test {tn doc match res} {
- uplevel #0 [list set v1 $doc]
- uplevel #0 [list set v2 $match]
- do_execsql_test $tn.1 {
- DELETE FROM t1;
- INSERT INTO t1 VALUES($v1, NULL);
- SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2;
- } [list $res]
- do_execsql_test $tn.2 {
- DELETE FROM t1;
- INSERT INTO t1 VALUES(NULL, $v1);
- SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2;
- } [list $res]
- do_execsql_test $tn.3 {
- DELETE FROM t1;
- INSERT INTO t1 VALUES($v1, NULL);
- SELECT snippet(t1, -1, '[', ']', '...', 7) FROM t1 WHERE t1 MATCH $v2
- ORDER BY rank DESC;
- } [list $res]
- }
- foreach {tn doc res} {
- 1.1 {X o o o o o o} {[X] o o o o o o}
- 1.2 {o X o o o o o} {o [X] o o o o o}
- 1.3 {o o X o o o o} {o o [X] o o o o}
- 1.4 {o o o X o o o} {o o o [X] o o o}
- 1.5 {o o o o X o o} {o o o o [X] o o}
- 1.6 {o o o o o X o} {o o o o o [X] o}
- 1.7 {o o o o o o X} {o o o o o o [X]}
- 2.1 {X o o o o o o o} {[X] o o o o o o...}
- 2.2 {o X o o o o o o} {o [X] o o o o o...}
- 2.3 {o o X o o o o o} {o o [X] o o o o...}
- 2.4 {o o o X o o o o} {o o o [X] o o o...}
- 2.5 {o o o o X o o o} {o o o o [X] o o...}
- 2.6 {o o o o o X o o} {o o o o o [X] o...}
- 2.7 {o o o o o o X o} {o o o o o o [X]...}
- 2.8 {o o o o o o o X} {...o o o o o o [X]}
- 2.9 {o o o o o o o X o} {...o o o o o [X] o}
- 2.10 {o o o o o o o X o o} {...o o o o [X] o o}
- 2.11 {o o o o o o o X o o o} {...o o o [X] o o o}
- 2.12 {o o o o o o o X o o o o} {...o o o [X] o o o...}
- 3.1 {X o o o o o o o o} {[X] o o o o o o...}
- 3.2 {o X o o o o o o o} {o [X] o o o o o...}
- 3.3 {o o X o o o o o o} {o o [X] o o o o...}
- 3.4 {o o o X o o o o o} {o o o [X] o o o...}
- 3.5 {o o o o o o o X o o o o} {...o o o [X] o o o...}
- 3.6 {o o o o o o o o X o o o} {...o o o [X] o o o}
- 3.7 {o o o o o o o o o X o o} {...o o o o [X] o o}
- 3.8 {o o o o o o o o o o X o} {...o o o o o [X] o}
- 3.9 {o o o o o o o o o o o X} {...o o o o o o [X]}
- 4.1 {X o o o o o X o o} {[X] o o o o o [X]...}
- 4.2 {o o o o o o o X o o o o o X o} {...[X] o o o o o [X]...}
- 4.3 {o o o o o o o o X o o o o o X} {...[X] o o o o o [X]}
- 5.1 {X o o o o X o o o} {[X] o o o o [X] o...}
- 5.2 {o o o o o o o X o o o o X o o} {...[X] o o o o [X] o...}
- 5.3 {o o o o o o o o X o o o o X o} {...[X] o o o o [X] o}
- 5.4 {o o o o o o o o o X o o o o X} {...o [X] o o o o [X]}
- 6.1 {X o o o X o o o} {[X] o o o [X] o o...}
- 6.2 {o X o o o X o o o} {o [X] o o o [X] o...}
- 6.3 {o o o o o o o X o o o X o o} {...o [X] o o o [X] o...}
- 6.4 {o o o o o o o o X o o o X o} {...o [X] o o o [X] o}
- 6.5 {o o o o o o o o o X o o o X} {...o o [X] o o o [X]}
- 7.1 {X o o X o o o o o} {[X] o o [X] o o o...}
- 7.2 {o X o o X o o o o} {o [X] o o [X] o o...}
- 7.3 {o o o o o o o X o o X o o o} {...o [X] o o [X] o o...}
- 7.4 {o o o o o o o o X o o X o o} {...o [X] o o [X] o o}
- 7.5 {o o o o o o o o o X o o X o} {...o o [X] o o [X] o}
- 7.6 {o o o o o o o o o o X o o X} {...o o o [X] o o [X]}
- 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}
- {...o o [X] [X] [X] o o...}
- 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}
- {...o o [X] o o o o...}
- 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}
- {o o o o [X] o o...}
- } {
- do_snippet_test 1.$tn $doc X $res
- }
- if {[detail_is_full]} {
- foreach {tn doc res} {
- 1.1 {X Y o o o o o} {[X Y] o o o o o}
- 1.2 {o X Y o o o o} {o [X Y] o o o o}
- 1.3 {o o X Y o o o} {o o [X Y] o o o}
- 1.4 {o o o X Y o o} {o o o [X Y] o o}
- 1.5 {o o o o X Y o} {o o o o [X Y] o}
- 1.6 {o o o o o X Y} {o o o o o [X Y]}
- 2.1 {X Y o o o o o o} {[X Y] o o o o o...}
- 2.2 {o X Y o o o o o} {o [X Y] o o o o...}
- 2.3 {o o X Y o o o o} {o o [X Y] o o o...}
- 2.4 {o o o o o o o X Y o o o} {...o o [X Y] o o o}
- 2.5 {o o o o o o o o X Y o o} {...o o o [X Y] o o}
- 2.6 {o o o o o o o o o X Y o} {...o o o o [X Y] o}
- 2.7 {o o o o o o o o o o X Y} {...o o o o o [X Y]}
- 3.1 {X Y o o o o o o o} {[X Y] o o o o o...}
- 3.2 {o X Y o o o o o o} {o [X Y] o o o o...}
- 3.3 {o o X Y o o o o o} {o o [X Y] o o o...}
- 3.4 {o o o o o o o X Y o o o o} {...o o [X Y] o o o...}
- 3.5 {o o o o o o o o X Y o o o} {...o o [X Y] o o o}
- 3.6 {o o o o o o o o o X Y o o} {...o o o [X Y] o o}
- 3.7 {o o o o o o o o o o X Y o} {...o o o o [X Y] o}
- 3.8 {o o o o o o o o o o o X Y} {...o o o o o [X Y]}
- } {
- do_snippet_test 2.$tn $doc "X + Y" $res
- }
- }
- do_execsql_test 4.0 {
- CREATE VIRTUAL TABLE x1 USING fts5(a, b);
- INSERT INTO x1 VALUES('xyz', '1 2 3 4 5 6 7 8 9 10 11 12 13');
- SELECT snippet(x1, 1, '[', ']', '...', 5) FROM x1('xyz');
- } {
- {1 2 3 4 5...}
- }
- do_execsql_test 5.0 {
- CREATE VIRTUAL TABLE p1 USING fts5(a, b, detail=%DETAIL%);
- INSERT INTO p1 VALUES(
- 'x a a a a a a a a a a',
- 'a a a a a a a a a a a a a a a a a a a x'
- );
- }
- do_execsql_test 5.1 {
- SELECT snippet(p1, 0, '[', ']', '...', 6) FROM p1('x');
- } {{[x] a a a a a...}}
- do_execsql_test 5.2 {
- SELECT snippet(p1, 0, '[', ']', NULL, 6) FROM p1('x');
- } {{[x] a a a a a}}
- do_execsql_test 5.3 {
- SELECT snippet(p1, 0, NULL, ']', '...', 6) FROM p1('x');
- } {{x] a a a a a...}}
- do_execsql_test 5.4 {
- SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x');
- } {{[x a a a a a...}}
- do_execsql_test 5.5 {
- SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ""');
- } {{[x a a a a a...}}
- do_execsql_test 5.6 {
- SELECT snippet(p1, 0, '[', NULL, '...', 6) FROM p1('x OR ' || x'DB');
- } {{[x a a a a a...}}
- } ;# foreach_detail_mode
- reset_db
- do_execsql_test 6.0 {
- CREATE VIRTUAL TABLE t1 USING fts5(colA, colB);
- INSERT INTO t1 VALUES('A B C', 'D E F');
- }
- do_execsql_test 6.1 {
- SELECT colA, colB, snippet(t1,0,'[', ']','...',1) FROM t1 WHERE t1 MATCH 'B';
- } {{A B C} {D E F} ...[B]...}
- breakpoint
- do_execsql_test 6.2 {
- SELECT colA, colB, snippet(t1, 1,'[',']','...',2) FROM t1 WHERE t1 MATCH 'B';
- } {{A B C} {D E F} {D E...}}
- do_execsql_test 6.3 {
- SELECT colA, colB, snippet(t1, 1,'[',']','...',1) FROM t1 WHERE t1 MATCH 'B';
- } {{A B C} {D E F} {D...}}
- do_execsql_test 6.1 {
- SELECT colA, colB, snippet(t1,0,'[', ']','...',1) FROM t1 WHERE t1 MATCH 'A';
- } {{A B C} {D E F} [A]...}
- breakpoint
- do_execsql_test 6.2 {
- SELECT colA, colB, snippet(t1, 1,'[',']','...',2) FROM t1 WHERE t1 MATCH 'A';
- } {{A B C} {D E F} {D E...}}
- do_execsql_test 6.3 {
- SELECT colA, colB, snippet(t1, 1,'[',']','...',1) FROM t1 WHERE t1 MATCH 'A';
- } {{A B C} {D E F} {D...}}
- finish_test
|