diff options
author | dan miller | 2007-10-20 02:49:29 +0000 |
---|---|---|
committer | dan miller | 2007-10-20 02:49:29 +0000 |
commit | e36d23a85ebff914d74bb541558c2b6082b78edb (patch) | |
tree | 54b58fdf162e78af64055282a6035c8d2443389d /libraries/sqlite/unix/sqlite-3.5.1/test/fts3b.test | |
parent | * Fixed an issue whereby avatar chat distances were being calculated against ... (diff) | |
download | opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.zip opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.gz opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.bz2 opensim-SC-e36d23a85ebff914d74bb541558c2b6082b78edb.tar.xz |
sqlite source (unix build) added to libraries
Diffstat (limited to 'libraries/sqlite/unix/sqlite-3.5.1/test/fts3b.test')
-rw-r--r-- | libraries/sqlite/unix/sqlite-3.5.1/test/fts3b.test | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/libraries/sqlite/unix/sqlite-3.5.1/test/fts3b.test b/libraries/sqlite/unix/sqlite-3.5.1/test/fts3b.test new file mode 100644 index 0000000..17ee0da --- /dev/null +++ b/libraries/sqlite/unix/sqlite-3.5.1/test/fts3b.test | |||
@@ -0,0 +1,218 @@ | |||
1 | # 2007 August 20 | ||
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. This | ||
12 | # script tests for the fts2 rowid-versus-vacuum problem (ticket #2566). | ||
13 | # | ||
14 | # $Id: fts3b.test,v 1.3 2007/09/13 18:14:49 shess Exp $ | ||
15 | # | ||
16 | |||
17 | set testdir [file dirname $argv0] | ||
18 | source $testdir/tester.tcl | ||
19 | |||
20 | # If SQLITE_ENABLE_FTS3 is not defined, omit this file. | ||
21 | ifcapable !fts3 { | ||
22 | finish_test | ||
23 | return | ||
24 | } | ||
25 | |||
26 | db eval { | ||
27 | CREATE VIRTUAL TABLE t1 USING fts3(c); | ||
28 | INSERT INTO t1 (c) VALUES('this is a test'); | ||
29 | INSERT INTO t1 (c) VALUES('that was a test'); | ||
30 | INSERT INTO t1 (c) VALUES('this is fun'); | ||
31 | DELETE FROM t1 WHERE c = 'that was a test'; | ||
32 | } | ||
33 | |||
34 | # Baseline test. | ||
35 | do_test fts3b-1.1 { | ||
36 | execsql { | ||
37 | SELECT rowid FROM t1 WHERE c MATCH 'this'; | ||
38 | } | ||
39 | } {1 3} | ||
40 | |||
41 | db eval {VACUUM} | ||
42 | |||
43 | # The VACUUM renumbered the t1_content table in fts2, which breaks | ||
44 | # this. | ||
45 | do_test fts3b-1.2 { | ||
46 | execsql { | ||
47 | SELECT rowid FROM t1 WHERE c MATCH 'this'; | ||
48 | } | ||
49 | } {1 3} | ||
50 | |||
51 | # The t2 table is unfortunately pretty contrived. We need documents | ||
52 | # that are bigger than ROOT_MAX (1024) to force segments out of the | ||
53 | # segdir and into %_segments. We also need to force segment merging | ||
54 | # to generate a hole in the %_segments table, which needs more than 16 | ||
55 | # docs. Beyond that, to test correct operation of BLOCK_SELECT_STMT, | ||
56 | # we need to merge a mult-level tree, which is where the 10,000 comes | ||
57 | # from. Which is slow, thus the set of transactions, with the 500 | ||
58 | # being a number such that 10,000/500 > 16. | ||
59 | set text { | ||
60 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas | ||
61 | iaculis mollis ipsum. Praesent rhoncus placerat justo. Duis non quam | ||
62 | sed turpis posuere placerat. Curabitur et lorem in lorem porttitor | ||
63 | aliquet. Pellentesque bibendum tincidunt diam. Vestibulum blandit | ||
64 | ante nec elit. In sapien diam, facilisis eget, dictum sed, viverra | ||
65 | at, felis. Vestibulum magna. Sed magna dolor, vestibulum rhoncus, | ||
66 | ornare vel, vulputate sit amet, felis. Integer malesuada, tellus at | ||
67 | luctus gravida, diam nunc porta nibh, nec imperdiet massa metus eu | ||
68 | lectus. Aliquam nisi. Nunc fringilla nulla at lectus. Suspendisse | ||
69 | potenti. Cum sociis natoque penatibus et magnis dis parturient | ||
70 | montes, nascetur ridiculus mus. Pellentesque odio nulla, feugiat eu, | ||
71 | suscipit nec, consequat quis, risus. | ||
72 | } | ||
73 | append text $text | ||
74 | |||
75 | db eval {CREATE VIRTUAL TABLE t2 USING fts3(c)} | ||
76 | set res {} | ||
77 | db eval {BEGIN} | ||
78 | for {set ii 0} {$ii<10000} {incr ii} { | ||
79 | db eval {INSERT INTO t2 (c) VALUES ($text)} | ||
80 | lappend res [expr {$ii+1}] | ||
81 | if {($ii%500)==0} { | ||
82 | db eval { | ||
83 | COMMIT; | ||
84 | BEGIN; | ||
85 | } | ||
86 | } | ||
87 | } | ||
88 | db eval {COMMIT} | ||
89 | |||
90 | do_test fts3b-2.1 { | ||
91 | execsql { | ||
92 | SELECT rowid FROM t2 WHERE c MATCH 'lorem'; | ||
93 | } | ||
94 | } $res | ||
95 | |||
96 | db eval {VACUUM} | ||
97 | |||
98 | # The VACUUM renumbered the t2_segment table in fts2, which would | ||
99 | # break the following. | ||
100 | do_test fts3b-2.2 { | ||
101 | execsql { | ||
102 | SELECT rowid FROM t2 WHERE c MATCH 'lorem'; | ||
103 | } | ||
104 | } $res | ||
105 | |||
106 | # Since fts3 is already an API break, I've marked the table-named | ||
107 | # column HIDDEN. | ||
108 | |||
109 | db eval { | ||
110 | CREATE VIRTUAL TABLE t3 USING fts3(c); | ||
111 | INSERT INTO t3 (c) VALUES('this is a test'); | ||
112 | INSERT INTO t3 (c) VALUES('that was a test'); | ||
113 | INSERT INTO t3 (c) VALUES('this is fun'); | ||
114 | DELETE FROM t3 WHERE c = 'that was a test'; | ||
115 | } | ||
116 | |||
117 | # Test that the table-named column still works. | ||
118 | do_test fts3b-3.1 { | ||
119 | execsql { | ||
120 | SELECT snippet(t3) FROM t3 WHERE t3 MATCH 'test'; | ||
121 | } | ||
122 | } {{this is a <b>test</b>}} | ||
123 | |||
124 | # Test that the column doesn't appear when selecting all columns. | ||
125 | do_test fts3b-3.2 { | ||
126 | execsql { | ||
127 | SELECT * FROM t3 WHERE rowid = 1; | ||
128 | } | ||
129 | } {{this is a test}} | ||
130 | |||
131 | # Test that the column doesn't conflict with inserts that don't name | ||
132 | # columns. | ||
133 | do_test fts3b-3.3 { | ||
134 | execsql { | ||
135 | INSERT INTO t3 VALUES ('another test'); | ||
136 | } | ||
137 | } {} | ||
138 | |||
139 | # fts3 adds a new implicit column, docid, which acts as an alias for | ||
140 | # rowid. | ||
141 | |||
142 | db eval { | ||
143 | CREATE VIRTUAL TABLE t4 USING fts3(c); | ||
144 | INSERT INTO t4 (c) VALUES('this is a test'); | ||
145 | INSERT INTO t4 (c) VALUES('that was a test'); | ||
146 | INSERT INTO t4 (c) VALUES('this is fun'); | ||
147 | DELETE FROM t4 WHERE c = 'that was a test'; | ||
148 | } | ||
149 | |||
150 | # Test that docid is present and identical to rowid. | ||
151 | do_test fts3b-4.1 { | ||
152 | execsql { | ||
153 | SELECT rowid FROM t4 WHERE rowid <> docid; | ||
154 | } | ||
155 | } {} | ||
156 | |||
157 | # Test that docid is hidden. | ||
158 | do_test fts3b-4.2 { | ||
159 | execsql { | ||
160 | SELECT * FROM t4 WHERE rowid = 1; | ||
161 | } | ||
162 | } {{this is a test}} | ||
163 | |||
164 | # Test that docid can be selected. | ||
165 | do_test fts3b-4.3 { | ||
166 | execsql { | ||
167 | SELECT docid, * FROM t4 WHERE rowid = 1; | ||
168 | } | ||
169 | } {1 {this is a test}} | ||
170 | |||
171 | # Test that docid can be used in WHERE. | ||
172 | do_test fts3b-4.4 { | ||
173 | execsql { | ||
174 | SELECT docid, * FROM t4 WHERE docid = 1; | ||
175 | } | ||
176 | } {1 {this is a test}} | ||
177 | |||
178 | # Test that the column doesn't conflict with inserts that don't name | ||
179 | # columns. [Yes, this is the same as fts3b-3.3, here just in case the | ||
180 | # goals of that test change.] | ||
181 | do_test fts3b-4.5 { | ||
182 | execsql { | ||
183 | INSERT INTO t4 VALUES ('another test'); | ||
184 | } | ||
185 | } {} | ||
186 | |||
187 | # Test that the docid can be forced on insert. | ||
188 | do_test fts3b-4.6 { | ||
189 | execsql { | ||
190 | INSERT INTO t4 (docid, c) VALUES (10, 'yet another test'); | ||
191 | SELECT * FROM t4 WHERE docid = 10; | ||
192 | } | ||
193 | } {{yet another test}} | ||
194 | |||
195 | # Test that rowid can also be forced. | ||
196 | do_test fts3b-4.7 { | ||
197 | execsql { | ||
198 | INSERT INTO t4 (docid, c) VALUES (12, 'still testing'); | ||
199 | SELECT * FROM t4 WHERE docid = 12; | ||
200 | } | ||
201 | } {{still testing}} | ||
202 | |||
203 | # If an insert tries to set both docid and rowid, require an error. | ||
204 | do_test fts3b-4.8 { | ||
205 | catchsql { | ||
206 | INSERT INTO t4 (rowid, docid, c) VALUES (14, 15, 'bad test'); | ||
207 | SELECT * FROM t4 WHERE docid = 14; | ||
208 | } | ||
209 | } {1 {SQL logic error or missing database}} | ||
210 | |||
211 | # Don't allow update of docid, to match rowid behaviour. | ||
212 | do_test fts3b-4.9 { | ||
213 | catchsql { | ||
214 | UPDATE t4 SET docid = 14 WHERE docid = 12; | ||
215 | } | ||
216 | } {1 {SQL logic error or missing database}} | ||
217 | |||
218 | finish_test | ||