| Index: third_party/sqlite/src/ext/fts5/test/fts5synonym.test
|
| diff --git a/third_party/sqlite/src/ext/fts5/test/fts5synonym.test b/third_party/sqlite/src/ext/fts5/test/fts5synonym.test
|
| index 008d2fc5439b48ae1aeb197d92fa8a0a6eacb559..62436631235c8521f63d261c971befb6b649b0af 100644
|
| --- a/third_party/sqlite/src/ext/fts5/test/fts5synonym.test
|
| +++ b/third_party/sqlite/src/ext/fts5/test/fts5synonym.test
|
| @@ -21,42 +21,16 @@ ifcapable !fts5 {
|
| return
|
| }
|
|
|
| -foreach S {
|
| - {zero 0}
|
| - {one 1 i}
|
| - {two 2 ii}
|
| - {three 3 iii}
|
| - {four 4 iv}
|
| - {five 5 v}
|
| - {six 6 vi}
|
| - {seven 7 vii}
|
| - {eight 8 viii}
|
| - {nine 9 ix}
|
| -} {
|
| - foreach s $S {
|
| - set o [list]
|
| - foreach x $S {if {$x!=$s} {lappend o $x}}
|
| - set ::syn($s) $o
|
| - }
|
| -}
|
| -
|
| -proc tcl_tokenize {tflags text} {
|
| - foreach {w iStart iEnd} [fts5_tokenize_split $text] {
|
| - sqlite3_fts5_token $w $iStart $iEnd
|
| - }
|
| -}
|
| +proc tcl_create {args} { return "tcl_tokenize" }
|
|
|
| -proc tcl_create {args} {
|
| - return "tcl_tokenize"
|
| -}
|
| -
|
| -sqlite3_fts5_create_tokenizer db tcl tcl_create
|
| +foreach_detail_mode $testprefix {
|
|
|
| #-------------------------------------------------------------------------
|
| # Warm body test for the code in fts5_tcl.c.
|
| #
|
| +fts5_tclnum_register db
|
| do_execsql_test 1.0 {
|
| - CREATE VIRTUAL TABLE ft USING fts5(x, tokenize = tcl);
|
| + CREATE VIRTUAL TABLE ft USING fts5(x, tokenize = "tclnum document", detail=%DETAIL%);
|
| INSERT INTO ft VALUES('abc def ghi');
|
| INSERT INTO ft VALUES('jkl mno pqr');
|
| SELECT rowid, x FROM ft WHERE ft MATCH 'def';
|
| @@ -67,22 +41,13 @@ do_execsql_test 1.0 {
|
| # Test a tokenizer that supports synonyms by adding extra entries to the
|
| # FTS index.
|
| #
|
| -
|
| -proc tcl_tokenize {tflags text} {
|
| - foreach {w iStart iEnd} [fts5_tokenize_split $text] {
|
| - sqlite3_fts5_token $w $iStart $iEnd
|
| - if {$tflags=="document" && [info exists ::syn($w)]} {
|
| - foreach s $::syn($w) {
|
| - sqlite3_fts5_token -colo $s $iStart $iEnd
|
| - }
|
| - }
|
| - }
|
| -}
|
| reset_db
|
| -sqlite3_fts5_create_tokenizer db tcl tcl_create
|
| +fts5_tclnum_register db
|
|
|
| do_execsql_test 2.0 {
|
| - CREATE VIRTUAL TABLE ft USING fts5(x, tokenize = tcl);
|
| + CREATE VIRTUAL TABLE ft USING fts5(
|
| + x, tokenize = "tclnum document", detail=%DETAIL%
|
| + );
|
| INSERT INTO ft VALUES('one two three');
|
| INSERT INTO ft VALUES('four five six');
|
| INSERT INTO ft VALUES('eight nine ten');
|
| @@ -95,6 +60,7 @@ foreach {tn expr res} {
|
| 4 "1*" {1}
|
| 5 "1 + 2" {1}
|
| } {
|
| + if {![fts5_expr_ok $expr ft]} continue
|
| do_execsql_test 2.1.$tn {
|
| SELECT rowid FROM ft WHERE ft MATCH $expr
|
| } $res
|
| @@ -180,29 +146,21 @@ do_execsql_test 3.2.5 {
|
| # Check that expressions with synonyms can be parsed and executed.
|
| #
|
| reset_db
|
| -sqlite3_fts5_create_tokenizer db tcl tcl_create
|
| -proc tcl_tokenize {tflags text} {
|
| - foreach {w iStart iEnd} [fts5_tokenize_split $text] {
|
| - sqlite3_fts5_token $w $iStart $iEnd
|
| - if {$tflags=="query" && [info exists ::syn($w)]} {
|
| - foreach s $::syn($w) {
|
| - sqlite3_fts5_token -colo $s $iStart $iEnd
|
| - }
|
| - }
|
| - }
|
| -}
|
| +fts5_tclnum_register db
|
|
|
| foreach {tn expr res} {
|
| 1 {abc} {"abc"}
|
| 2 {one} {"one"|"i"|"1"}
|
| 3 {3} {"3"|"iii"|"three"}
|
| - 4 {3*} {"3"|"iii"|"three" *}
|
| + 4 {3*} {"3" *}
|
| } {
|
| - do_execsql_test 4.1.$tn {SELECT fts5_expr($expr, 'tokenize=tcl')} [list $res]
|
| + do_execsql_test 4.1.$tn {
|
| + SELECT fts5_expr($expr, 'tokenize=tclnum')
|
| + } [list $res]
|
| }
|
|
|
| do_execsql_test 4.2.1 {
|
| - CREATE VIRTUAL TABLE xx USING fts5(x, tokenize=tcl);
|
| + CREATE VIRTUAL TABLE xx USING fts5(x, tokenize=tclnum, detail=%DETAIL%);
|
| INSERT INTO xx VALUES('one two');
|
| INSERT INTO xx VALUES('three four');
|
| }
|
| @@ -217,7 +175,7 @@ do_execsql_test 4.2.3 {
|
|
|
| do_test 5.0 {
|
| execsql {
|
| - CREATE VIRTUAL TABLE t1 USING fts5(a, b, tokenize=tcl)
|
| + CREATE VIRTUAL TABLE t1 USING fts5(a, b, tokenize=tclnum, detail=%DETAIL%)
|
| }
|
| foreach {rowid a b} {
|
| 1 {four v 4 i three} {1 3 five five 4 one}
|
| @@ -285,6 +243,7 @@ foreach {tn q res} {
|
| 5 {three i v i four 4 1} {ii [five five five] iii}
|
| }
|
| } {
|
| + if {![fts5_expr_ok $q t1]} continue
|
| do_execsql_test 5.1.$tn {
|
| SELECT rowid, highlight(t1, 0, '[', ']'), highlight(t1, 1, '[', ']')
|
| FROM t1 WHERE t1 MATCH $q
|
| @@ -316,7 +275,6 @@ foreach {tn q res} {
|
| } $res
|
| }
|
|
|
| -
|
| #-------------------------------------------------------------------------
|
| # Test terms with more than 4 synonyms.
|
| #
|
| @@ -334,17 +292,19 @@ proc tcl_tokenize {tflags text} {
|
| }
|
|
|
| do_execsql_test 6.0.1 {
|
| - CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize=tcl);
|
| + CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize=tcl, detail=%DETAIL%);
|
| INSERT INTO t1 VALUES('yy xx qq');
|
| INSERT INTO t1 VALUES('yy xx xx');
|
| }
|
| -do_execsql_test 6.0.2 {
|
| - SELECT * FROM t1 WHERE t1 MATCH 'NEAR(y q)';
|
| -} {{yy xx qq}}
|
| +if {[fts5_expr_ok "NEAR(y q)" t1]} {
|
| + do_execsql_test 6.0.2 {
|
| + SELECT * FROM t1 WHERE t1 MATCH 'NEAR(y q)';
|
| + } {{yy xx qq}}
|
| +}
|
|
|
| do_test 6.0.3 {
|
| execsql {
|
| - CREATE VIRTUAL TABLE t2 USING fts5(a, b, tokenize=tcl)
|
| + CREATE VIRTUAL TABLE t2 USING fts5(a, b, tokenize=tcl, detail=%DETAIL%)
|
| }
|
| foreach {rowid a b} {
|
| 1 {yyyy vvvvv qq oo yyyyyy vvvv eee} {ffff uu r qq aaaa}
|
| @@ -387,6 +347,8 @@ foreach {tn q res} {
|
| 2 {ww oooooo bbbbb ssssss mm} {ffffff [yy] iiii rr s ccc [qqqqq]}
|
| }
|
| } {
|
| + if {![fts5_expr_ok $q t2]} continue
|
| +
|
| do_execsql_test 6.1.$tn.asc {
|
| SELECT rowid, highlight(t2, 0, '[', ']'), highlight(t2, 1, '[', ']')
|
| FROM t2 WHERE t2 MATCH $q
|
| @@ -435,7 +397,7 @@ proc tcl_tokenize {tflags text} {
|
| }
|
|
|
| do_execsql_test 7.0.1 {
|
| - CREATE VIRTUAL TABLE t1 USING fts5(a, b, columnsize=1, tokenize=tcl);
|
| + CREATE VIRTUAL TABLE t1 USING fts5(a, b, columnsize=1, tokenize=tcl, detail=%DETAIL%);
|
| INSERT INTO t1 VALUES('0 2 3', '4 5 6 7');
|
| INSERT INTO t1 VALUES('8 9', '0 0 0 0 0 0 0 0 0 0');
|
| SELECT fts5_test_columnsize(t1) FROM t1 WHERE t1 MATCH '000 AND 00 AND 0';
|
| @@ -446,7 +408,7 @@ do_execsql_test 7.0.2 {
|
| }
|
|
|
| do_execsql_test 7.1.1 {
|
| - CREATE VIRTUAL TABLE t2 USING fts5(a, b, columnsize=0, tokenize=tcl);
|
| + CREATE VIRTUAL TABLE t2 USING fts5(a, b, columnsize=0, tokenize=tcl, detail=%DETAIL%);
|
| INSERT INTO t2 VALUES('0 2 3', '4 5 6 7');
|
| INSERT INTO t2 VALUES('8 9', '0 0 0 0 0 0 0 0 0 0');
|
| SELECT fts5_test_columnsize(t2) FROM t2 WHERE t2 MATCH '000 AND 00 AND 0';
|
| @@ -456,5 +418,7 @@ do_execsql_test 7.1.2 {
|
| INSERT INTO t2(t2) VALUES('integrity-check');
|
| }
|
|
|
| +} ;# foreach_detail_mode
|
| +
|
| finish_test
|
|
|
|
|