• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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