Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | A few more auto-vacuum tests. (CVS 2079) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9d4a60bbd67704ff3a9503678db94498 |
User & Date: | danielk1977 2004-11-08 12:32:50.000 |
Context
2004-11-08
| ||
16:15 | Update the space-analyzer tool to support auto-vacuum databases. (CVS 2080) (check-in: 1cb8086612 user: danielk1977 tags: trunk) | |
12:32 | A few more auto-vacuum tests. (CVS 2079) (check-in: 9d4a60bbd6 user: danielk1977 tags: trunk) | |
09:51 | Check in the file autovacuum_crash.test that should be part of the previous check-in. (CVS 2078) (check-in: 9d7cd1f732 user: danielk1977 tags: trunk) | |
Changes
Changes to test/autovacuum.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the SELECT statement. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the SELECT statement. # # $Id: autovacuum.test,v 1.10 2004/11/08 12:32:50 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Return a string $len characters long. The returned string is $char repeated # over and over. For example, [make_str abc 8] returns "abcabcab". proc make_str {char len} { |
︙ | ︙ | |||
124 125 126 127 128 129 130 131 132 133 134 135 136 137 | # autovacuum-2.2.*: Create some tables. Ensure that data pages can be # moved correctly to make space for new root-pages. # autovacuum-2.3.*: Drop one of the tables just created (not the last one), # and check that one of the other tables is moved to # the free root-page location. # autovacuum-2.4.*: Check that a table can be created correctly when the # root-page it requires is on the free-list. # do_test autovacuum-2.1.1 { execsql { DROP TABLE av1; } } {} do_test autovacuum-2.1.2 { | > > > > > > | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | # autovacuum-2.2.*: Create some tables. Ensure that data pages can be # moved correctly to make space for new root-pages. # autovacuum-2.3.*: Drop one of the tables just created (not the last one), # and check that one of the other tables is moved to # the free root-page location. # autovacuum-2.4.*: Check that a table can be created correctly when the # root-page it requires is on the free-list. # autovacuum-2.5.*: Check that a table with indices can be dropped. This # is slightly tricky because dropping one of the # indices/table btrees could move the root-page of another. # The code-generation layer of SQLite overcomes this problem # by dropping the btrees in descending order of root-pages. # This test ensures that this actually happens. # do_test autovacuum-2.1.1 { execsql { DROP TABLE av1; } } {} do_test autovacuum-2.1.2 { |
︙ | ︙ | |||
288 289 290 291 292 293 294 295 296 297 298 299 300 301 | execsql BEGIN for {set i 3} {$i<=530} {incr i} { execsql "DROP TABLE av$i" } execsql COMMIT file_pages } 1 #-------------------------------------------------------------------------- # Test cases autovacuum-3.* test the operation of the "PRAGMA auto_vacuum" # command. # do_test autovacuum-3.1 { execsql { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 | execsql BEGIN for {set i 3} {$i<=530} {incr i} { execsql "DROP TABLE av$i" } execsql COMMIT file_pages } 1 # Create some tables with indices to drop. do_test autovacuum-2.5.1 { execsql { CREATE TABLE av1(a PRIMARY KEY, b, c); INSERT INTO av1 VALUES('av1 a', 'av1 b', 'av1 c'); CREATE TABLE av2(a PRIMARY KEY, b, c); CREATE INDEX av2_i1 ON av2(b); CREATE INDEX av2_i2 ON av2(c); INSERT INTO av2 VALUES('av2 a', 'av2 b', 'av2 c'); CREATE TABLE av3(a PRIMARY KEY, b, c); CREATE INDEX av3_i1 ON av3(b); INSERT INTO av3 VALUES('av3 a', 'av3 b', 'av3 c'); CREATE TABLE av4(a, b, c); CREATE INDEX av4_i1 ON av4(a); CREATE INDEX av4_i2 ON av4(b); CREATE INDEX av4_i3 ON av4(c); CREATE INDEX av4_i4 ON av4(a, b, c); INSERT INTO av4 VALUES('av4 a', 'av4 b', 'av4 c'); } } {} do_test autovacuum-2.5.2 { execsql { SELECT name, rootpage FROM sqlite_master; } } [list av1 4 sqlite_autoindex_av1_1 3 \ av2 6 sqlite_autoindex_av2_1 5 av2_i1 7 av2_i2 8 \ av3 10 sqlite_autoindex_av3_1 9 av3_i1 11 \ av4 12 av4_i1 13 av4_i2 14 av4_i3 15 av4_i4 16 \ ] # The following 4 tests are SELECT queries that use the indices created. # If the root-pages in the internal schema are not updated correctly when # a table or indice is moved, these queries will fail. They are repeated # after each table is dropped (i.e. as test cases 2.5.*.[1..4]). do_test autovacuum-2.5.2.1 { execsql { SELECT * FROM av1 WHERE a = 'av1 a'; } } {{av1 a} {av1 b} {av1 c}} do_test autovacuum-2.5.2.2 { execsql { SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' } } {{av2 a} {av2 b} {av2 c}} do_test autovacuum-2.5.2.3 { execsql { SELECT * FROM av3 WHERE a = 'av3 a' AND b = 'av3 b'; } } {{av3 a} {av3 b} {av3 c}} do_test autovacuum-2.5.2.4 { execsql { SELECT * FROM av4 WHERE a = 'av4 a' AND b = 'av4 b' AND c = 'av4 c'; } } {{av4 a} {av4 b} {av4 c}} # Drop table av3. Indices av4_i2, av4_i3 and av4_i4 are moved to fill the two # root pages vacated. The operation proceeds as: # Step 1: Delete av3_i1 (root-page 11). Move root-page of av4_i4 to page 11. # Step 2: Delete av3 (root-page 10). Move root-page of av4_i3 to page 10. # Step 3: Delete sqlite_autoindex_av1_3 (root-page 9). Move av4_i2 to page 9. do_test autovacuum-2.5.3 { execsql { DROP TABLE av3; SELECT name, rootpage FROM sqlite_master; } } [list av1 4 sqlite_autoindex_av1_1 3 \ av2 6 sqlite_autoindex_av2_1 5 av2_i1 7 av2_i2 8 \ av4 12 av4_i1 13 av4_i2 9 av4_i3 10 av4_i4 11 \ ] do_test autovacuum-2.5.2.1 { execsql { SELECT * FROM av1 WHERE a = 'av1 a'; } } {{av1 a} {av1 b} {av1 c}} do_test autovacuum-2.5.2.2 { execsql { SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' } } {{av2 a} {av2 b} {av2 c}} do_test autovacuum-2.5.2.4 { execsql { SELECT * FROM av4 WHERE a = 'av4 a' AND b = 'av4 b' AND c = 'av4 c'; } } {{av4 a} {av4 b} {av4 c}} # Drop table av1: # Step 1: Delete av1 (root page 4). Root-page of av4_i1 fills the gap. # Step 2: Delete sqlite_autoindex_av1_1 (root page 3). Move av4 to the gap. do_test autovacuum-2.5.4 { execsql { DROP TABLE av1; SELECT name, rootpage FROM sqlite_master; } } [list av2 6 sqlite_autoindex_av2_1 5 av2_i1 7 av2_i2 8 \ av4 3 av4_i1 4 av4_i2 9 av4_i3 10 av4_i4 11 \ ] do_test autovacuum-2.5.2.2 { execsql { SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' } } {{av2 a} {av2 b} {av2 c}} do_test autovacuum-2.5.2.4 { execsql { SELECT * FROM av4 WHERE a = 'av4 a' AND b = 'av4 b' AND c = 'av4 c'; } } {{av4 a} {av4 b} {av4 c}} # Drop table av4: # Step 1: Delete av4_i4. # Step 2: Delete av4_i3. # Step 3: Delete av4_i2. # Step 4: Delete av4_i1. av2_i2 replaces it. # Step 5: Delete av4. av2_i1 replaces it. do_test autovacuum-2.5.4 { execsql { DROP TABLE av4; SELECT name, rootpage FROM sqlite_master; } } [list av2 6 sqlite_autoindex_av2_1 5 av2_i1 3 av2_i2 4] do_test autovacuum-2.5.2.2 { execsql { SELECT * FROM av2 WHERE a = 'av2 a' AND b = 'av2 b' AND c = 'av2 c' } } {{av2 a} {av2 b} {av2 c}} #-------------------------------------------------------------------------- # Test cases autovacuum-3.* test the operation of the "PRAGMA auto_vacuum" # command. # do_test autovacuum-3.1 { execsql { |
︙ | ︙ |