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

Side by Side Diff: third_party/sqlite/sqlite-src-3170000/ext/fts5/test/fts5integrity.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 # 2015 Jan 13
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 # This file contains tests focused on the integrity-check procedure.
13 #
14
15 source [file join [file dirname [info script]] fts5_common.tcl]
16 set testprefix fts5integrity
17
18 # If SQLITE_ENABLE_FTS5 is defined, omit this file.
19 ifcapable !fts5 {
20 finish_test
21 return
22 }
23
24 do_execsql_test 1.0 {
25 CREATE VIRTUAL TABLE xx USING fts5(x);
26 INSERT INTO xx VALUES('term');
27 }
28 do_execsql_test 1.1 {
29 INSERT INTO xx(xx) VALUES('integrity-check');
30 }
31
32 do_execsql_test 2.0 {
33 CREATE VIRTUAL TABLE yy USING fts5(x, prefix=1);
34 INSERT INTO yy VALUES('term');
35 }
36 do_execsql_test 2.1 {
37 INSERT INTO yy(yy) VALUES('integrity-check');
38 }
39
40 #--------------------------------------------------------------------
41 #
42 do_execsql_test 3.0 {
43 CREATE VIRTUAL TABLE zz USING fts5(z);
44 INSERT INTO zz(zz, rank) VALUES('pgsz', 32);
45 INSERT INTO zz VALUES('b b b b b b b b b b b b b b');
46 INSERT INTO zz SELECT z FROM zz;
47 INSERT INTO zz SELECT z FROM zz;
48 INSERT INTO zz SELECT z FROM zz;
49 INSERT INTO zz SELECT z FROM zz;
50 INSERT INTO zz SELECT z FROM zz;
51 INSERT INTO zz SELECT z FROM zz;
52 INSERT INTO zz(zz) VALUES('optimize');
53 }
54
55 do_execsql_test 3.1 { INSERT INTO zz(zz) VALUES('integrity-check'); }
56
57 #--------------------------------------------------------------------
58 # Mess around with a docsize record. And the averages record. Then
59 # check that integrity-check picks it up.
60 #
61 do_execsql_test 4.0 {
62 CREATE VIRTUAL TABLE aa USING fts5(zz);
63 INSERT INTO aa(zz) VALUES('a b c d e');
64 INSERT INTO aa(zz) VALUES('a b c d');
65 INSERT INTO aa(zz) VALUES('a b c');
66 INSERT INTO aa(zz) VALUES('a b');
67 INSERT INTO aa(zz) VALUES('a');
68 SELECT length(sz) FROM aa_docsize;
69 } {1 1 1 1 1}
70 do_execsql_test 4.1 {
71 INSERT INTO aa(aa) VALUES('integrity-check');
72 }
73
74 do_catchsql_test 4.2 {
75 BEGIN;
76 UPDATE aa_docsize SET sz = X'44' WHERE rowid = 3;
77 INSERT INTO aa(aa) VALUES('integrity-check');
78 } {1 {database disk image is malformed}}
79
80 do_catchsql_test 4.3 {
81 ROLLBACK;
82 BEGIN;
83 UPDATE aa_data SET block = X'44' WHERE rowid = 1;
84 INSERT INTO aa(aa) VALUES('integrity-check');
85 } {1 {database disk image is malformed}}
86
87 do_catchsql_test 4.4 {
88 ROLLBACK;
89 BEGIN;
90 INSERT INTO aa_docsize VALUES(23, X'04');
91 INSERT INTO aa(aa) VALUES('integrity-check');
92 } {1 {database disk image is malformed}}
93
94 do_catchsql_test 4.5 {
95 ROLLBACK;
96 BEGIN;
97 INSERT INTO aa_docsize VALUES(23, X'00');
98 INSERT INTO aa_content VALUES(23, '');
99 INSERT INTO aa(aa) VALUES('integrity-check');
100 } {1 {database disk image is malformed}}
101
102 #db eval {SELECT rowid, fts5_decode(rowid, block) aS r FROM zz_data} {puts $r}
103 #exit
104
105 execsql { ROLLBACK }
106
107
108 #-------------------------------------------------------------------------
109 # Test that integrity-check works on a reasonably large db with many
110 # different terms.
111
112 # Document generator command.
113 proc rnddoc {n} {
114 set doc [list]
115 for {set i 0} {$i<$n} {incr i} {
116 lappend doc [format %.5d [expr int(rand()*10000)]]
117 }
118 return $doc
119 }
120 db func rnddoc rnddoc
121
122 expr srand(0)
123 do_execsql_test 5.0 {
124 CREATE VIRTUAL TABLE gg USING fts5(a, prefix="1,2,3");
125 INSERT INTO gg(gg, rank) VALUES('pgsz', 256);
126 INSERT INTO gg VALUES(rnddoc(20));
127 INSERT INTO gg SELECT rnddoc(20) FROM gg;
128 INSERT INTO gg SELECT rnddoc(20) FROM gg;
129 INSERT INTO gg SELECT rnddoc(20) FROM gg;
130 INSERT INTO gg SELECT rnddoc(20) FROM gg;
131 INSERT INTO gg SELECT rnddoc(20) FROM gg;
132 INSERT INTO gg SELECT rnddoc(20) FROM gg;
133 INSERT INTO gg SELECT rnddoc(20) FROM gg;
134 INSERT INTO gg SELECT rnddoc(20) FROM gg;
135 INSERT INTO gg SELECT rnddoc(20) FROM gg;
136 INSERT INTO gg SELECT rnddoc(20) FROM gg;
137 INSERT INTO gg SELECT rnddoc(20) FROM gg;
138 }
139
140 do_execsql_test 5.1 {
141 INSERT INTO gg(gg) VALUES('integrity-check');
142 }
143
144 do_execsql_test 5.2 {
145 INSERT INTO gg(gg) VALUES('optimize');
146 }
147
148 do_execsql_test 5.3 {
149 INSERT INTO gg(gg) VALUES('integrity-check');
150 }
151
152 do_test 5.4.1 {
153 set ok 0
154 for {set i 0} {$i < 10000} {incr i} {
155 set T [format %.5d $i]
156 set res [db eval { SELECT rowid FROM gg($T) ORDER BY rowid ASC }]
157 set res2 [db eval { SELECT rowid FROM gg($T) ORDER BY rowid DESC }]
158 if {$res == [lsort -integer $res2]} { incr ok }
159 }
160 set ok
161 } {10000}
162
163 do_test 5.4.2 {
164 set ok 0
165 for {set i 0} {$i < 100} {incr i} {
166 set T "[format %.3d $i]*"
167 set res [db eval { SELECT rowid FROM gg($T) ORDER BY rowid ASC }]
168 set res2 [db eval { SELECT rowid FROM gg($T) ORDER BY rowid DESC }]
169 if {$res == [lsort -integer $res2]} { incr ok }
170 }
171 set ok
172 } {100}
173
174 #-------------------------------------------------------------------------
175 # Similar to 5.*.
176 #
177 foreach {tn pgsz} {
178 1 32
179 2 36
180 3 40
181 4 44
182 5 48
183 } {
184 do_execsql_test 6.$tn.1 {
185 DROP TABLE IF EXISTS hh;
186 CREATE VIRTUAL TABLE hh USING fts5(y);
187 INSERT INTO hh(hh, rank) VALUES('pgsz', $pgsz);
188
189 WITH s(i) AS (SELECT 0 UNION ALL SELECT i+1 FROM s WHERE i<999)
190 INSERT INTO hh SELECT printf("%.3d%.3d%.3d %.3d%.3d%.3d",i,i,i,i+1,i+1,i+1)
191 FROM s;
192
193 WITH s(i) AS (SELECT 0 UNION ALL SELECT i+1 FROM s WHERE i<999)
194 INSERT INTO hh SELECT printf("%.3d%.3d%.3d %.3d%.3d%.3d",i,i,i,i+1,i+1,i+1)
195 FROM s;
196
197 INSERT INTO hh(hh) VALUES('optimize');
198 }
199
200 do_test 6.$tn.2 {
201 set ok 0
202 for {set i 0} {$i < 1000} {incr i} {
203 set T [format %.3d%.3d%.3d $i $i $i]
204 set res [db eval { SELECT rowid FROM hh($T) ORDER BY rowid ASC }]
205 set res2 [db eval { SELECT rowid FROM hh($T) ORDER BY rowid DESC }]
206 if {$res == [lsort -integer $res2]} { incr ok }
207 }
208 set ok
209 } {1000}
210 }
211
212 finish_test
213
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698