OLD | NEW |
| (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 breakpoint | |
149 do_execsql_test 5.3 { | |
150 INSERT INTO gg(gg) VALUES('integrity-check'); | |
151 } | |
152 | |
153 finish_test | |
154 | |
OLD | NEW |