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 12set testdir [file dirname $argv0] 13source $testdir/tester.tcl 14 15# If SQLITE_ENABLE_FTS2 is defined, omit this file. 16ifcapable !fts2 { 17 finish_test 18 return 19} 20 21# Generate a term of len copies of char. 22proc 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. 31proc bigtermdoc {chars len} { 32 set doc "" 33 foreach char $chars { 34 append doc " " [bigterm $char $len] 35 } 36 return $doc 37} 38 39set len 5000 40set doc1 [bigtermdoc {a b c d} $len] 41set doc2 [bigtermdoc {b d e f} $len] 42set doc3 [bigtermdoc {a c e} $len] 43 44set aterm [bigterm a $len] 45set bterm [bigterm b $len] 46set xterm [bigterm x $len] 47 48db 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(). 56do_test fts2h-1.1 { 57 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'} 58} {} 59 60do_test fts2h-1.2 { 61 execsql {SELECT rowid FROM t1 WHERE t1 MATCH $aterm} 62} {1 3} 63 64do_test fts2h-1.2 { 65 execsql {SELECT rowid FROM t1 WHERE t1 MATCH $xterm} 66} {} 67 68do_test fts2h-1.3 { 69 execsql "SELECT rowid FROM t1 WHERE t1 MATCH '$aterm -$xterm'" 70} {1 3} 71 72do_test fts2h-1.4 { 73 execsql "SELECT rowid FROM t1 WHERE t1 MATCH '\"$aterm $bterm\"'" 74} {1} 75 76finish_test 77