sl@0: # 2006 October 31 (scaaarey) sl@0: # sl@0: # The author disclaims copyright to this source code. sl@0: # sl@0: #************************************************************************* sl@0: # This file implements regression tests for SQLite library. The focus sl@0: # here is testing correct handling of excessively long terms. sl@0: # sl@0: # $Id: fts3ah.test,v 1.1 2007/08/20 17:38:42 shess Exp $ sl@0: # sl@0: sl@0: set testdir [file dirname $argv0] sl@0: source $testdir/tester.tcl sl@0: sl@0: # If SQLITE_ENABLE_FTS3 is defined, omit this file. sl@0: ifcapable !fts3 { sl@0: finish_test sl@0: return sl@0: } sl@0: sl@0: # Generate a term of len copies of char. sl@0: proc bigterm {char len} { sl@0: for {set term ""} {$len>0} {incr len -1} { sl@0: append term $char sl@0: } sl@0: return $term sl@0: } sl@0: sl@0: # Generate a document of bigterms based on characters from the list sl@0: # chars. sl@0: proc bigtermdoc {chars len} { sl@0: set doc "" sl@0: foreach char $chars { sl@0: append doc " " [bigterm $char $len] sl@0: } sl@0: return $doc sl@0: } sl@0: sl@0: set len 5000 sl@0: set doc1 [bigtermdoc {a b c d} $len] sl@0: set doc2 [bigtermdoc {b d e f} $len] sl@0: set doc3 [bigtermdoc {a c e} $len] sl@0: sl@0: set aterm [bigterm a $len] sl@0: set bterm [bigterm b $len] sl@0: set xterm [bigterm x $len] sl@0: sl@0: db eval { sl@0: CREATE VIRTUAL TABLE t1 USING fts3(content); sl@0: INSERT INTO t1 (rowid, content) VALUES(1, $doc1); sl@0: INSERT INTO t1 (rowid, content) VALUES(2, $doc2); sl@0: INSERT INTO t1 (rowid, content) VALUES(3, $doc3); sl@0: } sl@0: sl@0: # No hits at all. Returns empty doclists from termSelect(). sl@0: do_test fts3ah-1.1 { sl@0: execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'} sl@0: } {} sl@0: sl@0: do_test fts3ah-1.2 { sl@0: execsql {SELECT rowid FROM t1 WHERE t1 MATCH $aterm} sl@0: } {1 3} sl@0: sl@0: do_test fts3ah-1.2 { sl@0: execsql {SELECT rowid FROM t1 WHERE t1 MATCH $xterm} sl@0: } {} sl@0: sl@0: do_test fts3ah-1.3 { sl@0: execsql "SELECT rowid FROM t1 WHERE t1 MATCH '$aterm -$xterm'" sl@0: } {1 3} sl@0: sl@0: do_test fts3ah-1.4 { sl@0: execsql "SELECT rowid FROM t1 WHERE t1 MATCH '\"$aterm $bterm\"'" sl@0: } {1} sl@0: sl@0: finish_test