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 13set testdir [file dirname $argv0] 14source $testdir/tester.tcl 15 16# If SQLITE_ENABLE_FTS3 is defined, omit this file. 17ifcapable !fts3 { 18 finish_test 19 return 20} 21 22db 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(). 29do_test fts3ag-1.1 { 30 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'} 31} {} 32 33# Empty left in docListExceptMerge(). 34do_test fts3ag-1.2 { 35 execsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this something'} 36} {} 37 38# Empty right in docListExceptMerge(). 39do_test fts3ag-1.3 { 40 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this -something'} 41} {1} 42 43# Empty left in docListPhraseMerge(). 44do_test fts3ag-1.4 { 45 execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"this something"'} 46} {} 47 48# Empty right in docListPhraseMerge(). 49do_test fts3ag-1.5 { 50 execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"something is"'} 51} {} 52 53# Empty left in docListOrMerge(). 54do_test fts3ag-1.6 { 55 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR this'} 56} {1} 57 58# Empty right in docListOrMerge(). 59do_test fts3ag-1.7 { 60 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR something'} 61} {1} 62 63# Empty left in docListAndMerge(). 64do_test fts3ag-1.8 { 65 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something this'} 66} {} 67 68# Empty right in docListAndMerge(). 69do_test fts3ag-1.9 { 70 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this something'} 71} {} 72 73# No support for all-except queries. 74do_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. 80do_test fts3ag-1.11 { 81breakpoint 82 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR also'} 83} {1 2} 84do_test fts3ag-1.12 { 85 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'also OR this'} 86} {1 2} 87 88# Empty left and right in docListOrMerge(). Each term matches neither 89# row, and when combined there was an assertion failure. 90do_test fts3ag-1.13 { 91 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR nothing'} 92} {} 93 94finish_test 95