Index: third_party/sqlite/src/ext/fts5/test/fts5synonym2.test |
diff --git a/third_party/sqlite/src/ext/fts5/test/fts5synonym2.test b/third_party/sqlite/src/ext/fts5/test/fts5synonym2.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7e92822c33f6bfd3a034bbd702b21054f6e05a52 |
--- /dev/null |
+++ b/third_party/sqlite/src/ext/fts5/test/fts5synonym2.test |
@@ -0,0 +1,164 @@ |
+# 2014 Dec 20 |
+# |
+# The author disclaims copyright to this source code. In place of |
+# a legal notice, here is a blessing: |
+# |
+# May you do good and not evil. |
+# May you find forgiveness for yourself and forgive others. |
+# May you share freely, never taking more than you give. |
+# |
+#*********************************************************************** |
+# |
+# Tests focusing on custom tokenizers that support synonyms. |
+# |
+ |
+source [file join [file dirname [info script]] fts5_common.tcl] |
+set testprefix fts5synonym2 |
+ |
+# If SQLITE_ENABLE_FTS5 is defined, omit this file. |
+ifcapable !fts5 { |
+ finish_test |
+ return |
+} |
+ |
+foreach tok {query document} { |
+foreach_detail_mode $testprefix { |
+ |
+fts5_tclnum_register db |
+fts5_aux_test_functions db |
+ |
+proc fts5_test_bothlist {cmd} { |
+ |
+ for {set i 0} {$i < [$cmd xPhraseCount]} {incr i} { |
+ set bFirst 1 |
+ $cmd xPhraseColumnForeach $i c { |
+ lappend CL $i.$c |
+ if {$bFirst} { $cmd xPhraseForeach $i c o { lappend PL $i.$c.$o } } |
+ set bFirst 0 |
+ } |
+ } |
+ |
+ list [sort_poslist $PL] $CL |
+} |
+sqlite3_fts5_create_function db fts5_test_bothlist fts5_test_bothlist |
+ |
+proc fts5_rowid {cmd} { expr [$cmd xColumnText -1] } |
+sqlite3_fts5_create_function db fts5_rowid fts5_rowid |
+ |
+do_execsql_test 1.$tok.0.1 " |
+ CREATE VIRTUAL TABLE ss USING fts5(a, b, |
+ tokenize='tclnum $tok', detail=%DETAIL%); |
+ INSERT INTO ss(ss, rank) VALUES('rank', 'fts5_rowid()'); |
+" |
+ |
+do_execsql_test 1.$tok.0.2 { |
+ INSERT INTO ss VALUES('5 5 five seven 3 seven i', '2 1 5 0 two 1 i'); |
+ INSERT INTO ss VALUES('six ix iii 7 i vii iii', 'one seven nine 4 9 1 vi'); |
+ INSERT INTO ss VALUES('6 viii i five six zero seven', '5 v iii iv iv 3'); |
+ INSERT INTO ss VALUES('9 ii six 8 1 6', 'six 4 iv iv 7'); |
+ INSERT INTO ss VALUES('1 5 4 eight ii iv iii', 'nine 2 eight ix v vii'); |
+ INSERT INTO ss VALUES('one 7 seven six 2 two', '1 2 four 7 4 3 4'); |
+ INSERT INTO ss VALUES('eight iv 4 nine vii six 1', '5 6 v one zero 4'); |
+ INSERT INTO ss VALUES('v 9 8 iii 4', '9 4 seven two vi vii'); |
+ INSERT INTO ss VALUES('3 ix two 9 0 nine i', 'five ii nine two viii i five'); |
+ INSERT INTO ss VALUES('six iii 9 two eight 2', 'nine i nine vii nine'); |
+ INSERT INTO ss VALUES('6 three zero seven vii five', '8 vii ix 0 7 seven'); |
+ INSERT INTO ss VALUES('8 vii 8 7 3 4', 'eight iii four viii nine iv three'); |
+ INSERT INTO ss VALUES('4 v 7 two 0 one 8', 'vii 1 two five i zero 9'); |
+ INSERT INTO ss VALUES('3 ii vii vi eight', '8 4 ix one three eight'); |
+ INSERT INTO ss VALUES('iv eight seven 6 9 seven', 'one vi two five seven'); |
+ INSERT INTO ss VALUES('i i 5 i v vii eight', '2 seven i 2 2 four'); |
+ INSERT INTO ss VALUES('0 i iii nine 3 ix five', '0 eight iv 0 six 2'); |
+ INSERT INTO ss VALUES('iv vii three 3 9 one 8', '2 ii 6 eight ii six six'); |
+ INSERT INTO ss VALUES('eight one two nine six', '8 9 3 viii vi'); |
+ INSERT INTO ss VALUES('one 0 four ii eight one 3', 'iii eight vi vi vi'); |
+ INSERT INTO ss VALUES('4 0 eight 0 0', '1 four one vii seven ii'); |
+ INSERT INTO ss VALUES('1 zero nine 2 2', 'viii iv two vi nine v iii'); |
+ INSERT INTO ss VALUES('5 five viii four four vi', '8 five 7 vii 6 4'); |
+ INSERT INTO ss VALUES('7 ix four 8 vii', 'nine three nine ii ix vii'); |
+ INSERT INTO ss VALUES('nine iv v i 0 v', 'two iv vii six i ix 4'); |
+ INSERT INTO ss VALUES('one v v one viii 3 8', '2 1 3 five iii'); |
+ INSERT INTO ss VALUES('six ii 5 nine 4 viii seven', 'eight i ix ix 7 four'); |
+ INSERT INTO ss VALUES('9 ii two seven three 7 0', 'six viii seven 7 five'); |
+ INSERT INTO ss VALUES('five two 4 viii nine', '9 7 nine zero 1 two one'); |
+ INSERT INTO ss VALUES('viii 8 iii i ii 8 3', '4 2 7 v 8 8'); |
+ INSERT INTO ss VALUES('four vii 4 iii zero 0 vii', '3 viii iii zero 9 i'); |
+ INSERT INTO ss VALUES('0 seven v five i five v', 'one 4 2 ix 9'); |
+ INSERT INTO ss VALUES('two 5 two two ix 4 1', '3 nine ii v nine 3 five'); |
+ INSERT INTO ss VALUES('five 5 7 4 6 vii', 'three 2 ix 2 8 6'); |
+ INSERT INTO ss VALUES('six iii vi iv seven eight', '8 six 7 0 4'); |
+ INSERT INTO ss VALUES('vi vi iv 3 0 one one', '9 6 eight ix iv'); |
+ INSERT INTO ss VALUES('7 2 2 iii 0', '0 0 seven 1 nine'); |
+ INSERT INTO ss VALUES('8 6 iv six ii', 'iv 6 3 4 ii five'); |
+ INSERT INTO ss VALUES('0 two two seven ii', 'vii ix four 4 zero vi vi'); |
+ INSERT INTO ss VALUES('2 one eight 8 9 7', 'vi 3 0 3 vii'); |
+ INSERT INTO ss VALUES('iii ii ix iv three', 'vi i 6 1 two'); |
+ INSERT INTO ss VALUES('eight four nine 8 seven', 'one three i nine iii one'); |
+ INSERT INTO ss VALUES('iii seven five ix 8', 'ii 7 seven 0 four ii'); |
+ INSERT INTO ss VALUES('four 0 1 5 two', 'iii 9 5 ii ii 2 4'); |
+ INSERT INTO ss VALUES('iii nine four vi 8 five six', 'i i ii seven vi vii'); |
+ INSERT INTO ss VALUES('eight vii eight six 3', 'i vii 1 six 9 vii'); |
+ INSERT INTO ss VALUES('9 0 viii viii five', 'i 1 viii ix 3 4'); |
+ INSERT INTO ss VALUES('three nine 5 nine viii four zero', 'ii i 1 5 2 viii'); |
+ INSERT INTO ss VALUES('5 vii three 9 four', 'three five one 7 2 eight one'); |
+} |
+ |
+foreach {tn expr} { |
+ 2.1 "one OR two OR three OR four" |
+ |
+ 1.1 "one" 1.2 "two" 1.3 "three" 1.4 "four" |
+ 1.5 "v" 1.6 "vi" 1.7 "vii" 1.8 "viii" |
+ 1.9 "9" 1.10 "0" 1.11 "1" 1.12 "2" |
+ |
+ 2.1 "one OR two OR three OR four" |
+ 2.2 "(one AND two) OR (three AND four)" |
+ 2.3 "(one AND two) OR (three AND four) NOT five" |
+ 2.4 "(one AND two) NOT 6" |
+ |
+ 3.1 "b:one AND a:two" |
+ 3.2 "b:one OR a:two" |
+ 3.3 "a:one OR b:1 OR {a b} : i" |
+ |
+ 4.1 "NEAR(one two, 2)" |
+ 4.2 "NEAR(one two three, 2)" |
+ 4.3 "NEAR(eight nine, 1) OR NEAR(six seven, 1)" |
+} { |
+ if {[fts5_expr_ok $expr ss]==0} { |
+ do_test 1.$tok.$tn.OMITTED { list } [list] |
+ continue |
+ } |
+ |
+ set res [fts5_query_data $expr ss ASC ::tclnum_syn] |
+ do_execsql_test 1.$tok.$tn.[llength $res].asc.1 { |
+ SELECT rowid, fts5_test_poslist2(ss), fts5_test_collist(ss) FROM ss($expr) |
+ } $res |
+ |
+ do_execsql_test 1.$tok.$tn.[llength $res].asc.2 { |
+ SELECT rowid, fts5_test_poslist(ss), fts5_test_collist(ss) FROM ss($expr) |
+ } $res |
+ |
+ do_execsql_test 1.$tok.$tn.[llength $res].asc.2 { |
+ SELECT rowid, fts5_test_poslist2(ss), fts5_test_collist(ss) FROM ss($expr) |
+ ORDER BY rank ASC |
+ } $res |
+ |
+ set res2 [list] |
+ foreach {a b c} $res { lappend res2 $a $c $b } |
+ do_execsql_test 1.$tok.$tn.[llength $res].asc.3 { |
+ SELECT rowid, fts5_test_collist(ss), fts5_test_poslist2(ss) FROM ss($expr) |
+ } $res2 |
+ |
+ set res3 [list] |
+ foreach {a b c} $res { lappend res3 $a [list $b $c] } |
+ do_execsql_test 1.$tok.$tn.[llength $res].asc.3 { |
+ SELECT rowid, fts5_test_bothlist(ss) FROM ss($expr) |
+ } $res3 |
+ |
+ |
+} |
+ |
+} |
+} |
+ |
+finish_test |
+ |