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

Side by Side Diff: third_party/sqlite/src/ext/fts5/test/fts5merge.test

Issue 2751253002: [sql] Import SQLite 3.17.0. (Closed)
Patch Set: also clang on Linux i386 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
1 # 2014 Dec 20 1 # 2014 Dec 20
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 #***********************************************************************
(...skipping 27 matching lines...) Expand all
38 DROP TABLE IF EXISTS x8; 38 DROP TABLE IF EXISTS x8;
39 CREATE VIRTUAL TABLE x8 USING fts5(i); 39 CREATE VIRTUAL TABLE x8 USING fts5(i);
40 INSERT INTO x8(x8, rank) VALUES('pgsz', 32); 40 INSERT INTO x8(x8, rank) VALUES('pgsz', 32);
41 41
42 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<$::nRowPerSeg) 42 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<$::nRowPerSeg)
43 INSERT INTO x8 SELECT repeat('x y ', i % 16) FROM ii; 43 INSERT INTO x8 SELECT repeat('x y ', i % 16) FROM ii;
44 44
45 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<$::nRowPerSeg) 45 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<$::nRowPerSeg)
46 INSERT INTO x8 SELECT repeat('x y ', i % 16) FROM ii; 46 INSERT INTO x8 SELECT repeat('x y ', i % 16) FROM ii;
47 47
48 INSERT INTO x8(x8, rank) VALUES('automerge', 2); 48 INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
49 } 49 }
50 50
51 for {set tn 1} {[lindex [fts5_level_segs x8] 0]>0} {incr tn} { 51 for {set tn 1} {[lindex [fts5_level_segs x8] 0]>0} {incr tn} {
52 do_execsql_test $testname.$tn { 52 do_execsql_test $testname.$tn {
53 INSERT INTO x8(x8, rank) VALUES('merge', 1); 53 INSERT INTO x8(x8, rank) VALUES('merge', 1);
54 INSERT INTO x8(x8) VALUES('integrity-check'); 54 INSERT INTO x8(x8) VALUES('integrity-check');
55 } 55 }
56 if {$tn>5} break 56 if {$tn>5} break
57 } 57 }
58 58
(...skipping 18 matching lines...) Expand all
77 CREATE VIRTUAL TABLE x8 USING fts5(i); 77 CREATE VIRTUAL TABLE x8 USING fts5(i);
78 INSERT INTO x8(x8, rank) VALUES('pgsz', 32); 78 INSERT INTO x8(x8, rank) VALUES('pgsz', 32);
79 } 79 }
80 80
81 set ::nRow $nRow 81 set ::nRow $nRow
82 do_test $testname.1 { 82 do_test $testname.1 {
83 for {set i 0} {$i < $::nRow} {incr i} { 83 for {set i 0} {$i < $::nRow} {incr i} {
84 execsql { INSERT INTO x8 VALUES( rnddoc(($i%16) + 5) ) } 84 execsql { INSERT INTO x8 VALUES( rnddoc(($i%16) + 5) ) }
85 while {[not_merged x8]} { 85 while {[not_merged x8]} {
86 execsql { 86 execsql {
87 INSERT INTO x8(x8, rank) VALUES('automerge', 2); 87 INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
88 INSERT INTO x8(x8, rank) VALUES('merge', 1); 88 INSERT INTO x8(x8, rank) VALUES('merge', 1);
89 INSERT INTO x8(x8, rank) VALUES('automerge', 16); 89 INSERT INTO x8(x8, rank) VALUES('usermerge', 16);
90 INSERT INTO x8(x8) VALUES('integrity-check'); 90 INSERT INTO x8(x8) VALUES('integrity-check');
91 } 91 }
92 } 92 }
93 } 93 }
94 } {} 94 } {}
95 } 95 }
96 proc not_merged {tbl} { 96 proc not_merged {tbl} {
97 set segs [fts5_level_segs $tbl] 97 set segs [fts5_level_segs $tbl]
98 foreach s $segs { if {$s>1} { return 1 } } 98 foreach s $segs { if {$s>1} { return 1 } }
99 return 0 99 return 0
100 } 100 }
101 101
102 do_merge2_test 2.1 5 102 do_merge2_test 2.1 5
103 do_merge2_test 2.2 10 103 do_merge2_test 2.2 10
104 do_merge2_test 2.3 20 104 do_merge2_test 2.3 20
105 105
106 #------------------------------------------------------------------------- 106 #-------------------------------------------------------------------------
107 # Test that an auto-merge will complete any merge that has already been 107 # Test that a merge will complete any merge that has already been
108 # started, even if the number of input segments is less than the current 108 # started, even if the number of input segments is less than the current
109 # value of the 'automerge' configuration parameter. 109 # value of the 'usermerge' configuration parameter.
110 # 110 #
111 db func rnddoc fts5_rnddoc 111 db func rnddoc fts5_rnddoc
112 112
113 do_execsql_test 3.1 { 113 do_execsql_test 3.1 {
114 DROP TABLE IF EXISTS x8; 114 DROP TABLE IF EXISTS x8;
115 CREATE VIRTUAL TABLE x8 USING fts5(i); 115 CREATE VIRTUAL TABLE x8 USING fts5(i);
116 INSERT INTO x8(x8, rank) VALUES('pgsz', 32); 116 INSERT INTO x8(x8, rank) VALUES('pgsz', 32);
117 INSERT INTO x8 VALUES(rnddoc(100)); 117 INSERT INTO x8 VALUES(rnddoc(100));
118 INSERT INTO x8 VALUES(rnddoc(100)); 118 INSERT INTO x8 VALUES(rnddoc(100));
119 } 119 }
120 do_test 3.2 { 120 do_test 3.2 {
121 execsql { 121 execsql {
122 INSERT INTO x8(x8, rank) VALUES('automerge', 4); 122 INSERT INTO x8(x8, rank) VALUES('usermerge', 4);
123 INSERT INTO x8(x8, rank) VALUES('merge', 1); 123 INSERT INTO x8(x8, rank) VALUES('merge', 1);
124 } 124 }
125 fts5_level_segs x8 125 fts5_level_segs x8
126 } {2} 126 } {2}
127 127
128 do_test 3.3 { 128 do_test 3.3 {
129 execsql { 129 execsql {
130 INSERT INTO x8(x8, rank) VALUES('automerge', 2); 130 INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
131 INSERT INTO x8(x8, rank) VALUES('merge', 1); 131 INSERT INTO x8(x8, rank) VALUES('merge', 1);
132 } 132 }
133 fts5_level_segs x8 133 fts5_level_segs x8
134 } {2 1} 134 } {2 1}
135 135
136 do_test 3.4 { 136 do_test 3.4 {
137 execsql { INSERT INTO x8(x8, rank) VALUES('automerge', 4) } 137 execsql { INSERT INTO x8(x8, rank) VALUES('usermerge', 4) }
138 while {[not_merged x8]} { 138 while {[not_merged x8]} {
139 execsql { INSERT INTO x8(x8, rank) VALUES('merge', 1) } 139 execsql { INSERT INTO x8(x8, rank) VALUES('merge', 1) }
140 } 140 }
141 fts5_level_segs x8 141 fts5_level_segs x8
142 } {0 1} 142 } {0 1}
143 143
144 #------------------------------------------------------------------------- 144 #-------------------------------------------------------------------------
145 # 145 #
146 proc mydoc {} { 146 proc mydoc {} {
147 set x [lindex {a b c d e f g h i j} [expr int(rand()*10)]] 147 set x [lindex {a b c d e f g h i j} [expr int(rand()*10)]]
(...skipping 21 matching lines...) Expand all
169 169
170 do_execsql_test 4.$tn.2 { 170 do_execsql_test 4.$tn.2 {
171 INSERT INTO x8(x8, rank) VALUES('merge', 1); 171 INSERT INTO x8(x8, rank) VALUES('merge', 1);
172 } 172 }
173 173
174 do_execsql_test 4.$tn.3 { 174 do_execsql_test 4.$tn.3 {
175 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<100) 175 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<100)
176 INSERT INTO x8 SELECT mydoc() FROM ii; 176 INSERT INTO x8 SELECT mydoc() FROM ii;
177 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<100) 177 WITH ii(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM ii WHERE i<100)
178 INSERT INTO x8 SELECT mydoc() FROM ii; 178 INSERT INTO x8 SELECT mydoc() FROM ii;
179 INSERT INTO x8(x8, rank) VALUES('automerge', 2); 179 INSERT INTO x8(x8, rank) VALUES('usermerge', 2);
180 } 180 }
181 181
182 set expect [mycount] 182 set expect [mycount]
183 for {set i 0} {$i < 20} {incr i} { 183 for {set i 0} {$i < 20} {incr i} {
184 do_test 4.$tn.4.$i { 184 do_test 4.$tn.4.$i {
185 execsql { INSERT INTO x8(x8, rank) VALUES('merge', 1); } 185 execsql { INSERT INTO x8(x8, rank) VALUES('merge', 1); }
186 mycount 186 mycount
187 } $expect 187 } $expect
188 break 188 break
189 } 189 }
190 # db eval {SELECT fts5_decode(rowid, block) AS r FROM x8_data} { puts $r } 190 # db eval {SELECT fts5_decode(rowid, block) AS r FROM x8_data} { puts $r }
191 } 191 }
192 192
193 #-------------------------------------------------------------------------
194 # Test that the 'merge' command does not modify the database if there is
195 # no work to do.
196
197 do_execsql_test 5.1 {
198 CREATE VIRTUAL TABLE x9 USING fts5(one, two);
199 INSERT INTO x9(x9, rank) VALUES('pgsz', 32);
200 INSERT INTO x9(x9, rank) VALUES('automerge', 2);
201 INSERT INTO x9(x9, rank) VALUES('usermerge', 2);
202 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
203 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
204 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
205 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
206 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
207 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
208 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
209 INSERT INTO x9 VALUES(rnddoc(100), rnddoc(100));
210 }
211
212 do_test 5.2 {
213 while 1 {
214 set nChange [db total_changes]
215 execsql { INSERT INTO x9(x9, rank) VALUES('merge', 1); }
216 set nChange [expr [db total_changes] - $nChange]
217 #puts $nChange
218 if {$nChange<2} break
219 }
220 } {}
221
222
223 #--------------------------------------------------------------------------
224 # Test that running 'merge' on an empty database does not cause a
225 # problem.
226 #
227 reset_db
228 do_execsql_test 6.0 {
229 CREATE VIRTUAL TABLE g1 USING fts5(a, b);
230 }
231 do_execsql_test 6.1 {
232 INSERT INTO g1(g1, rank) VALUES('merge', 10);
233 }
234 do_execsql_test 6.2 {
235 INSERT INTO g1(g1, rank) VALUES('merge', -10);
236 }
237 do_execsql_test 6.3 {
238 INSERT INTO g1(g1) VALUES('integrity-check');
239 }
240
241
242
193 finish_test 243 finish_test
194 244
OLDNEW
« no previous file with comments | « third_party/sqlite/src/ext/fts5/test/fts5matchinfo.test ('k') | third_party/sqlite/src/ext/fts5/test/fts5merge2.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698