Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Do not incorrectly detect corruption when an auto-vacuum database is converted to a non-auto-vacuum database within a vacuum. Ticket #3332. (CVS 5603) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
cb869946d68f2abbd1322fababbe4aa7 |
User & Date: | danielk1977 2008-08-23 16:17:56.000 |
Context
2008-08-23
| ||
18:53 | Instead of marking a page as clean when sqlite3PagerDontWrite() is called, set a dedictated flag - PGHDR_DONT_WRITE. (CVS 5604) (check-in: a323bd29a6 user: danielk1977 tags: trunk) | |
16:17 | Do not incorrectly detect corruption when an auto-vacuum database is converted to a non-auto-vacuum database within a vacuum. Ticket #3332. (CVS 5603) (check-in: cb869946d6 user: danielk1977 tags: trunk) | |
2008-08-22
| ||
18:41 | quieting compiler warning about pointer/int conversion size mismatch (CVS 5602) (check-in: f8a70501c2 user: aswift tags: trunk) | |
Changes
Changes to src/btree.c.
1 2 3 4 5 6 7 8 9 10 11 | /* ** 2004 April 6 ** ** 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. ** ************************************************************************* | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* ** 2004 April 6 ** ** 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. ** ************************************************************************* ** $Id: btree.c,v 1.502 2008/08/23 16:17:56 danielk1977 Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** See the header comment on "btreeInt.h" for additional information. ** Including a description of file format and an overview of operation. */ #include "btreeInt.h" |
︙ | ︙ | |||
7141 7142 7143 7144 7145 7146 7147 | if( iFrom==PENDING_BYTE_PAGE(pBtFrom) || iFrom>nFromPage ){ continue; } rc = sqlite3PagerGet(pBtFrom->pPager, iFrom, &pFromPage); if( rc==SQLITE_OK ){ char *zFrom = sqlite3PagerGetData(pFromPage); | | | 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 | if( iFrom==PENDING_BYTE_PAGE(pBtFrom) || iFrom>nFromPage ){ continue; } rc = sqlite3PagerGet(pBtFrom->pPager, iFrom, &pFromPage); if( rc==SQLITE_OK ){ char *zFrom = sqlite3PagerGetData(pFromPage); rc = sqlite3OsWrite(pFile, zFrom, nFromPageSize, iOff); sqlite3PagerUnref(pFromPage); } } } /* Sync the database file */ if( rc==SQLITE_OK ){ |
︙ | ︙ |
Changes to src/vacuum.c.
︙ | ︙ | |||
10 11 12 13 14 15 16 | ** ************************************************************************* ** This file contains code used to implement the VACUUM command. ** ** Most of the code in this file may be omitted by defining the ** SQLITE_OMIT_VACUUM macro. ** | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ** ************************************************************************* ** This file contains code used to implement the VACUUM command. ** ** Most of the code in this file may be omitted by defining the ** SQLITE_OMIT_VACUUM macro. ** ** $Id: vacuum.c,v 1.82 2008/08/23 16:17:56 danielk1977 Exp $ */ #include "sqliteInt.h" #include "vdbeInt.h" #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) /* ** Execute zSql on database db. Return an error code. |
︙ | ︙ | |||
254 255 256 257 258 259 260 261 262 263 264 265 266 267 | if( rc!=SQLITE_OK ) goto end_of_vacuum; } rc = sqlite3BtreeCopyFile(pMain, pTemp); if( rc!=SQLITE_OK ) goto end_of_vacuum; rc = sqlite3BtreeCommit(pTemp); if( rc!=SQLITE_OK ) goto end_of_vacuum; rc = sqlite3BtreeCommit(pMain); } if( rc==SQLITE_OK ){ rc = sqlite3BtreeSetPageSize(pMain, sqlite3BtreeGetPageSize(pTemp), nRes); } | > > > | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | if( rc!=SQLITE_OK ) goto end_of_vacuum; } rc = sqlite3BtreeCopyFile(pMain, pTemp); if( rc!=SQLITE_OK ) goto end_of_vacuum; rc = sqlite3BtreeCommit(pTemp); if( rc!=SQLITE_OK ) goto end_of_vacuum; #ifndef SQLITE_OMIT_AUTOVACUUM sqlite3BtreeSetAutoVacuum(pMain, sqlite3BtreeGetAutoVacuum(pTemp)); #endif rc = sqlite3BtreeCommit(pMain); } if( rc==SQLITE_OK ){ rc = sqlite3BtreeSetPageSize(pMain, sqlite3BtreeGetPageSize(pTemp), nRes); } |
︙ | ︙ |
Changes to test/vacuum2.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2005 February 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 VACUUM statement. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2005 February 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 VACUUM statement. # # $Id: vacuum2.test,v 1.8 2008/08/23 16:17:56 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # If the VACUUM statement is disabled in the current build, skip all # the tests in this file. # |
︙ | ︙ | |||
120 121 122 123 124 125 126 127 128 | execsql {PRAGMA integrity_check} db2 } {ok} do_test vacuum2-3.17 { execsql {PRAGMA integrity_check} db } {ok} db2 close finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | execsql {PRAGMA integrity_check} db2 } {ok} do_test vacuum2-3.17 { execsql {PRAGMA integrity_check} db } {ok} db2 close ifcapable autovacuum { do_test vacuum2-4.1 { db close file delete -force test.db sqlite3 db test.db execsql { pragma auto_vacuum=1; create table t(a, b); insert into t values(1, 2); insert into t values(1, 2); pragma auto_vacuum=0; vacuum; pragma auto_vacuum; } } {0} do_test vacuum2-4.2 { execsql { pragma auto_vacuum=1; vacuum; pragma auto_vacuum; } } {1} do_test vacuum2-4.3 { execsql { pragma integrity_check } } {ok} do_test vacuum2-4.4 { execsql { pragma auto_vacuum; } } {1} } finish_test |
Changes to test/vacuum3.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is changing the database page size using a # VACUUM statement. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is changing the database page size using a # VACUUM statement. # # $Id: vacuum3.test,v 1.8 2008/08/23 16:17:56 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # If the VACUUM statement is disabled in the current build, skip all # the tests in this file. # |
︙ | ︙ | |||
233 234 235 236 237 238 239 | VACUUM; } execsql { SELECT * FROM abc } db2 } {1 2 3 4 5 6} db2 close | < | > > > > > | | < > | | | > | < | | | | | | < | > | > > | | | | > | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | VACUUM; } execsql { SELECT * FROM abc } db2 } {1 2 3 4 5 6} db2 close set create_database_sql { BEGIN; CREATE TABLE t1(a, b, c); INSERT INTO t1 VALUES(1, randstr(50,50), randstr(50,50)); INSERT INTO t1 SELECT a+2, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+4, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+8, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+16, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+32, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+64, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 SELECT a+128, b||'-'||rowid, c||'-'||rowid FROM t1; INSERT INTO t1 VALUES(1, randstr(600,600), randstr(600,600)); CREATE TABLE t2 AS SELECT * FROM t1; CREATE TABLE t3 AS SELECT * FROM t1; COMMIT; DROP TABLE t2; } do_ioerr_test vacuum3-ioerr-1 -cksum true -sqlprep " PRAGMA page_size = 1024; $create_database_sql " -sqlbody { PRAGMA page_size = 4096; VACUUM; } do_ioerr_test vacuum3-ioerr-2 -cksum true -sqlprep " PRAGMA page_size = 2048; $create_database_sql " -sqlbody { PRAGMA page_size = 512; VACUUM; } ifcapable autovacuum { do_ioerr_test vacuum3-ioerr-3 -cksum true -sqlprep " PRAGMA auto_vacuum = 0; $create_database_sql " -sqlbody { PRAGMA auto_vacuum = 1; VACUUM; } do_ioerr_test vacuum3-ioerr-4 -cksum true -sqlprep " PRAGMA auto_vacuum = 1; $create_database_sql " -sqlbody { PRAGMA auto_vacuum = 0; VACUUM; } } source $testdir/malloc_common.tcl if {$MEMDEBUG} { do_malloc_test vacuum3-malloc-1 -sqlprep { PRAGMA page_size = 2048; BEGIN; CREATE TABLE t1(a, b, c); |
︙ | ︙ |