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

Side by Side Diff: third_party/sqlite/src/test/malloc5.test

Issue 901033002: Import SQLite 3.8.7.4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Chromium changes to support SQLite 3.8.7.4. Created 5 years, 10 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 # 2005 November 30 1 # 2005 November 30
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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 # 198 #
199 set ::soft_limit [sqlite3_soft_heap_limit -1] 199 set ::soft_limit [sqlite3_soft_heap_limit -1]
200 execsql {PRAGMA cache_size=2000} 200 execsql {PRAGMA cache_size=2000}
201 do_test malloc5-4.1 { 201 do_test malloc5-4.1 {
202 execsql {BEGIN;} 202 execsql {BEGIN;}
203 execsql {DELETE FROM abc;} 203 execsql {DELETE FROM abc;}
204 for {set i 0} {$i < 10000} {incr i} { 204 for {set i 0} {$i < 10000} {incr i} {
205 execsql "INSERT INTO abc VALUES($i, $i, '[string repeat X 100]');" 205 execsql "INSERT INTO abc VALUES($i, $i, '[string repeat X 100]');"
206 } 206 }
207 execsql {COMMIT;} 207 execsql {COMMIT;}
208 db cache flush
208 sqlite3_release_memory 209 sqlite3_release_memory
209 sqlite3_memory_highwater 1 210 sqlite3_memory_highwater 1
210 execsql {SELECT * FROM abc} 211 execsql {SELECT * FROM abc}
211 set nMaxBytes [sqlite3_memory_highwater 1] 212 set nMaxBytes [sqlite3_memory_highwater 1]
212 puts -nonewline " (Highwater mark: $nMaxBytes) " 213 puts -nonewline " (Highwater mark: $nMaxBytes) "
213 expr $nMaxBytes > 1000000 214 expr $nMaxBytes > 1000000
214 } {1} 215 } {1}
215 do_test malloc5-4.2 { 216 do_test malloc5-4.2 {
217 db cache flush
216 sqlite3_release_memory 218 sqlite3_release_memory
217 sqlite3_soft_heap_limit 100000 219 sqlite3_soft_heap_limit 100000
218 sqlite3_memory_highwater 1 220 sqlite3_memory_highwater 1
219 execsql {SELECT * FROM abc} 221 execsql {SELECT * FROM abc}
220 set nMaxBytes [sqlite3_memory_highwater 1] 222 set nMaxBytes [sqlite3_memory_highwater 1]
221 puts -nonewline " (Highwater mark: $nMaxBytes) " 223 puts -nonewline " (Highwater mark: $nMaxBytes) "
222 expr $nMaxBytes <= 100000 224 expr $nMaxBytes <= 110000
223 } {1} 225 } {1}
224 do_test malloc5-4.3 { 226 do_test malloc5-4.3 {
225 # Check that the content of table abc is at least roughly as expected. 227 # Check that the content of table abc is at least roughly as expected.
226 execsql { 228 execsql {
227 SELECT count(*), sum(a), sum(b) FROM abc; 229 SELECT count(*), sum(a), sum(b) FROM abc;
228 } 230 }
229 } [list 10000 [expr int(10000.0 * 4999.5)] [expr int(10000.0 * 4999.5)]] 231 } [list 10000 [expr int(10000.0 * 4999.5)] [expr int(10000.0 * 4999.5)]]
230 232
231 # Restore the soft heap limit. 233 # Restore the soft heap limit.
232 sqlite3_soft_heap_limit $::soft_limit 234 sqlite3_soft_heap_limit $::soft_limit
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 # The following test cases (malloc5-6.*) test the new global LRU list 270 # The following test cases (malloc5-6.*) test the new global LRU list
269 # used to determine the pages to recycle when sqlite3_release_memory is 271 # used to determine the pages to recycle when sqlite3_release_memory is
270 # called and there is more than one pager open. 272 # called and there is more than one pager open.
271 # 273 #
272 proc nPage {db} { 274 proc nPage {db} {
273 set bt [btree_from_db $db] 275 set bt [btree_from_db $db]
274 array set stats [btree_pager_stats $bt] 276 array set stats [btree_pager_stats $bt]
275 set stats(page) 277 set stats(page)
276 } 278 }
277 db close 279 db close
278 file delete -force test.db test.db-journal test2.db test2.db-journal 280 forcedelete test.db test.db-journal test2.db test2.db-journal
279 281
280 # This block of test-cases (malloc5-6.1.*) prepares two database files 282 # This block of test-cases (malloc5-6.1.*) prepares two database files
281 # for the subsequent tests. 283 # for the subsequent tests.
282 do_test malloc5-6.1.1 { 284 do_test malloc5-6.1.1 {
283 sqlite3 db test.db 285 sqlite3 db test.db
284 execsql { 286 execsql {
285 PRAGMA page_size=1024; 287 PRAGMA page_size=1024;
286 PRAGMA default_cache_size=10; 288 PRAGMA default_cache_size=10;
287 } 289 }
288 execsql { 290 execsql {
289 PRAGMA temp_store = memory; 291 PRAGMA temp_store = memory;
290 BEGIN; 292 BEGIN;
291 CREATE TABLE abc(a PRIMARY KEY, b, c); 293 CREATE TABLE abc(a PRIMARY KEY, b, c);
292 INSERT INTO abc VALUES(randstr(50,50), randstr(75,75), randstr(100,100)); 294 INSERT INTO abc VALUES(randstr(50,50), randstr(75,75), randstr(100,100));
293 INSERT INTO abc 295 INSERT INTO abc
294 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc; 296 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc;
295 INSERT INTO abc 297 INSERT INTO abc
296 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc; 298 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc;
297 INSERT INTO abc 299 INSERT INTO abc
298 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc; 300 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc;
299 INSERT INTO abc 301 INSERT INTO abc
300 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc; 302 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc;
301 INSERT INTO abc 303 INSERT INTO abc
302 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc; 304 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc;
303 INSERT INTO abc 305 INSERT INTO abc
304 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc; 306 SELECT randstr(50,50), randstr(75,75), randstr(100,100) FROM abc;
305 COMMIT; 307 COMMIT;
306 } 308 }
307 copy_file test.db test2.db 309 forcecopy test.db test2.db
308 sqlite3 db2 test2.db 310 sqlite3 db2 test2.db
309 list \ 311 list \
310 [expr ([file size test.db]/1024)>20] [expr ([file size test2.db]/1024)>20] 312 [expr ([file size test.db]/1024)>20] [expr ([file size test2.db]/1024)>20]
311 } {1 1} 313 } {1 1}
312 do_test malloc5-6.1.2 { 314 do_test malloc5-6.1.2 {
313 list [execsql {PRAGMA cache_size}] [execsql {PRAGMA cache_size} db2] 315 list [execsql {PRAGMA cache_size}] [execsql {PRAGMA cache_size} db2]
314 } {10 10} 316 } {10 10}
315 317
316 do_test malloc5-6.2.1 { 318 do_test malloc5-6.2.1 {
317 execsql {SELECT * FROM abc} db2 319 execsql {SELECT * FROM abc} db2
(...skipping 27 matching lines...) Expand all
345 BEGIN; 347 BEGIN;
346 UPDATE abc SET c = randstr(100,100) 348 UPDATE abc SET c = randstr(100,100)
347 WHERE rowid = 1 OR rowid = (SELECT max(rowid) FROM abc); 349 WHERE rowid = 1 OR rowid = (SELECT max(rowid) FROM abc);
348 } db2 350 } db2
349 execsql { SELECT * FROM abc } db 351 execsql { SELECT * FROM abc } db
350 expr [nPage db] + [nPage db2] 352 expr [nPage db] + [nPage db2]
351 } {20} 353 } {20}
352 do_test malloc5-6.3.2 { 354 do_test malloc5-6.3.2 {
353 # Try to release 7700 bytes. This should release all the 355 # Try to release 7700 bytes. This should release all the
354 # non-dirty pages held by db2. 356 # non-dirty pages held by db2.
355 sqlite3_release_memory [expr 7*1100] 357 sqlite3_release_memory [expr 7*1132]
356 list [nPage db] [nPage db2] 358 list [nPage db] [nPage db2]
357 } {10 3} 359 } {10 3}
358 do_test malloc5-6.3.3 { 360 do_test malloc5-6.3.3 {
359 # Try to release another 1000 bytes. This should come fromt the db 361 # Try to release another 1000 bytes. This should come fromt the db
360 # cache, since all three pages held by db2 are either in-use or diry. 362 # cache, since all three pages held by db2 are either in-use or diry.
361 sqlite3_release_memory 1000 363 sqlite3_release_memory 1000
362 list [nPage db] [nPage db2] 364 list [nPage db] [nPage db2]
363 } {9 3} 365 } {9 3}
364 do_test malloc5-6.3.4 { 366 do_test malloc5-6.3.4 {
365 # Now release 9900 more (about 9 pages worth). This should expunge 367 # Now release 9900 more (about 9 pages worth). This should expunge
366 # the rest of the db cache. But the db2 cache remains intact, because 368 # the rest of the db cache. But the db2 cache remains intact, because
367 # SQLite tries to avoid calling sync(). 369 # SQLite tries to avoid calling sync().
368 if {$::tcl_platform(wordSize)==8} { 370 if {$::tcl_platform(wordSize)==8} {
369 sqlite3_release_memory 10177 371 sqlite3_release_memory 10500
370 } else { 372 } else {
371 sqlite3_release_memory 9900 373 sqlite3_release_memory 9900
372 } 374 }
373 list [nPage db] [nPage db2] 375 list [nPage db] [nPage db2]
374 } {0 3} 376 } {0 3}
375 do_test malloc5-6.3.5 { 377 do_test malloc5-6.3.5 {
376 # But if we are really insistent, SQLite will consent to call sync() 378 # But if we are really insistent, SQLite will consent to call sync()
377 # if there is no other option. UPDATE: As of 3.6.2, SQLite will not 379 # if there is no other option. UPDATE: As of 3.6.2, SQLite will not
378 # call sync() in this scenario. So no further memory can be reclaimed. 380 # call sync() in this scenario. So no further memory can be reclaimed.
379 sqlite3_release_memory 1000 381 sqlite3_release_memory 1000
380 list [nPage db] [nPage db2] 382 list [nPage db] [nPage db2]
381 } {0 3} 383 } {0 3}
382 do_test malloc5-6.3.6 { 384 do_test malloc5-6.3.6 {
383 # The referenced page (page 1 of the db2 cache) will not be freed no 385 # The referenced page (page 1 of the db2 cache) will not be freed no
384 # matter how much memory we ask for: 386 # matter how much memory we ask for:
385 sqlite3_release_memory 31459 387 sqlite3_release_memory 31459
386 list [nPage db] [nPage db2] 388 list [nPage db] [nPage db2]
387 } {0 3} 389 } {0 3}
388 390
389 db2 close 391 db2 close
390 392
391 sqlite3_soft_heap_limit $::soft_limit 393 sqlite3_soft_heap_limit $::soft_limit
392 finish_test 394 finish_test
393 catch {db close} 395 catch {db close}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698