persistentstorage/sqlite3api/TEST/TclScript/fts3ag.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 # 2006 October 19
       
     2 #
       
     3 # The author disclaims copyright to this source code.
       
     4 #
       
     5 #*************************************************************************
       
     6 # This file implements regression tests for SQLite library.  The focus
       
     7 # of this script is testing handling of edge cases for various doclist
       
     8 # merging functions in the FTS3 module query logic.
       
     9 #
       
    10 # $Id: fts3ag.test,v 1.2 2007/11/16 00:23:08 shess Exp $
       
    11 #
       
    12 
       
    13 set testdir [file dirname $argv0]
       
    14 source $testdir/tester.tcl
       
    15 
       
    16 # If SQLITE_ENABLE_FTS3 is defined, omit this file.
       
    17 ifcapable !fts3 {
       
    18   finish_test
       
    19   return
       
    20 }
       
    21 
       
    22 db eval {
       
    23   CREATE VIRTUAL TABLE t1 USING fts3(content);
       
    24   INSERT INTO t1 (rowid, content) VALUES(1, 'this is a test');
       
    25   INSERT INTO t1 (rowid, content) VALUES(2, 'also a test');
       
    26 }
       
    27 
       
    28 # No hits at all.  Returns empty doclists from termSelect().
       
    29 do_test fts3ag-1.1 {
       
    30   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'}
       
    31 } {}
       
    32 
       
    33 # Empty left in docListExceptMerge().
       
    34 do_test fts3ag-1.2 {
       
    35   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this something'}
       
    36 } {}
       
    37 
       
    38 # Empty right in docListExceptMerge().
       
    39 do_test fts3ag-1.3 {
       
    40   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this -something'}
       
    41 } {1}
       
    42 
       
    43 # Empty left in docListPhraseMerge().
       
    44 do_test fts3ag-1.4 {
       
    45   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"this something"'}
       
    46 } {}
       
    47 
       
    48 # Empty right in docListPhraseMerge().
       
    49 do_test fts3ag-1.5 {
       
    50   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"something is"'}
       
    51 } {}
       
    52 
       
    53 # Empty left in docListOrMerge().
       
    54 do_test fts3ag-1.6 {
       
    55   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR this'}
       
    56 } {1}
       
    57 
       
    58 # Empty right in docListOrMerge().
       
    59 do_test fts3ag-1.7 {
       
    60   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR something'}
       
    61 } {1}
       
    62 
       
    63 # Empty left in docListAndMerge().
       
    64 do_test fts3ag-1.8 {
       
    65   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something this'}
       
    66 } {}
       
    67 
       
    68 # Empty right in docListAndMerge().
       
    69 do_test fts3ag-1.9 {
       
    70   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this something'}
       
    71 } {}
       
    72 
       
    73 # No support for all-except queries.
       
    74 do_test fts3ag-1.10 {
       
    75   catchsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this -something'}
       
    76 } {1 {SQL logic error or missing database}}
       
    77 
       
    78 # Test that docListOrMerge() correctly handles reaching the end of one
       
    79 # doclist before it reaches the end of the other.
       
    80 do_test fts3ag-1.11 {
       
    81   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR also'}
       
    82 } {1 2}
       
    83 do_test fts3ag-1.12 {
       
    84   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'also OR this'}
       
    85 } {1 2}
       
    86 
       
    87 # Empty left and right in docListOrMerge().  Each term matches neither
       
    88 # row, and when combined there was an assertion failure.
       
    89 do_test fts3ag-1.13 {
       
    90   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR nothing'}
       
    91 } {}
       
    92 
       
    93 finish_test