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 |