Index: third_party/sqlite/src/test/fts3defer.test |
diff --git a/third_party/sqlite/src/test/fts3defer.test b/third_party/sqlite/src/test/fts3defer.test |
index 1c9056fd9d25de68f36c174d2b3ba5121cc0e8dd..532d4dfa6a6d2d78309ebb3f169f34229d0c6991 100644 |
--- a/third_party/sqlite/src/test/fts3defer.test |
+++ b/third_party/sqlite/src/test/fts3defer.test |
@@ -13,13 +13,15 @@ set testdir [file dirname $argv0] |
source $testdir/tester.tcl |
source $testdir/malloc_common.tcl |
-ifcapable !fts3 { |
+ifcapable !fts3||!fts4_deferred { |
finish_test |
return |
} |
set sqlite_fts3_enable_parentheses 1 |
+set fts3_simple_deferred_tokens_only 1 |
+ |
set ::testprefix fts3defer |
#-------------------------------------------------------------------------- |
@@ -257,7 +259,6 @@ foreach {tn setup} { |
do_select_test 1.2 { |
SELECT rowid FROM t1 WHERE t1 MATCH 'jk eh' |
} {100} |
-if {$tn==3} breakpoint |
do_select_test 1.3 { |
SELECT rowid FROM t1 WHERE t1 MATCH 'jk ubwrfqnbjf' |
} {7 70 98} |
@@ -282,13 +283,16 @@ if {$tn==3} breakpoint |
do_select_test 1.10 { |
SELECT rowid FROM t1 WHERE t1 MATCH 'z* vgsld' |
} {10 13 17 31 35 51 58 88 89 90 93 100} |
- do_select_test 1.11 { |
- SELECT rowid FROM t1 |
- WHERE t1 MATCH '( |
- zdu OR zexh OR zf OR zhbrzadb OR zidhxhbtv OR |
- zk OR zkhdvkw OR zm OR zsmhnf |
- ) vgsld' |
- } {10 13 17 31 35 51 58 88 89 90 93 100} |
+ |
+ if { $fts3_simple_deferred_tokens_only==0 } { |
+ do_select_test 1.11 { |
+ SELECT rowid FROM t1 |
+ WHERE t1 MATCH '( |
+ zdu OR zexh OR zf OR zhbrzadb OR zidhxhbtv OR |
+ zk OR zkhdvkw OR zm OR zsmhnf |
+ ) vgsld' |
+ } {10 13 17 31 35 51 58 88 89 90 93 100} |
+ } |
do_select_test 2.1 { |
SELECT rowid FROM t1 WHERE t1 MATCH '"zm agmckuiu"' |
@@ -364,6 +368,7 @@ if {$tn==3} breakpoint |
foreach DO_MALLOC_TEST $dmt_modes { |
# Phrase search. |
+ # |
do_select_test 5.$DO_MALLOC_TEST.1 { |
SELECT rowid FROM t1 WHERE t1 MATCH '"jk mjpavjuhw"' |
} {8 15 36 64 67 72} |
@@ -416,9 +421,23 @@ if {$tn==3} breakpoint |
do_select_test 6.2.2 { |
SELECT rowid FROM t1 WHERE t1 MATCH '"zm azavwm"' |
} {15 26 92 96} |
- do_select_test 6.2.3 { |
- SELECT rowid FROM t1 WHERE t1 MATCH '"jk xduvfhk" OR "zm azavwm"' |
- } {8 15 26 92 96} |
+ if {$fts3_simple_deferred_tokens_only==0} { |
+ do_select_test 6.2.3 { |
+ SELECT rowid FROM t1 WHERE t1 MATCH '"jk xduvfhk" OR "zm azavwm"' |
+ } {8 15 26 92 96} |
+ } |
+ |
+ if {$tn>1} { |
+ # These tests will not work with $tn==1, as in this case table t1 is |
+ # created using FTS3. The ^ syntax is only available with FTS4 tables. |
+ # |
+ do_select_test 7.1 { |
+ SELECT rowid FROM t1 WHERE t1 MATCH '^zm mjpavjuhw' |
+ } {56 62} |
+ do_select_test 7.2 { |
+ SELECT rowid FROM t1 WHERE t1 MATCH '^azavwm zm' |
+ } {43} |
+ } |
} |
set testprefix fts3defer |
@@ -442,5 +461,67 @@ do_execsql_test 3.3 { |
SELECT count(*) FROM x1 WHERE x1 MATCH '"d e f"' |
} {16} |
+# At one point the following was causing a floating-point exception. |
+# |
+do_execsql_test 4.1 { |
+ CREATE VIRTUAL TABLE x2 USING FTS4(x); |
+ BEGIN; |
+ INSERT INTO x2 VALUES('m m m m m m m m m m m m m m m m m m m m m m m m m m'); |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 SELECT * FROM x2; |
+ INSERT INTO x2 VALUES('a b c d e f g h i j k l m n o p q r s t u v w x y m'); |
+ COMMIT; |
+} |
+do_execsql_test 4.2 { |
+ SELECT * FROM x2 WHERE x2 MATCH 'a b c d e f g h i j k l m n o p q r s'; |
+} {{a b c d e f g h i j k l m n o p q r s t u v w x y m}} |
+ |
+set tokenizers {1 simple} |
+ifcapable icu { lappend tokenizers 2 {icu en_US} } |
+foreach {tn tokenizer} $tokenizers { |
+ do_execsql_test 5.$tn.1 " |
+ CREATE VIRTUAL TABLE x3 USING FTS4(a, b, TOKENIZE $tokenizer) |
+ " |
+ do_execsql_test 5.$tn.2 { |
+ BEGIN; |
+ INSERT INTO x3 VALUES('b b b b b b b b b b b', 'b b b b b b b b b b b b b'); |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 SELECT * FROM x3; |
+ INSERT INTO x3 VALUES('a b c', NULL); |
+ INSERT INTO x3 VALUES('a x c', NULL); |
+ COMMIT; |
+ |
+ SELECT * FROM x3 WHERE x3 MATCH 'a b'; |
+ } {{a b c} {}} |
+ |
+ do_execsql_test 5.$tn.3 { DROP TABLE x3 } |
+} |
finish_test |