Home | History | Annotate | Download | only in test
      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 FTS2 module query logic.
      9 #
     10 # $Id: fts2g.test,v 1.3 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_FTS2 is defined, omit this file.
     17 ifcapable !fts2 {
     18   finish_test
     19   return
     20 }
     21 
     22 db eval {
     23   CREATE VIRTUAL TABLE t1 USING fts2(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 fts2g-1.1 {
     30   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'}
     31 } {}
     32 
     33 # Empty left in docListExceptMerge().
     34 do_test fts2g-1.2 {
     35   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this something'}
     36 } {}
     37 
     38 # Empty right in docListExceptMerge().
     39 do_test fts2g-1.3 {
     40   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this -something'}
     41 } {1}
     42 
     43 # Empty left in docListPhraseMerge().
     44 do_test fts2g-1.4 {
     45   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"this something"'}
     46 } {}
     47 
     48 # Empty right in docListPhraseMerge().
     49 do_test fts2g-1.5 {
     50   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"something is"'}
     51 } {}
     52 
     53 # Empty left in docListOrMerge().
     54 do_test fts2g-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 fts2g-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 fts2g-1.8 {
     65   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something this'}
     66 } {}
     67 
     68 # Empty right in docListAndMerge().
     69 do_test fts2g-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 fts2g-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 fts2g-1.11 {
     81   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR also'}
     82 } {1 2}
     83 do_test fts2g-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 fts2g-1.13 {
     90   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR nothing'}
     91 } {}
     92 
     93 finish_test
     94