1# 2006 October 31 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# This file implements regression tests for SQLite library. The focus 12# here is testing correct handling of very long terms. 13# 14 15set testdir [file dirname $argv0] 16source $testdir/tester.tcl 17 18# If SQLITE_ENABLE_FTS3 is not defined, omit this file. 19ifcapable !fts3 { 20 finish_test 21 return 22} 23 24# Generate a document of bigterms based on characters from the list 25# chars. 26proc bigtermdoc {chars len} { 27 set doc "" 28 foreach char $chars { 29 append doc " " [string repeat $char $len] 30 } 31 return $doc 32} 33 34set len 5000 35set doc1 [bigtermdoc {a b c d} $len] 36set doc2 [bigtermdoc {b d e f} $len] 37set doc3 [bigtermdoc {a c e} $len] 38 39set aterm [string repeat a $len] 40set bterm [string repeat b $len] 41set xterm [string repeat x $len] 42 43db eval { 44 CREATE VIRTUAL TABLE t1 USING fts3(content); 45 INSERT INTO t1 (rowid, content) VALUES(1, $doc1); 46 INSERT INTO t1 (rowid, content) VALUES(2, $doc2); 47 INSERT INTO t1 (rowid, content) VALUES(3, $doc3); 48} 49 50# No hits at all. Returns empty doclists from termSelect(). 51do_test fts3ah-1.1 { 52 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'} 53} {} 54 55do_test fts3ah-1.2 { 56 execsql {SELECT rowid FROM t1 WHERE t1 MATCH $aterm} 57} {1 3} 58 59do_test fts3ah-1.3 { 60 execsql {SELECT rowid FROM t1 WHERE t1 MATCH $xterm} 61} {} 62 63do_test fts3ah-1.4 { 64 execsql "SELECT rowid FROM t1 WHERE t1 MATCH '$aterm -$xterm'" 65} {1 3} 66 67do_test fts3ah-1.5 { 68 execsql "SELECT rowid FROM t1 WHERE t1 MATCH '\"$aterm $bterm\"'" 69} {1} 70 71finish_test 72