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

Side by Side Diff: third_party/sqlite/sqlite-src-3170000/ext/fts5/test/fts5rowid.test

Issue 2747283002: [sql] Import reference version of SQLite 3.17.. (Closed)
Patch Set: Created 3 years, 9 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
OLDNEW
(Empty)
1 # 2014 Dec 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 #
12 # Tests of the scalar fts5_rowid() and fts5_decode() functions.
13 #
14
15 source [file join [file dirname [info script]] fts5_common.tcl]
16 set testprefix fts5rowid
17
18 # If SQLITE_ENABLE_FTS5 is defined, omit this file.
19 ifcapable !fts5 {
20 finish_test
21 return
22 }
23
24 do_catchsql_test 1.1 {
25 SELECT fts5_rowid()
26 } {1 {should be: fts5_rowid(subject, ....)}}
27
28 do_catchsql_test 1.2 {
29 SELECT fts5_rowid('segment')
30 } {1 {should be: fts5_rowid('segment', segid, pgno))}}
31
32 do_execsql_test 1.3 {
33 SELECT fts5_rowid('segment', 1, 1)
34 } {137438953473}
35
36 do_catchsql_test 1.4 {
37 SELECT fts5_rowid('nosucharg');
38 } {1 {first arg to fts5_rowid() must be 'segment'}}
39
40
41 #-------------------------------------------------------------------------
42 # Tests of the fts5_decode() function.
43 #
44 reset_db
45 do_execsql_test 2.1 {
46 CREATE VIRTUAL TABLE x1 USING fts5(a, b);
47 INSERT INTO x1(x1, rank) VALUES('pgsz', 32);
48 } {}
49
50 proc rnddoc {n} {
51 set map [list 0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j]
52 set doc [list]
53 for {set i 0} {$i < $n} {incr i} {
54 lappend doc [string map $map [format %.3d [expr int(rand()*100)]]]
55 }
56 set doc
57 }
58 db func rnddoc rnddoc
59
60 do_execsql_test 2.2 {
61 WITH r(a, b) AS (
62 SELECT rnddoc(6), rnddoc(6) UNION ALL
63 SELECT rnddoc(6), rnddoc(6) FROM r
64 )
65 INSERT INTO x1 SELECT * FROM r LIMIT 10000;
66 DELETE FROM x1 WHERE (rowid%2);
67 }
68
69 set res [db one {SELECT count(*) FROM x1_data}]
70 do_execsql_test 2.3 {
71 SELECT count(fts5_decode(rowid, block)) FROM x1_data;
72 } $res
73 do_execsql_test 2.4 {
74 UPDATE x1_data SET block = X'';
75 SELECT count(fts5_decode(rowid, block)) FROM x1_data;
76 } $res
77
78 do_execsql_test 2.5 {
79 INSERT INTO x1(x1, rank) VALUES('pgsz', 1024);
80 INSERT INTO x1(x1) VALUES('rebuild');
81 }
82
83 set res [db one {SELECT count(*) FROM x1_data}]
84 do_execsql_test 2.6 {
85 SELECT count(fts5_decode(rowid, block)) FROM x1_data;
86 } $res
87
88 # This is really a corruption test...
89 #do_execsql_test 2.7 {
90 # UPDATE x1_data SET block = X'';
91 # SELECT count(fts5_decode(rowid, block)) FROM x1_data;
92 #} $res
93
94 do_execsql_test 2.8 {
95 SELECT fts5_decode(fts5_rowid('segment', 1000, 1), X'AB')
96 } {corrupt}
97
98 #-------------------------------------------------------------------------
99 # Tests with very large tokens.
100 #
101 set strlist [list \
102 "[string repeat x 400]" \
103 "[string repeat x 300][string repeat w 100]" \
104 "[string repeat x 300][string repeat y 100]" \
105 "[string repeat x 300][string repeat z 600]" \
106 ]
107 do_test 3.0 {
108 execsql {
109 BEGIN;
110 CREATE VIRTUAL TABLE x2 USING fts5(a);
111 }
112 foreach str $strlist { execsql { INSERT INTO x2 VALUES($str) } }
113 execsql COMMIT
114 } {}
115
116 for {set tn 0} {$tn<[llength $strlist]} {incr tn} {
117 set str [lindex $strlist $tn]
118 do_execsql_test 3.1.$tn {
119 SELECT rowid FROM x2 WHERE x2 MATCH $str
120 } [expr $tn+1]
121 }
122
123 set res [db one {SELECT count(*) FROM x2_data}]
124 do_execsql_test 3.2 {
125 SELECT count(fts5_decode(rowid, block)) FROM x2_data;
126 } $res
127
128 #-------------------------------------------------------------------------
129 # Leaf pages with no terms or rowids at all.
130 #
131 set strlist [list \
132 "[string repeat {w } 400]" \
133 "[string repeat {x } 400]" \
134 "[string repeat {y } 400]" \
135 "[string repeat {z } 400]" \
136 ]
137 do_test 4.0 {
138 execsql {
139 BEGIN;
140 CREATE VIRTUAL TABLE x3 USING fts5(a);
141 INSERT INTO x3(x3, rank) VALUES('pgsz', 32);
142 }
143 foreach str $strlist { execsql { INSERT INTO x3 VALUES($str) } }
144 execsql COMMIT
145 } {}
146
147 for {set tn 0} {$tn<[llength $strlist]} {incr tn} {
148 set str [lindex $strlist $tn]
149 do_execsql_test 4.1.$tn {
150 SELECT rowid FROM x3 WHERE x3 MATCH $str
151 } [expr $tn+1]
152 }
153
154 set res [db one {SELECT count(*) FROM x3_data}]
155 do_execsql_test 4.2 {
156 SELECT count(fts5_decode(rowid, block)) FROM x3_data;
157 } $res
158
159 #-------------------------------------------------------------------------
160 # Position lists with large values.
161 #
162 set strlist [list \
163 "[string repeat {w } 400]a" \
164 "[string repeat {x } 400]a" \
165 "[string repeat {y } 400]a" \
166 "[string repeat {z } 400]a" \
167 ]
168 do_test 5.0 {
169 execsql {
170 BEGIN;
171 CREATE VIRTUAL TABLE x4 USING fts5(a);
172 INSERT INTO x4(x4, rank) VALUES('pgsz', 32);
173 }
174 foreach str $strlist { execsql { INSERT INTO x4 VALUES($str) } }
175 execsql COMMIT
176 } {}
177
178 do_execsql_test 5.1 {
179 SELECT rowid FROM x4 WHERE x4 MATCH 'a'
180 } {1 2 3 4}
181
182 set res [db one {SELECT count(*) FROM x4_data}]
183 do_execsql_test 5.2 {
184 SELECT count(fts5_decode(rowid, block)) FROM x4_data;
185 } $res
186
187 #-------------------------------------------------------------------------
188 #
189
190 do_execsql_test 6.0 {
191 CREATE VIRTUAL TABLE x5 USING fts5(x, detail=none);
192 INSERT INTO x5(x5, rank) VALUES('pgsz', 32);
193 INSERT INTO x5 VALUES('a b c d e f');
194 INSERT INTO x5 VALUES('a b c d e f');
195 INSERT INTO x5 VALUES('a b c d e f');
196 BEGIN;
197 WITH s(i) AS (
198 SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100
199 ) INSERT INTO x5 SELECT 'a b c d e f' FROM s;
200 COMMIT;
201 SELECT count(fts5_decode_none(rowid, block)) FROM x5_data;
202 } {32}
203
204 do_execsql_test 6.1 {
205 DELETE FROM x5 WHERE rowid <= 2;
206 SELECT count(fts5_decode_none(rowid, block)) FROM x5_data;
207 } {34}
208
209 do_execsql_test 6.2 {
210 UPDATE x5 SET x='a b c d e f' WHERE rowid=3;
211 SELECT count(fts5_decode_none(rowid, block)) FROM x5_data;
212 } {36}
213
214 #db eval {SELECT rowid, fts5_decode_none(rowid, block) aS r FROM x5_data} {puts $r}
215
216
217
218 finish_test
219
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698