1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-01 06:27:03 +03:00

Fix a problem in FTS to do with ^ tokens and the snippet() function.

FossilOrigin-Name: 2c03b24f4cc6f2c28c9d5b9984320d41b8486c32
This commit is contained in:
dan
2011-10-19 09:40:49 +00:00
parent 3f1ea8d114
commit 50a7544d6f
5 changed files with 37 additions and 14 deletions

View File

@ -18,6 +18,14 @@ ifcapable !fts3 {
return
}
proc lreverse {L} {
set res [list]
for {set ii [expr [llength $L]-1]} {$ii>=0} {incr ii -1} {
lappend res [lindex $L $ii]
}
set res
}
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE x1 USING FTS4(a, b, c);
INSERT INTO x1(docid,a,b,c) VALUES(0, 'K H D S T', 'V M N Y K', 'S Z N Q S');
@ -33,7 +41,7 @@ do_execsql_test 1.0 {
INSERT INTO x1(docid,a,b,c) VALUES(10, 'Q I A Q M', 'N D K H C', 'A H T Q Z');
INSERT INTO x1(docid,a,b,c) VALUES(11, 'T E R Q B', 'C I B C B', 'F Z U W R');
INSERT INTO x1(docid,a,b,c) VALUES(12, 'E S V U W', 'T P F W H', 'A M D J Q');
INSERT INTO x1(docid,a,b,c) VALUES(13, 'X S B T Y', 'U D N D P', 'X Z Y G F');
INSERT INTO x1(docid,a,b,c) VALUES(13, 'X S B X Y', 'U D N D P', 'X Z Y G F');
INSERT INTO x1(docid,a,b,c) VALUES(14, 'K H A B L', 'S R C C Z', 'D W E H J');
INSERT INTO x1(docid,a,b,c) VALUES(15, 'C E U C C', 'W F M N M', 'T Z U X T');
INSERT INTO x1(docid,a,b,c) VALUES(16, 'Q G C G H', 'H N N B H', 'B Q I H Y');
@ -45,6 +53,7 @@ do_execsql_test 1.0 {
INSERT INTO x2(docid, a, b, c) SELECT docid, a, b, c FROM x1;
}
foreach x {1 2} {
foreach {tn match res} {
1 "^K" {0 1 14}
@ -62,10 +71,7 @@ foreach x {1 2} {
12 {"K H"} {0 10 14}
13 {"K ^H"} {}
} {
set rev [list]
for {set ii [expr [llength $res]-1]} {$ii>=0} {incr ii -1} {
lappend rev [lindex $res $ii]
}
set rev [lreverse $res]
do_execsql_test 1.$x.$tn.1 {SELECT docid FROM x1 WHERE x1 MATCH $match} $res
do_execsql_test 1.$x.$tn.2 {SELECT docid FROM x2 WHERE x2 MATCH $match} $rev
}
@ -76,4 +82,19 @@ foreach x {1 2} {
} {}
}
foreach {tn match res} {
1 {^K} {{[K] H D S T} {[K] N J L W} {[K] H A B L}}
2 {^X} {{[X] Y D L S} {[X] J P K R} {[X] S B X Y}}
3 {^X Y} {{[X] [Y] D L S} {D [Y] P O I...[X] J P K R} {[X] S B X [Y]}}
} {
set rev [lreverse $res]
do_execsql_test 1.3.$tn.1 {
SELECT snippet(x1, '[', ']', '...') FROM x1 WHERE x1 MATCH $match
} $res
do_execsql_test 1.3.$tn.2 {
SELECT snippet(x2, '[', ']', '...') FROM x2 WHERE x2 MATCH $match
} $rev
}
finish_test