OLD | NEW |
(Empty) | |
| 1 # 2010 June 15 |
| 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 |
| 13 set testdir [file dirname $argv0] |
| 14 source $testdir/tester.tcl |
| 15 source $testdir/lock_common.tcl |
| 16 source $testdir/malloc_common.tcl |
| 17 |
| 18 set otn 0 |
| 19 testvfs tv -default 1 |
| 20 foreach code [list { |
| 21 set s 512 |
| 22 } { |
| 23 set s 1024 |
| 24 set sql { PRAGMA journal_mode = memory } |
| 25 } { |
| 26 set s 1024 |
| 27 set sql { |
| 28 PRAGMA journal_mode = memory; |
| 29 PRAGMA locking_mode = exclusive; |
| 30 } |
| 31 } { |
| 32 set s 2048 |
| 33 tv devchar safe_append |
| 34 } { |
| 35 set s 4096 |
| 36 } { |
| 37 set s 4096 |
| 38 set sql { PRAGMA journal_mode = WAL } |
| 39 } { |
| 40 set s 4096 |
| 41 set sql { PRAGMA auto_vacuum = 1 } |
| 42 } { |
| 43 set s 8192 |
| 44 set sql { PRAGMA synchronous = off } |
| 45 }] { |
| 46 |
| 47 incr otn |
| 48 set sql "" |
| 49 tv devchar {} |
| 50 eval $code |
| 51 tv sectorsize $s |
| 52 |
| 53 do_test pager2-1.$otn.0 { |
| 54 faultsim_delete_and_reopen |
| 55 execsql $sql |
| 56 execsql { |
| 57 PRAGMA cache_size = 10; |
| 58 CREATE TABLE t1(i INTEGER PRIMARY KEY, j blob); |
| 59 } |
| 60 } {} |
| 61 |
| 62 set tn 0 |
| 63 set lowpoint 0 |
| 64 foreach x { |
| 65 100 x 0 100 |
| 66 x |
| 67 70 22 96 59 96 50 22 56 21 16 37 64 43 40 0 38 22 38 55 0 6 |
| 68 43 62 32 93 54 18 13 29 45 66 29 25 61 31 53 82 75 25 96 86 10 69 |
| 69 2 29 6 60 80 95 42 82 85 50 68 96 90 39 78 69 87 97 48 74 65 43 |
| 70 x |
| 71 86 34 26 50 41 85 58 44 89 22 6 51 45 46 58 32 97 6 1 12 32 2 |
| 72 69 39 48 71 33 31 5 58 90 43 24 54 12 9 18 57 4 38 91 42 27 45 |
| 73 50 38 56 29 10 0 26 37 83 1 78 15 47 30 75 62 46 29 68 5 30 4 |
| 74 27 96 33 95 79 75 56 10 29 70 32 75 52 88 5 36 50 57 46 63 88 65 |
| 75 x |
| 76 44 95 64 20 24 35 69 61 61 2 35 92 42 46 23 98 78 1 38 72 79 35 |
| 77 94 37 13 59 5 93 27 58 80 75 58 7 67 13 10 76 84 4 8 70 81 45 |
| 78 8 41 98 5 60 26 92 29 91 90 2 62 40 4 5 22 80 15 83 76 52 88 |
| 79 29 5 68 73 72 7 54 17 89 32 81 94 51 28 53 71 8 42 54 59 70 79 |
| 80 x |
| 81 } { |
| 82 incr tn |
| 83 set now [db one {SELECT count(i) FROM t1}] |
| 84 if {$x == "x"} { |
| 85 execsql { COMMIT ; BEGIN } |
| 86 set lowpoint $now |
| 87 do_test pager2.1.$otn.$tn { |
| 88 sqlite3 db2 test.db |
| 89 execsql { |
| 90 SELECT COALESCE(max(i), 0) FROM t1; |
| 91 PRAGMA integrity_check; |
| 92 } |
| 93 } [list $lowpoint ok] |
| 94 db2 close |
| 95 } else { |
| 96 if {$now > $x } { |
| 97 if { $x>=$lowpoint } { |
| 98 execsql "ROLLBACK TO sp_$x" |
| 99 } else { |
| 100 execsql "DELETE FROM t1 WHERE i>$x" |
| 101 set lowpoint $x |
| 102 } |
| 103 } elseif {$now < $x} { |
| 104 for {set k $now} {$k < $x} {incr k} { |
| 105 execsql "SAVEPOINT sp_$k" |
| 106 execsql { INSERT INTO t1(j) VALUES(randomblob(1500)) } |
| 107 } |
| 108 } |
| 109 do_execsql_test pager2.1.$otn.$tn { |
| 110 SELECT COALESCE(max(i), 0) FROM t1; |
| 111 PRAGMA integrity_check; |
| 112 } [list $x ok] |
| 113 } |
| 114 } |
| 115 } |
| 116 db close |
| 117 tv delete |
| 118 |
| 119 |
| 120 #------------------------------------------------------------------------- |
| 121 # |
| 122 # pager2-2.1: Test a ROLLBACK with journal_mode=off. |
| 123 # pager2-2.2: Test shrinking the database (auto-vacuum) with |
| 124 # journal_mode=off |
| 125 # |
| 126 do_test pager2-2.1 { |
| 127 faultsim_delete_and_reopen |
| 128 execsql { |
| 129 CREATE TABLE t1(a, b); |
| 130 PRAGMA journal_mode = off; |
| 131 BEGIN; |
| 132 INSERT INTO t1 VALUES(1, 2); |
| 133 ROLLBACK; |
| 134 SELECT * FROM t1; |
| 135 } |
| 136 } {off} |
| 137 do_test pager2-2.2 { |
| 138 faultsim_delete_and_reopen |
| 139 execsql { |
| 140 PRAGMA auto_vacuum = incremental; |
| 141 PRAGMA page_size = 1024; |
| 142 PRAGMA journal_mode = off; |
| 143 CREATE TABLE t1(a, b); |
| 144 INSERT INTO t1 VALUES(zeroblob(5000), zeroblob(5000)); |
| 145 DELETE FROM t1; |
| 146 PRAGMA incremental_vacuum; |
| 147 } |
| 148 file size test.db |
| 149 } {3072} |
| 150 |
| 151 finish_test |
OLD | NEW |