Index: third_party/sqlite/src/test/fts3snippet.test |
diff --git a/third_party/sqlite/src/test/fts3snippet.test b/third_party/sqlite/src/test/fts3snippet.test |
index 359a87c6f318005c3fbc8d0ba2211a5892b5339a..415251dcced746f95079689bd1085b513782f34b 100644 |
--- a/third_party/sqlite/src/test/fts3snippet.test |
+++ b/third_party/sqlite/src/test/fts3snippet.test |
@@ -16,6 +16,7 @@ |
set testdir [file dirname $argv0] |
source $testdir/tester.tcl |
+set testprefix fts3snippet |
# If SQLITE_ENABLE_FTS3 is not defined, omit this file. |
ifcapable !fts3 { finish_test ; return } |
@@ -131,14 +132,14 @@ foreach {DO_MALLOC_TEST enc} { |
} { |
db close |
- file delete -force test.db |
+ forcedelete test.db |
sqlite3 db test.db |
sqlite3_db_config_lookaside db 0 0 0 |
db eval "PRAGMA encoding = \"$enc\"" |
# Set variable $T to the test name prefix for this iteration of the loop. |
# |
- set T "fts3snippet-$enc" |
+ set T "fts3snippet-1.$enc" |
########################################################################## |
# Test the offset function. |
@@ -432,10 +433,10 @@ foreach {DO_MALLOC_TEST enc} { |
{2 2 1 3 3 3 6 3 0 0 0 2 3 2} |
}] |
- # EVIDENCE-OF: R-40630-02268 If used within a SELECT that uses the |
- # "query by rowid" or "linear scan" strategies, then the snippet and |
- # offsets both return an empty string, and the matchinfo function |
- # returns a blob value zero bytes in size. |
+ # EVIDENCE-OF: R-40630-02268 If used within a SELECT that uses the |
+ # "query by rowid" or "linear scan" strategies, then the snippet and |
+ # offsets both return an empty string, and the matchinfo function |
+ # returns a blob value zero bytes in size. |
# |
set r 1000000 ;# A rowid that exists in table ft |
do_select_test $T.10.0 { SELECT rowid FROM ft WHERE rowid = $r } $r |
@@ -459,5 +460,65 @@ foreach {DO_MALLOC_TEST enc} { |
} {0 blob} |
} |
+#------------------------------------------------------------------------- |
+# Test an interaction between the snippet() function and OR clauses. |
+# |
+do_execsql_test 2.1 { |
+ CREATE VIRTUAL TABLE t2 USING fts4; |
+ INSERT INTO t2 VALUES('one two three four five'); |
+ INSERT INTO t2 VALUES('two three four five one'); |
+ INSERT INTO t2 VALUES('three four five one two'); |
+ INSERT INTO t2 VALUES('four five one two three'); |
+ INSERT INTO t2 VALUES('five one two three four'); |
+} |
+ |
+do_execsql_test 2.2 { |
+ SELECT snippet(t2, '[', ']') FROM t2 WHERE t2 MATCH 'one OR (four AND six)' |
+} { |
+ {[one] two three [four] five} |
+ {two three [four] five [one]} |
+ {three [four] five [one] two} |
+ {[four] five [one] two three} |
+ {five [one] two three [four]} |
+} |
+ |
+do_execsql_test 2.3 { |
+ SELECT snippet(t2, '[', ']') FROM t2 |
+ WHERE t2 MATCH 'one OR (four AND six)' |
+ ORDER BY docid DESC |
+} { |
+ {five [one] two three [four]} |
+ {[four] five [one] two three} |
+ {three [four] five [one] two} |
+ {two three [four] five [one]} |
+ {[one] two three [four] five} |
+} |
+ |
+do_execsql_test 2.4 { |
+ INSERT INTO t2 VALUES('six'); |
+} |
+ |
+do_execsql_test 2.5 { |
+ SELECT snippet(t2, '[', ']') FROM t2 WHERE t2 MATCH 'one OR (four AND six)' |
+} { |
+ {[one] two three [four] five} |
+ {two three [four] five [one]} |
+ {three [four] five [one] two} |
+ {[four] five [one] two three} |
+ {five [one] two three [four]} |
+} |
+ |
+do_execsql_test 2.6 { |
+ SELECT snippet(t2, '[', ']') FROM t2 |
+ WHERE t2 MATCH 'one OR (four AND six)' |
+ ORDER BY docid DESC |
+} { |
+ {five [one] two three [four]} |
+ {[four] five [one] two three} |
+ {three [four] five [one] two} |
+ {two three [four] five [one]} |
+ {[one] two three [four] five} |
+} |
+ |
set sqlite_fts3_enable_parentheses 0 |
finish_test |