Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: third_party/sqlite/src/test/fts3prefix.test

Issue 949043002: Add //third_party/sqlite to dirs_to_snapshot, remove net_sql.patch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/sqlite/src/test/fts3near.test ('k') | third_party/sqlite/src/test/fts3prefix2.test » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # 2011 May 04
2 #
3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
5 #
6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give.
9 #
10 #*************************************************************************
11 # This file implements regression tests for SQLite library. The
12 # focus of this script is testing the FTS3 module.
13 #
14
15 set testdir [file dirname $argv0]
16 source $testdir/tester.tcl
17 set testprefix fts3prefix
18
19 ifcapable !fts3 {
20 finish_test
21 return
22 }
23
24 # This proc tests that the prefixes index appears to represent the same content
25 # as the terms index.
26 #
27 proc fts3_terms_and_prefixes {db tbl prefixlengths} {
28
29 set iIndex 0
30 foreach len $prefixlengths {
31 incr iIndex
32 $db eval {
33 DROP TABLE IF EXISTS fts3check1;
34 DROP TABLE IF EXISTS fts3check2;
35 }
36 $db eval "CREATE VIRTUAL TABLE fts3check1 USING fts4term($tbl, 0);"
37 $db eval "CREATE VIRTUAL TABLE fts3check2 USING fts4term($tbl, $iIndex);"
38
39 $db eval {
40 DROP TABLE IF EXISTS temp.terms;
41 DROP TABLE IF EXISTS temp.prefixes;
42 CREATE TEMP TABLE terms AS SELECT * FROM fts3check1;
43 CREATE TEMP TABLE prefixes AS SELECT * FROM fts3check2;
44 CREATE INDEX temp.idx ON prefixes(term);
45 DROP TABLE fts3check1;
46 DROP TABLE fts3check2;
47 }
48
49 set nExpect 0
50 $db eval { SELECT term, docid, col, pos FROM temp.terms } a {
51 if {[string length $a(term)]<$len} continue
52 incr nExpect
53 set prefix [string range $a(term) 0 [expr $len-1]]
54 set r [$db one {
55 SELECT count(*) FROM temp.prefixes WHERE
56 term = $prefix AND docid = $a(docid) AND col = $a(col) AND pos = $a(pos)
57 }]
58 if {$r != 1} {
59 error "$t, $a(docid), $a(col), $a(pos)"
60 }
61 }
62
63 set nCount [$db one {SELECT count(*) FROM temp.prefixes}]
64 if {$nCount != $nExpect} {
65 error "prefixes.count(*) is $nCount expected $nExpect"
66 }
67
68 execsql { DROP TABLE temp.prefixes }
69 execsql { DROP TABLE temp.terms }
70
71 set list [list]
72 $db eval "
73 SELECT sum( 1 << (16*(level%1024)) ) AS total, (level/1024) AS tree
74 FROM ${tbl}_segdir GROUP BY tree
75 " {
76 lappend list [list $total $tree]
77 }
78
79 if { [lsort -integer -index 0 $list] != [lsort -integer -index 1 $list] } {
80 error "inconsistent tree structures: $list"
81 }
82 }
83
84 return ""
85 }
86 proc fts3_tap_test {tn db tbl lens} {
87 uplevel [list do_test $tn [list fts3_terms_and_prefixes $db $tbl $lens] ""]
88 }
89
90 #-------------------------------------------------------------------------
91 # Test cases 1.* are a sanity check. They test that the prefixes index is
92 # being constructed correctly for the simplest possible case.
93 #
94 do_execsql_test 1.1 {
95 CREATE VIRTUAL TABLE t1 USING fts4(prefix='1,3,6');
96
97 CREATE VIRTUAL TABLE p1 USING fts4term(t1, 1);
98 CREATE VIRTUAL TABLE p2 USING fts4term(t1, 2);
99 CREATE VIRTUAL TABLE p3 USING fts4term(t1, 3);
100 CREATE VIRTUAL TABLE terms USING fts4term(t1);
101 }
102 do_execsql_test 1.2 {
103 INSERT INTO t1 VALUES('sqlite mysql firebird');
104 }
105 do_execsql_test 1.3.1 { SELECT term FROM p1 } {f m s}
106 do_execsql_test 1.3.2 { SELECT term FROM p2 } {fir mys sql}
107 do_execsql_test 1.3.3 { SELECT term FROM p3 } {firebi sqlite}
108 do_execsql_test 1.4 {
109 SELECT term FROM terms;
110 } {firebird mysql sqlite}
111
112 fts3_tap_test 1.5 db t1 {1 3 6}
113
114 #-------------------------------------------------------------------------
115 # A slightly more complicated dataset. This test also verifies that DELETE
116 # operations do not corrupt the prefixes index.
117 #
118 do_execsql_test 2.1 {
119 INSERT INTO t1 VALUES('FTS3 and FTS4 are an SQLite virtual table modules');
120 INSERT INTO t1 VALUES('that allows users to perform full-text searches on');
121 INSERT INTO t1 VALUES('a set of documents. The most common (and');
122 INSERT INTO t1 VALUES('effective) way to describe full-text searches is');
123 INSERT INTO t1 VALUES('"what Google, Yahoo and Altavista do with');
124 INSERT INTO t1 VALUES('documents placed on the World Wide Web". Users');
125 INSERT INTO t1 VALUES('input a term, or series of terms, perhaps');
126 INSERT INTO t1 VALUES('connected by a binary operator or grouped together');
127 INSERT INTO t1 VALUES('into a phrase, and the full-text query system');
128 INSERT INTO t1 VALUES('finds the set of documents that best matches those');
129 INSERT INTO t1 VALUES('terms considering the operators and groupings the');
130 INSERT INTO t1 VALUES('user has specified. This article describes the');
131 INSERT INTO t1 VALUES('deployment and usage of FTS3 and FTS4.');
132 INSERT INTO t1 VALUES('FTS1 and FTS2 are obsolete full-text search');
133 INSERT INTO t1 VALUES('modules for SQLite. There are known issues with');
134 INSERT INTO t1 VALUES('these older modules and their use should be');
135 INSERT INTO t1 VALUES('avoided. Portions of the original FTS3 code were');
136 INSERT INTO t1 VALUES('contributed to the SQLite project by Scott Hess of');
137 INSERT INTO t1 VALUES('Google. It is now developed and maintained as part');
138 INSERT INTO t1 VALUES('of SQLite. ');
139 }
140 fts3_tap_test 2.2 db t1 {1 3 6}
141 do_execsql_test 2.3 { DELETE FROM t1 WHERE docid%2; }
142 fts3_tap_test 2.4 db t1 {1 3 6}
143
144 do_execsql_test 2.5 { INSERT INTO t1(t1) VALUES('optimize') }
145 fts3_tap_test 2.6 db t1 {1 3 6}
146
147 do_execsql_test 3.1 {
148 CREATE VIRTUAL TABLE t2 USING fts4(prefix='1,2,3');
149 INSERT INTO t2 VALUES('On 12 September the wind direction turned and');
150 INSERT INTO t2 VALUES('William''s fleet sailed. A storm blew up and the');
151 INSERT INTO t2 VALUES('fleet was forced to take shelter at');
152 INSERT INTO t2 VALUES('Saint-Valery-sur-Somme and again wait for the wind');
153 INSERT INTO t2 VALUES('to change. On 27 September the Norman fleet');
154 INSERT INTO t2 VALUES('finally set sail, landing in England at Pevensey');
155 INSERT INTO t2 VALUES('Bay (Sussex) on 28 September. William then moved');
156 INSERT INTO t2 VALUES('to Hastings, a few miles to the east, where he');
157 INSERT INTO t2 VALUES('built a prefabricated wooden castle for a base of');
158 INSERT INTO t2 VALUES('operations. From there, he ravaged the hinterland');
159 INSERT INTO t2 VALUES('and waited for Harold''s return from the north.');
160 INSERT INTO t2 VALUES('On 12 September the wind direction turned and');
161 INSERT INTO t2 VALUES('William''s fleet sailed. A storm blew up and the');
162 INSERT INTO t2 VALUES('fleet was forced to take shelter at');
163 INSERT INTO t2 VALUES('Saint-Valery-sur-Somme and again wait for the wind');
164 INSERT INTO t2 VALUES('to change. On 27 September the Norman fleet');
165 INSERT INTO t2 VALUES('finally set sail, landing in England at Pevensey');
166 INSERT INTO t2 VALUES('Bay (Sussex) on 28 September. William then moved');
167 INSERT INTO t2 VALUES('to Hastings, a few miles to the east, where he');
168 INSERT INTO t2 VALUES('built a prefabricated wooden castle for a base of');
169 INSERT INTO t2 VALUES('operations. From there, he ravaged the hinterland');
170 INSERT INTO t2 VALUES('and waited for Harold''s return from the north.');
171 }
172
173 fts3_tap_test 3.2 db t2 {1 2 3}
174 do_execsql_test 3.3 { SELECT optimize(t2) FROM t2 LIMIT 1 } {{Index optimized}}
175 fts3_tap_test 3.4 db t2 {1 2 3}
176
177
178 #-------------------------------------------------------------------------
179 # Simple tests for reading the prefix-index.
180 #
181 do_execsql_test 4.1 {
182 CREATE VIRTUAL TABLE t3 USING fts4(prefix="1,4");
183 INSERT INTO t3 VALUES('one two three');
184 INSERT INTO t3 VALUES('four five six');
185 INSERT INTO t3 VALUES('seven eight nine');
186 }
187 do_execsql_test 4.2 {
188 SELECT * FROM t3 WHERE t3 MATCH 'f*'
189 } {{four five six}}
190 do_execsql_test 4.3 {
191 SELECT * FROM t3 WHERE t3 MATCH 'four*'
192 } {{four five six}}
193 do_execsql_test 4.4 {
194 SELECT * FROM t3 WHERE t3 MATCH 's*'
195 } {{four five six} {seven eight nine}}
196 do_execsql_test 4.5 {
197 SELECT * FROM t3 WHERE t3 MATCH 'sev*'
198 } {{seven eight nine}}
199 do_execsql_test 4.6 {
200 SELECT * FROM t3 WHERE t3 MATCH 'one*'
201 } {{one two three}}
202
203 #-------------------------------------------------------------------------
204 # Syntax tests.
205 #
206 do_catchsql_test 5.1 {
207 CREATE VIRTUAL TABLE t4 USING fts4(prefix="abc");
208 } {1 {error parsing prefix parameter: abc}}
209 do_catchsql_test 5.2 {
210 CREATE VIRTUAL TABLE t4 USING fts4(prefix="");
211 } {0 {}}
212
213 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/src/test/fts3near.test ('k') | third_party/sqlite/src/test/fts3prefix2.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698