OLD | NEW |
1 # 2008 June 26 | 1 # 2008 June 26 |
2 # | 2 # |
3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
5 # | 5 # |
6 # May you do good and not evil. | 6 # May you do good and not evil. |
7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
9 # | 9 # |
10 #************************************************************************* | 10 #************************************************************************* |
11 # This file implements regression tests for SQLite library. The focus | 11 # This file implements regression tests for SQLite library. The focus |
12 # of this script is testing the FTS3 module's optimize() function. | 12 # of this script is testing the FTS3 module's optimize() function. |
13 # | 13 # |
14 # $Id: fts3d.test,v 1.2 2008/07/15 21:32:07 shess Exp $ | |
15 # | |
16 | 14 |
17 set testdir [file dirname $argv0] | 15 set testdir [file dirname $argv0] |
18 source $testdir/tester.tcl | 16 source $testdir/tester.tcl |
| 17 source $testdir/fts3_common.tcl |
19 | 18 |
20 # If SQLITE_ENABLE_FTS3 is not defined, omit this file. | 19 # If SQLITE_ENABLE_FTS3 is not defined, omit this file. |
21 ifcapable !fts3 { | 20 ifcapable !fts3 { |
22 finish_test | 21 finish_test |
23 return | 22 return |
24 } | 23 } |
25 | 24 |
26 #************************************************************************* | 25 #************************************************************************* |
27 # Probe to see if support for the FTS3 dump_* functions is compiled in. | |
28 # TODO(shess): Change main.mk to do the right thing and remove this test. | |
29 db eval { | |
30 DROP TABLE IF EXISTS t1; | |
31 CREATE VIRTUAL TABLE t1 USING fts3(c); | |
32 INSERT INTO t1 (docid, c) VALUES (1, 'x'); | |
33 } | |
34 | |
35 set s {SELECT dump_terms(t1, 1) FROM t1 LIMIT 1} | |
36 set r {1 {unable to use function dump_terms in the requested context}} | |
37 if {[catchsql $s]==$r} { | |
38 finish_test | |
39 return | |
40 } | |
41 | |
42 #************************************************************************* | |
43 # Utility function to check for the expected terms in the segment | 26 # Utility function to check for the expected terms in the segment |
44 # level/index. _all version does same but for entire index. | 27 # level/index. _all version does same but for entire index. |
45 proc check_terms {test level index terms} { | 28 proc check_terms {test level index terms} { |
46 # TODO(shess): Figure out why uplevel in do_test can't catch | 29 set where "level = $level AND idx = $index" |
47 # $level and $index directly. | 30 do_test $test.terms [list fts3_terms t1 $where] $terms |
48 set ::level $level | |
49 set ::index $index | |
50 do_test $test.terms { | |
51 execsql { | |
52 SELECT dump_terms(t1, $::level, $::index) FROM t1 LIMIT 1; | |
53 } | |
54 } [list $terms] | |
55 } | 31 } |
56 proc check_terms_all {test terms} { | 32 proc check_terms_all {test terms} { |
57 do_test $test.terms { | 33 do_test $test.terms [list fts3_terms t1 1] $terms |
58 execsql { | |
59 SELECT dump_terms(t1) FROM t1 LIMIT 1; | |
60 } | |
61 } [list $terms] | |
62 } | 34 } |
63 | 35 |
64 # Utility function to check for the expected doclist for the term in | 36 # Utility function to check for the expected doclist for the term in |
65 # segment level/index. _all version does same for entire index. | 37 # segment level/index. _all version does same for entire index. |
66 proc check_doclist {test level index term doclist} { | 38 proc check_doclist {test level index term doclist} { |
67 # TODO(shess): Again, why can't the non-:: versions work? | 39 set where "level = $level AND idx = $index" |
68 set ::term $term | 40 do_test $test.doclist [list fts3_doclist t1 $term $where] $doclist |
69 set ::level $level | |
70 set ::index $index | |
71 do_test $test { | |
72 execsql { | |
73 SELECT dump_doclist(t1, $::term, $::level, $::index) FROM t1 LIMIT 1; | |
74 } | |
75 } [list $doclist] | |
76 } | 41 } |
77 proc check_doclist_all {test term doclist} { | 42 proc check_doclist_all {test term doclist} { |
78 set ::term $term | 43 do_test $test.doclist [list fts3_doclist t1 $term 1] $doclist |
79 do_test $test { | |
80 execsql { | |
81 SELECT dump_doclist(t1, $::term) FROM t1 LIMIT 1; | |
82 } | |
83 } [list $doclist] | |
84 } | 44 } |
85 | 45 |
86 #************************************************************************* | 46 #************************************************************************* |
87 # Test results when all rows are deleted and one is added back. | 47 # Test results when all rows are deleted and one is added back. |
88 # Previously older segments would continue to exist, but now the index | 48 # Previously older segments would continue to exist, but now the index |
89 # should be dropped when the table is empty. The results should look | 49 # should be dropped when the table is empty. The results should look |
90 # exactly like we never added the earlier rows in the first place. | 50 # exactly like we never added the earlier rows in the first place. |
91 db eval { | 51 db eval { |
92 DROP TABLE IF EXISTS t1; | 52 DROP TABLE IF EXISTS t1; |
93 CREATE VIRTUAL TABLE t1 USING fts3(c); | 53 CREATE VIRTUAL TABLE t1 USING fts3(c); |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 check_doclist fts3d-4.4.4 1 0 one {[1] [2] [3]} | 246 check_doclist fts3d-4.4.4 1 0 one {[1] [2] [3]} |
287 check_doclist fts3d-4.4.5 1 0 test {[1 0[3]] [2 0[3]] [3 0[3]]} | 247 check_doclist fts3d-4.4.5 1 0 test {[1 0[3]] [2 0[3]] [3 0[3]]} |
288 check_doclist fts3d-4.4.6 1 0 that {[2 0[0]]} | 248 check_doclist fts3d-4.4.6 1 0 that {[2 0[0]]} |
289 check_doclist fts3d-4.4.7 1 0 this {[1 0[0]] [3 0[0]]} | 249 check_doclist fts3d-4.4.7 1 0 this {[1 0[0]] [3 0[0]]} |
290 check_doclist fts3d-4.4.8 1 0 three {[1] [2] [3]} | 250 check_doclist fts3d-4.4.8 1 0 three {[1] [2] [3]} |
291 check_doclist fts3d-4.4.9 1 0 two {[1] [2] [3]} | 251 check_doclist fts3d-4.4.9 1 0 two {[1] [2] [3]} |
292 check_doclist fts3d-4.4.10 1 0 was {[2 0[1]]} | 252 check_doclist fts3d-4.4.10 1 0 was {[2 0[1]]} |
293 | 253 |
294 # Optimize should leave the result in the level of the highest-level | 254 # Optimize should leave the result in the level of the highest-level |
295 # prior segment. | 255 # prior segment. |
| 256 breakpoint |
296 do_test fts3d-4.5 { | 257 do_test fts3d-4.5 { |
297 execsql { | 258 execsql { |
298 SELECT OPTIMIZE(t1) FROM t1 LIMIT 1; | 259 SELECT OPTIMIZE(t1) FROM t1 LIMIT 1; |
299 SELECT level, idx FROM t1_segdir ORDER BY level, idx; | 260 SELECT level, idx FROM t1_segdir ORDER BY level, idx; |
300 } | 261 } |
301 } {{Index optimized} 1 0} | 262 } {{Index optimized} 1 0} |
302 | 263 |
303 # Identical to fts3d-4.matches. | 264 # Identical to fts3d-4.matches. |
304 do_test fts3d-4.5.matches { | 265 do_test fts3d-4.5.matches { |
305 execsql { | 266 execsql { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 # Even if we move things around, still does nothing. | 298 # Even if we move things around, still does nothing. |
338 do_test fts3d-5.1 { | 299 do_test fts3d-5.1 { |
339 execsql { | 300 execsql { |
340 UPDATE t1_segdir SET level = 2 WHERE level = 1 AND idx = 0; | 301 UPDATE t1_segdir SET level = 2 WHERE level = 1 AND idx = 0; |
341 SELECT OPTIMIZE(t1) FROM t1 LIMIT 1; | 302 SELECT OPTIMIZE(t1) FROM t1 LIMIT 1; |
342 SELECT level, idx FROM t1_segdir ORDER BY level, idx; | 303 SELECT level, idx FROM t1_segdir ORDER BY level, idx; |
343 } | 304 } |
344 } {{Index already optimal} 2 0} | 305 } {{Index already optimal} 2 0} |
345 | 306 |
346 finish_test | 307 finish_test |
OLD | NEW |