blob: 176c619aa3c42c5a4fa9c40b4af189be79b75d33 [file] [log] [blame]
shessd5d63ca2006-10-25 20:27:39 +00001# 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#
shesscd7274c2007-11-16 00:23:07 +000010# $Id: fts2g.test,v 1.3 2007/11/16 00:23:08 shess Exp $
shessd5d63ca2006-10-25 20:27:39 +000011#
12
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15
16# If SQLITE_ENABLE_FTS2 is defined, omit this file.
17ifcapable !fts2 {
18 finish_test
19 return
20}
21
22db eval {
23 CREATE VIRTUAL TABLE t1 USING fts2(content);
24 INSERT INTO t1 (rowid, content) VALUES(1, 'this is a test');
shess3b2f10c2007-04-19 18:36:32 +000025 INSERT INTO t1 (rowid, content) VALUES(2, 'also a test');
shessd5d63ca2006-10-25 20:27:39 +000026}
27
28# No hits at all. Returns empty doclists from termSelect().
29do_test fts2g-1.1 {
30 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'}
31} {}
32
33# Empty left in docListExceptMerge().
34do_test fts2g-1.2 {
35 execsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this something'}
36} {}
37
38# Empty right in docListExceptMerge().
39do_test fts2g-1.3 {
40 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this -something'}
41} {1}
42
43# Empty left in docListPhraseMerge().
44do_test fts2g-1.4 {
45 execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"this something"'}
46} {}
47
48# Empty right in docListPhraseMerge().
49do_test fts2g-1.5 {
50 execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"something is"'}
51} {}
52
53# Empty left in docListOrMerge().
54do_test fts2g-1.6 {
55 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR this'}
56} {1}
57
58# Empty right in docListOrMerge().
59do_test fts2g-1.7 {
60 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR something'}
61} {1}
62
63# Empty left in docListAndMerge().
64do_test fts2g-1.8 {
65 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something this'}
66} {}
67
68# Empty right in docListAndMerge().
69do_test fts2g-1.9 {
70 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this something'}
71} {}
72
73# No support for all-except queries.
74do_test fts2g-1.10 {
75 catchsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this -something'}
drha690ff32017-07-07 19:43:23 +000076} {1 {SQL logic error}}
shessd5d63ca2006-10-25 20:27:39 +000077
shess3b2f10c2007-04-19 18:36:32 +000078# Test that docListOrMerge() correctly handles reaching the end of one
79# doclist before it reaches the end of the other.
80do_test fts2g-1.11 {
81 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR also'}
82} {1 2}
83do_test fts2g-1.12 {
84 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'also OR this'}
85} {1 2}
86
shesscd7274c2007-11-16 00:23:07 +000087# Empty left and right in docListOrMerge(). Each term matches neither
88# row, and when combined there was an assertion failure.
89do_test fts2g-1.13 {
90 execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR nothing'}
91} {}
92
shessd5d63ca2006-10-25 20:27:39 +000093finish_test