/ Check-in [2cb59033]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Test to force edge cases in query logic. Basically, exercise code to handle lack of hits correctly. (CVS 3485)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:2cb59033662f25677169e2e63b871fb0a4c10c21
User & Date: shess 2006-10-25 20:27:40
Context
2006-10-25
21:00
Replace the DocList and DocListReader structures. The new structures distinguish reading from a static buffer from writing to a dynamic buffer. This allows n-way doclist merging, and in-place merging of segment leaf nodes, which together cut segment merge times in half. (CVS 3486) check-in: af5bfb98 user: shess tags: trunk
20:27
Test to force edge cases in query logic. Basically, exercise code to handle lack of hits correctly. (CVS 3485) check-in: 2cb59033 user: shess tags: trunk
05:21
Don't store empty segments. When inserting empty strings, the code was writing out a segment made up of a single leaf node containing the \0 header. LeafReader assumed that leaf nodes always contained at least one term, so assertions would fail.

While it would be possible to support reading and merging empty segments, there's no reason to do so. While this change could have been done in writeZeroSegment(), I put it in leafWriterFlush() so that it would work right if segmentMerge() created an empty segment, which could happen with future changes to how deleted documents are handled. (CVS 3484) check-in: fed79bee user: shess tags: trunk

Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added test/fts2g.test.



























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 2006 October 19
#
# The author disclaims copyright to this source code.
#
#*************************************************************************
# This file implements regression tests for SQLite library.  The focus
# of this script is testing handling of edge cases for various doclist
# merging functions in the FTS2 module query logic.
#
# $Id: fts2g.test,v 1.1 2006/10/25 20:27:40 shess Exp $
#

set testdir [file dirname $argv0]
source $testdir/tester.tcl

# If SQLITE_ENABLE_FTS2 is defined, omit this file.
ifcapable !fts2 {
  finish_test
  return
}

db eval {
  CREATE VIRTUAL TABLE t1 USING fts2(content);
  INSERT INTO t1 (rowid, content) VALUES(1, 'this is a test');
}

# No hits at all.  Returns empty doclists from termSelect().
do_test fts2g-1.1 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something'}
} {}

# Empty left in docListExceptMerge().
do_test fts2g-1.2 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this something'}
} {}

# Empty right in docListExceptMerge().
do_test fts2g-1.3 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this -something'}
} {1}

# Empty left in docListPhraseMerge().
do_test fts2g-1.4 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"this something"'}
} {}

# Empty right in docListPhraseMerge().
do_test fts2g-1.5 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH '"something is"'}
} {}

# Empty left in docListOrMerge().
do_test fts2g-1.6 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something OR this'}
} {1}

# Empty right in docListOrMerge().
do_test fts2g-1.7 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR something'}
} {1}

# Empty left in docListAndMerge().
do_test fts2g-1.8 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'something this'}
} {}

# Empty right in docListAndMerge().
do_test fts2g-1.9 {
  execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this something'}
} {}

# No support for all-except queries.
do_test fts2g-1.10 {
  catchsql {SELECT rowid FROM t1 WHERE t1 MATCH '-this -something'}
} {1 {SQL logic error or missing database}}

finish_test