modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/fts5/test/fts5simple3.test (about) 1 # 2015 September 05 2 # 3 # The author disclaims copyright to this source code. In place of 4 # a legal notice, here is a blessing: 5 # 6 # May you do good and not evil. 7 # May you find forgiveness for yourself and forgive others. 8 # May you share freely, never taking more than you give. 9 # 10 #************************************************************************* 11 # 12 13 source [file join [file dirname [info script]] fts5_common.tcl] 14 set testprefix fts5simple3 15 16 # If SQLITE_ENABLE_FTS5 is defined, omit this file. 17 ifcapable !fts5 { 18 finish_test 19 return 20 } 21 22 fts5_aux_test_functions db 23 24 do_execsql_test 1.0 { 25 CREATE VIRTUAL TABLE t1 USING fts5(a, b, c, detail=col); 26 INSERT INTO t1 VALUES('a', 'b', 'c'); 27 INSERT INTO t1 VALUES('x', 'x', 'x'); 28 } 29 30 do_execsql_test 1.1 { 31 SELECT rowid, fts5_test_collist(t1) FROM t1('a:a'); 32 } {1 0.0} 33 34 do_execsql_test 1.2 { 35 SELECT rowid, fts5_test_collist(t1) FROM t1('b:x'); 36 } {2 0.1} 37 38 do_execsql_test 1.3 { 39 SELECT rowid, fts5_test_collist(t1) FROM t1('b:a'); 40 } {} 41 42 #------------------------------------------------------------------------- 43 # Create detail=col and detail=full tables with 998 columns. 44 # 45 foreach_detail_mode $testprefix { 46 if {[detail_is_none]} continue 47 48 do_test 2.1 { 49 execsql { DROP TABLE IF EXISTS t2 } 50 set cols [list] 51 set vals [list] 52 for {set i 1} {$i <= 998} {incr i} { 53 lappend cols "c$i" 54 lappend vals "'val$i'" 55 } 56 execsql "CREATE VIRTUAL TABLE t2 USING fts5(detail=%DETAIL%,[join $cols ,])" 57 } {} 58 59 do_test 2.2 { 60 execsql "INSERT INTO t2 VALUES([join $vals ,])" 61 } {} 62 63 foreach {tn q res} { 64 1 { c1:val1 } 1 65 2 { c300:val300 } 1 66 3 { c300:val1 } {} 67 4 { c1:val300 } {} 68 } { 69 do_execsql_test 2.3.$tn { 70 SELECT rowid FROM t2($q) 71 } $res 72 } 73 } 74 75 do_execsql_test 3.0 { 76 CREATE VIRTUAL TABLE x3 USING fts5(one); 77 INSERT INTO x3 VALUES('a b c'); 78 INSERT INTO x3 VALUES('c b a'); 79 INSERT INTO x3 VALUES('o t t'); 80 SELECT * FROM x3('x OR y OR z'); 81 } 82 83 #------------------------------------------------------------------------- 84 # Test that a crash occuring when the second or subsequent tokens in a 85 # phrase matched zero rows has been fixed. 86 # 87 do_execsql_test 4.0 { 88 CREATE VIRTUAL TABLE t1 USING fts5(x); 89 INSERT INTO t1 VALUES('ab'); 90 INSERT INTO t1 VALUES('cd'); 91 INSERT INTO t1 VALUES('ab cd'); 92 INSERT INTO t1 VALUES('ab cdXXX'); 93 INSERT INTO t1 VALUES('abXXX cd'); 94 } 95 do_execsql_test 4.1 { 96 SELECT * FROM t1('"ab cd" OR "ab cd" *'); 97 } {{ab cd} {ab cdXXX}} 98 do_execsql_test 4.2 { 99 SELECT * FROM t1('"xy zz" OR "ab cd" *'); 100 } {{ab cd} {ab cdXXX}} 101 do_execsql_test 4.3 { 102 SELECT * FROM t1('"xy zz" OR "xy zz" *'); 103 } 104 do_execsql_test 4.4 { 105 SELECT * FROM t1('"ab cd" OR "xy zz" *'); 106 } {{ab cd}} 107 do_execsql_test 4.5 { 108 CREATE VIRTUAL TABLE t2 USING fts5(x); 109 INSERT INTO t2 VALUES('ab'); 110 INSERT INTO t2 VALUES('cd'); 111 INSERT INTO t2 VALUES('ef'); 112 } 113 do_execsql_test 4.6 { 114 SELECT * FROM t2('ab + xyz'); 115 } 116 117 118 finish_test