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.1.1.1 2012/02/21 17:04:16 misho 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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>