| 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 | 
|  |