1 # 2006 October 31 (scaaarey) 2 # 3 # The author disclaims copyright to this source code. 4 # 5 #************************************************************************* 6 # This file implements regression tests for SQLite library. The focus 7 # here is testing correct handling of excessively long terms. 8 # 9 # $Id: fts2h.test,v 1.1 2006/11/29 21:03:01 shess Exp $ 10 # 11 12 set testdir [file dirname $argv0] 13 source $testdir/tester.tcl 14 15 # If SQLITE_ENABLE_FTS2 is defined, omit this file. 16 ifcapable !fts2 { 17 finish_test 18 return 19 } 20 21 # Generate a term of len copies of char. 22 proc bigterm {char len} { 23 for {set term ""} {$len>0} {incr len -1} { 24 append term $char 25 } 26 return $term 27 } 28 29 # Generate a document of bigterms based on characters from the list 30 # chars. 31 proc bigtermdoc {chars len} { 32 set doc "" 33 foreach char $chars { 34 append doc " " [bigterm $char $len] 35 } 36 return $doc 37 } 38 39 set len 5000 40 set doc1 [bigtermdoc {a b c d} $len] 41 set doc2 [bigtermdoc {b d e f} $len] 42 set doc3 [bigtermdoc {a c e} $len] 43 44 set aterm [bigterm a $len] 45 set bterm [bigterm b $len] 46 set xterm [bigterm x $len] 47 48 db eval { 49 CREATE VIRTUAL TABLE t1 USING fts2(content); 50 INSERT INTO t1 (rowid, content) VALUES(1, $doc1); 51 INSERT INTO t1 (rowid, content) VALUES(2, $doc2); 52 INSERT INTO t1 (rowid, content) VALUES(3, $doc3); 53 } 54 55 # No hits at all. Returns empty doclists from termSelect(). 56 do_test fts2h-1.1 { 57 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'} 58 } {} 59 60 do_test fts2h-1.2 { 61 execsql {SELECT rowid FROM t1 WHERE t1 MATCH $aterm} 62 } {1 3} 63 64 do_test fts2h-1.2 { 65 execsql {SELECT rowid FROM t1 WHERE t1 MATCH $xterm} 66 } {} 67 68 do_test fts2h-1.3 { 69 execsql "SELECT rowid FROM t1 WHERE t1 MATCH '$aterm -$xterm'" 70 } {1 3} 71 72 do_test fts2h-1.4 { 73 execsql "SELECT rowid FROM t1 WHERE t1 MATCH '\"$aterm $bterm\"'" 74 } {1} 75 76 finish_test 77