persistentstorage/sqlite3api/TEST/TclScript/fts3ah.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     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: fts3ah.test,v 1.1 2007/08/20 17:38:42 shess Exp $
       
    10 #
       
    11 
       
    12 set testdir [file dirname $argv0]
       
    13 source $testdir/tester.tcl
       
    14 
       
    15 # If SQLITE_ENABLE_FTS3 is defined, omit this file.
       
    16 ifcapable !fts3 {
       
    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 fts3(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 fts3ah-1.1 {
       
    57   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'}
       
    58 } {}
       
    59 
       
    60 do_test fts3ah-1.2 {
       
    61   execsql {SELECT rowid FROM t1 WHERE t1 MATCH $aterm}
       
    62 } {1 3}
       
    63 
       
    64 do_test fts3ah-1.2 {
       
    65   execsql {SELECT rowid FROM t1 WHERE t1 MATCH $xterm}
       
    66 } {}
       
    67 
       
    68 do_test fts3ah-1.3 {
       
    69   execsql "SELECT rowid FROM t1 WHERE t1 MATCH '$aterm -$xterm'"
       
    70 } {1 3}
       
    71 
       
    72 do_test fts3ah-1.4 {
       
    73   execsql "SELECT rowid FROM t1 WHERE t1 MATCH '\"$aterm $bterm\"'"
       
    74 } {1}
       
    75 
       
    76 finish_test