OLD | NEW |
(Empty) | |
| 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 |
| 119 |
OLD | NEW |