gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/fts3ag.test (about)

     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 {malformed MATCH expression: [-this -something]}}
    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