Snapshot of upstream SQLite 3.43.2
[sqlcipher.git] / test / fts3ag.test
blob9b658d19df3dbf6e4825ce098f68684bbcb7b0fc
1 # 2006 October 19
3 # The author disclaims copyright to this source code.
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.
10 # $Id: fts3ag.test,v 1.2 2007/11/16 00:23:08 shess Exp $
13 set testdir [file dirname $argv0]
14 source $testdir/tester.tcl
16 # If SQLITE_ENABLE_FTS3 is defined, omit this file.
17 ifcapable !fts3 {
18   finish_test
19   return
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');
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 } {}
33 # Empty left in docListExceptMerge().
34 do_test fts3ag-1.2 {
35   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this something'}
36 } {}
38 # Empty right in docListExceptMerge().
39 do_test fts3ag-1.3 {
40   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this -something'}
41 } {1}
43 # Empty left in docListPhraseMerge().
44 do_test fts3ag-1.4 {
45   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"this something"'}
46 } {}
48 # Empty right in docListPhraseMerge().
49 do_test fts3ag-1.5 {
50   execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"something is"'}
51 } {}
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}
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}
63 # Empty left in docListAndMerge().
64 do_test fts3ag-1.8 {
65   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something this'}
66 } {}
68 # Empty right in docListAndMerge().
69 do_test fts3ag-1.9 {
70   execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this something'}
71 } {}
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]}}
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}
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 } {}
93 finish_test