1 /* 2 ** 2001 September 15 3 ** 4 ** The author disclaims copyright to this source code. In place of 5 ** a legal notice, here is a blessing: 6 ** 7 ** May you do good and not evil. 8 ** May you find forgiveness for yourself and forgive others. 9 ** May you share freely, never taking more than you give. 10 ** 11 ************************************************************************* 12 ** This is the implementation of the page cache subsystem or "pager". 13 ** 14 ** The pager is used to access a database disk file. It implements 15 ** atomic commit and rollback through the use of a journal file that 16 ** is separate from the database file. The pager also implements file 17 ** locking to prevent two processes from writing the same database 18 ** file simultaneously, or one process from reading the database while 19 ** another is writing. 20 ** 21 ** @(#) $Id: pager.c,v 1.351 2007/07/20 00:33:36 drh Exp $ 22 */ 23 #ifndef SQLITE_OMIT_DISKIO 24 #include "sqliteInt.h" 25 #include "os.h" 26 #include "pager.h" 27 #include <assert.h> 28 #include <string.h> 29 30 /* 31 ** Macros for troubleshooting. Normally turned off 32 */ 33 #if 0 34 #define sqlite3DebugPrintf printf 35 #define PAGERTRACE1(X) sqlite3DebugPrintf(X) 36 #define PAGERTRACE2(X,Y) sqlite3DebugPrintf(X,Y) 37 #define PAGERTRACE3(X,Y,Z) sqlite3DebugPrintf(X,Y,Z) 38 #define PAGERTRACE4(X,Y,Z,W) sqlite3DebugPrintf(X,Y,Z,W) 39 #define PAGERTRACE5(X,Y,Z,W,V) sqlite3DebugPrintf(X,Y,Z,W,V) 40 #else 41 #define PAGERTRACE1(X) 42 #define PAGERTRACE2(X,Y) 43 #define PAGERTRACE3(X,Y,Z) 44 #define PAGERTRACE4(X,Y,Z,W) 45 #define PAGERTRACE5(X,Y,Z,W,V) 46 #endif 47 48 /* 49 ** The following two macros are used within the PAGERTRACEX() macros above 50 ** to print out file-descriptors. 51 ** 52 ** PAGERID() takes a pointer to a Pager struct as it's argument. The 53 ** associated file-descriptor is returned. FILEHANDLEID() takes an OsFile 54 ** struct as it's argument. 55 */ 56 #define PAGERID(p) ((int)(p->fd)) 57 #define FILEHANDLEID(fd) ((int)fd) 58 59 /* 60 ** The page cache as a whole is always in one of the following 61 ** states: 62 ** 63 ** PAGER_UNLOCK The page cache is not currently reading or 64 ** writing the database file. There is no 65 ** data held in memory. This is the initial 66 ** state. 67 ** 68 ** PAGER_SHARED The page cache is reading the database. 69 ** Writing is not permitted. There can be 70 ** multiple readers accessing the same database 71 ** file at the same time. 72 ** 73 ** PAGER_RESERVED This process has reserved the database for writing 74 ** but has not yet made any changes. Only one process 75 ** at a time can reserve the database. The original 76 ** database file has not been modified so other 77 ** processes may still be reading the on-disk 78 ** database file. 79 ** 80 ** PAGER_EXCLUSIVE The page cache is writing the database. 81 ** Access is exclusive. No other processes or 82 ** threads can be reading or writing while one 83 ** process is writing. 84 ** 85 ** PAGER_SYNCED The pager moves to this state from PAGER_EXCLUSIVE 86 ** after all dirty pages have been written to the 87 ** database file and the file has been synced to 88 ** disk. All that remains to do is to remove or 89 ** truncate the journal file and the transaction 90 ** will be committed. 91 ** 92 ** The page cache comes up in PAGER_UNLOCK. The first time a 93 ** sqlite3PagerGet() occurs, the state transitions to PAGER_SHARED. 94 ** After all pages have been released using sqlite_page_unref(), 95 ** the state transitions back to PAGER_UNLOCK. The first time 96 ** that sqlite3PagerWrite() is called, the state transitions to 97 ** PAGER_RESERVED. (Note that sqlite3PagerWrite() can only be 98 ** called on an outstanding page which means that the pager must 99 ** be in PAGER_SHARED before it transitions to PAGER_RESERVED.) 100 ** PAGER_RESERVED means that there is an open rollback journal. 101 ** The transition to PAGER_EXCLUSIVE occurs before any changes 102 ** are made to the database file, though writes to the rollback 103 ** journal occurs with just PAGER_RESERVED. After an sqlite3PagerRollback() 104 ** or sqlite3PagerCommitPhaseTwo(), the state can go back to PAGER_SHARED, 105 ** or it can stay at PAGER_EXCLUSIVE if we are in exclusive access mode. 106 */ 107 #define PAGER_UNLOCK 0 108 #define PAGER_SHARED 1 /* same as SHARED_LOCK */ 109 #define PAGER_RESERVED 2 /* same as RESERVED_LOCK */ 110 #define PAGER_EXCLUSIVE 4 /* same as EXCLUSIVE_LOCK */ 111 #define PAGER_SYNCED 5 112 113 /* 114 ** If the SQLITE_BUSY_RESERVED_LOCK macro is set to true at compile-time, 115 ** then failed attempts to get a reserved lock will invoke the busy callback. 116 ** This is off by default. To see why, consider the following scenario: 117 ** 118 ** Suppose thread A already has a shared lock and wants a reserved lock. 119 ** Thread B already has a reserved lock and wants an exclusive lock. If 120 ** both threads are using their busy callbacks, it might be a long time 121 ** be for one of the threads give up and allows the other to proceed. 122 ** But if the thread trying to get the reserved lock gives up quickly 123 ** (if it never invokes its busy callback) then the contention will be 124 ** resolved quickly. 125 */ 126 #ifndef SQLITE_BUSY_RESERVED_LOCK 127 # define SQLITE_BUSY_RESERVED_LOCK 0 128 #endif 129 130 /* 131 ** This macro rounds values up so that if the value is an address it 132 ** is guaranteed to be an address that is aligned to an 8-byte boundary. 133 */ 134 #define FORCE_ALIGNMENT(X) (((X)+7)&~7) 135 136 /* 137 ** Each in-memory image of a page begins with the following header. 138 ** This header is only visible to this pager module. The client 139 ** code that calls pager sees only the data that follows the header. 140 ** 141 ** Client code should call sqlite3PagerWrite() on a page prior to making 142 ** any modifications to that page. The first time sqlite3PagerWrite() 143 ** is called, the original page contents are written into the rollback 144 ** journal and PgHdr.inJournal and PgHdr.needSync are set. Later, once 145 ** the journal page has made it onto the disk surface, PgHdr.needSync 146 ** is cleared. The modified page cannot be written back into the original 147 ** database file until the journal pages has been synced to disk and the 148 ** PgHdr.needSync has been cleared. 149 ** 150 ** The PgHdr.dirty flag is set when sqlite3PagerWrite() is called and 151 ** is cleared again when the page content is written back to the original 152 ** database file. 153 ** 154 ** Details of important structure elements: 155 ** 156 ** needSync 157 ** 158 ** If this is true, this means that it is not safe to write the page 159 ** content to the database because the original content needed 160 ** for rollback has not by synced to the main rollback journal. 161 ** The original content may have been written to the rollback journal 162 ** but it has not yet been synced. So we cannot write to the database 163 ** file because power failure might cause the page in the journal file 164 ** to never reach the disk. It is as if the write to the journal file 165 ** does not occur until the journal file is synced. 166 ** 167 ** This flag is false if the page content exactly matches what 168 ** currently exists in the database file. The needSync flag is also 169 ** false if the original content has been written to the main rollback 170 ** journal and synced. If the page represents a new page that has 171 ** been added onto the end of the database during the current 172 ** transaction, the needSync flag is true until the original database 173 ** size in the journal header has been synced to disk. 174 ** 175 ** inJournal 176 ** 177 ** This is true if the original page has been written into the main 178 ** rollback journal. This is always false for new pages added to 179 ** the end of the database file during the current transaction. 180 ** And this flag says nothing about whether or not the journal 181 ** has been synced to disk. For pages that are in the original 182 ** database file, the following expression should always be true: 183 ** 184 ** inJournal = (pPager->aInJournal[(pgno-1)/8] & (1<<((pgno-1)%8))!=0 185 ** 186 ** The pPager->aInJournal[] array is only valid for the original 187 ** pages of the database, not new pages that are added to the end 188 ** of the database, so obviously the above expression cannot be 189 ** valid for new pages. For new pages inJournal is always 0. 190 ** 191 ** dirty 192 ** 193 ** When true, this means that the content of the page has been 194 ** modified and needs to be written back to the database file. 195 ** If false, it means that either the content of the page is 196 ** unchanged or else the content is unimportant and we do not 197 ** care whether or not it is preserved. 198 ** 199 ** alwaysRollback 200 ** 201 ** This means that the sqlite3PagerDontRollback() API should be 202 ** ignored for this page. The DontRollback() API attempts to say 203 ** that the content of the page on disk is unimportant (it is an 204 ** unused page on the freelist) so that it is unnecessary to 205 ** rollback changes to this page because the content of the page 206 ** can change without changing the meaning of the database. This 207 ** flag overrides any DontRollback() attempt. This flag is set 208 ** when a page that originally contained valid data is added to 209 ** the freelist. Later in the same transaction, this page might 210 ** be pulled from the freelist and reused for something different 211 ** and at that point the DontRollback() API will be called because 212 ** pages taken from the freelist do not need to be protected by 213 ** the rollback journal. But this flag says that the page was 214 ** not originally part of the freelist so that it still needs to 215 ** be rolled back in spite of any subsequent DontRollback() calls. 216 ** 217 ** needRead 218 ** 219 ** This flag means (when true) that the content of the page has 220 ** not yet been loaded from disk. The in-memory content is just 221 ** garbage. (Actually, we zero the content, but you should not 222 ** make any assumptions about the content nevertheless.) If the 223 ** content is needed in the future, it should be read from the 224 ** original database file. 225 */ 226 typedef struct PgHdr PgHdr; 227 struct PgHdr { 228 Pager *pPager; /* The pager to which this page belongs */ 229 Pgno pgno; /* The page number for this page */ 230 PgHdr *pNextHash, *pPrevHash; /* Hash collision chain for PgHdr.pgno */ 231 PgHdr *pNextFree, *pPrevFree; /* Freelist of pages where nRef==0 */ 232 PgHdr *pNextAll; /* A list of all pages */ 233 u8 inJournal; /* TRUE if has been written to journal */ 234 u8 dirty; /* TRUE if we need to write back changes */ 235 u8 needSync; /* Sync journal before writing this page */ 236 u8 alwaysRollback; /* Disable DontRollback() for this page */ 237 u8 needRead; /* Read content if PagerWrite() is called */ 238 short int nRef; /* Number of users of this page */ 239 PgHdr *pDirty, *pPrevDirty; /* Dirty pages */ 240 u32 notUsed; /* Buffer space */ 241 #ifdef SQLITE_CHECK_PAGES 242 u32 pageHash; 243 #endif 244 /* pPager->pageSize bytes of page data follow this header */ 245 /* Pager.nExtra bytes of local data follow the page data */ 246 }; 247 248 /* 249 ** For an in-memory only database, some extra information is recorded about 250 ** each page so that changes can be rolled back. (Journal files are not 251 ** used for in-memory databases.) The following information is added to 252 ** the end of every EXTRA block for in-memory databases. 253 ** 254 ** This information could have been added directly to the PgHdr structure. 255 ** But then it would take up an extra 8 bytes of storage on every PgHdr 256 ** even for disk-based databases. Splitting it out saves 8 bytes. This 257 ** is only a savings of 0.8% but those percentages add up. 258 */ 259 typedef struct PgHistory PgHistory; 260 struct PgHistory { 261 u8 *pOrig; /* Original page text. Restore to this on a full rollback */ 262 u8 *pStmt; /* Text as it was at the beginning of the current statement */ 263 PgHdr *pNextStmt, *pPrevStmt; /* List of pages in the statement journal */ 264 u8 inStmt; /* TRUE if in the statement subjournal */ 265 }; 266 267 /* 268 ** A macro used for invoking the codec if there is one 269 */ 270 #ifdef SQLITE_HAS_CODEC 271 # define CODEC1(P,D,N,X) if( P->xCodec!=0 ){ P->xCodec(P->pCodecArg,D,N,X); } 272 # define CODEC2(P,D,N,X) ((char*)(P->xCodec!=0?P->xCodec(P->pCodecArg,D,N,X):D)) 273 #else 274 # define CODEC1(P,D,N,X) /* NO-OP */ 275 # define CODEC2(P,D,N,X) ((char*)D) 276 #endif 277 278 /* 279 ** Convert a pointer to a PgHdr into a pointer to its data 280 ** and back again. 281 */ 282 #define PGHDR_TO_DATA(P) ((void*)(&(P)[1])) 283 #define DATA_TO_PGHDR(D) (&((PgHdr*)(D))[-1]) 284 #define PGHDR_TO_EXTRA(G,P) ((void*)&((char*)(&(G)[1]))[(P)->pageSize]) 285 #define PGHDR_TO_HIST(P,PGR) \ 286 ((PgHistory*)&((char*)(&(P)[1]))[(PGR)->pageSize+(PGR)->nExtra]) 287 288 /* 289 ** A open page cache is an instance of the following structure. 290 ** 291 ** Pager.errCode may be set to SQLITE_IOERR, SQLITE_CORRUPT, or 292 ** or SQLITE_FULL. Once one of the first three errors occurs, it persists 293 ** and is returned as the result of every major pager API call. The 294 ** SQLITE_FULL return code is slightly different. It persists only until the 295 ** next successful rollback is performed on the pager cache. Also, 296 ** SQLITE_FULL does not affect the sqlite3PagerGet() and sqlite3PagerLookup() 297 ** APIs, they may still be used successfully. 298 */ 299 struct Pager { 300 u8 journalOpen; /* True if journal file descriptors is valid */ 301 u8 journalStarted; /* True if header of journal is synced */ 302 u8 useJournal; /* Use a rollback journal on this file */ 303 u8 noReadlock; /* Do not bother to obtain readlocks */ 304 u8 stmtOpen; /* True if the statement subjournal is open */ 305 u8 stmtInUse; /* True we are in a statement subtransaction */ 306 u8 stmtAutoopen; /* Open stmt journal when main journal is opened*/ 307 u8 noSync; /* Do not sync the journal if true */ 308 u8 fullSync; /* Do extra syncs of the journal for robustness */ 309 u8 full_fsync; /* Use F_FULLFSYNC when available */ 310 u8 state; /* PAGER_UNLOCK, _SHARED, _RESERVED, etc. */ 311 u8 tempFile; /* zFilename is a temporary file */ 312 u8 readOnly; /* True for a read-only database */ 313 u8 needSync; /* True if an fsync() is needed on the journal */ 314 u8 dirtyCache; /* True if cached pages have changed */ 315 u8 alwaysRollback; /* Disable DontRollback() for all pages */ 316 u8 memDb; /* True to inhibit all file I/O */ 317 u8 setMaster; /* True if a m-j name has been written to jrnl */ 318 u8 doNotSync; /* Boolean. While true, do not spill the cache */ 319 u8 exclusiveMode; /* Boolean. True if locking_mode==EXCLUSIVE */ 320 u8 changeCountDone; /* Set after incrementing the change-counter */ 321 int errCode; /* One of several kinds of errors */ 322 int dbSize; /* Number of pages in the file */ 323 int origDbSize; /* dbSize before the current change */ 324 int stmtSize; /* Size of database (in pages) at stmt_begin() */ 325 int nRec; /* Number of pages written to the journal */ 326 u32 cksumInit; /* Quasi-random value added to every checksum */ 327 int stmtNRec; /* Number of records in stmt subjournal */ 328 int nExtra; /* Add this many bytes to each in-memory page */ 329 int pageSize; /* Number of bytes in a page */ 330 int nPage; /* Total number of in-memory pages */ 331 int nRef; /* Number of in-memory pages with PgHdr.nRef>0 */ 332 int mxPage; /* Maximum number of pages to hold in cache */ 333 Pgno mxPgno; /* Maximum allowed size of the database */ 334 u8 *aInJournal; /* One bit for each page in the database file */ 335 u8 *aInStmt; /* One bit for each page in the database */ 336 char *zFilename; /* Name of the database file */ 337 char *zJournal; /* Name of the journal file */ 338 char *zDirectory; /* Directory hold database and journal files */ 339 OsFile *fd, *jfd; /* File descriptors for database and journal */ 340 OsFile *stfd; /* File descriptor for the statement subjournal*/ 341 BusyHandler *pBusyHandler; /* Pointer to sqlite.busyHandler */ 342 PgHdr *pFirst, *pLast; /* List of free pages */ 343 PgHdr *pFirstSynced; /* First free page with PgHdr.needSync==0 */ 344 PgHdr *pAll; /* List of all pages */ 345 PgHdr *pStmt; /* List of pages in the statement subjournal */ 346 PgHdr *pDirty; /* List of all dirty pages */ 347 i64 journalOff; /* Current byte offset in the journal file */ 348 i64 journalHdr; /* Byte offset to previous journal header */ 349 i64 stmtHdrOff; /* First journal header written this statement */ 350 i64 stmtCksum; /* cksumInit when statement was started */ 351 i64 stmtJSize; /* Size of journal at stmt_begin() */ 352 int sectorSize; /* Assumed sector size during rollback */ 353 #ifdef SQLITE_TEST 354 int nHit, nMiss; /* Cache hits and missing */ 355 int nRead, nWrite; /* Database pages read/written */ 356 #endif 357 void (*xDestructor)(DbPage*,int); /* Call this routine when freeing pages */ 358 void (*xReiniter)(DbPage*,int); /* Call this routine when reloading pages */ 359 #ifdef SQLITE_HAS_CODEC 360 void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */ 361 void *pCodecArg; /* First argument to xCodec() */ 362 #endif 363 int nHash; /* Size of the pager hash table */ 364 PgHdr **aHash; /* Hash table to map page number to PgHdr */ 365 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT 366 Pager *pNext; /* Linked list of pagers in this thread */ 367 #endif 368 char *pTmpSpace; /* Pager.pageSize bytes of space for tmp use */ 369 char dbFileVers[16]; /* Changes whenever database file changes */ 370 }; 371 372 /* 373 ** The following global variables hold counters used for 374 ** testing purposes only. These variables do not exist in 375 ** a non-testing build. These variables are not thread-safe. 376 */ 377 #ifdef SQLITE_TEST 378 int sqlite3_pager_readdb_count = 0; /* Number of full pages read from DB */ 379 int sqlite3_pager_writedb_count = 0; /* Number of full pages written to DB */ 380 int sqlite3_pager_writej_count = 0; /* Number of pages written to journal */ 381 int sqlite3_pager_pgfree_count = 0; /* Number of cache pages freed */ 382 # define PAGER_INCR(v) v++ 383 #else 384 # define PAGER_INCR(v) 385 #endif 386 387 388 389 /* 390 ** Journal files begin with the following magic string. The data 391 ** was obtained from /dev/random. It is used only as a sanity check. 392 ** 393 ** Since version 2.8.0, the journal format contains additional sanity 394 ** checking information. If the power fails while the journal is begin 395 ** written, semi-random garbage data might appear in the journal 396 ** file after power is restored. If an attempt is then made 397 ** to roll the journal back, the database could be corrupted. The additional 398 ** sanity checking data is an attempt to discover the garbage in the 399 ** journal and ignore it. 400 ** 401 ** The sanity checking information for the new journal format consists 402 ** of a 32-bit checksum on each page of data. The checksum covers both 403 ** the page number and the pPager->pageSize bytes of data for the page. 404 ** This cksum is initialized to a 32-bit random value that appears in the 405 ** journal file right after the header. The random initializer is important, 406 ** because garbage data that appears at the end of a journal is likely 407 ** data that was once in other files that have now been deleted. If the 408 ** garbage data came from an obsolete journal file, the checksums might 409 ** be correct. But by initializing the checksum to random value which 410 ** is different for every journal, we minimize that risk. 411 */ 412 static const unsigned char aJournalMagic[] = { 413 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7, 414 }; 415 416 /* 417 ** The size of the header and of each page in the journal is determined 418 ** by the following macros. 419 */ 420 #define JOURNAL_PG_SZ(pPager) ((pPager->pageSize) + 8) 421 422 /* 423 ** The journal header size for this pager. In the future, this could be 424 ** set to some value read from the disk controller. The important 425 ** characteristic is that it is the same size as a disk sector. 426 */ 427 #define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize) 428 429 /* 430 ** The macro MEMDB is true if we are dealing with an in-memory database. 431 ** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set, 432 ** the value of MEMDB will be a constant and the compiler will optimize 433 ** out code that would never execute. 434 */ 435 #ifdef SQLITE_OMIT_MEMORYDB 436 # define MEMDB 0 437 #else 438 # define MEMDB pPager->memDb 439 #endif 440 441 /* 442 ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is 443 ** reserved for working around a windows/posix incompatibility). It is 444 ** used in the journal to signify that the remainder of the journal file 445 ** is devoted to storing a master journal name - there are no more pages to 446 ** roll back. See comments for function writeMasterJournal() for details. 447 */ 448 /* #define PAGER_MJ_PGNO(x) (PENDING_BYTE/((x)->pageSize)) */ 449 #define PAGER_MJ_PGNO(x) ((PENDING_BYTE/((x)->pageSize))+1) 450 451 /* 452 ** The maximum legal page number is (2^31 - 1). 453 */ 454 #define PAGER_MAX_PGNO 2147483647 455 456 /* 457 ** Enable reference count tracking (for debugging) here: 458 */ 459 #ifdef SQLITE_DEBUG 460 int pager3_refinfo_enable = 0; 461 static void pager_refinfo(PgHdr *p){ 462 static int cnt = 0; 463 if( !pager3_refinfo_enable ) return; 464 sqlite3DebugPrintf( 465 "REFCNT: %4d addr=%p nRef=%-3d total=%d\n", 466 p->pgno, PGHDR_TO_DATA(p), p->nRef, p->pPager->nRef 467 ); 468 cnt++; /* Something to set a breakpoint on */ 469 } 470 # define REFINFO(X) pager_refinfo(X) 471 #else 472 # define REFINFO(X) 473 #endif 474 475 /* 476 ** Return true if page *pPg has already been written to the statement 477 ** journal (or statement snapshot has been created, if *pPg is part 478 ** of an in-memory database). 479 */ 480 static int pageInStatement(PgHdr *pPg){ 481 Pager *pPager = pPg->pPager; 482 if( MEMDB ){ 483 return PGHDR_TO_HIST(pPg, pPager)->inStmt; 484 }else{ 485 Pgno pgno = pPg->pgno; 486 u8 *a = pPager->aInStmt; 487 return (a && (int)pgno<=pPager->stmtSize && (a[pgno/8] & (1<<(pgno&7)))); 488 } 489 } 490 491 /* 492 ** Change the size of the pager hash table to N. N must be a power 493 ** of two. 494 */ 495 static void pager_resize_hash_table(Pager *pPager, int N){ 496 PgHdr **aHash, *pPg; 497 assert( N>0 && (N&(N-1))==0 ); 498 aHash = sqliteMalloc( sizeof(aHash[0])*N ); 499 if( aHash==0 ){ 500 /* Failure to rehash is not an error. It is only a performance hit. */ 501 return; 502 } 503 sqliteFree(pPager->aHash); 504 pPager->nHash = N; 505 pPager->aHash = aHash; 506 for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){ 507 int h; 508 if( pPg->pgno==0 ){ 509 assert( pPg->pNextHash==0 && pPg->pPrevHash==0 ); 510 continue; 511 } 512 h = pPg->pgno & (N-1); 513 pPg->pNextHash = aHash[h]; 514 if( aHash[h] ){ 515 aHash[h]->pPrevHash = pPg; 516 } 517 aHash[h] = pPg; 518 pPg->pPrevHash = 0; 519 } 520 } 521 522 /* 523 ** Read a 32-bit integer from the given file descriptor. Store the integer 524 ** that is read in *pRes. Return SQLITE_OK if everything worked, or an 525 ** error code is something goes wrong. 526 ** 527 ** All values are stored on disk as big-endian. 528 */ 529 static int read32bits(OsFile *fd, u32 *pRes){ 530 unsigned char ac[4]; 531 int rc = sqlite3OsRead(fd, ac, sizeof(ac)); 532 if( rc==SQLITE_OK ){ 533 *pRes = sqlite3Get4byte(ac); 534 } 535 return rc; 536 } 537 538 /* 539 ** Write a 32-bit integer into a string buffer in big-endian byte order. 540 */ 541 #define put32bits(A,B) sqlite3Put4byte((u8*)A,B) 542 543 /* 544 ** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK 545 ** on success or an error code is something goes wrong. 546 */ 547 static int write32bits(OsFile *fd, u32 val){ 548 char ac[4]; 549 put32bits(ac, val); 550 return sqlite3OsWrite(fd, ac, 4); 551 } 552 553 /* 554 ** This function should be called when an error occurs within the pager 555 ** code. The first argument is a pointer to the pager structure, the 556 ** second the error-code about to be returned by a pager API function. 557 ** The value returned is a copy of the second argument to this function. 558 ** 559 ** If the second argument is SQLITE_IOERR, SQLITE_CORRUPT, or SQLITE_FULL 560 ** the error becomes persistent. All subsequent API calls on this Pager 561 ** will immediately return the same error code. 562 */ 563 static int pager_error(Pager *pPager, int rc){ 564 int rc2 = rc & 0xff; 565 assert( pPager->errCode==SQLITE_FULL || pPager->errCode==SQLITE_OK ); 566 if( 567 rc2==SQLITE_FULL || 568 rc2==SQLITE_IOERR || 569 rc2==SQLITE_CORRUPT 570 ){ 571 pPager->errCode = rc; 572 } 573 return rc; 574 } 575 576 /* 577 ** If SQLITE_CHECK_PAGES is defined then we do some sanity checking 578 ** on the cache using a hash function. This is used for testing 579 ** and debugging only. 580 */ 581 #ifdef SQLITE_CHECK_PAGES 582 /* 583 ** Return a 32-bit hash of the page data for pPage. 584 */ 585 static u32 pager_datahash(int nByte, unsigned char *pData){ 586 u32 hash = 0; 587 int i; 588 for(i=0; i<nByte; i++){ 589 hash = (hash*1039) + pData[i]; 590 } 591 return hash; 592 } 593 static u32 pager_pagehash(PgHdr *pPage){ 594 return pager_datahash(pPage->pPager->pageSize, 595 (unsigned char *)PGHDR_TO_DATA(pPage)); 596 } 597 598 /* 599 ** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES 600 ** is defined, and NDEBUG is not defined, an assert() statement checks 601 ** that the page is either dirty or still matches the calculated page-hash. 602 */ 603 #define CHECK_PAGE(x) checkPage(x) 604 static void checkPage(PgHdr *pPg){ 605 Pager *pPager = pPg->pPager; 606 assert( !pPg->pageHash || pPager->errCode || MEMDB || pPg->dirty || 607 pPg->pageHash==pager_pagehash(pPg) ); 608 } 609 610 #else 611 #define pager_datahash(X,Y) 0 612 #define pager_pagehash(X) 0 613 #define CHECK_PAGE(x) 614 #endif 615 616 /* 617 ** When this is called the journal file for pager pPager must be open. 618 ** The master journal file name is read from the end of the file and 619 ** written into memory obtained from sqliteMalloc(). *pzMaster is 620 ** set to point at the memory and SQLITE_OK returned. The caller must 621 ** sqliteFree() *pzMaster. 622 ** 623 ** If no master journal file name is present *pzMaster is set to 0 and 624 ** SQLITE_OK returned. 625 */ 626 static int readMasterJournal(OsFile *pJrnl, char **pzMaster){ 627 int rc; 628 u32 len; 629 i64 szJ; 630 u32 cksum; 631 int i; 632 unsigned char aMagic[8]; /* A buffer to hold the magic header */ 633 634 *pzMaster = 0; 635 636 rc = sqlite3OsFileSize(pJrnl, &szJ); 637 if( rc!=SQLITE_OK || szJ<16 ) return rc; 638 639 rc = sqlite3OsSeek(pJrnl, szJ-16); 640 if( rc!=SQLITE_OK ) return rc; 641 642 rc = read32bits(pJrnl, &len); 643 if( rc!=SQLITE_OK ) return rc; 644 645 rc = read32bits(pJrnl, &cksum); 646 if( rc!=SQLITE_OK ) return rc; 647 648 rc = sqlite3OsRead(pJrnl, aMagic, 8); 649 if( rc!=SQLITE_OK || memcmp(aMagic, aJournalMagic, 8) ) return rc; 650 651 rc = sqlite3OsSeek(pJrnl, szJ-16-len); 652 if( rc!=SQLITE_OK ) return rc; 653 654 *pzMaster = (char *)sqliteMalloc(len+1); 655 if( !*pzMaster ){ 656 return SQLITE_NOMEM; 657 } 658 rc = sqlite3OsRead(pJrnl, *pzMaster, len); 659 if( rc!=SQLITE_OK ){ 660 sqliteFree(*pzMaster); 661 *pzMaster = 0; 662 return rc; 663 } 664 665 /* See if the checksum matches the master journal name */ 666 for(i=0; i<len; i++){ 667 cksum -= (*pzMaster)[i]; 668 } 669 if( cksum ){ 670 /* If the checksum doesn't add up, then one or more of the disk sectors 671 ** containing the master journal filename is corrupted. This means 672 ** definitely roll back, so just return SQLITE_OK and report a (nul) 673 ** master-journal filename. 674 */ 675 sqliteFree(*pzMaster); 676 *pzMaster = 0; 677 }else{ 678 (*pzMaster)[len] = '\0'; 679 } 680 681 return SQLITE_OK; 682 } 683 684 /* 685 ** Seek the journal file descriptor to the next sector boundary where a 686 ** journal header may be read or written. Pager.journalOff is updated with 687 ** the new seek offset. 688 ** 689 ** i.e for a sector size of 512: 690 ** 691 ** Input Offset Output Offset 692 ** --------------------------------------- 693 ** 0 0 694 ** 512 512 695 ** 100 512 696 ** 2000 2048 697 ** 698 */ 699 static int seekJournalHdr(Pager *pPager){ 700 i64 offset = 0; 701 i64 c = pPager->journalOff; 702 if( c ){ 703 offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager); 704 } 705 assert( offset%JOURNAL_HDR_SZ(pPager)==0 ); 706 assert( offset>=c ); 707 assert( (offset-c)<JOURNAL_HDR_SZ(pPager) ); 708 pPager->journalOff = offset; 709 return sqlite3OsSeek(pPager->jfd, pPager->journalOff); 710 } 711 712 /* 713 ** The journal file must be open when this routine is called. A journal 714 ** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the 715 ** current location. 716 ** 717 ** The format for the journal header is as follows: 718 ** - 8 bytes: Magic identifying journal format. 719 ** - 4 bytes: Number of records in journal, or -1 no-sync mode is on. 720 ** - 4 bytes: Random number used for page hash. 721 ** - 4 bytes: Initial database page count. 722 ** - 4 bytes: Sector size used by the process that wrote this journal. 723 ** 724 ** Followed by (JOURNAL_HDR_SZ - 24) bytes of unused space. 725 */ 726 static int writeJournalHdr(Pager *pPager){ 727 char zHeader[sizeof(aJournalMagic)+16]; 728 int rc; 729 730 if( pPager->stmtHdrOff==0 ){ 731 pPager->stmtHdrOff = pPager->journalOff; 732 } 733 734 rc = seekJournalHdr(pPager); 735 if( rc ) return rc; 736 737 pPager->journalHdr = pPager->journalOff; 738 pPager->journalOff += JOURNAL_HDR_SZ(pPager); 739 740 /* FIX ME: 741 ** 742 ** Possibly for a pager not in no-sync mode, the journal magic should not 743 ** be written until nRec is filled in as part of next syncJournal(). 744 ** 745 ** Actually maybe the whole journal header should be delayed until that 746 ** point. Think about this. 747 */ 748 memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic)); 749 /* The nRec Field. 0xFFFFFFFF for no-sync journals. */ 750 put32bits(&zHeader[sizeof(aJournalMagic)], pPager->noSync ? 0xffffffff : 0); 751 /* The random check-hash initialiser */ 752 sqlite3Randomness(sizeof(pPager->cksumInit), &pPager->cksumInit); 753 put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit); 754 /* The initial database size */ 755 put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbSize); 756 /* The assumed sector size for this process */ 757 put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize); 758 IOTRACE(("JHDR %p %lld %d\n", pPager, pPager->journalHdr, sizeof(zHeader))) 759 rc = sqlite3OsWrite(pPager->jfd, zHeader, sizeof(zHeader)); 760 761 /* The journal header has been written successfully. Seek the journal 762 ** file descriptor to the end of the journal header sector. 763 */ 764 if( rc==SQLITE_OK ){ 765 IOTRACE(("JTAIL %p %lld\n", pPager, pPager->journalOff-1)) 766 rc = sqlite3OsSeek(pPager->jfd, pPager->journalOff-1); 767 if( rc==SQLITE_OK ){ 768 rc = sqlite3OsWrite(pPager->jfd, "\000", 1); 769 } 770 } 771 return rc; 772 } 773 774 /* 775 ** The journal file must be open when this is called. A journal header file 776 ** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal 777 ** file. See comments above function writeJournalHdr() for a description of 778 ** the journal header format. 779 ** 780 ** If the header is read successfully, *nRec is set to the number of 781 ** page records following this header and *dbSize is set to the size of the 782 ** database before the transaction began, in pages. Also, pPager->cksumInit 783 ** is set to the value read from the journal header. SQLITE_OK is returned 784 ** in this case. 785 ** 786 ** If the journal header file appears to be corrupted, SQLITE_DONE is 787 ** returned and *nRec and *dbSize are not set. If JOURNAL_HDR_SZ bytes 788 ** cannot be read from the journal file an error code is returned. 789 */ 790 static int readJournalHdr( 791 Pager *pPager, 792 i64 journalSize, 793 u32 *pNRec, 794 u32 *pDbSize 795 ){ 796 int rc; 797 unsigned char aMagic[8]; /* A buffer to hold the magic header */ 798 799 rc = seekJournalHdr(pPager); 800 if( rc ) return rc; 801 802 if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){ 803 return SQLITE_DONE; 804 } 805 806 rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic)); 807 if( rc ) return rc; 808 809 if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){ 810 return SQLITE_DONE; 811 } 812 813 rc = read32bits(pPager->jfd, pNRec); 814 if( rc ) return rc; 815 816 rc = read32bits(pPager->jfd, &pPager->cksumInit); 817 if( rc ) return rc; 818 819 rc = read32bits(pPager->jfd, pDbSize); 820 if( rc ) return rc; 821 822 /* Update the assumed sector-size to match the value used by 823 ** the process that created this journal. If this journal was 824 ** created by a process other than this one, then this routine 825 ** is being called from within pager_playback(). The local value 826 ** of Pager.sectorSize is restored at the end of that routine. 827 */ 828 rc = read32bits(pPager->jfd, (u32 *)&pPager->sectorSize); 829 if( rc ) return rc; 830 831 pPager->journalOff += JOURNAL_HDR_SZ(pPager); 832 rc = sqlite3OsSeek(pPager->jfd, pPager->journalOff); 833 return rc; 834 } 835 836 837 /* 838 ** Write the supplied master journal name into the journal file for pager 839 ** pPager at the current location. The master journal name must be the last 840 ** thing written to a journal file. If the pager is in full-sync mode, the 841 ** journal file descriptor is advanced to the next sector boundary before 842 ** anything is written. The format is: 843 ** 844 ** + 4 bytes: PAGER_MJ_PGNO. 845 ** + N bytes: length of master journal name. 846 ** + 4 bytes: N 847 ** + 4 bytes: Master journal name checksum. 848 ** + 8 bytes: aJournalMagic[]. 849 ** 850 ** The master journal page checksum is the sum of the bytes in the master 851 ** journal name. 852 ** 853 ** If zMaster is a NULL pointer (occurs for a single database transaction), 854 ** this call is a no-op. 855 */ 856 static int writeMasterJournal(Pager *pPager, const char *zMaster){ 857 int rc; 858 int len; 859 int i; 860 u32 cksum = 0; 861 char zBuf[sizeof(aJournalMagic)+2*4]; 862 863 if( !zMaster || pPager->setMaster) return SQLITE_OK; 864 pPager->setMaster = 1; 865 866 len = strlen(zMaster); 867 for(i=0; i<len; i++){ 868 cksum += zMaster[i]; 869 } 870 871 /* If in full-sync mode, advance to the next disk sector before writing 872 ** the master journal name. This is in case the previous page written to 873 ** the journal has already been synced. 874 */ 875 if( pPager->fullSync ){ 876 rc = seekJournalHdr(pPager); 877 if( rc!=SQLITE_OK ) return rc; 878 } 879 pPager->journalOff += (len+20); 880 881 rc = write32bits(pPager->jfd, PAGER_MJ_PGNO(pPager)); 882 if( rc!=SQLITE_OK ) return rc; 883 884 rc = sqlite3OsWrite(pPager->jfd, zMaster, len); 885 if( rc!=SQLITE_OK ) return rc; 886 887 put32bits(zBuf, len); 888 put32bits(&zBuf[4], cksum); 889 memcpy(&zBuf[8], aJournalMagic, sizeof(aJournalMagic)); 890 rc = sqlite3OsWrite(pPager->jfd, zBuf, 8+sizeof(aJournalMagic)); 891 pPager->needSync = !pPager->noSync; 892 return rc; 893 } 894 895 /* 896 ** Add or remove a page from the list of all pages that are in the 897 ** statement journal. 898 ** 899 ** The Pager keeps a separate list of pages that are currently in 900 ** the statement journal. This helps the sqlite3PagerStmtCommit() 901 ** routine run MUCH faster for the common case where there are many 902 ** pages in memory but only a few are in the statement journal. 903 */ 904 static void page_add_to_stmt_list(PgHdr *pPg){ 905 Pager *pPager = pPg->pPager; 906 PgHistory *pHist = PGHDR_TO_HIST(pPg, pPager); 907 assert( MEMDB ); 908 if( !pHist->inStmt ){ 909 assert( pHist->pPrevStmt==0 && pHist->pNextStmt==0 ); 910 if( pPager->pStmt ){ 911 PGHDR_TO_HIST(pPager->pStmt, pPager)->pPrevStmt = pPg; 912 } 913 pHist->pNextStmt = pPager->pStmt; 914 pPager->pStmt = pPg; 915 pHist->inStmt = 1; 916 } 917 } 918 919 /* 920 ** Find a page in the hash table given its page number. Return 921 ** a pointer to the page or NULL if not found. 922 */ 923 static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){ 924 PgHdr *p; 925 if( pPager->aHash==0 ) return 0; 926 p = pPager->aHash[pgno & (pPager->nHash-1)]; 927 while( p && p->pgno!=pgno ){ 928 p = p->pNextHash; 929 } 930 return p; 931 } 932 933 /* 934 ** Unlock the database file. 935 */ 936 static void pager_unlock(Pager *pPager){ 937 if( !pPager->exclusiveMode ){ 938 if( !MEMDB ){ 939 sqlite3OsUnlock(pPager->fd, NO_LOCK); 940 pPager->dbSize = -1; 941 IOTRACE(("UNLOCK %p\n", pPager)) 942 } 943 pPager->state = PAGER_UNLOCK; 944 pPager->changeCountDone = 0; 945 } 946 } 947 948 /* 949 ** Execute a rollback if a transaction is active and unlock the 950 ** database file. This is a no-op if the pager has already entered 951 ** the error-state. 952 */ 953 static void pagerUnlockAndRollback(Pager *p){ 954 if( p->errCode ) return; 955 assert( p->state>=PAGER_RESERVED || p->journalOpen==0 ); 956 if( p->state>=PAGER_RESERVED ){ 957 sqlite3PagerRollback(p); 958 } 959 pager_unlock(p); 960 assert( p->errCode || !p->journalOpen || (p->exclusiveMode&&!p->journalOff) ); 961 assert( p->errCode || !p->stmtOpen || p->exclusiveMode ); 962 } 963 964 965 /* 966 ** Clear the in-memory cache. This routine 967 ** sets the state of the pager back to what it was when it was first 968 ** opened. Any outstanding pages are invalidated and subsequent attempts 969 ** to access those pages will likely result in a coredump. 970 */ 971 static void pager_reset(Pager *pPager){ 972 PgHdr *pPg, *pNext; 973 if( pPager->errCode ) return; 974 for(pPg=pPager->pAll; pPg; pPg=pNext){ 975 IOTRACE(("PGFREE %p %d\n", pPager, pPg->pgno)); 976 PAGER_INCR(sqlite3_pager_pgfree_count); 977 pNext = pPg->pNextAll; 978 sqliteFree(pPg); 979 } 980 pPager->pStmt = 0; 981 pPager->pFirst = 0; 982 pPager->pFirstSynced = 0; 983 pPager->pLast = 0; 984 pPager->pAll = 0; 985 pPager->nHash = 0; 986 sqliteFree(pPager->aHash); 987 pPager->nPage = 0; 988 pPager->aHash = 0; 989 pPager->nRef = 0; 990 } 991 992 /* 993 ** This routine ends a transaction. A transaction is ended by either 994 ** a COMMIT or a ROLLBACK. 995 ** 996 ** When this routine is called, the pager has the journal file open and 997 ** a RESERVED or EXCLUSIVE lock on the database. This routine will release 998 ** the database lock and acquires a SHARED lock in its place if that is 999 ** the appropriate thing to do. Release locks usually is appropriate, 1000 ** unless we are in exclusive access mode or unless this is a 1001 ** COMMIT AND BEGIN or ROLLBACK AND BEGIN operation. 1002 ** 1003 ** The journal file is either deleted or truncated. 1004 ** 1005 ** TODO: Consider keeping the journal file open for temporary databases. 1006 ** This might give a performance improvement on windows where opening 1007 ** a file is an expensive operation. 1008 */ 1009 static int pager_end_transaction(Pager *pPager){ 1010 PgHdr *pPg; 1011 int rc = SQLITE_OK; 1012 int rc2 = SQLITE_OK; 1013 assert( !MEMDB ); 1014 if( pPager->state<PAGER_RESERVED ){ 1015 return SQLITE_OK; 1016 } 1017 sqlite3PagerStmtCommit(pPager); 1018 if( pPager->stmtOpen && !pPager->exclusiveMode ){ 1019 sqlite3OsClose(&pPager->stfd); 1020 pPager->stmtOpen = 0; 1021 } 1022 if( pPager->journalOpen ){ 1023 if( pPager->exclusiveMode 1024 && (rc = sqlite3OsTruncate(pPager->jfd, 0))==SQLITE_OK ){; 1025 sqlite3OsSeek(pPager->jfd, 0); 1026 pPager->journalOff = 0; 1027 pPager->journalStarted = 0; 1028 }else{ 1029 sqlite3OsClose(&pPager->jfd); 1030 pPager->journalOpen = 0; 1031 if( rc==SQLITE_OK ){ 1032 rc = sqlite3OsDelete(pPager->zJournal); 1033 } 1034 } 1035 sqliteFree( pPager->aInJournal ); 1036 pPager->aInJournal = 0; 1037 for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){ 1038 pPg->inJournal = 0; 1039 pPg->dirty = 0; 1040 pPg->needSync = 0; 1041 pPg->alwaysRollback = 0; 1042 #ifdef SQLITE_CHECK_PAGES 1043 pPg->pageHash = pager_pagehash(pPg); 1044 #endif 1045 } 1046 pPager->pDirty = 0; 1047 pPager->dirtyCache = 0; 1048 pPager->nRec = 0; 1049 }else{ 1050 assert( pPager->aInJournal==0 ); 1051 assert( pPager->dirtyCache==0 || pPager->useJournal==0 ); 1052 } 1053 1054 if( !pPager->exclusiveMode ){ 1055 rc2 = sqlite3OsUnlock(pPager->fd, SHARED_LOCK); 1056 pPager->state = PAGER_SHARED; 1057 }else if( pPager->state==PAGER_SYNCED ){ 1058 pPager->state = PAGER_EXCLUSIVE; 1059 } 1060 pPager->origDbSize = 0; 1061 pPager->setMaster = 0; 1062 pPager->needSync = 0; 1063 pPager->pFirstSynced = pPager->pFirst; 1064 pPager->dbSize = -1; 1065 1066 return (rc==SQLITE_OK?rc2:rc); 1067 } 1068 1069 /* 1070 ** Compute and return a checksum for the page of data. 1071 ** 1072 ** This is not a real checksum. It is really just the sum of the 1073 ** random initial value and the page number. We experimented with 1074 ** a checksum of the entire data, but that was found to be too slow. 1075 ** 1076 ** Note that the page number is stored at the beginning of data and 1077 ** the checksum is stored at the end. This is important. If journal 1078 ** corruption occurs due to a power failure, the most likely scenario 1079 ** is that one end or the other of the record will be changed. It is 1080 ** much less likely that the two ends of the journal record will be 1081 ** correct and the middle be corrupt. Thus, this "checksum" scheme, 1082 ** though fast and simple, catches the mostly likely kind of corruption. 1083 ** 1084 ** FIX ME: Consider adding every 200th (or so) byte of the data to the 1085 ** checksum. That way if a single page spans 3 or more disk sectors and 1086 ** only the middle sector is corrupt, we will still have a reasonable 1087 ** chance of failing the checksum and thus detecting the problem. 1088 */ 1089 static u32 pager_cksum(Pager *pPager, const u8 *aData){ 1090 u32 cksum = pPager->cksumInit; 1091 int i = pPager->pageSize-200; 1092 while( i>0 ){ 1093 cksum += aData[i]; 1094 i -= 200; 1095 } 1096 return cksum; 1097 } 1098 1099 /* Forward declaration */ 1100 static void makeClean(PgHdr*); 1101 1102 /* 1103 ** Read a single page from the journal file opened on file descriptor 1104 ** jfd. Playback this one page. 1105 ** 1106 ** If useCksum==0 it means this journal does not use checksums. Checksums 1107 ** are not used in statement journals because statement journals do not 1108 ** need to survive power failures. 1109 */ 1110 static int pager_playback_one_page(Pager *pPager, OsFile *jfd, int useCksum){ 1111 int rc; 1112 PgHdr *pPg; /* An existing page in the cache */ 1113 Pgno pgno; /* The page number of a page in journal */ 1114 u32 cksum; /* Checksum used for sanity checking */ 1115 u8 *aData = (u8 *)pPager->pTmpSpace; /* Temp storage for a page */ 1116 1117 /* useCksum should be true for the main journal and false for 1118 ** statement journals. Verify that this is always the case 1119 */ 1120 assert( jfd == (useCksum ? pPager->jfd : pPager->stfd) ); 1121 assert( aData ); 1122 1123 rc = read32bits(jfd, &pgno); 1124 if( rc!=SQLITE_OK ) return rc; 1125 rc = sqlite3OsRead(jfd, aData, pPager->pageSize); 1126 if( rc!=SQLITE_OK ) return rc; 1127 pPager->journalOff += pPager->pageSize + 4; 1128 1129 /* Sanity checking on the page. This is more important that I originally 1130 ** thought. If a power failure occurs while the journal is being written, 1131 ** it could cause invalid data to be written into the journal. We need to 1132 ** detect this invalid data (with high probability) and ignore it. 1133 */ 1134 if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){ 1135 return SQLITE_DONE; 1136 } 1137 if( pgno>(unsigned)pPager->dbSize ){ 1138 return SQLITE_OK; 1139 } 1140 if( useCksum ){ 1141 rc = read32bits(jfd, &cksum); 1142 if( rc ) return rc; 1143 pPager->journalOff += 4; 1144 if( pager_cksum(pPager, aData)!=cksum ){ 1145 return SQLITE_DONE; 1146 } 1147 } 1148 1149 assert( pPager->state==PAGER_RESERVED || pPager->state>=PAGER_EXCLUSIVE ); 1150 1151 /* If the pager is in RESERVED state, then there must be a copy of this 1152 ** page in the pager cache. In this case just update the pager cache, 1153 ** not the database file. The page is left marked dirty in this case. 1154 ** 1155 ** An exception to the above rule: If the database is in no-sync mode 1156 ** and a page is moved during an incremental vacuum then the page may 1157 ** not be in the pager cache. Later: if a malloc() or IO error occurs 1158 ** during a Movepage() call, then the page may not be in the cache 1159 ** either. So the condition described in the above paragraph is not 1160 ** assert()able. 1161 ** 1162 ** If in EXCLUSIVE state, then we update the pager cache if it exists 1163 ** and the main file. The page is then marked not dirty. 1164 ** 1165 ** Ticket #1171: The statement journal might contain page content that is 1166 ** different from the page content at the start of the transaction. 1167 ** This occurs when a page is changed prior to the start of a statement 1168 ** then changed again within the statement. When rolling back such a 1169 ** statement we must not write to the original database unless we know 1170 ** for certain that original page contents are synced into the main rollback 1171 ** journal. Otherwise, a power loss might leave modified data in the 1172 ** database file without an entry in the rollback journal that can 1173 ** restore the database to its original form. Two conditions must be 1174 ** met before writing to the database files. (1) the database must be 1175 ** locked. (2) we know that the original page content is fully synced 1176 ** in the main journal either because the page is not in cache or else 1177 ** the page is marked as needSync==0. 1178 */ 1179 pPg = pager_lookup(pPager, pgno); 1180 PAGERTRACE4("PLAYBACK %d page %d hash(%08x)\n", 1181 PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, aData)); 1182 if( pPager->state>=PAGER_EXCLUSIVE && (pPg==0 || pPg->needSync==0) ){ 1183 rc = sqlite3OsSeek(pPager->fd, (pgno-1)*(i64)pPager->pageSize); 1184 if( rc==SQLITE_OK ){ 1185 rc = sqlite3OsWrite(pPager->fd, aData, pPager->pageSize); 1186 } 1187 if( pPg ){ 1188 makeClean(pPg); 1189 } 1190 } 1191 if( pPg ){ 1192 /* No page should ever be explicitly rolled back that is in use, except 1193 ** for page 1 which is held in use in order to keep the lock on the 1194 ** database active. However such a page may be rolled back as a result 1195 ** of an internal error resulting in an automatic call to 1196 ** sqlite3PagerRollback(). 1197 */ 1198 void *pData; 1199 /* assert( pPg->nRef==0 || pPg->pgno==1 ); */ 1200 pData = PGHDR_TO_DATA(pPg); 1201 memcpy(pData, aData, pPager->pageSize); 1202 if( pPager->xReiniter ){ 1203 pPager->xReiniter(pPg, pPager->pageSize); 1204 } 1205 #ifdef SQLITE_CHECK_PAGES 1206 pPg->pageHash = pager_pagehash(pPg); 1207 #endif 1208 /* If this was page 1, then restore the value of Pager.dbFileVers. 1209 ** Do this before any decoding. */ 1210 if( pgno==1 ){ 1211 memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers)); 1212 } 1213 1214 /* Decode the page just read from disk */ 1215 CODEC1(pPager, pData, pPg->pgno, 3); 1216 } 1217 return rc; 1218 } 1219 1220 /* 1221 ** Parameter zMaster is the name of a master journal file. A single journal 1222 ** file that referred to the master journal file has just been rolled back. 1223 ** This routine checks if it is possible to delete the master journal file, 1224 ** and does so if it is. 1225 ** 1226 ** The master journal file contains the names of all child journals. 1227 ** To tell if a master journal can be deleted, check to each of the 1228 ** children. If all children are either missing or do not refer to 1229 ** a different master journal, then this master journal can be deleted. 1230 */ 1231 static int pager_delmaster(const char *zMaster){ 1232 int rc; 1233 int master_open = 0; 1234 OsFile *master = 0; 1235 char *zMasterJournal = 0; /* Contents of master journal file */ 1236 i64 nMasterJournal; /* Size of master journal file */ 1237 1238 /* Open the master journal file exclusively in case some other process 1239 ** is running this routine also. Not that it makes too much difference. 1240 */ 1241 rc = sqlite3OsOpenReadOnly(zMaster, &master); 1242 assert( rc!=SQLITE_OK || master ); 1243 if( rc!=SQLITE_OK ) goto delmaster_out; 1244 master_open = 1; 1245 rc = sqlite3OsFileSize(master, &nMasterJournal); 1246 if( rc!=SQLITE_OK ) goto delmaster_out; 1247 1248 if( nMasterJournal>0 ){ 1249 char *zJournal; 1250 char *zMasterPtr = 0; 1251 1252 /* Load the entire master journal file into space obtained from 1253 ** sqliteMalloc() and pointed to by zMasterJournal. 1254 */ 1255 zMasterJournal = (char *)sqliteMalloc(nMasterJournal); 1256 if( !zMasterJournal ){ 1257 rc = SQLITE_NOMEM; 1258 goto delmaster_out; 1259 } 1260 rc = sqlite3OsRead(master, zMasterJournal, nMasterJournal); 1261 if( rc!=SQLITE_OK ) goto delmaster_out; 1262 1263 zJournal = zMasterJournal; 1264 while( (zJournal-zMasterJournal)<nMasterJournal ){ 1265 if( sqlite3OsFileExists(zJournal) ){ 1266 /* One of the journals pointed to by the master journal exists. 1267 ** Open it and check if it points at the master journal. If 1268 ** so, return without deleting the master journal file. 1269 */ 1270 OsFile *journal = 0; 1271 int c; 1272 1273 rc = sqlite3OsOpenReadOnly(zJournal, &journal); 1274 assert( rc!=SQLITE_OK || journal ); 1275 if( rc!=SQLITE_OK ){ 1276 goto delmaster_out; 1277 } 1278 1279 rc = readMasterJournal(journal, &zMasterPtr); 1280 sqlite3OsClose(&journal); 1281 if( rc!=SQLITE_OK ){ 1282 goto delmaster_out; 1283 } 1284 1285 c = zMasterPtr!=0 && strcmp(zMasterPtr, zMaster)==0; 1286 sqliteFree(zMasterPtr); 1287 if( c ){ 1288 /* We have a match. Do not delete the master journal file. */ 1289 goto delmaster_out; 1290 } 1291 } 1292 zJournal += (strlen(zJournal)+1); 1293 } 1294 } 1295 1296 rc = sqlite3OsDelete(zMaster); 1297 1298 delmaster_out: 1299 if( zMasterJournal ){ 1300 sqliteFree(zMasterJournal); 1301 } 1302 if( master_open ){ 1303 sqlite3OsClose(&master); 1304 } 1305 return rc; 1306 } 1307 1308 1309 static void pager_truncate_cache(Pager *pPager); 1310 1311 /* 1312 ** Truncate the main file of the given pager to the number of pages 1313 ** indicated. Also truncate the cached representation of the file. 1314 */ 1315 static int pager_truncate(Pager *pPager, int nPage){ 1316 int rc = SQLITE_OK; 1317 if( pPager->state>=PAGER_EXCLUSIVE ){ 1318 rc = sqlite3OsTruncate(pPager->fd, pPager->pageSize*(i64)nPage); 1319 } 1320 if( rc==SQLITE_OK ){ 1321 pPager->dbSize = nPage; 1322 pager_truncate_cache(pPager); 1323 } 1324 return rc; 1325 } 1326 1327 /* 1328 ** Set the sectorSize for the given pager. 1329 ** 1330 ** The sector size is the larger of the sector size reported 1331 ** by sqlite3OsSectorSize() and the pageSize. 1332 */ 1333 static void setSectorSize(Pager *pPager){ 1334 pPager->sectorSize = sqlite3OsSectorSize(pPager->fd); 1335 if( pPager->sectorSize<pPager->pageSize ){ 1336 pPager->sectorSize = pPager->pageSize; 1337 } 1338 } 1339 1340 /* 1341 ** Playback the journal and thus restore the database file to 1342 ** the state it was in before we started making changes. 1343 ** 1344 ** The journal file format is as follows: 1345 ** 1346 ** (1) 8 byte prefix. A copy of aJournalMagic[]. 1347 ** (2) 4 byte big-endian integer which is the number of valid page records 1348 ** in the journal. If this value is 0xffffffff, then compute the 1349 ** number of page records from the journal size. 1350 ** (3) 4 byte big-endian integer which is the initial value for the 1351 ** sanity checksum. 1352 ** (4) 4 byte integer which is the number of pages to truncate the 1353 ** database to during a rollback. 1354 ** (5) 4 byte integer which is the number of bytes in the master journal 1355 ** name. The value may be zero (indicate that there is no master 1356 ** journal.) 1357 ** (6) N bytes of the master journal name. The name will be nul-terminated 1358 ** and might be shorter than the value read from (5). If the first byte 1359 ** of the name is \000 then there is no master journal. The master 1360 ** journal name is stored in UTF-8. 1361 ** (7) Zero or more pages instances, each as follows: 1362 ** + 4 byte page number. 1363 ** + pPager->pageSize bytes of data. 1364 ** + 4 byte checksum 1365 ** 1366 ** When we speak of the journal header, we mean the first 6 items above. 1367 ** Each entry in the journal is an instance of the 7th item. 1368 ** 1369 ** Call the value from the second bullet "nRec". nRec is the number of 1370 ** valid page entries in the journal. In most cases, you can compute the 1371 ** value of nRec from the size of the journal file. But if a power 1372 ** failure occurred while the journal was being written, it could be the 1373 ** case that the size of the journal file had already been increased but 1374 ** the extra entries had not yet made it safely to disk. In such a case, 1375 ** the value of nRec computed from the file size would be too large. For 1376 ** that reason, we always use the nRec value in the header. 1377 ** 1378 ** If the nRec value is 0xffffffff it means that nRec should be computed 1379 ** from the file size. This value is used when the user selects the 1380 ** no-sync option for the journal. A power failure could lead to corruption 1381 ** in this case. But for things like temporary table (which will be 1382 ** deleted when the power is restored) we don't care. 1383 ** 1384 ** If the file opened as the journal file is not a well-formed 1385 ** journal file then all pages up to the first corrupted page are rolled 1386 ** back (or no pages if the journal header is corrupted). The journal file 1387 ** is then deleted and SQLITE_OK returned, just as if no corruption had 1388 ** been encountered. 1389 ** 1390 ** If an I/O or malloc() error occurs, the journal-file is not deleted 1391 ** and an error code is returned. 1392 */ 1393 static int pager_playback(Pager *pPager, int isHot){ 1394 i64 szJ; /* Size of the journal file in bytes */ 1395 u32 nRec; /* Number of Records in the journal */ 1396 int i; /* Loop counter */ 1397 Pgno mxPg = 0; /* Size of the original file in pages */ 1398 int rc; /* Result code of a subroutine */ 1399 char *zMaster = 0; /* Name of master journal file if any */ 1400 1401 /* Figure out how many records are in the journal. Abort early if 1402 ** the journal is empty. 1403 */ 1404 assert( pPager->journalOpen ); 1405 rc = sqlite3OsFileSize(pPager->jfd, &szJ); 1406 if( rc!=SQLITE_OK || szJ==0 ){ 1407 goto end_playback; 1408 } 1409 1410 /* Read the master journal name from the journal, if it is present. 1411 ** If a master journal file name is specified, but the file is not 1412 ** present on disk, then the journal is not hot and does not need to be 1413 ** played back. 1414 */ 1415 rc = readMasterJournal(pPager->jfd, &zMaster); 1416 assert( rc!=SQLITE_DONE ); 1417 if( rc!=SQLITE_OK || (zMaster && !sqlite3OsFileExists(zMaster)) ){ 1418 sqliteFree(zMaster); 1419 zMaster = 0; 1420 if( rc==SQLITE_DONE ) rc = SQLITE_OK; 1421 goto end_playback; 1422 } 1423 sqlite3OsSeek(pPager->jfd, 0); 1424 pPager->journalOff = 0; 1425 1426 /* This loop terminates either when the readJournalHdr() call returns 1427 ** SQLITE_DONE or an IO error occurs. */ 1428 while( 1 ){ 1429 1430 /* Read the next journal header from the journal file. If there are 1431 ** not enough bytes left in the journal file for a complete header, or 1432 ** it is corrupted, then a process must of failed while writing it. 1433 ** This indicates nothing more needs to be rolled back. 1434 */ 1435 rc = readJournalHdr(pPager, szJ, &nRec, &mxPg); 1436 if( rc!=SQLITE_OK ){ 1437 if( rc==SQLITE_DONE ){ 1438 rc = SQLITE_OK; 1439 } 1440 goto end_playback; 1441 } 1442 1443 /* If nRec is 0xffffffff, then this journal was created by a process 1444 ** working in no-sync mode. This means that the rest of the journal 1445 ** file consists of pages, there are no more journal headers. Compute 1446 ** the value of nRec based on this assumption. 1447 */ 1448 if( nRec==0xffffffff ){ 1449 assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ); 1450 nRec = (szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager); 1451 } 1452 1453 /* If nRec is 0 and this rollback is of a transaction created by this 1454 ** process. In this case the rest of the journal file consists of 1455 ** journalled copies of pages that need to be read back into the cache. 1456 */ 1457 if( nRec==0 && !isHot ){ 1458 nRec = (szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager); 1459 } 1460 1461 /* If this is the first header read from the journal, truncate the 1462 ** database file back to it's original size. 1463 */ 1464 if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){ 1465 rc = pager_truncate(pPager, mxPg); 1466 if( rc!=SQLITE_OK ){ 1467 goto end_playback; 1468 } 1469 } 1470 1471 /* Copy original pages out of the journal and back into the database file. 1472 */ 1473 for(i=0; i<nRec; i++){ 1474 rc = pager_playback_one_page(pPager, pPager->jfd, 1); 1475 if( rc!=SQLITE_OK ){ 1476 if( rc==SQLITE_DONE ){ 1477 rc = SQLITE_OK; 1478 pPager->journalOff = szJ; 1479 break; 1480 }else{ 1481 goto end_playback; 1482 } 1483 } 1484 } 1485 } 1486 /*NOTREACHED*/ 1487 assert( 0 ); 1488 1489 end_playback: 1490 if( rc==SQLITE_OK ){ 1491 rc = pager_end_transaction(pPager); 1492 } 1493 if( zMaster ){ 1494 /* If there was a master journal and this routine will return success, 1495 ** see if it is possible to delete the master journal. 1496 */ 1497 if( rc==SQLITE_OK ){ 1498 rc = pager_delmaster(zMaster); 1499 } 1500 sqliteFree(zMaster); 1501 } 1502 1503 /* The Pager.sectorSize variable may have been updated while rolling 1504 ** back a journal created by a process with a different sector size 1505 ** value. Reset it to the correct value for this process. 1506 */ 1507 setSectorSize(pPager); 1508 return rc; 1509 } 1510 1511 /* 1512 ** Playback the statement journal. 1513 ** 1514 ** This is similar to playing back the transaction journal but with 1515 ** a few extra twists. 1516 ** 1517 ** (1) The number of pages in the database file at the start of 1518 ** the statement is stored in pPager->stmtSize, not in the 1519 ** journal file itself. 1520 ** 1521 ** (2) In addition to playing back the statement journal, also 1522 ** playback all pages of the transaction journal beginning 1523 ** at offset pPager->stmtJSize. 1524 */ 1525 static int pager_stmt_playback(Pager *pPager){ 1526 i64 szJ; /* Size of the full journal */ 1527 i64 hdrOff; 1528 int nRec; /* Number of Records */ 1529 int i; /* Loop counter */ 1530 int rc; 1531 1532 szJ = pPager->journalOff; 1533 #ifndef NDEBUG 1534 { 1535 i64 os_szJ; 1536 rc = sqlite3OsFileSize(pPager->jfd, &os_szJ); 1537 if( rc!=SQLITE_OK ) return rc; 1538 assert( szJ==os_szJ ); 1539 } 1540 #endif 1541 1542 /* Set hdrOff to be the offset just after the end of the last journal 1543 ** page written before the first journal-header for this statement 1544 ** transaction was written, or the end of the file if no journal 1545 ** header was written. 1546 */ 1547 hdrOff = pPager->stmtHdrOff; 1548 assert( pPager->fullSync || !hdrOff ); 1549 if( !hdrOff ){ 1550 hdrOff = szJ; 1551 } 1552 1553 /* Truncate the database back to its original size. 1554 */ 1555 rc = pager_truncate(pPager, pPager->stmtSize); 1556 assert( pPager->state>=PAGER_SHARED ); 1557 1558 /* Figure out how many records are in the statement journal. 1559 */ 1560 assert( pPager->stmtInUse && pPager->journalOpen ); 1561 sqlite3OsSeek(pPager->stfd, 0); 1562 nRec = pPager->stmtNRec; 1563 1564 /* Copy original pages out of the statement journal and back into the 1565 ** database file. Note that the statement journal omits checksums from 1566 ** each record since power-failure recovery is not important to statement 1567 ** journals. 1568 */ 1569 for(i=nRec-1; i>=0; i--){ 1570 rc = pager_playback_one_page(pPager, pPager->stfd, 0); 1571 assert( rc!=SQLITE_DONE ); 1572 if( rc!=SQLITE_OK ) goto end_stmt_playback; 1573 } 1574 1575 /* Now roll some pages back from the transaction journal. Pager.stmtJSize 1576 ** was the size of the journal file when this statement was started, so 1577 ** everything after that needs to be rolled back, either into the 1578 ** database, the memory cache, or both. 1579 ** 1580 ** If it is not zero, then Pager.stmtHdrOff is the offset to the start 1581 ** of the first journal header written during this statement transaction. 1582 */ 1583 rc = sqlite3OsSeek(pPager->jfd, pPager->stmtJSize); 1584 if( rc!=SQLITE_OK ){ 1585 goto end_stmt_playback; 1586 } 1587 pPager->journalOff = pPager->stmtJSize; 1588 pPager->cksumInit = pPager->stmtCksum; 1589 while( pPager->journalOff < hdrOff ){ 1590 rc = pager_playback_one_page(pPager, pPager->jfd, 1); 1591 assert( rc!=SQLITE_DONE ); 1592 if( rc!=SQLITE_OK ) goto end_stmt_playback; 1593 } 1594 1595 while( pPager->journalOff < szJ ){ 1596 u32 nJRec; /* Number of Journal Records */ 1597 u32 dummy; 1598 rc = readJournalHdr(pPager, szJ, &nJRec, &dummy); 1599 if( rc!=SQLITE_OK ){ 1600 assert( rc!=SQLITE_DONE ); 1601 goto end_stmt_playback; 1602 } 1603 if( nJRec==0 ){ 1604 nJRec = (szJ - pPager->journalOff) / (pPager->pageSize+8); 1605 } 1606 for(i=nJRec-1; i>=0 && pPager->journalOff < szJ; i--){ 1607 rc = pager_playback_one_page(pPager, pPager->jfd, 1); 1608 assert( rc!=SQLITE_DONE ); 1609 if( rc!=SQLITE_OK ) goto end_stmt_playback; 1610 } 1611 } 1612 1613 pPager->journalOff = szJ; 1614 1615 end_stmt_playback: 1616 if( rc==SQLITE_OK) { 1617 pPager->journalOff = szJ; 1618 /* pager_reload_cache(pPager); */ 1619 } 1620 return rc; 1621 } 1622 1623 /* 1624 ** Change the maximum number of in-memory pages that are allowed. 1625 */ 1626 void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){ 1627 if( mxPage>10 ){ 1628 pPager->mxPage = mxPage; 1629 }else{ 1630 pPager->mxPage = 10; 1631 } 1632 } 1633 1634 /* 1635 ** Adjust the robustness of the database to damage due to OS crashes 1636 ** or power failures by changing the number of syncs()s when writing 1637 ** the rollback journal. There are three levels: 1638 ** 1639 ** OFF sqlite3OsSync() is never called. This is the default 1640 ** for temporary and transient files. 1641 ** 1642 ** NORMAL The journal is synced once before writes begin on the 1643 ** database. This is normally adequate protection, but 1644 ** it is theoretically possible, though very unlikely, 1645 ** that an inopertune power failure could leave the journal 1646 ** in a state which would cause damage to the database 1647 ** when it is rolled back. 1648 ** 1649 ** FULL The journal is synced twice before writes begin on the 1650 ** database (with some additional information - the nRec field 1651 ** of the journal header - being written in between the two 1652 ** syncs). If we assume that writing a 1653 ** single disk sector is atomic, then this mode provides 1654 ** assurance that the journal will not be corrupted to the 1655 ** point of causing damage to the database during rollback. 1656 ** 1657 ** Numeric values associated with these states are OFF==1, NORMAL=2, 1658 ** and FULL=3. 1659 */ 1660 #ifndef SQLITE_OMIT_PAGER_PRAGMAS 1661 void sqlite3PagerSetSafetyLevel(Pager *pPager, int level, int full_fsync){ 1662 pPager->noSync = level==1 || pPager->tempFile; 1663 pPager->fullSync = level==3 && !pPager->tempFile; 1664 pPager->full_fsync = full_fsync; 1665 if( pPager->noSync ) pPager->needSync = 0; 1666 } 1667 #endif 1668 1669 /* 1670 ** The following global variable is incremented whenever the library 1671 ** attempts to open a temporary file. This information is used for 1672 ** testing and analysis only. 1673 */ 1674 #ifdef SQLITE_TEST 1675 int sqlite3_opentemp_count = 0; 1676 #endif 1677 1678 /* 1679 ** Open a temporary file. 1680 ** 1681 ** Write the file descriptor into *fd. Return SQLITE_OK on success or some 1682 ** other error code if we fail. 1683 ** 1684 ** The OS will automatically delete the temporary file when it is 1685 ** closed. 1686 */ 1687 static int sqlite3PagerOpentemp(OsFile **pFd){ 1688 int cnt = 8; 1689 int rc; 1690 char zFile[SQLITE_TEMPNAME_SIZE]; 1691 1692 #ifdef SQLITE_TEST 1693 sqlite3_opentemp_count++; /* Used for testing and analysis only */ 1694 #endif 1695 do{ 1696 cnt--; 1697 sqlite3OsTempFileName(zFile); 1698 rc = sqlite3OsOpenExclusive(zFile, pFd, 1); 1699 assert( rc!=SQLITE_OK || *pFd ); 1700 }while( cnt>0 && rc!=SQLITE_OK && rc!=SQLITE_NOMEM ); 1701 return rc; 1702 } 1703 1704 /* 1705 ** Create a new page cache and put a pointer to the page cache in *ppPager. 1706 ** The file to be cached need not exist. The file is not locked until 1707 ** the first call to sqlite3PagerGet() and is only held open until the 1708 ** last page is released using sqlite3PagerUnref(). 1709 ** 1710 ** If zFilename is NULL then a randomly-named temporary file is created 1711 ** and used as the file to be cached. The file will be deleted 1712 ** automatically when it is closed. 1713 ** 1714 ** If zFilename is ":memory:" then all information is held in cache. 1715 ** It is never written to disk. This can be used to implement an 1716 ** in-memory database. 1717 */ 1718 int sqlite3PagerOpen( 1719 Pager **ppPager, /* Return the Pager structure here */ 1720 const char *zFilename, /* Name of the database file to open */ 1721 int nExtra, /* Extra bytes append to each in-memory page */ 1722 int flags /* flags controlling this file */ 1723 ){ 1724 Pager *pPager = 0; 1725 char *zFullPathname = 0; 1726 int nameLen; /* Compiler is wrong. This is always initialized before use */ 1727 OsFile *fd = 0; 1728 int rc = SQLITE_OK; 1729 int i; 1730 int tempFile = 0; 1731 int memDb = 0; 1732 int readOnly = 0; 1733 int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; 1734 int noReadlock = (flags & PAGER_NO_READLOCK)!=0; 1735 char zTemp[SQLITE_TEMPNAME_SIZE]; 1736 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT 1737 /* A malloc() cannot fail in sqlite3ThreadData() as one or more calls to 1738 ** malloc() must have already been made by this thread before it gets 1739 ** to this point. This means the ThreadData must have been allocated already 1740 ** so that ThreadData.nAlloc can be set. It would be nice to assert 1741 ** that ThreadData.nAlloc is non-zero, but alas this breaks test cases 1742 ** written to invoke the pager directly. 1743 */ 1744 ThreadData *pTsd = sqlite3ThreadData(); 1745 assert( pTsd ); 1746 #endif 1747 1748 /* We used to test if malloc() had already failed before proceeding. 1749 ** But the way this function is used in SQLite means that can never 1750 ** happen. Furthermore, if the malloc-failed flag is already set, 1751 ** either the call to sqliteStrDup() or sqliteMalloc() below will 1752 ** fail shortly and SQLITE_NOMEM returned anyway. 1753 */ 1754 *ppPager = 0; 1755 1756 /* Open the pager file and set zFullPathname to point at malloc()ed 1757 ** memory containing the complete filename (i.e. including the directory). 1758 */ 1759 if( zFilename && zFilename[0] ){ 1760 #ifndef SQLITE_OMIT_MEMORYDB 1761 if( strcmp(zFilename,":memory:")==0 ){ 1762 memDb = 1; 1763 zFullPathname = sqliteStrDup(""); 1764 }else 1765 #endif 1766 { 1767 zFullPathname = sqlite3OsFullPathname(zFilename); 1768 if( zFullPathname ){ 1769 rc = sqlite3OsOpenReadWrite(zFullPathname, &fd, &readOnly); 1770 assert( rc!=SQLITE_OK || fd ); 1771 } 1772 } 1773 }else{ 1774 rc = sqlite3PagerOpentemp(&fd); 1775 sqlite3OsTempFileName(zTemp); 1776 zFilename = zTemp; 1777 zFullPathname = sqlite3OsFullPathname(zFilename); 1778 if( rc==SQLITE_OK ){ 1779 tempFile = 1; 1780 } 1781 } 1782 1783 /* Allocate the Pager structure. As part of the same allocation, allocate 1784 ** space for the full paths of the file, directory and journal 1785 ** (Pager.zFilename, Pager.zDirectory and Pager.zJournal). 1786 */ 1787 if( zFullPathname ){ 1788 nameLen = strlen(zFullPathname); 1789 pPager = sqliteMalloc( sizeof(*pPager) + nameLen*3 + 30 ); 1790 if( pPager && rc==SQLITE_OK ){ 1791 pPager->pTmpSpace = (char *)sqliteMallocRaw(SQLITE_DEFAULT_PAGE_SIZE); 1792 } 1793 } 1794 1795 1796 /* If an error occured in either of the blocks above, free the memory 1797 ** pointed to by zFullPathname, free the Pager structure and close the 1798 ** file. Since the pager is not allocated there is no need to set 1799 ** any Pager.errMask variables. 1800 */ 1801 if( !pPager || !zFullPathname || !pPager->pTmpSpace || rc!=SQLITE_OK ){ 1802 sqlite3OsClose(&fd); 1803 sqliteFree(zFullPathname); 1804 sqliteFree(pPager); 1805 return ((rc==SQLITE_OK)?SQLITE_NOMEM:rc); 1806 } 1807 1808 PAGERTRACE3("OPEN %d %s\n", FILEHANDLEID(fd), zFullPathname); 1809 IOTRACE(("OPEN %p %s\n", pPager, zFullPathname)) 1810 pPager->zFilename = (char*)&pPager[1]; 1811 pPager->zDirectory = &pPager->zFilename[nameLen+1]; 1812 pPager->zJournal = &pPager->zDirectory[nameLen+1]; 1813 memcpy(pPager->zFilename, zFullPathname, nameLen+1); 1814 memcpy(pPager->zDirectory, zFullPathname, nameLen+1); 1815 1816 for(i=nameLen; i>0 && pPager->zDirectory[i-1]!='/'; i--){} 1817 if( i>0 ) pPager->zDirectory[i-1] = 0; 1818 memcpy(pPager->zJournal, zFullPathname,nameLen); 1819 sqliteFree(zFullPathname); 1820 memcpy(&pPager->zJournal[nameLen], "-journal",sizeof("-journal")); 1821 pPager->fd = fd; 1822 /* pPager->journalOpen = 0; */ 1823 pPager->useJournal = useJournal && !memDb; 1824 pPager->noReadlock = noReadlock && readOnly; 1825 /* pPager->stmtOpen = 0; */ 1826 /* pPager->stmtInUse = 0; */ 1827 /* pPager->nRef = 0; */ 1828 pPager->dbSize = memDb-1; 1829 pPager->pageSize = SQLITE_DEFAULT_PAGE_SIZE; 1830 /* pPager->stmtSize = 0; */ 1831 /* pPager->stmtJSize = 0; */ 1832 /* pPager->nPage = 0; */ 1833 pPager->mxPage = 100; 1834 pPager->mxPgno = SQLITE_MAX_PAGE_COUNT; 1835 assert( PAGER_UNLOCK==0 ); 1836 /* pPager->state = PAGER_UNLOCK; */ 1837 /* pPager->errMask = 0; */ 1838 pPager->tempFile = tempFile; 1839 assert( tempFile==PAGER_LOCKINGMODE_NORMAL 1840 || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE ); 1841 assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 ); 1842 pPager->exclusiveMode = tempFile; 1843 pPager->memDb = memDb; 1844 pPager->readOnly = readOnly; 1845 /* pPager->needSync = 0; */ 1846 pPager->noSync = pPager->tempFile || !useJournal; 1847 pPager->fullSync = (pPager->noSync?0:1); 1848 /* pPager->pFirst = 0; */ 1849 /* pPager->pFirstSynced = 0; */ 1850 /* pPager->pLast = 0; */ 1851 pPager->nExtra = FORCE_ALIGNMENT(nExtra); 1852 assert(fd||memDb); 1853 if( !memDb ){ 1854 setSectorSize(pPager); 1855 } 1856 /* pPager->pBusyHandler = 0; */ 1857 /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */ 1858 *ppPager = pPager; 1859 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT 1860 pPager->pNext = pTsd->pPager; 1861 pTsd->pPager = pPager; 1862 #endif 1863 return SQLITE_OK; 1864 } 1865 1866 /* 1867 ** Set the busy handler function. 1868 */ 1869 void sqlite3PagerSetBusyhandler(Pager *pPager, BusyHandler *pBusyHandler){ 1870 pPager->pBusyHandler = pBusyHandler; 1871 } 1872 1873 /* 1874 ** Set the destructor for this pager. If not NULL, the destructor is called 1875 ** when the reference count on each page reaches zero. The destructor can 1876 ** be used to clean up information in the extra segment appended to each page. 1877 ** 1878 ** The destructor is not called as a result sqlite3PagerClose(). 1879 ** Destructors are only called by sqlite3PagerUnref(). 1880 */ 1881 void sqlite3PagerSetDestructor(Pager *pPager, void (*xDesc)(DbPage*,int)){ 1882 pPager->xDestructor = xDesc; 1883 } 1884 1885 /* 1886 ** Set the reinitializer for this pager. If not NULL, the reinitializer 1887 ** is called when the content of a page in cache is restored to its original 1888 ** value as a result of a rollback. The callback gives higher-level code 1889 ** an opportunity to restore the EXTRA section to agree with the restored 1890 ** page data. 1891 */ 1892 void sqlite3PagerSetReiniter(Pager *pPager, void (*xReinit)(DbPage*,int)){ 1893 pPager->xReiniter = xReinit; 1894 } 1895 1896 /* 1897 ** Set the page size. Return the new size. If the suggest new page 1898 ** size is inappropriate, then an alternative page size is selected 1899 ** and returned. 1900 */ 1901 int sqlite3PagerSetPagesize(Pager *pPager, int pageSize){ 1902 assert( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE ); 1903 if( !pPager->memDb && pPager->nRef==0 ){ 1904 pager_reset(pPager); 1905 pPager->pageSize = pageSize; 1906 pPager->pTmpSpace = sqlite3ReallocOrFree(pPager->pTmpSpace, pageSize); 1907 } 1908 return pPager->pageSize; 1909 } 1910 1911 /* 1912 ** Attempt to set the maximum database page count if mxPage is positive. 1913 ** Make no changes if mxPage is zero or negative. And never reduce the 1914 ** maximum page count below the current size of the database. 1915 ** 1916 ** Regardless of mxPage, return the current maximum page count. 1917 */ 1918 int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){ 1919 if( mxPage>0 ){ 1920 pPager->mxPgno = mxPage; 1921 } 1922 sqlite3PagerPagecount(pPager); 1923 return pPager->mxPgno; 1924 } 1925 1926 /* 1927 ** The following set of routines are used to disable the simulated 1928 ** I/O error mechanism. These routines are used to avoid simulated 1929 ** errors in places where we do not care about errors. 1930 ** 1931 ** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops 1932 ** and generate no code. 1933 */ 1934 #ifdef SQLITE_TEST 1935 extern int sqlite3_io_error_pending; 1936 extern int sqlite3_io_error_hit; 1937 static int saved_cnt; 1938 void disable_simulated_io_errors(void){ 1939 saved_cnt = sqlite3_io_error_pending; 1940 sqlite3_io_error_pending = -1; 1941 } 1942 void enable_simulated_io_errors(void){ 1943 sqlite3_io_error_pending = saved_cnt; 1944 } 1945 #else 1946 # define disable_simulated_io_errors() 1947 # define enable_simulated_io_errors() 1948 #endif 1949 1950 /* 1951 ** Read the first N bytes from the beginning of the file into memory 1952 ** that pDest points to. 1953 ** 1954 ** No error checking is done. The rational for this is that this function 1955 ** may be called even if the file does not exist or contain a header. In 1956 ** these cases sqlite3OsRead() will return an error, to which the correct 1957 ** response is to zero the memory at pDest and continue. A real IO error 1958 ** will presumably recur and be picked up later (Todo: Think about this). 1959 */ 1960 int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){ 1961 int rc = SQLITE_OK; 1962 memset(pDest, 0, N); 1963 if( MEMDB==0 ){ 1964 disable_simulated_io_errors(); 1965 sqlite3OsSeek(pPager->fd, 0); 1966 enable_simulated_io_errors(); 1967 IOTRACE(("DBHDR %p 0 %d\n", pPager, N)) 1968 rc = sqlite3OsRead(pPager->fd, pDest, N); 1969 if( rc==SQLITE_IOERR_SHORT_READ ){ 1970 rc = SQLITE_OK; 1971 } 1972 } 1973 return rc; 1974 } 1975 1976 /* 1977 ** Return the total number of pages in the disk file associated with 1978 ** pPager. 1979 ** 1980 ** If the PENDING_BYTE lies on the page directly after the end of the 1981 ** file, then consider this page part of the file too. For example, if 1982 ** PENDING_BYTE is byte 4096 (the first byte of page 5) and the size of the 1983 ** file is 4096 bytes, 5 is returned instead of 4. 1984 */ 1985 int sqlite3PagerPagecount(Pager *pPager){ 1986 i64 n; 1987 int rc; 1988 assert( pPager!=0 ); 1989 if( pPager->errCode ){ 1990 return 0; 1991 } 1992 if( pPager->dbSize>=0 ){ 1993 n = pPager->dbSize; 1994 } else { 1995 if( (rc = sqlite3OsFileSize(pPager->fd, &n))!=SQLITE_OK ){ 1996 pager_error(pPager, rc); 1997 return 0; 1998 } 1999 if( n>0 && n<pPager->pageSize ){ 2000 n = 1; 2001 }else{ 2002 n /= pPager->pageSize; 2003 } 2004 if( pPager->state!=PAGER_UNLOCK ){ 2005 pPager->dbSize = n; 2006 } 2007 } 2008 if( n==(PENDING_BYTE/pPager->pageSize) ){ 2009 n++; 2010 } 2011 if( n>pPager->mxPgno ){ 2012 pPager->mxPgno = n; 2013 } 2014 return n; 2015 } 2016 2017 2018 #ifndef SQLITE_OMIT_MEMORYDB 2019 /* 2020 ** Clear a PgHistory block 2021 */ 2022 static void clearHistory(PgHistory *pHist){ 2023 sqliteFree(pHist->pOrig); 2024 sqliteFree(pHist->pStmt); 2025 pHist->pOrig = 0; 2026 pHist->pStmt = 0; 2027 } 2028 #else 2029 #define clearHistory(x) 2030 #endif 2031 2032 /* 2033 ** Forward declaration 2034 */ 2035 static int syncJournal(Pager*); 2036 2037 /* 2038 ** Unlink pPg from it's hash chain. Also set the page number to 0 to indicate 2039 ** that the page is not part of any hash chain. This is required because the 2040 ** sqlite3PagerMovepage() routine can leave a page in the 2041 ** pNextFree/pPrevFree list that is not a part of any hash-chain. 2042 */ 2043 static void unlinkHashChain(Pager *pPager, PgHdr *pPg){ 2044 if( pPg->pgno==0 ){ 2045 assert( pPg->pNextHash==0 && pPg->pPrevHash==0 ); 2046 return; 2047 } 2048 if( pPg->pNextHash ){ 2049 pPg->pNextHash->pPrevHash = pPg->pPrevHash; 2050 } 2051 if( pPg->pPrevHash ){ 2052 assert( pPager->aHash[pPg->pgno & (pPager->nHash-1)]!=pPg ); 2053 pPg->pPrevHash->pNextHash = pPg->pNextHash; 2054 }else{ 2055 int h = pPg->pgno & (pPager->nHash-1); 2056 pPager->aHash[h] = pPg->pNextHash; 2057 } 2058 if( MEMDB ){ 2059 clearHistory(PGHDR_TO_HIST(pPg, pPager)); 2060 } 2061 pPg->pgno = 0; 2062 pPg->pNextHash = pPg->pPrevHash = 0; 2063 } 2064 2065 /* 2066 ** Unlink a page from the free list (the list of all pages where nRef==0) 2067 ** and from its hash collision chain. 2068 */ 2069 static void unlinkPage(PgHdr *pPg){ 2070 Pager *pPager = pPg->pPager; 2071 2072 /* Keep the pFirstSynced pointer pointing at the first synchronized page */ 2073 if( pPg==pPager->pFirstSynced ){ 2074 PgHdr *p = pPg->pNextFree; 2075 while( p && p->needSync ){ p = p->pNextFree; } 2076 pPager->pFirstSynced = p; 2077 } 2078 2079 /* Unlink from the freelist */ 2080 if( pPg->pPrevFree ){ 2081 pPg->pPrevFree->pNextFree = pPg->pNextFree; 2082 }else{ 2083 assert( pPager->pFirst==pPg ); 2084 pPager->pFirst = pPg->pNextFree; 2085 } 2086 if( pPg->pNextFree ){ 2087 pPg->pNextFree->pPrevFree = pPg->pPrevFree; 2088 }else{ 2089 assert( pPager->pLast==pPg ); 2090 pPager->pLast = pPg->pPrevFree; 2091 } 2092 pPg->pNextFree = pPg->pPrevFree = 0; 2093 2094 /* Unlink from the pgno hash table */ 2095 unlinkHashChain(pPager, pPg); 2096 } 2097 2098 /* 2099 ** This routine is used to truncate the cache when a database 2100 ** is truncated. Drop from the cache all pages whose pgno is 2101 ** larger than pPager->dbSize and is unreferenced. 2102 ** 2103 ** Referenced pages larger than pPager->dbSize are zeroed. 2104 ** 2105 ** Actually, at the point this routine is called, it would be 2106 ** an error to have a referenced page. But rather than delete 2107 ** that page and guarantee a subsequent segfault, it seems better 2108 ** to zero it and hope that we error out sanely. 2109 */ 2110 static void pager_truncate_cache(Pager *pPager){ 2111 PgHdr *pPg; 2112 PgHdr **ppPg; 2113 int dbSize = pPager->dbSize; 2114 2115 ppPg = &pPager->pAll; 2116 while( (pPg = *ppPg)!=0 ){ 2117 if( pPg->pgno<=dbSize ){ 2118 ppPg = &pPg->pNextAll; 2119 }else if( pPg->nRef>0 ){ 2120 memset(PGHDR_TO_DATA(pPg), 0, pPager->pageSize); 2121 ppPg = &pPg->pNextAll; 2122 }else{ 2123 *ppPg = pPg->pNextAll; 2124 IOTRACE(("PGFREE %p %d\n", pPager, pPg->pgno)); 2125 PAGER_INCR(sqlite3_pager_pgfree_count); 2126 unlinkPage(pPg); 2127 makeClean(pPg); 2128 sqliteFree(pPg); 2129 pPager->nPage--; 2130 } 2131 } 2132 } 2133 2134 /* 2135 ** Try to obtain a lock on a file. Invoke the busy callback if the lock 2136 ** is currently not available. Repeat until the busy callback returns 2137 ** false or until the lock succeeds. 2138 ** 2139 ** Return SQLITE_OK on success and an error code if we cannot obtain 2140 ** the lock. 2141 */ 2142 static int pager_wait_on_lock(Pager *pPager, int locktype){ 2143 int rc; 2144 2145 /* The OS lock values must be the same as the Pager lock values */ 2146 assert( PAGER_SHARED==SHARED_LOCK ); 2147 assert( PAGER_RESERVED==RESERVED_LOCK ); 2148 assert( PAGER_EXCLUSIVE==EXCLUSIVE_LOCK ); 2149 2150 /* If the file is currently unlocked then the size must be unknown */ 2151 assert( pPager->state>=PAGER_SHARED || pPager->dbSize<0 || MEMDB ); 2152 2153 if( pPager->state>=locktype ){ 2154 rc = SQLITE_OK; 2155 }else{ 2156 do { 2157 rc = sqlite3OsLock(pPager->fd, locktype); 2158 }while( rc==SQLITE_BUSY && sqlite3InvokeBusyHandler(pPager->pBusyHandler) ); 2159 if( rc==SQLITE_OK ){ 2160 pPager->state = locktype; 2161 IOTRACE(("LOCK %p %d\n", pPager, locktype)) 2162 } 2163 } 2164 return rc; 2165 } 2166 2167 /* 2168 ** Truncate the file to the number of pages specified. 2169 */ 2170 int sqlite3PagerTruncate(Pager *pPager, Pgno nPage){ 2171 int rc; 2172 assert( pPager->state>=PAGER_SHARED || MEMDB ); 2173 sqlite3PagerPagecount(pPager); 2174 if( pPager->errCode ){ 2175 rc = pPager->errCode; 2176 return rc; 2177 } 2178 if( nPage>=(unsigned)pPager->dbSize ){ 2179 return SQLITE_OK; 2180 } 2181 if( MEMDB ){ 2182 pPager->dbSize = nPage; 2183 pager_truncate_cache(pPager); 2184 return SQLITE_OK; 2185 } 2186 rc = syncJournal(pPager); 2187 if( rc!=SQLITE_OK ){ 2188 return rc; 2189 } 2190 2191 /* Get an exclusive lock on the database before truncating. */ 2192 rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); 2193 if( rc!=SQLITE_OK ){ 2194 return rc; 2195 } 2196 2197 rc = pager_truncate(pPager, nPage); 2198 return rc; 2199 } 2200 2201 /* 2202 ** Shutdown the page cache. Free all memory and close all files. 2203 ** 2204 ** If a transaction was in progress when this routine is called, that 2205 ** transaction is rolled back. All outstanding pages are invalidated 2206 ** and their memory is freed. Any attempt to use a page associated 2207 ** with this page cache after this function returns will likely 2208 ** result in a coredump. 2209 ** 2210 ** This function always succeeds. If a transaction is active an attempt 2211 ** is made to roll it back. If an error occurs during the rollback 2212 ** a hot journal may be left in the filesystem but no error is returned 2213 ** to the caller. 2214 */ 2215 int sqlite3PagerClose(Pager *pPager){ 2216 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT 2217 /* A malloc() cannot fail in sqlite3ThreadData() as one or more calls to 2218 ** malloc() must have already been made by this thread before it gets 2219 ** to this point. This means the ThreadData must have been allocated already 2220 ** so that ThreadData.nAlloc can be set. 2221 */ 2222 ThreadData *pTsd = sqlite3ThreadData(); 2223 assert( pPager ); 2224 assert( pTsd && pTsd->nAlloc ); 2225 #endif 2226 2227 disable_simulated_io_errors(); 2228 pPager->errCode = 0; 2229 pPager->exclusiveMode = 0; 2230 pager_reset(pPager); 2231 pagerUnlockAndRollback(pPager); 2232 enable_simulated_io_errors(); 2233 PAGERTRACE2("CLOSE %d\n", PAGERID(pPager)); 2234 IOTRACE(("CLOSE %p\n", pPager)) 2235 assert( pPager->errCode || (pPager->journalOpen==0 && pPager->stmtOpen==0) ); 2236 if( pPager->journalOpen ){ 2237 sqlite3OsClose(&pPager->jfd); 2238 } 2239 sqliteFree(pPager->aInJournal); 2240 if( pPager->stmtOpen ){ 2241 sqlite3OsClose(&pPager->stfd); 2242 } 2243 sqlite3OsClose(&pPager->fd); 2244 /* Temp files are automatically deleted by the OS 2245 ** if( pPager->tempFile ){ 2246 ** sqlite3OsDelete(pPager->zFilename); 2247 ** } 2248 */ 2249 2250 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT 2251 /* Remove the pager from the linked list of pagers starting at 2252 ** ThreadData.pPager if memory-management is enabled. 2253 */ 2254 if( pPager==pTsd->pPager ){ 2255 pTsd->pPager = pPager->pNext; 2256 }else{ 2257 Pager *pTmp; 2258 for(pTmp = pTsd->pPager; pTmp->pNext!=pPager; pTmp=pTmp->pNext){} 2259 pTmp->pNext = pPager->pNext; 2260 } 2261 #endif 2262 sqliteFree(pPager->aHash); 2263 sqliteFree(pPager->pTmpSpace); 2264 sqliteFree(pPager); 2265 return SQLITE_OK; 2266 } 2267 2268 #if !defined(NDEBUG) || defined(SQLITE_TEST) 2269 /* 2270 ** Return the page number for the given page data. 2271 */ 2272 Pgno sqlite3PagerPagenumber(DbPage *p){ 2273 return p->pgno; 2274 } 2275 #endif 2276 2277 /* 2278 ** The page_ref() function increments the reference count for a page. 2279 ** If the page is currently on the freelist (the reference count is zero) then 2280 ** remove it from the freelist. 2281 ** 2282 ** For non-test systems, page_ref() is a macro that calls _page_ref() 2283 ** online of the reference count is zero. For test systems, page_ref() 2284 ** is a real function so that we can set breakpoints and trace it. 2285 */ 2286 static void _page_ref(PgHdr *pPg){ 2287 if( pPg->nRef==0 ){ 2288 /* The page is currently on the freelist. Remove it. */ 2289 if( pPg==pPg->pPager->pFirstSynced ){ 2290 PgHdr *p = pPg->pNextFree; 2291 while( p && p->needSync ){ p = p->pNextFree; } 2292 pPg->pPager->pFirstSynced = p; 2293 } 2294 if( pPg->pPrevFree ){ 2295 pPg->pPrevFree->pNextFree = pPg->pNextFree; 2296 }else{ 2297 pPg->pPager->pFirst = pPg->pNextFree; 2298 } 2299 if( pPg->pNextFree ){ 2300 pPg->pNextFree->pPrevFree = pPg->pPrevFree; 2301 }else{ 2302 pPg->pPager->pLast = pPg->pPrevFree; 2303 } 2304 pPg->pPager->nRef++; 2305 } 2306 pPg->nRef++; 2307 REFINFO(pPg); 2308 } 2309 #ifdef SQLITE_DEBUG 2310 static void page_ref(PgHdr *pPg){ 2311 if( pPg->nRef==0 ){ 2312 _page_ref(pPg); 2313 }else{ 2314 pPg->nRef++; 2315 REFINFO(pPg); 2316 } 2317 } 2318 #else 2319 # define page_ref(P) ((P)->nRef==0?_page_ref(P):(void)(P)->nRef++) 2320 #endif 2321 2322 /* 2323 ** Increment the reference count for a page. The input pointer is 2324 ** a reference to the page data. 2325 */ 2326 int sqlite3PagerRef(DbPage *pPg){ 2327 page_ref(pPg); 2328 return SQLITE_OK; 2329 } 2330 2331 /* 2332 ** Sync the journal. In other words, make sure all the pages that have 2333 ** been written to the journal have actually reached the surface of the 2334 ** disk. It is not safe to modify the original database file until after 2335 ** the journal has been synced. If the original database is modified before 2336 ** the journal is synced and a power failure occurs, the unsynced journal 2337 ** data would be lost and we would be unable to completely rollback the 2338 ** database changes. Database corruption would occur. 2339 ** 2340 ** This routine also updates the nRec field in the header of the journal. 2341 ** (See comments on the pager_playback() routine for additional information.) 2342 ** If the sync mode is FULL, two syncs will occur. First the whole journal 2343 ** is synced, then the nRec field is updated, then a second sync occurs. 2344 ** 2345 ** For temporary databases, we do not care if we are able to rollback 2346 ** after a power failure, so sync occurs. 2347 ** 2348 ** This routine clears the needSync field of every page current held in 2349 ** memory. 2350 */ 2351 static int syncJournal(Pager *pPager){ 2352 PgHdr *pPg; 2353 int rc = SQLITE_OK; 2354 2355 /* Sync the journal before modifying the main database 2356 ** (assuming there is a journal and it needs to be synced.) 2357 */ 2358 if( pPager->needSync ){ 2359 if( !pPager->tempFile ){ 2360 assert( pPager->journalOpen ); 2361 /* assert( !pPager->noSync ); // noSync might be set if synchronous 2362 ** was turned off after the transaction was started. Ticket #615 */ 2363 #ifndef NDEBUG 2364 { 2365 /* Make sure the pPager->nRec counter we are keeping agrees 2366 ** with the nRec computed from the size of the journal file. 2367 */ 2368 i64 jSz; 2369 rc = sqlite3OsFileSize(pPager->jfd, &jSz); 2370 if( rc!=0 ) return rc; 2371 assert( pPager->journalOff==jSz ); 2372 } 2373 #endif 2374 { 2375 /* Write the nRec value into the journal file header. If in 2376 ** full-synchronous mode, sync the journal first. This ensures that 2377 ** all data has really hit the disk before nRec is updated to mark 2378 ** it as a candidate for rollback. 2379 */ 2380 if( pPager->fullSync ){ 2381 PAGERTRACE2("SYNC journal of %d\n", PAGERID(pPager)); 2382 IOTRACE(("JSYNC %p\n", pPager)) 2383 rc = sqlite3OsSync(pPager->jfd, 0); 2384 if( rc!=0 ) return rc; 2385 } 2386 rc = sqlite3OsSeek(pPager->jfd, 2387 pPager->journalHdr + sizeof(aJournalMagic)); 2388 if( rc ) return rc; 2389 IOTRACE(("JHDR %p %lld %d\n", pPager, 2390 pPager->journalHdr + sizeof(aJournalMagic), 4)) 2391 rc = write32bits(pPager->jfd, pPager->nRec); 2392 if( rc ) return rc; 2393 2394 rc = sqlite3OsSeek(pPager->jfd, pPager->journalOff); 2395 if( rc ) return rc; 2396 } 2397 PAGERTRACE2("SYNC journal of %d\n", PAGERID(pPager)); 2398 IOTRACE(("JSYNC %p\n", pPager)) 2399 rc = sqlite3OsSync(pPager->jfd, pPager->full_fsync); 2400 if( rc!=0 ) return rc; 2401 pPager->journalStarted = 1; 2402 } 2403 pPager->needSync = 0; 2404 2405 /* Erase the needSync flag from every page. 2406 */ 2407 for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){ 2408 pPg->needSync = 0; 2409 } 2410 pPager->pFirstSynced = pPager->pFirst; 2411 } 2412 2413 #ifndef NDEBUG 2414 /* If the Pager.needSync flag is clear then the PgHdr.needSync 2415 ** flag must also be clear for all pages. Verify that this 2416 ** invariant is true. 2417 */ 2418 else{ 2419 for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){ 2420 assert( pPg->needSync==0 ); 2421 } 2422 assert( pPager->pFirstSynced==pPager->pFirst ); 2423 } 2424 #endif 2425 2426 return rc; 2427 } 2428 2429 /* 2430 ** Merge two lists of pages connected by pDirty and in pgno order. 2431 ** Do not both fixing the pPrevDirty pointers. 2432 */ 2433 static PgHdr *merge_pagelist(PgHdr *pA, PgHdr *pB){ 2434 PgHdr result, *pTail; 2435 pTail = &result; 2436 while( pA && pB ){ 2437 if( pA->pgno<pB->pgno ){ 2438 pTail->pDirty = pA; 2439 pTail = pA; 2440 pA = pA->pDirty; 2441 }else{ 2442 pTail->pDirty = pB; 2443 pTail = pB; 2444 pB = pB->pDirty; 2445 } 2446 } 2447 if( pA ){ 2448 pTail->pDirty = pA; 2449 }else if( pB ){ 2450 pTail->pDirty = pB; 2451 }else{ 2452 pTail->pDirty = 0; 2453 } 2454 return result.pDirty; 2455 } 2456 2457 /* 2458 ** Sort the list of pages in accending order by pgno. Pages are 2459 ** connected by pDirty pointers. The pPrevDirty pointers are 2460 ** corrupted by this sort. 2461 */ 2462 #define N_SORT_BUCKET_ALLOC 25 2463 #define N_SORT_BUCKET 25 2464 #ifdef SQLITE_TEST 2465 int sqlite3_pager_n_sort_bucket = 0; 2466 #undef N_SORT_BUCKET 2467 #define N_SORT_BUCKET \ 2468 (sqlite3_pager_n_sort_bucket?sqlite3_pager_n_sort_bucket:N_SORT_BUCKET_ALLOC) 2469 #endif 2470 static PgHdr *sort_pagelist(PgHdr *pIn){ 2471 PgHdr *a[N_SORT_BUCKET_ALLOC], *p; 2472 int i; 2473 memset(a, 0, sizeof(a)); 2474 while( pIn ){ 2475 p = pIn; 2476 pIn = p->pDirty; 2477 p->pDirty = 0; 2478 for(i=0; i<N_SORT_BUCKET-1; i++){ 2479 if( a[i]==0 ){ 2480 a[i] = p; 2481 break; 2482 }else{ 2483 p = merge_pagelist(a[i], p); 2484 a[i] = 0; 2485 } 2486 } 2487 if( i==N_SORT_BUCKET-1 ){ 2488 /* Coverage: To get here, there need to be 2^(N_SORT_BUCKET) 2489 ** elements in the input list. This is possible, but impractical. 2490 ** Testing this line is the point of global variable 2491 ** sqlite3_pager_n_sort_bucket. 2492 */ 2493 a[i] = merge_pagelist(a[i], p); 2494 } 2495 } 2496 p = a[0]; 2497 for(i=1; i<N_SORT_BUCKET; i++){ 2498 p = merge_pagelist(p, a[i]); 2499 } 2500 return p; 2501 } 2502 2503 /* 2504 ** Given a list of pages (connected by the PgHdr.pDirty pointer) write 2505 ** every one of those pages out to the database file and mark them all 2506 ** as clean. 2507 */ 2508 static int pager_write_pagelist(PgHdr *pList){ 2509 Pager *pPager; 2510 int rc; 2511 2512 if( pList==0 ) return SQLITE_OK; 2513 pPager = pList->pPager; 2514 2515 /* At this point there may be either a RESERVED or EXCLUSIVE lock on the 2516 ** database file. If there is already an EXCLUSIVE lock, the following 2517 ** calls to sqlite3OsLock() are no-ops. 2518 ** 2519 ** Moving the lock from RESERVED to EXCLUSIVE actually involves going 2520 ** through an intermediate state PENDING. A PENDING lock prevents new 2521 ** readers from attaching to the database but is unsufficient for us to 2522 ** write. The idea of a PENDING lock is to prevent new readers from 2523 ** coming in while we wait for existing readers to clear. 2524 ** 2525 ** While the pager is in the RESERVED state, the original database file 2526 ** is unchanged and we can rollback without having to playback the 2527 ** journal into the original database file. Once we transition to 2528 ** EXCLUSIVE, it means the database file has been changed and any rollback 2529 ** will require a journal playback. 2530 */ 2531 rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); 2532 if( rc!=SQLITE_OK ){ 2533 return rc; 2534 } 2535 2536 pList = sort_pagelist(pList); 2537 while( pList ){ 2538 assert( pList->dirty ); 2539 rc = sqlite3OsSeek(pPager->fd, (pList->pgno-1)*(i64)pPager->pageSize); 2540 if( rc ) return rc; 2541 /* If there are dirty pages in the page cache with page numbers greater 2542 ** than Pager.dbSize, this means sqlite3PagerTruncate() was called to 2543 ** make the file smaller (presumably by auto-vacuum code). Do not write 2544 ** any such pages to the file. 2545 */ 2546 if( pList->pgno<=pPager->dbSize ){ 2547 char *pData = CODEC2(pPager, PGHDR_TO_DATA(pList), pList->pgno, 6); 2548 PAGERTRACE4("STORE %d page %d hash(%08x)\n", 2549 PAGERID(pPager), pList->pgno, pager_pagehash(pList)); 2550 IOTRACE(("PGOUT %p %d\n", pPager, pList->pgno)); 2551 rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize); 2552 PAGER_INCR(sqlite3_pager_writedb_count); 2553 PAGER_INCR(pPager->nWrite); 2554 if( pList->pgno==1 ){ 2555 memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers)); 2556 } 2557 } 2558 #ifndef NDEBUG 2559 else{ 2560 PAGERTRACE3("NOSTORE %d page %d\n", PAGERID(pPager), pList->pgno); 2561 } 2562 #endif 2563 if( rc ) return rc; 2564 pList->dirty = 0; 2565 #ifdef SQLITE_CHECK_PAGES 2566 pList->pageHash = pager_pagehash(pList); 2567 #endif 2568 pList = pList->pDirty; 2569 } 2570 return SQLITE_OK; 2571 } 2572 2573 /* 2574 ** Collect every dirty page into a dirty list and 2575 ** return a pointer to the head of that list. All pages are 2576 ** collected even if they are still in use. 2577 */ 2578 static PgHdr *pager_get_all_dirty_pages(Pager *pPager){ 2579 return pPager->pDirty; 2580 } 2581 2582 /* 2583 ** Return TRUE if there is a hot journal on the given pager. 2584 ** A hot journal is one that needs to be played back. 2585 ** 2586 ** If the current size of the database file is 0 but a journal file 2587 ** exists, that is probably an old journal left over from a prior 2588 ** database with the same name. Just delete the journal. 2589 */ 2590 static int hasHotJournal(Pager *pPager){ 2591 if( !pPager->useJournal ) return 0; 2592 if( !sqlite3OsFileExists(pPager->zJournal) ){ 2593 return 0; 2594 } 2595 if( sqlite3OsCheckReservedLock(pPager->fd) ){ 2596 return 0; 2597 } 2598 if( sqlite3PagerPagecount(pPager)==0 ){ 2599 sqlite3OsDelete(pPager->zJournal); 2600 return 0; 2601 }else{ 2602 return 1; 2603 } 2604 } 2605 2606 /* 2607 ** Try to find a page in the cache that can be recycled. 2608 ** 2609 ** This routine may return SQLITE_IOERR, SQLITE_FULL or SQLITE_OK. It 2610 ** does not set the pPager->errCode variable. 2611 */ 2612 static int pager_recycle(Pager *pPager, int syncOk, PgHdr **ppPg){ 2613 PgHdr *pPg; 2614 *ppPg = 0; 2615 2616 assert(!MEMDB); 2617 2618 /* Find a page to recycle. Try to locate a page that does not 2619 ** require us to do an fsync() on the journal. 2620 */ 2621 pPg = pPager->pFirstSynced; 2622 2623 /* If we could not find a page that does not require an fsync() 2624 ** on the journal file then fsync the journal file. This is a 2625 ** very slow operation, so we work hard to avoid it. But sometimes 2626 ** it can't be helped. 2627 */ 2628 if( pPg==0 && pPager->pFirst && syncOk && !MEMDB){ 2629 int rc = syncJournal(pPager); 2630 if( rc!=0 ){ 2631 return rc; 2632 } 2633 if( pPager->fullSync ){ 2634 /* If in full-sync mode, write a new journal header into the 2635 ** journal file. This is done to avoid ever modifying a journal 2636 ** header that is involved in the rollback of pages that have 2637 ** already been written to the database (in case the header is 2638 ** trashed when the nRec field is updated). 2639 */ 2640 pPager->nRec = 0; 2641 assert( pPager->journalOff > 0 ); 2642 assert( pPager->doNotSync==0 ); 2643 rc = writeJournalHdr(pPager); 2644 if( rc!=0 ){ 2645 return rc; 2646 } 2647 } 2648 pPg = pPager->pFirst; 2649 } 2650 if( pPg==0 ){ 2651 return SQLITE_OK; 2652 } 2653 2654 assert( pPg->nRef==0 ); 2655 2656 /* Write the page to the database file if it is dirty. 2657 */ 2658 if( pPg->dirty ){ 2659 int rc; 2660 assert( pPg->needSync==0 ); 2661 makeClean(pPg); 2662 pPg->dirty = 1; 2663 pPg->pDirty = 0; 2664 rc = pager_write_pagelist( pPg ); 2665 if( rc!=SQLITE_OK ){ 2666 return rc; 2667 } 2668 } 2669 assert( pPg->dirty==0 ); 2670 2671 /* If the page we are recycling is marked as alwaysRollback, then 2672 ** set the global alwaysRollback flag, thus disabling the 2673 ** sqlite3PagerDontRollback() optimization for the rest of this transaction. 2674 ** It is necessary to do this because the page marked alwaysRollback 2675 ** might be reloaded at a later time but at that point we won't remember 2676 ** that is was marked alwaysRollback. This means that all pages must 2677 ** be marked as alwaysRollback from here on out. 2678 */ 2679 if( pPg->alwaysRollback ){ 2680 IOTRACE(("ALWAYS_ROLLBACK %p\n", pPager)) 2681 pPager->alwaysRollback = 1; 2682 } 2683 2684 /* Unlink the old page from the free list and the hash table 2685 */ 2686 unlinkPage(pPg); 2687 assert( pPg->pgno==0 ); 2688 2689 *ppPg = pPg; 2690 return SQLITE_OK; 2691 } 2692 2693 /* 2694 ** This function is called to free superfluous dynamically allocated memory 2695 ** held by the pager system. Memory in use by any SQLite pager allocated 2696 ** by the current thread may be sqliteFree()ed. 2697 ** 2698 ** nReq is the number of bytes of memory required. Once this much has 2699 ** been released, the function returns. A negative value for nReq means 2700 ** free as much memory as possible. The return value is the total number 2701 ** of bytes of memory released. 2702 */ 2703 #if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) && !defined(SQLITE_OMIT_DISKIO) 2704 int sqlite3PagerReleaseMemory(int nReq){ 2705 const ThreadData *pTsdro = sqlite3ThreadDataReadOnly(); 2706 int nReleased = 0; 2707 int i; 2708 2709 /* If the the global mutex is held, this subroutine becomes a 2710 ** o-op; zero bytes of memory are freed. This is because 2711 ** some of the code invoked by this function may also 2712 ** try to obtain the mutex, resulting in a deadlock. 2713 */ 2714 if( sqlite3OsInMutex(0) ){ 2715 return 0; 2716 } 2717 2718 /* Outermost loop runs for at most two iterations. First iteration we 2719 ** try to find memory that can be released without calling fsync(). Second 2720 ** iteration (which only runs if the first failed to free nReq bytes of 2721 ** memory) is permitted to call fsync(). This is of course much more 2722 ** expensive. 2723 */ 2724 for(i=0; i<=1; i++){ 2725 2726 /* Loop through all the SQLite pagers opened by the current thread. */ 2727 Pager *pPager = pTsdro->pPager; 2728 for( ; pPager && (nReq<0 || nReleased<nReq); pPager=pPager->pNext){ 2729 PgHdr *pPg; 2730 int rc; 2731 2732 if( MEMDB ){ 2733 continue; 2734 } 2735 2736 /* For each pager, try to free as many pages as possible (without 2737 ** calling fsync() if this is the first iteration of the outermost 2738 ** loop). 2739 */ 2740 while( SQLITE_OK==(rc = pager_recycle(pPager, i, &pPg)) && pPg) { 2741 /* We've found a page to free. At this point the page has been 2742 ** removed from the page hash-table, free-list and synced-list 2743 ** (pFirstSynced). It is still in the all pages (pAll) list. 2744 ** Remove it from this list before freeing. 2745 ** 2746 ** Todo: Check the Pager.pStmt list to make sure this is Ok. It 2747 ** probably is though. 2748 */ 2749 PgHdr *pTmp; 2750 assert( pPg ); 2751 if( pPg==pPager->pAll ){ 2752 pPager->pAll = pPg->pNextAll; 2753 }else{ 2754 for( pTmp=pPager->pAll; pTmp->pNextAll!=pPg; pTmp=pTmp->pNextAll ){} 2755 pTmp->pNextAll = pPg->pNextAll; 2756 } 2757 nReleased += sqliteAllocSize(pPg); 2758 IOTRACE(("PGFREE %p %d\n", pPager, pPg->pgno)); 2759 PAGER_INCR(sqlite3_pager_pgfree_count); 2760 sqliteFree(pPg); 2761 } 2762 2763 if( rc!=SQLITE_OK ){ 2764 /* An error occured whilst writing to the database file or 2765 ** journal in pager_recycle(). The error is not returned to the 2766 ** caller of this function. Instead, set the Pager.errCode variable. 2767 ** The error will be returned to the user (or users, in the case 2768 ** of a shared pager cache) of the pager for which the error occured. 2769 */ 2770 assert( (rc&0xff)==SQLITE_IOERR || rc==SQLITE_FULL ); 2771 assert( pPager->state>=PAGER_RESERVED ); 2772 pager_error(pPager, rc); 2773 } 2774 } 2775 } 2776 2777 return nReleased; 2778 } 2779 #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT && !SQLITE_OMIT_DISKIO */ 2780 2781 /* 2782 ** Read the content of page pPg out of the database file. 2783 */ 2784 static int readDbPage(Pager *pPager, PgHdr *pPg, Pgno pgno){ 2785 int rc; 2786 assert( MEMDB==0 ); 2787 rc = sqlite3OsSeek(pPager->fd, (pgno-1)*(i64)pPager->pageSize); 2788 if( rc==SQLITE_OK ){ 2789 rc = sqlite3OsRead(pPager->fd, PGHDR_TO_DATA(pPg), 2790 pPager->pageSize); 2791 } 2792 PAGER_INCR(sqlite3_pager_readdb_count); 2793 PAGER_INCR(pPager->nRead); 2794 IOTRACE(("PGIN %p %d\n", pPager, pgno)); 2795 if( pgno==1 ){ 2796 memcpy(&pPager->dbFileVers, &((u8*)PGHDR_TO_DATA(pPg))[24], 2797 sizeof(pPager->dbFileVers)); 2798 } 2799 CODEC1(pPager, PGHDR_TO_DATA(pPg), pPg->pgno, 3); 2800 PAGERTRACE4("FETCH %d page %d hash(%08x)\n", 2801 PAGERID(pPager), pPg->pgno, pager_pagehash(pPg)); 2802 return rc; 2803 } 2804 2805 2806 /* 2807 ** This function is called to obtain the shared lock required before 2808 ** data may be read from the pager cache. If the shared lock has already 2809 ** been obtained, this function is a no-op. 2810 ** 2811 ** Immediately after obtaining the shared lock (if required), this function 2812 ** checks for a hot-journal file. If one is found, an emergency rollback 2813 ** is performed immediately. 2814 */ 2815 static int pagerSharedLock(Pager *pPager){ 2816 int rc = SQLITE_OK; 2817 2818 if( pPager->state==PAGER_UNLOCK ){ 2819 if( !MEMDB ){ 2820 assert( pPager->nRef==0 ); 2821 if( !pPager->noReadlock ){ 2822 rc = pager_wait_on_lock(pPager, SHARED_LOCK); 2823 if( rc!=SQLITE_OK ){ 2824 return pager_error(pPager, rc); 2825 } 2826 assert( pPager->state>=SHARED_LOCK ); 2827 } 2828 2829 /* If a journal file exists, and there is no RESERVED lock on the 2830 ** database file, then it either needs to be played back or deleted. 2831 */ 2832 if( hasHotJournal(pPager) ){ 2833 /* Get an EXCLUSIVE lock on the database file. At this point it is 2834 ** important that a RESERVED lock is not obtained on the way to the 2835 ** EXCLUSIVE lock. If it were, another process might open the 2836 ** database file, detect the RESERVED lock, and conclude that the 2837 ** database is safe to read while this process is still rolling it 2838 ** back. 2839 ** 2840 ** Because the intermediate RESERVED lock is not requested, the 2841 ** second process will get to this point in the code and fail to 2842 ** obtain it's own EXCLUSIVE lock on the database file. 2843 */ 2844 rc = sqlite3OsLock(pPager->fd, EXCLUSIVE_LOCK); 2845 if( rc!=SQLITE_OK ){ 2846 pager_unlock(pPager); 2847 return pager_error(pPager, rc); 2848 } 2849 pPager->state = PAGER_EXCLUSIVE; 2850 2851 /* Open the journal for reading only. Return SQLITE_BUSY if 2852 ** we are unable to open the journal file. 2853 ** 2854 ** The journal file does not need to be locked itself. The 2855 ** journal file is never open unless the main database file holds 2856 ** a write lock, so there is never any chance of two or more 2857 ** processes opening the journal at the same time. 2858 ** 2859 ** Open the journal for read/write access. This is because in 2860 ** exclusive-access mode the file descriptor will be kept open and 2861 ** possibly used for a transaction later on. On some systems, the 2862 ** OsTruncate() call used in exclusive-access mode also requires 2863 ** a read/write file handle. 2864 */ 2865 rc = SQLITE_BUSY; 2866 if( sqlite3OsFileExists(pPager->zJournal) ){ 2867 int ro; 2868 assert( !pPager->tempFile ); 2869 rc = sqlite3OsOpenReadWrite(pPager->zJournal, &pPager->jfd, &ro); 2870 assert( rc!=SQLITE_OK || pPager->jfd ); 2871 if( ro ){ 2872 rc = SQLITE_BUSY; 2873 sqlite3OsClose(&pPager->jfd); 2874 } 2875 } 2876 if( rc!=SQLITE_OK ){ 2877 pager_unlock(pPager); 2878 return SQLITE_BUSY; 2879 } 2880 pPager->journalOpen = 1; 2881 pPager->journalStarted = 0; 2882 pPager->journalOff = 0; 2883 pPager->setMaster = 0; 2884 pPager->journalHdr = 0; 2885 2886 /* Playback and delete the journal. Drop the database write 2887 ** lock and reacquire the read lock. 2888 */ 2889 rc = pager_playback(pPager, 1); 2890 if( rc!=SQLITE_OK ){ 2891 return pager_error(pPager, rc); 2892 } 2893 assert(pPager->state==PAGER_SHARED || 2894 (pPager->exclusiveMode && pPager->state>PAGER_SHARED) 2895 ); 2896 } 2897 2898 if( pPager->pAll ){ 2899 /* The shared-lock has just been acquired on the database file 2900 ** and there are already pages in the cache (from a previous 2901 ** read or write transaction). Check to see if the database 2902 ** has been modified. If the database has changed, flush the 2903 ** cache. 2904 ** 2905 ** Database changes is detected by looking at 15 bytes beginning 2906 ** at offset 24 into the file. The first 4 of these 16 bytes are 2907 ** a 32-bit counter that is incremented with each change. The 2908 ** other bytes change randomly with each file change when 2909 ** a codec is in use. 2910 ** 2911 ** There is a vanishingly small chance that a change will not be 2912 ** detected. The chance of an undetected change is so small that 2913 ** it can be neglected. 2914 */ 2915 char dbFileVers[sizeof(pPager->dbFileVers)]; 2916 sqlite3PagerPagecount(pPager); 2917 2918 if( pPager->errCode ){ 2919 return pPager->errCode; 2920 } 2921 2922 if( pPager->dbSize>0 ){ 2923 IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); 2924 rc = sqlite3OsSeek(pPager->fd, 24); 2925 if( rc!=SQLITE_OK ){ 2926 return rc; 2927 } 2928 rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers)); 2929 if( rc!=SQLITE_OK ){ 2930 return rc; 2931 } 2932 }else{ 2933 memset(dbFileVers, 0, sizeof(dbFileVers)); 2934 } 2935 2936 if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){ 2937 pager_reset(pPager); 2938 } 2939 } 2940 } 2941 assert( pPager->exclusiveMode || pPager->state<=PAGER_SHARED ); 2942 if( pPager->state==PAGER_UNLOCK ){ 2943 pPager->state = PAGER_SHARED; 2944 } 2945 } 2946 2947 return rc; 2948 } 2949 2950 /* 2951 ** Allocate a PgHdr object. Either create a new one or reuse 2952 ** an existing one that is not otherwise in use. 2953 ** 2954 ** A new PgHdr structure is created if any of the following are 2955 ** true: 2956 ** 2957 ** (1) We have not exceeded our maximum allocated cache size 2958 ** as set by the "PRAGMA cache_size" command. 2959 ** 2960 ** (2) There are no unused PgHdr objects available at this time. 2961 ** 2962 ** (3) This is an in-memory database. 2963 ** 2964 ** (4) There are no PgHdr objects that do not require a journal 2965 ** file sync and a sync of the journal file is currently 2966 ** prohibited. 2967 ** 2968 ** Otherwise, reuse an existing PgHdr. In other words, reuse an 2969 ** existing PgHdr if all of the following are true: 2970 ** 2971 ** (1) We have reached or exceeded the maximum cache size 2972 ** allowed by "PRAGMA cache_size". 2973 ** 2974 ** (2) There is a PgHdr available with PgHdr->nRef==0 2975 ** 2976 ** (3) We are not in an in-memory database 2977 ** 2978 ** (4) Either there is an available PgHdr that does not need 2979 ** to be synced to disk or else disk syncing is currently 2980 ** allowed. 2981 */ 2982 static int pagerAllocatePage(Pager *pPager, PgHdr **ppPg){ 2983 int rc = SQLITE_OK; 2984 PgHdr *pPg; 2985 2986 /* Create a new PgHdr if any of the four conditions defined 2987 ** above is met: */ 2988 if( pPager->nPage<pPager->mxPage 2989 || pPager->pFirst==0 2990 || MEMDB 2991 || (pPager->pFirstSynced==0 && pPager->doNotSync) 2992 ){ 2993 if( pPager->nPage>=pPager->nHash ){ 2994 pager_resize_hash_table(pPager, 2995 pPager->nHash<256 ? 256 : pPager->nHash*2); 2996 if( pPager->nHash==0 ){ 2997 rc = SQLITE_NOMEM; 2998 goto pager_allocate_out; 2999 } 3000 } 3001 pPg = sqliteMallocRaw( sizeof(*pPg) + pPager->pageSize 3002 + sizeof(u32) + pPager->nExtra 3003 + MEMDB*sizeof(PgHistory) ); 3004 if( pPg==0 ){ 3005 rc = SQLITE_NOMEM; 3006 goto pager_allocate_out; 3007 } 3008 memset(pPg, 0, sizeof(*pPg)); 3009 if( MEMDB ){ 3010 memset(PGHDR_TO_HIST(pPg, pPager), 0, sizeof(PgHistory)); 3011 } 3012 pPg->pPager = pPager; 3013 pPg->pNextAll = pPager->pAll; 3014 pPager->pAll = pPg; 3015 pPager->nPage++; 3016 }else{ 3017 /* Recycle an existing page with a zero ref-count. */ 3018 rc = pager_recycle(pPager, 1, &pPg); 3019 if( rc==SQLITE_BUSY ){ 3020 rc = SQLITE_IOERR_BLOCKED; 3021 } 3022 if( rc!=SQLITE_OK ){ 3023 goto pager_allocate_out; 3024 } 3025 assert( pPager->state>=SHARED_LOCK ); 3026 assert(pPg); 3027 } 3028 *ppPg = pPg; 3029 3030 pager_allocate_out: 3031 return rc; 3032 } 3033 3034 /* 3035 ** Make sure we have the content for a page. If the page was 3036 ** previously acquired with noContent==1, then the content was 3037 ** just initialized to zeros instead of being read from disk. 3038 ** But now we need the real data off of disk. So make sure we 3039 ** have it. Read it in if we do not have it already. 3040 */ 3041 static int pager_get_content(PgHdr *pPg){ 3042 if( pPg->needRead ){ 3043 int rc = readDbPage(pPg->pPager, pPg, pPg->pgno); 3044 if( rc==SQLITE_OK ){ 3045 pPg->needRead = 0; 3046 }else{ 3047 return rc; 3048 } 3049 } 3050 return SQLITE_OK; 3051 } 3052 3053 /* 3054 ** Acquire a page. 3055 ** 3056 ** A read lock on the disk file is obtained when the first page is acquired. 3057 ** This read lock is dropped when the last page is released. 3058 ** 3059 ** This routine works for any page number greater than 0. If the database 3060 ** file is smaller than the requested page, then no actual disk 3061 ** read occurs and the memory image of the page is initialized to 3062 ** all zeros. The extra data appended to a page is always initialized 3063 ** to zeros the first time a page is loaded into memory. 3064 ** 3065 ** The acquisition might fail for several reasons. In all cases, 3066 ** an appropriate error code is returned and *ppPage is set to NULL. 3067 ** 3068 ** See also sqlite3PagerLookup(). Both this routine and Lookup() attempt 3069 ** to find a page in the in-memory cache first. If the page is not already 3070 ** in memory, this routine goes to disk to read it in whereas Lookup() 3071 ** just returns 0. This routine acquires a read-lock the first time it 3072 ** has to go to disk, and could also playback an old journal if necessary. 3073 ** Since Lookup() never goes to disk, it never has to deal with locks 3074 ** or journal files. 3075 ** 3076 ** If noContent is false, the page contents are actually read from disk. 3077 ** If noContent is true, it means that we do not care about the contents 3078 ** of the page at this time, so do not do a disk read. Just fill in the 3079 ** page content with zeros. But mark the fact that we have not read the 3080 ** content by setting the PgHdr.needRead flag. Later on, if 3081 ** sqlite3PagerWrite() is called on this page or if this routine is 3082 ** called again with noContent==0, that means that the content is needed 3083 ** and the disk read should occur at that point. 3084 */ 3085 int sqlite3PagerAcquire( 3086 Pager *pPager, /* The pager open on the database file */ 3087 Pgno pgno, /* Page number to fetch */ 3088 DbPage **ppPage, /* Write a pointer to the page here */ 3089 int noContent /* Do not bother reading content from disk if true */ 3090 ){ 3091 PgHdr *pPg; 3092 int rc; 3093 3094 assert( pPager->state==PAGER_UNLOCK || pPager->nRef>0 || pgno==1 ); 3095 3096 /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page 3097 ** number greater than this, or zero, is requested. 3098 */ 3099 if( pgno>PAGER_MAX_PGNO || pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){ 3100 return SQLITE_CORRUPT_BKPT; 3101 } 3102 3103 /* Make sure we have not hit any critical errors. 3104 */ 3105 assert( pPager!=0 ); 3106 *ppPage = 0; 3107 if( pPager->errCode && pPager->errCode!=SQLITE_FULL ){ 3108 return pPager->errCode; 3109 } 3110 3111 /* If this is the first page accessed, then get a SHARED lock 3112 ** on the database file. pagerSharedLock() is a no-op if 3113 ** a database lock is already held. 3114 */ 3115 rc = pagerSharedLock(pPager); 3116 if( rc!=SQLITE_OK ){ 3117 return rc; 3118 } 3119 assert( pPager->state!=PAGER_UNLOCK ); 3120 3121 pPg = pager_lookup(pPager, pgno); 3122 if( pPg==0 ){ 3123 /* The requested page is not in the page cache. */ 3124 int nMax; 3125 int h; 3126 PAGER_INCR(pPager->nMiss); 3127 rc = pagerAllocatePage(pPager, &pPg); 3128 if( rc!=SQLITE_OK ){ 3129 return rc; 3130 } 3131 3132 pPg->pgno = pgno; 3133 assert( !MEMDB || pgno>pPager->stmtSize ); 3134 if( pPager->aInJournal && (int)pgno<=pPager->origDbSize ){ 3135 sqlite3CheckMemory(pPager->aInJournal, pgno/8); 3136 assert( pPager->journalOpen ); 3137 pPg->inJournal = (pPager->aInJournal[pgno/8] & (1<<(pgno&7)))!=0; 3138 pPg->needSync = 0; 3139 }else{ 3140 pPg->inJournal = 0; 3141 pPg->needSync = 0; 3142 } 3143 3144 makeClean(pPg); 3145 pPg->nRef = 1; 3146 REFINFO(pPg); 3147 3148 pPager->nRef++; 3149 if( pPager->nExtra>0 ){ 3150 memset(PGHDR_TO_EXTRA(pPg, pPager), 0, pPager->nExtra); 3151 } 3152 nMax = sqlite3PagerPagecount(pPager); 3153 if( pPager->errCode ){ 3154 sqlite3PagerUnref(pPg); 3155 rc = pPager->errCode; 3156 return rc; 3157 } 3158 3159 /* Populate the page with data, either by reading from the database 3160 ** file, or by setting the entire page to zero. 3161 */ 3162 if( nMax<(int)pgno || MEMDB || (noContent && !pPager->alwaysRollback) ){ 3163 if( pgno>pPager->mxPgno ){ 3164 sqlite3PagerUnref(pPg); 3165 return SQLITE_FULL; 3166 } 3167 memset(PGHDR_TO_DATA(pPg), 0, pPager->pageSize); 3168 pPg->needRead = noContent && !pPager->alwaysRollback; 3169 IOTRACE(("ZERO %p %d\n", pPager, pgno)); 3170 }else{ 3171 rc = readDbPage(pPager, pPg, pgno); 3172 if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ 3173 pPg->pgno = 0; 3174 sqlite3PagerUnref(pPg); 3175 return rc; 3176 } 3177 pPg->needRead = 0; 3178 } 3179 3180 /* Link the page into the page hash table */ 3181 h = pgno & (pPager->nHash-1); 3182 assert( pgno!=0 ); 3183 pPg->pNextHash = pPager->aHash[h]; 3184 pPager->aHash[h] = pPg; 3185 if( pPg->pNextHash ){ 3186 assert( pPg->pNextHash->pPrevHash==0 ); 3187 pPg->pNextHash->pPrevHash = pPg; 3188 } 3189 3190 #ifdef SQLITE_CHECK_PAGES 3191 pPg->pageHash = pager_pagehash(pPg); 3192 #endif 3193 }else{ 3194 /* The requested page is in the page cache. */ 3195 assert(pPager->nRef>0 || pgno==1); 3196 PAGER_INCR(pPager->nHit); 3197 if( !noContent ){ 3198 rc = pager_get_content(pPg); 3199 if( rc ){ 3200 return rc; 3201 } 3202 } 3203 page_ref(pPg); 3204 } 3205 *ppPage = pPg; 3206 return SQLITE_OK; 3207 } 3208 3209 /* 3210 ** Acquire a page if it is already in the in-memory cache. Do 3211 ** not read the page from disk. Return a pointer to the page, 3212 ** or 0 if the page is not in cache. 3213 ** 3214 ** See also sqlite3PagerGet(). The difference between this routine 3215 ** and sqlite3PagerGet() is that _get() will go to the disk and read 3216 ** in the page if the page is not already in cache. This routine 3217 ** returns NULL if the page is not in cache or if a disk I/O error 3218 ** has ever happened. 3219 */ 3220 DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){ 3221 PgHdr *pPg; 3222 3223 assert( pPager!=0 ); 3224 assert( pgno!=0 ); 3225 3226 if( pPager->state==PAGER_UNLOCK ){ 3227 assert( !pPager->pAll || pPager->exclusiveMode ); 3228 return 0; 3229 } 3230 if( pPager->errCode && pPager->errCode!=SQLITE_FULL ){ 3231 return 0; 3232 } 3233 pPg = pager_lookup(pPager, pgno); 3234 if( pPg==0 ) return 0; 3235 page_ref(pPg); 3236 return pPg; 3237 } 3238 3239 /* 3240 ** Release a page. 3241 ** 3242 ** If the number of references to the page drop to zero, then the 3243 ** page is added to the LRU list. When all references to all pages 3244 ** are released, a rollback occurs and the lock on the database is 3245 ** removed. 3246 */ 3247 int sqlite3PagerUnref(DbPage *pPg){ 3248 3249 /* Decrement the reference count for this page 3250 */ 3251 assert( pPg->nRef>0 ); 3252 pPg->nRef--; 3253 REFINFO(pPg); 3254 3255 CHECK_PAGE(pPg); 3256 3257 /* When the number of references to a page reach 0, call the 3258 ** destructor and add the page to the freelist. 3259 */ 3260 if( pPg->nRef==0 ){ 3261 Pager *pPager; 3262 pPager = pPg->pPager; 3263 pPg->pNextFree = 0; 3264 pPg->pPrevFree = pPager->pLast; 3265 pPager->pLast = pPg; 3266 if( pPg->pPrevFree ){ 3267 pPg->pPrevFree->pNextFree = pPg; 3268 }else{ 3269 pPager->pFirst = pPg; 3270 } 3271 if( pPg->needSync==0 && pPager->pFirstSynced==0 ){ 3272 pPager->pFirstSynced = pPg; 3273 } 3274 if( pPager->xDestructor ){ 3275 pPager->xDestructor(pPg, pPager->pageSize); 3276 } 3277 3278 /* When all pages reach the freelist, drop the read lock from 3279 ** the database file. 3280 */ 3281 pPager->nRef--; 3282 assert( pPager->nRef>=0 ); 3283 if( pPager->nRef==0 && (!pPager->exclusiveMode || pPager->journalOff>0) ){ 3284 pagerUnlockAndRollback(pPager); 3285 } 3286 } 3287 return SQLITE_OK; 3288 } 3289 3290 /* 3291 ** Create a journal file for pPager. There should already be a RESERVED 3292 ** or EXCLUSIVE lock on the database file when this routine is called. 3293 ** 3294 ** Return SQLITE_OK if everything. Return an error code and release the 3295 ** write lock if anything goes wrong. 3296 */ 3297 static int pager_open_journal(Pager *pPager){ 3298 int rc; 3299 assert( !MEMDB ); 3300 assert( pPager->state>=PAGER_RESERVED ); 3301 assert( pPager->journalOpen==0 ); 3302 assert( pPager->useJournal ); 3303 assert( pPager->aInJournal==0 ); 3304 sqlite3PagerPagecount(pPager); 3305 pPager->aInJournal = sqliteMalloc( pPager->dbSize/8 + 1 ); 3306 if( pPager->aInJournal==0 ){ 3307 rc = SQLITE_NOMEM; 3308 goto failed_to_open_journal; 3309 } 3310 rc = sqlite3OsOpenExclusive(pPager->zJournal, &pPager->jfd, 3311 pPager->tempFile); 3312 assert( rc!=SQLITE_OK || pPager->jfd ); 3313 pPager->journalOff = 0; 3314 pPager->setMaster = 0; 3315 pPager->journalHdr = 0; 3316 if( rc!=SQLITE_OK ){ 3317 if( rc==SQLITE_NOMEM ){ 3318 sqlite3OsDelete(pPager->zJournal); 3319 } 3320 goto failed_to_open_journal; 3321 } 3322 sqlite3OsSetFullSync(pPager->jfd, pPager->full_fsync); 3323 sqlite3OsSetFullSync(pPager->fd, pPager->full_fsync); 3324 sqlite3OsOpenDirectory(pPager->jfd, pPager->zDirectory); 3325 pPager->journalOpen = 1; 3326 pPager->journalStarted = 0; 3327 pPager->needSync = 0; 3328 pPager->alwaysRollback = 0; 3329 pPager->nRec = 0; 3330 if( pPager->errCode ){ 3331 rc = pPager->errCode; 3332 goto failed_to_open_journal; 3333 } 3334 pPager->origDbSize = pPager->dbSize; 3335 3336 rc = writeJournalHdr(pPager); 3337 3338 if( pPager->stmtAutoopen && rc==SQLITE_OK ){ 3339 rc = sqlite3PagerStmtBegin(pPager); 3340 } 3341 if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM ){ 3342 rc = pager_end_transaction(pPager); 3343 if( rc==SQLITE_OK ){ 3344 rc = SQLITE_FULL; 3345 } 3346 } 3347 return rc; 3348 3349 failed_to_open_journal: 3350 sqliteFree(pPager->aInJournal); 3351 pPager->aInJournal = 0; 3352 return rc; 3353 } 3354 3355 /* 3356 ** Acquire a write-lock on the database. The lock is removed when 3357 ** the any of the following happen: 3358 ** 3359 ** * sqlite3PagerCommitPhaseTwo() is called. 3360 ** * sqlite3PagerRollback() is called. 3361 ** * sqlite3PagerClose() is called. 3362 ** * sqlite3PagerUnref() is called to on every outstanding page. 3363 ** 3364 ** The first parameter to this routine is a pointer to any open page of the 3365 ** database file. Nothing changes about the page - it is used merely to 3366 ** acquire a pointer to the Pager structure and as proof that there is 3367 ** already a read-lock on the database. 3368 ** 3369 ** The second parameter indicates how much space in bytes to reserve for a 3370 ** master journal file-name at the start of the journal when it is created. 3371 ** 3372 ** A journal file is opened if this is not a temporary file. For temporary 3373 ** files, the opening of the journal file is deferred until there is an 3374 ** actual need to write to the journal. 3375 ** 3376 ** If the database is already reserved for writing, this routine is a no-op. 3377 ** 3378 ** If exFlag is true, go ahead and get an EXCLUSIVE lock on the file 3379 ** immediately instead of waiting until we try to flush the cache. The 3380 ** exFlag is ignored if a transaction is already active. 3381 */ 3382 int sqlite3PagerBegin(DbPage *pPg, int exFlag){ 3383 Pager *pPager = pPg->pPager; 3384 int rc = SQLITE_OK; 3385 assert( pPg->nRef>0 ); 3386 assert( pPager->state!=PAGER_UNLOCK ); 3387 if( pPager->state==PAGER_SHARED ){ 3388 assert( pPager->aInJournal==0 ); 3389 if( MEMDB ){ 3390 pPager->state = PAGER_EXCLUSIVE; 3391 pPager->origDbSize = pPager->dbSize; 3392 }else{ 3393 rc = sqlite3OsLock(pPager->fd, RESERVED_LOCK); 3394 if( rc==SQLITE_OK ){ 3395 pPager->state = PAGER_RESERVED; 3396 if( exFlag ){ 3397 rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); 3398 } 3399 } 3400 if( rc!=SQLITE_OK ){ 3401 return rc; 3402 } 3403 pPager->dirtyCache = 0; 3404 PAGERTRACE2("TRANSACTION %d\n", PAGERID(pPager)); 3405 if( pPager->useJournal && !pPager->tempFile ){ 3406 rc = pager_open_journal(pPager); 3407 } 3408 } 3409 }else if( pPager->journalOpen && pPager->journalOff==0 ){ 3410 /* This happens when the pager was in exclusive-access mode last 3411 ** time a (read or write) transaction was successfully concluded 3412 ** by this connection. Instead of deleting the journal file it was 3413 ** kept open and truncated to 0 bytes. 3414 */ 3415 assert( pPager->nRec==0 ); 3416 assert( pPager->origDbSize==0 ); 3417 assert( pPager->aInJournal==0 ); 3418 sqlite3PagerPagecount(pPager); 3419 pPager->aInJournal = sqliteMalloc( pPager->dbSize/8 + 1 ); 3420 if( !pPager->aInJournal ){ 3421 rc = SQLITE_NOMEM; 3422 }else{ 3423 pPager->origDbSize = pPager->dbSize; 3424 rc = writeJournalHdr(pPager); 3425 } 3426 } 3427 assert( !pPager->journalOpen || pPager->journalOff>0 || rc!=SQLITE_OK ); 3428 return rc; 3429 } 3430 3431 /* 3432 ** Make a page dirty. Set its dirty flag and add it to the dirty 3433 ** page list. 3434 */ 3435 static void makeDirty(PgHdr *pPg){ 3436 if( pPg->dirty==0 ){ 3437 Pager *pPager = pPg->pPager; 3438 pPg->dirty = 1; 3439 pPg->pDirty = pPager->pDirty; 3440 if( pPager->pDirty ){ 3441 pPager->pDirty->pPrevDirty = pPg; 3442 } 3443 pPg->pPrevDirty = 0; 3444 pPager->pDirty = pPg; 3445 } 3446 } 3447 3448 /* 3449 ** Make a page clean. Clear its dirty bit and remove it from the 3450 ** dirty page list. 3451 */ 3452 static void makeClean(PgHdr *pPg){ 3453 if( pPg->dirty ){ 3454 pPg->dirty = 0; 3455 if( pPg->pDirty ){ 3456 pPg->pDirty->pPrevDirty = pPg->pPrevDirty; 3457 } 3458 if( pPg->pPrevDirty ){ 3459 pPg->pPrevDirty->pDirty = pPg->pDirty; 3460 }else{ 3461 pPg->pPager->pDirty = pPg->pDirty; 3462 } 3463 } 3464 } 3465 3466 3467 /* 3468 ** Mark a data page as writeable. The page is written into the journal 3469 ** if it is not there already. This routine must be called before making 3470 ** changes to a page. 3471 ** 3472 ** The first time this routine is called, the pager creates a new 3473 ** journal and acquires a RESERVED lock on the database. If the RESERVED 3474 ** lock could not be acquired, this routine returns SQLITE_BUSY. The 3475 ** calling routine must check for that return value and be careful not to 3476 ** change any page data until this routine returns SQLITE_OK. 3477 ** 3478 ** If the journal file could not be written because the disk is full, 3479 ** then this routine returns SQLITE_FULL and does an immediate rollback. 3480 ** All subsequent write attempts also return SQLITE_FULL until there 3481 ** is a call to sqlite3PagerCommit() or sqlite3PagerRollback() to 3482 ** reset. 3483 */ 3484 static int pager_write(PgHdr *pPg){ 3485 void *pData = PGHDR_TO_DATA(pPg); 3486 Pager *pPager = pPg->pPager; 3487 int rc = SQLITE_OK; 3488 3489 /* Check for errors 3490 */ 3491 if( pPager->errCode ){ 3492 return pPager->errCode; 3493 } 3494 if( pPager->readOnly ){ 3495 return SQLITE_PERM; 3496 } 3497 3498 assert( !pPager->setMaster ); 3499 3500 CHECK_PAGE(pPg); 3501 3502 /* If this page was previously acquired with noContent==1, that means 3503 ** we didn't really read in the content of the page. This can happen 3504 ** (for example) when the page is being moved to the freelist. But 3505 ** now we are (perhaps) moving the page off of the freelist for 3506 ** reuse and we need to know its original content so that content 3507 ** can be stored in the rollback journal. So do the read at this 3508 ** time. 3509 */ 3510 rc = pager_get_content(pPg); 3511 if( rc ){ 3512 return rc; 3513 } 3514 3515 /* Mark the page as dirty. If the page has already been written 3516 ** to the journal then we can return right away. 3517 */ 3518 makeDirty(pPg); 3519 if( pPg->inJournal && (pageInStatement(pPg) || pPager->stmtInUse==0) ){ 3520 pPager->dirtyCache = 1; 3521 }else{ 3522 3523 /* If we get this far, it means that the page needs to be 3524 ** written to the transaction journal or the ckeckpoint journal 3525 ** or both. 3526 ** 3527 ** First check to see that the transaction journal exists and 3528 ** create it if it does not. 3529 */ 3530 assert( pPager->state!=PAGER_UNLOCK ); 3531 rc = sqlite3PagerBegin(pPg, 0); 3532 if( rc!=SQLITE_OK ){ 3533 return rc; 3534 } 3535 assert( pPager->state>=PAGER_RESERVED ); 3536 if( !pPager->journalOpen && pPager->useJournal ){ 3537 rc = pager_open_journal(pPager); 3538 if( rc!=SQLITE_OK ) return rc; 3539 } 3540 assert( pPager->journalOpen || !pPager->useJournal ); 3541 pPager->dirtyCache = 1; 3542 3543 /* The transaction journal now exists and we have a RESERVED or an 3544 ** EXCLUSIVE lock on the main database file. Write the current page to 3545 ** the transaction journal if it is not there already. 3546 */ 3547 if( !pPg->inJournal && (pPager->useJournal || MEMDB) ){ 3548 if( (int)pPg->pgno <= pPager->origDbSize ){ 3549 int szPg; 3550 if( MEMDB ){ 3551 PgHistory *pHist = PGHDR_TO_HIST(pPg, pPager); 3552 PAGERTRACE3("JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno); 3553 assert( pHist->pOrig==0 ); 3554 pHist->pOrig = sqliteMallocRaw( pPager->pageSize ); 3555 if( pHist->pOrig ){ 3556 memcpy(pHist->pOrig, PGHDR_TO_DATA(pPg), pPager->pageSize); 3557 } 3558 }else{ 3559 u32 cksum, saved; 3560 char *pData2, *pEnd; 3561 /* We should never write to the journal file the page that 3562 ** contains the database locks. The following assert verifies 3563 ** that we do not. */ 3564 assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) ); 3565 pData2 = CODEC2(pPager, pData, pPg->pgno, 7); 3566 cksum = pager_cksum(pPager, (u8*)pData2); 3567 pEnd = pData2 + pPager->pageSize; 3568 pData2 -= 4; 3569 saved = *(u32*)pEnd; 3570 put32bits(pEnd, cksum); 3571 szPg = pPager->pageSize+8; 3572 put32bits(pData2, pPg->pgno); 3573 rc = sqlite3OsWrite(pPager->jfd, pData2, szPg); 3574 IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, 3575 pPager->journalOff, szPg)); 3576 PAGER_INCR(sqlite3_pager_writej_count); 3577 pPager->journalOff += szPg; 3578 PAGERTRACE5("JOURNAL %d page %d needSync=%d hash(%08x)\n", 3579 PAGERID(pPager), pPg->pgno, pPg->needSync, pager_pagehash(pPg)); 3580 *(u32*)pEnd = saved; 3581 3582 /* An error has occured writing to the journal file. The 3583 ** transaction will be rolled back by the layer above. 3584 */ 3585 if( rc!=SQLITE_OK ){ 3586 return rc; 3587 } 3588 3589 pPager->nRec++; 3590 assert( pPager->aInJournal!=0 ); 3591 pPager->aInJournal[pPg->pgno/8] |= 1<<(pPg->pgno&7); 3592 pPg->needSync = !pPager->noSync; 3593 if( pPager->stmtInUse ){ 3594 pPager->aInStmt[pPg->pgno/8] |= 1<<(pPg->pgno&7); 3595 } 3596 } 3597 }else{ 3598 pPg->needSync = !pPager->journalStarted && !pPager->noSync; 3599 PAGERTRACE4("APPEND %d page %d needSync=%d\n", 3600 PAGERID(pPager), pPg->pgno, pPg->needSync); 3601 } 3602 if( pPg->needSync ){ 3603 pPager->needSync = 1; 3604 } 3605 pPg->inJournal = 1; 3606 } 3607 3608 /* If the statement journal is open and the page is not in it, 3609 ** then write the current page to the statement journal. Note that 3610 ** the statement journal format differs from the standard journal format 3611 ** in that it omits the checksums and the header. 3612 */ 3613 if( pPager->stmtInUse 3614 && !pageInStatement(pPg) 3615 && (int)pPg->pgno<=pPager->stmtSize 3616 ){ 3617 assert( pPg->inJournal || (int)pPg->pgno>pPager->origDbSize ); 3618 if( MEMDB ){ 3619 PgHistory *pHist = PGHDR_TO_HIST(pPg, pPager); 3620 assert( pHist->pStmt==0 ); 3621 pHist->pStmt = sqliteMallocRaw( pPager->pageSize ); 3622 if( pHist->pStmt ){ 3623 memcpy(pHist->pStmt, PGHDR_TO_DATA(pPg), pPager->pageSize); 3624 } 3625 PAGERTRACE3("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno); 3626 page_add_to_stmt_list(pPg); 3627 }else{ 3628 char *pData2 = CODEC2(pPager, pData, pPg->pgno, 7)-4; 3629 put32bits(pData2, pPg->pgno); 3630 rc = sqlite3OsWrite(pPager->stfd, pData2, pPager->pageSize+4); 3631 PAGERTRACE3("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno); 3632 if( rc!=SQLITE_OK ){ 3633 return rc; 3634 } 3635 pPager->stmtNRec++; 3636 assert( pPager->aInStmt!=0 ); 3637 pPager->aInStmt[pPg->pgno/8] |= 1<<(pPg->pgno&7); 3638 } 3639 } 3640 } 3641 3642 /* Update the database size and return. 3643 */ 3644 assert( pPager->state>=PAGER_SHARED ); 3645 if( pPager->dbSize<(int)pPg->pgno ){ 3646 pPager->dbSize = pPg->pgno; 3647 if( !MEMDB && pPager->dbSize==PENDING_BYTE/pPager->pageSize ){ 3648 pPager->dbSize++; 3649 } 3650 } 3651 return rc; 3652 } 3653 3654 /* 3655 ** This function is used to mark a data-page as writable. It uses 3656 ** pager_write() to open a journal file (if it is not already open) 3657 ** and write the page *pData to the journal. 3658 ** 3659 ** The difference between this function and pager_write() is that this 3660 ** function also deals with the special case where 2 or more pages 3661 ** fit on a single disk sector. In this case all co-resident pages 3662 ** must have been written to the journal file before returning. 3663 */ 3664 int sqlite3PagerWrite(DbPage *pDbPage){ 3665 int rc = SQLITE_OK; 3666 3667 PgHdr *pPg = pDbPage; 3668 Pager *pPager = pPg->pPager; 3669 Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize); 3670 3671 if( !MEMDB && nPagePerSector>1 ){ 3672 Pgno nPageCount; /* Total number of pages in database file */ 3673 Pgno pg1; /* First page of the sector pPg is located on. */ 3674 int nPage; /* Number of pages starting at pg1 to journal */ 3675 int ii; 3676 3677 /* Set the doNotSync flag to 1. This is because we cannot allow a journal 3678 ** header to be written between the pages journaled by this function. 3679 */ 3680 assert( pPager->doNotSync==0 ); 3681 pPager->doNotSync = 1; 3682 3683 /* This trick assumes that both the page-size and sector-size are 3684 ** an integer power of 2. It sets variable pg1 to the identifier 3685 ** of the first page of the sector pPg is located on. 3686 */ 3687 pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1; 3688 3689 nPageCount = sqlite3PagerPagecount(pPager); 3690 if( pPg->pgno>nPageCount ){ 3691 nPage = (pPg->pgno - pg1)+1; 3692 }else if( (pg1+nPagePerSector-1)>nPageCount ){ 3693 nPage = nPageCount+1-pg1; 3694 }else{ 3695 nPage = nPagePerSector; 3696 } 3697 assert(nPage>0); 3698 assert(pg1<=pPg->pgno); 3699 assert((pg1+nPage)>pPg->pgno); 3700 3701 for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){ 3702 Pgno pg = pg1+ii; 3703 if( !pPager->aInJournal || pg==pPg->pgno || 3704 pg>pPager->origDbSize || !(pPager->aInJournal[pg/8]&(1<<(pg&7))) 3705 ) { 3706 if( pg!=PAGER_MJ_PGNO(pPager) ){ 3707 PgHdr *pPage; 3708 rc = sqlite3PagerGet(pPager, pg, &pPage); 3709 if( rc==SQLITE_OK ){ 3710 rc = pager_write(pPage); 3711 sqlite3PagerUnref(pPage); 3712 } 3713 } 3714 } 3715 } 3716 3717 assert( pPager->doNotSync==1 ); 3718 pPager->doNotSync = 0; 3719 }else{ 3720 rc = pager_write(pDbPage); 3721 } 3722 return rc; 3723 } 3724 3725 /* 3726 ** Return TRUE if the page given in the argument was previously passed 3727 ** to sqlite3PagerWrite(). In other words, return TRUE if it is ok 3728 ** to change the content of the page. 3729 */ 3730 #ifndef NDEBUG 3731 int sqlite3PagerIswriteable(DbPage *pPg){ 3732 return pPg->dirty; 3733 } 3734 #endif 3735 3736 #ifndef SQLITE_OMIT_VACUUM 3737 /* 3738 ** Replace the content of a single page with the information in the third 3739 ** argument. 3740 */ 3741 int sqlite3PagerOverwrite(Pager *pPager, Pgno pgno, void *pData){ 3742 PgHdr *pPg; 3743 int rc; 3744 3745 rc = sqlite3PagerGet(pPager, pgno, &pPg); 3746 if( rc==SQLITE_OK ){ 3747 rc = sqlite3PagerWrite(pPg); 3748 if( rc==SQLITE_OK ){ 3749 memcpy(sqlite3PagerGetData(pPg), pData, pPager->pageSize); 3750 } 3751 sqlite3PagerUnref(pPg); 3752 } 3753 return rc; 3754 } 3755 #endif 3756 3757 /* 3758 ** A call to this routine tells the pager that it is not necessary to 3759 ** write the information on page pPg back to the disk, even though 3760 ** that page might be marked as dirty. 3761 ** 3762 ** The overlying software layer calls this routine when all of the data 3763 ** on the given page is unused. The pager marks the page as clean so 3764 ** that it does not get written to disk. 3765 ** 3766 ** Tests show that this optimization, together with the 3767 ** sqlite3PagerDontRollback() below, more than double the speed 3768 ** of large INSERT operations and quadruple the speed of large DELETEs. 3769 ** 3770 ** When this routine is called, set the alwaysRollback flag to true. 3771 ** Subsequent calls to sqlite3PagerDontRollback() for the same page 3772 ** will thereafter be ignored. This is necessary to avoid a problem 3773 ** where a page with data is added to the freelist during one part of 3774 ** a transaction then removed from the freelist during a later part 3775 ** of the same transaction and reused for some other purpose. When it 3776 ** is first added to the freelist, this routine is called. When reused, 3777 ** the sqlite3PagerDontRollback() routine is called. But because the 3778 ** page contains critical data, we still need to be sure it gets 3779 ** rolled back in spite of the sqlite3PagerDontRollback() call. 3780 */ 3781 void sqlite3PagerDontWrite(DbPage *pDbPage){ 3782 PgHdr *pPg = pDbPage; 3783 Pager *pPager = pPg->pPager; 3784 3785 if( MEMDB ) return; 3786 pPg->alwaysRollback = 1; 3787 if( pPg->dirty && !pPager->stmtInUse ){ 3788 assert( pPager->state>=PAGER_SHARED ); 3789 if( pPager->dbSize==(int)pPg->pgno && pPager->origDbSize<pPager->dbSize ){ 3790 /* If this pages is the last page in the file and the file has grown 3791 ** during the current transaction, then do NOT mark the page as clean. 3792 ** When the database file grows, we must make sure that the last page 3793 ** gets written at least once so that the disk file will be the correct 3794 ** size. If you do not write this page and the size of the file 3795 ** on the disk ends up being too small, that can lead to database 3796 ** corruption during the next transaction. 3797 */ 3798 }else{ 3799 PAGERTRACE3("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager)); 3800 IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno)) 3801 makeClean(pPg); 3802 #ifdef SQLITE_CHECK_PAGES 3803 pPg->pageHash = pager_pagehash(pPg); 3804 #endif 3805 } 3806 } 3807 } 3808 3809 /* 3810 ** A call to this routine tells the pager that if a rollback occurs, 3811 ** it is not necessary to restore the data on the given page. This 3812 ** means that the pager does not have to record the given page in the 3813 ** rollback journal. 3814 ** 3815 ** If we have not yet actually read the content of this page (if 3816 ** the PgHdr.needRead flag is set) then this routine acts as a promise 3817 ** that we will never need to read the page content in the future. 3818 ** so the needRead flag can be cleared at this point. 3819 */ 3820 void sqlite3PagerDontRollback(DbPage *pPg){ 3821 Pager *pPager = pPg->pPager; 3822 3823 assert( pPager->state>=PAGER_RESERVED ); 3824 if( pPager->journalOpen==0 ) return; 3825 if( pPg->alwaysRollback || pPager->alwaysRollback || MEMDB ) return; 3826 if( !pPg->inJournal && (int)pPg->pgno <= pPager->origDbSize ){ 3827 assert( pPager->aInJournal!=0 ); 3828 pPager->aInJournal[pPg->pgno/8] |= 1<<(pPg->pgno&7); 3829 pPg->inJournal = 1; 3830 pPg->needRead = 0; 3831 if( pPager->stmtInUse ){ 3832 pPager->aInStmt[pPg->pgno/8] |= 1<<(pPg->pgno&7); 3833 } 3834 PAGERTRACE3("DONT_ROLLBACK page %d of %d\n", pPg->pgno, PAGERID(pPager)); 3835 IOTRACE(("GARBAGE %p %d\n", pPager, pPg->pgno)) 3836 } 3837 if( pPager->stmtInUse 3838 && !pageInStatement(pPg) 3839 && (int)pPg->pgno<=pPager->stmtSize 3840 ){ 3841 assert( pPg->inJournal || (int)pPg->pgno>pPager->origDbSize ); 3842 assert( pPager->aInStmt!=0 ); 3843 pPager->aInStmt[pPg->pgno/8] |= 1<<(pPg->pgno&7); 3844 } 3845 } 3846 3847 3848 /* 3849 ** This routine is called to increment the database file change-counter, 3850 ** stored at byte 24 of the pager file. 3851 */ 3852 static int pager_incr_changecounter(Pager *pPager){ 3853 PgHdr *pPgHdr; 3854 u32 change_counter; 3855 int rc; 3856 3857 if( !pPager->changeCountDone ){ 3858 /* Open page 1 of the file for writing. */ 3859 rc = sqlite3PagerGet(pPager, 1, &pPgHdr); 3860 if( rc!=SQLITE_OK ) return rc; 3861 rc = sqlite3PagerWrite(pPgHdr); 3862 if( rc!=SQLITE_OK ) return rc; 3863 3864 /* Increment the value just read and write it back to byte 24. */ 3865 change_counter = sqlite3Get4byte((u8*)pPager->dbFileVers); 3866 change_counter++; 3867 put32bits(((char*)PGHDR_TO_DATA(pPgHdr))+24, change_counter); 3868 /* Release the page reference. */ 3869 sqlite3PagerUnref(pPgHdr); 3870 pPager->changeCountDone = 1; 3871 } 3872 return SQLITE_OK; 3873 } 3874 3875 /* 3876 ** Sync the database file for the pager pPager. zMaster points to the name 3877 ** of a master journal file that should be written into the individual 3878 ** journal file. zMaster may be NULL, which is interpreted as no master 3879 ** journal (a single database transaction). 3880 ** 3881 ** This routine ensures that the journal is synced, all dirty pages written 3882 ** to the database file and the database file synced. The only thing that 3883 ** remains to commit the transaction is to delete the journal file (or 3884 ** master journal file if specified). 3885 ** 3886 ** Note that if zMaster==NULL, this does not overwrite a previous value 3887 ** passed to an sqlite3PagerCommitPhaseOne() call. 3888 ** 3889 ** If parameter nTrunc is non-zero, then the pager file is truncated to 3890 ** nTrunc pages (this is used by auto-vacuum databases). 3891 */ 3892 int sqlite3PagerCommitPhaseOne(Pager *pPager, const char *zMaster, Pgno nTrunc){ 3893 int rc = SQLITE_OK; 3894 3895 PAGERTRACE4("DATABASE SYNC: File=%s zMaster=%s nTrunc=%d\n", 3896 pPager->zFilename, zMaster, nTrunc); 3897 3898 /* If this is an in-memory db, or no pages have been written to, or this 3899 ** function has already been called, it is a no-op. 3900 */ 3901 if( pPager->state!=PAGER_SYNCED && !MEMDB && pPager->dirtyCache ){ 3902 PgHdr *pPg; 3903 assert( pPager->journalOpen ); 3904 3905 /* If a master journal file name has already been written to the 3906 ** journal file, then no sync is required. This happens when it is 3907 ** written, then the process fails to upgrade from a RESERVED to an 3908 ** EXCLUSIVE lock. The next time the process tries to commit the 3909 ** transaction the m-j name will have already been written. 3910 */ 3911 if( !pPager->setMaster ){ 3912 rc = pager_incr_changecounter(pPager); 3913 if( rc!=SQLITE_OK ) goto sync_exit; 3914 #ifndef SQLITE_OMIT_AUTOVACUUM 3915 if( nTrunc!=0 ){ 3916 /* If this transaction has made the database smaller, then all pages 3917 ** being discarded by the truncation must be written to the journal 3918 ** file. 3919 */ 3920 Pgno i; 3921 int iSkip = PAGER_MJ_PGNO(pPager); 3922 for( i=nTrunc+1; i<=pPager->origDbSize; i++ ){ 3923 if( !(pPager->aInJournal[i/8] & (1<<(i&7))) && i!=iSkip ){ 3924 rc = sqlite3PagerGet(pPager, i, &pPg); 3925 if( rc!=SQLITE_OK ) goto sync_exit; 3926 rc = sqlite3PagerWrite(pPg); 3927 sqlite3PagerUnref(pPg); 3928 if( rc!=SQLITE_OK ) goto sync_exit; 3929 } 3930 } 3931 } 3932 #endif 3933 rc = writeMasterJournal(pPager, zMaster); 3934 if( rc!=SQLITE_OK ) goto sync_exit; 3935 rc = syncJournal(pPager); 3936 if( rc!=SQLITE_OK ) goto sync_exit; 3937 } 3938 3939 #ifndef SQLITE_OMIT_AUTOVACUUM 3940 if( nTrunc!=0 ){ 3941 rc = sqlite3PagerTruncate(pPager, nTrunc); 3942 if( rc!=SQLITE_OK ) goto sync_exit; 3943 } 3944 #endif 3945 3946 /* Write all dirty pages to the database file */ 3947 pPg = pager_get_all_dirty_pages(pPager); 3948 rc = pager_write_pagelist(pPg); 3949 if( rc!=SQLITE_OK ) goto sync_exit; 3950 pPager->pDirty = 0; 3951 3952 /* Sync the database file. */ 3953 if( !pPager->noSync ){ 3954 rc = sqlite3OsSync(pPager->fd, 0); 3955 } 3956 IOTRACE(("DBSYNC %p\n", pPager)) 3957 3958 pPager->state = PAGER_SYNCED; 3959 }else if( MEMDB && nTrunc!=0 ){ 3960 rc = sqlite3PagerTruncate(pPager, nTrunc); 3961 } 3962 3963 sync_exit: 3964 if( rc==SQLITE_IOERR_BLOCKED ){ 3965 /* pager_incr_changecounter() may attempt to obtain an exclusive 3966 * lock to spill the cache and return IOERR_BLOCKED. But since 3967 * there is no chance the cache is inconsistent, it's 3968 * better to return SQLITE_BUSY. 3969 */ 3970 rc = SQLITE_BUSY; 3971 } 3972 return rc; 3973 } 3974 3975 3976 /* 3977 ** Commit all changes to the database and release the write lock. 3978 ** 3979 ** If the commit fails for any reason, a rollback attempt is made 3980 ** and an error code is returned. If the commit worked, SQLITE_OK 3981 ** is returned. 3982 */ 3983 int sqlite3PagerCommitPhaseTwo(Pager *pPager){ 3984 int rc; 3985 PgHdr *pPg; 3986 3987 if( pPager->errCode ){ 3988 return pPager->errCode; 3989 } 3990 if( pPager->state<PAGER_RESERVED ){ 3991 return SQLITE_ERROR; 3992 } 3993 PAGERTRACE2("COMMIT %d\n", PAGERID(pPager)); 3994 if( MEMDB ){ 3995 pPg = pager_get_all_dirty_pages(pPager); 3996 while( pPg ){ 3997 PgHistory *pHist = PGHDR_TO_HIST(pPg, pPager); 3998 clearHistory(pHist); 3999 pPg->dirty = 0; 4000 pPg->inJournal = 0; 4001 pHist->inStmt = 0; 4002 pPg->needSync = 0; 4003 pHist->pPrevStmt = pHist->pNextStmt = 0; 4004 pPg = pPg->pDirty; 4005 } 4006 pPager->pDirty = 0; 4007 #ifndef NDEBUG 4008 for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){ 4009 PgHistory *pHist = PGHDR_TO_HIST(pPg, pPager); 4010 assert( !pPg->alwaysRollback ); 4011 assert( !pHist->pOrig ); 4012 assert( !pHist->pStmt ); 4013 } 4014 #endif 4015 pPager->pStmt = 0; 4016 pPager->state = PAGER_SHARED; 4017 return SQLITE_OK; 4018 } 4019 assert( pPager->journalOpen || !pPager->dirtyCache ); 4020 assert( pPager->state==PAGER_SYNCED || !pPager->dirtyCache ); 4021 rc = pager_end_transaction(pPager); 4022 return pager_error(pPager, rc); 4023 } 4024 4025 /* 4026 ** Rollback all changes. The database falls back to PAGER_SHARED mode. 4027 ** All in-memory cache pages revert to their original data contents. 4028 ** The journal is deleted. 4029 ** 4030 ** This routine cannot fail unless some other process is not following 4031 ** the correct locking protocol or unless some other 4032 ** process is writing trash into the journal file (SQLITE_CORRUPT) or 4033 ** unless a prior malloc() failed (SQLITE_NOMEM). Appropriate error 4034 ** codes are returned for all these occasions. Otherwise, 4035 ** SQLITE_OK is returned. 4036 */ 4037 int sqlite3PagerRollback(Pager *pPager){ 4038 int rc; 4039 PAGERTRACE2("ROLLBACK %d\n", PAGERID(pPager)); 4040 if( MEMDB ){ 4041 PgHdr *p; 4042 for(p=pPager->pAll; p; p=p->pNextAll){ 4043 PgHistory *pHist; 4044 assert( !p->alwaysRollback ); 4045 if( !p->dirty ){ 4046 assert( !((PgHistory *)PGHDR_TO_HIST(p, pPager))->pOrig ); 4047 assert( !((PgHistory *)PGHDR_TO_HIST(p, pPager))->pStmt ); 4048 continue; 4049 } 4050 4051 pHist = PGHDR_TO_HIST(p, pPager); 4052 if( pHist->pOrig ){ 4053 memcpy(PGHDR_TO_DATA(p), pHist->pOrig, pPager->pageSize); 4054 PAGERTRACE3("ROLLBACK-PAGE %d of %d\n", p->pgno, PAGERID(pPager)); 4055 }else{ 4056 PAGERTRACE3("PAGE %d is clean on %d\n", p->pgno, PAGERID(pPager)); 4057 } 4058 clearHistory(pHist); 4059 p->dirty = 0; 4060 p->inJournal = 0; 4061 pHist->inStmt = 0; 4062 pHist->pPrevStmt = pHist->pNextStmt = 0; 4063 if( pPager->xReiniter ){ 4064 pPager->xReiniter(p, pPager->pageSize); 4065 } 4066 } 4067 pPager->pDirty = 0; 4068 pPager->pStmt = 0; 4069 pPager->dbSize = pPager->origDbSize; 4070 pager_truncate_cache(pPager); 4071 pPager->stmtInUse = 0; 4072 pPager->state = PAGER_SHARED; 4073 return SQLITE_OK; 4074 } 4075 4076 if( !pPager->dirtyCache || !pPager->journalOpen ){ 4077 rc = pager_end_transaction(pPager); 4078 return rc; 4079 } 4080 4081 if( pPager->errCode && pPager->errCode!=SQLITE_FULL ){ 4082 if( pPager->state>=PAGER_EXCLUSIVE ){ 4083 pager_playback(pPager, 0); 4084 } 4085 return pPager->errCode; 4086 } 4087 if( pPager->state==PAGER_RESERVED ){ 4088 int rc2; 4089 rc = pager_playback(pPager, 0); 4090 rc2 = pager_end_transaction(pPager); 4091 if( rc==SQLITE_OK ){ 4092 rc = rc2; 4093 } 4094 }else{ 4095 rc = pager_playback(pPager, 0); 4096 } 4097 /* pager_reset(pPager); */ 4098 pPager->dbSize = -1; 4099 4100 /* If an error occurs during a ROLLBACK, we can no longer trust the pager 4101 ** cache. So call pager_error() on the way out to make any error 4102 ** persistent. 4103 */ 4104 return pager_error(pPager, rc); 4105 } 4106 4107 /* 4108 ** Return TRUE if the database file is opened read-only. Return FALSE 4109 ** if the database is (in theory) writable. 4110 */ 4111 int sqlite3PagerIsreadonly(Pager *pPager){ 4112 return pPager->readOnly; 4113 } 4114 4115 /* 4116 ** Return the number of references to the pager. 4117 */ 4118 int sqlite3PagerRefcount(Pager *pPager){ 4119 return pPager->nRef; 4120 } 4121 4122 #ifdef SQLITE_TEST 4123 /* 4124 ** This routine is used for testing and analysis only. 4125 */ 4126 int *sqlite3PagerStats(Pager *pPager){ 4127 static int a[11]; 4128 a[0] = pPager->nRef; 4129 a[1] = pPager->nPage; 4130 a[2] = pPager->mxPage; 4131 a[3] = pPager->dbSize; 4132 a[4] = pPager->state; 4133 a[5] = pPager->errCode; 4134 a[6] = pPager->nHit; 4135 a[7] = pPager->nMiss; 4136 a[8] = 0; /* Used to be pPager->nOvfl */ 4137 a[9] = pPager->nRead; 4138 a[10] = pPager->nWrite; 4139 return a; 4140 } 4141 #endif 4142 4143 /* 4144 ** Set the statement rollback point. 4145 ** 4146 ** This routine should be called with the transaction journal already 4147 ** open. A new statement journal is created that can be used to rollback 4148 ** changes of a single SQL command within a larger transaction. 4149 */ 4150 int sqlite3PagerStmtBegin(Pager *pPager){ 4151 int rc; 4152 assert( !pPager->stmtInUse ); 4153 assert( pPager->state>=PAGER_SHARED ); 4154 assert( pPager->dbSize>=0 ); 4155 PAGERTRACE2("STMT-BEGIN %d\n", PAGERID(pPager)); 4156 if( MEMDB ){ 4157 pPager->stmtInUse = 1; 4158 pPager->stmtSize = pPager->dbSize; 4159 return SQLITE_OK; 4160 } 4161 if( !pPager->journalOpen ){ 4162 pPager->stmtAutoopen = 1; 4163 return SQLITE_OK; 4164 } 4165 assert( pPager->journalOpen ); 4166 pPager->aInStmt = sqliteMalloc( pPager->dbSize/8 + 1 ); 4167 if( pPager->aInStmt==0 ){ 4168 /* sqlite3OsLock(pPager->fd, SHARED_LOCK); */ 4169 return SQLITE_NOMEM; 4170 } 4171 #ifndef NDEBUG 4172 rc = sqlite3OsFileSize(pPager->jfd, &pPager->stmtJSize); 4173 if( rc ) goto stmt_begin_failed; 4174 assert( pPager->stmtJSize == pPager->journalOff ); 4175 #endif 4176 pPager->stmtJSize = pPager->journalOff; 4177 pPager->stmtSize = pPager->dbSize; 4178 pPager->stmtHdrOff = 0; 4179 pPager->stmtCksum = pPager->cksumInit; 4180 if( !pPager->stmtOpen ){ 4181 rc = sqlite3PagerOpentemp(&pPager->stfd); 4182 if( rc ) goto stmt_begin_failed; 4183 pPager->stmtOpen = 1; 4184 pPager->stmtNRec = 0; 4185 } 4186 pPager->stmtInUse = 1; 4187 return SQLITE_OK; 4188 4189 stmt_begin_failed: 4190 if( pPager->aInStmt ){ 4191 sqliteFree(pPager->aInStmt); 4192 pPager->aInStmt = 0; 4193 } 4194 return rc; 4195 } 4196 4197 /* 4198 ** Commit a statement. 4199 */ 4200 int sqlite3PagerStmtCommit(Pager *pPager){ 4201 if( pPager->stmtInUse ){ 4202 PgHdr *pPg, *pNext; 4203 PAGERTRACE2("STMT-COMMIT %d\n", PAGERID(pPager)); 4204 if( !MEMDB ){ 4205 sqlite3OsSeek(pPager->stfd, 0); 4206 /* sqlite3OsTruncate(pPager->stfd, 0); */ 4207 sqliteFree( pPager->aInStmt ); 4208 pPager->aInStmt = 0; 4209 }else{ 4210 for(pPg=pPager->pStmt; pPg; pPg=pNext){ 4211 PgHistory *pHist = PGHDR_TO_HIST(pPg, pPager); 4212 pNext = pHist->pNextStmt; 4213 assert( pHist->inStmt ); 4214 pHist->inStmt = 0; 4215 pHist->pPrevStmt = pHist->pNextStmt = 0; 4216 sqliteFree(pHist->pStmt); 4217 pHist->pStmt = 0; 4218 } 4219 } 4220 pPager->stmtNRec = 0; 4221 pPager->stmtInUse = 0; 4222 pPager->pStmt = 0; 4223 } 4224 pPager->stmtAutoopen = 0; 4225 return SQLITE_OK; 4226 } 4227 4228 /* 4229 ** Rollback a statement. 4230 */ 4231 int sqlite3PagerStmtRollback(Pager *pPager){ 4232 int rc; 4233 if( pPager->stmtInUse ){ 4234 PAGERTRACE2("STMT-ROLLBACK %d\n", PAGERID(pPager)); 4235 if( MEMDB ){ 4236 PgHdr *pPg; 4237 PgHistory *pHist; 4238 for(pPg=pPager->pStmt; pPg; pPg=pHist->pNextStmt){ 4239 pHist = PGHDR_TO_HIST(pPg, pPager); 4240 if( pHist->pStmt ){ 4241 memcpy(PGHDR_TO_DATA(pPg), pHist->pStmt, pPager->pageSize); 4242 sqliteFree(pHist->pStmt); 4243 pHist->pStmt = 0; 4244 } 4245 } 4246 pPager->dbSize = pPager->stmtSize; 4247 pager_truncate_cache(pPager); 4248 rc = SQLITE_OK; 4249 }else{ 4250 rc = pager_stmt_playback(pPager); 4251 } 4252 sqlite3PagerStmtCommit(pPager); 4253 }else{ 4254 rc = SQLITE_OK; 4255 } 4256 pPager->stmtAutoopen = 0; 4257 return rc; 4258 } 4259 4260 /* 4261 ** Return the full pathname of the database file. 4262 */ 4263 const char *sqlite3PagerFilename(Pager *pPager){ 4264 return pPager->zFilename; 4265 } 4266 4267 /* 4268 ** Return the directory of the database file. 4269 */ 4270 const char *sqlite3PagerDirname(Pager *pPager){ 4271 return pPager->zDirectory; 4272 } 4273 4274 /* 4275 ** Return the full pathname of the journal file. 4276 */ 4277 const char *sqlite3PagerJournalname(Pager *pPager){ 4278 return pPager->zJournal; 4279 } 4280 4281 /* 4282 ** Return true if fsync() calls are disabled for this pager. Return FALSE 4283 ** if fsync()s are executed normally. 4284 */ 4285 int sqlite3PagerNosync(Pager *pPager){ 4286 return pPager->noSync; 4287 } 4288 4289 #ifdef SQLITE_HAS_CODEC 4290 /* 4291 ** Set the codec for this pager 4292 */ 4293 void sqlite3PagerSetCodec( 4294 Pager *pPager, 4295 void *(*xCodec)(void*,void*,Pgno,int), 4296 void *pCodecArg 4297 ){ 4298 pPager->xCodec = xCodec; 4299 pPager->pCodecArg = pCodecArg; 4300 } 4301 #endif 4302 4303 #ifndef SQLITE_OMIT_AUTOVACUUM 4304 /* 4305 ** Move the page pPg to location pgno in the file. 4306 ** 4307 ** There must be no references to the page previously located at 4308 ** pgno (which we call pPgOld) though that page is allowed to be 4309 ** in cache. If the page previous located at pgno is not already 4310 ** in the rollback journal, it is not put there by by this routine. 4311 ** 4312 ** References to the page pPg remain valid. Updating any 4313 ** meta-data associated with pPg (i.e. data stored in the nExtra bytes 4314 ** allocated along with the page) is the responsibility of the caller. 4315 ** 4316 ** A transaction must be active when this routine is called. It used to be 4317 ** required that a statement transaction was not active, but this restriction 4318 ** has been removed (CREATE INDEX needs to move a page when a statement 4319 ** transaction is active). 4320 */ 4321 int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno){ 4322 PgHdr *pPgOld; /* The page being overwritten. */ 4323 int h; 4324 Pgno needSyncPgno = 0; 4325 4326 assert( pPg->nRef>0 ); 4327 4328 PAGERTRACE5("MOVE %d page %d (needSync=%d) moves to %d\n", 4329 PAGERID(pPager), pPg->pgno, pPg->needSync, pgno); 4330 IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno)) 4331 4332 pager_get_content(pPg); 4333 if( pPg->needSync ){ 4334 needSyncPgno = pPg->pgno; 4335 assert( pPg->inJournal || (int)pgno>pPager->origDbSize ); 4336 assert( pPg->dirty ); 4337 assert( pPager->needSync ); 4338 } 4339 4340 /* Unlink pPg from it's hash-chain */ 4341 unlinkHashChain(pPager, pPg); 4342 4343 /* If the cache contains a page with page-number pgno, remove it 4344 ** from it's hash chain. Also, if the PgHdr.needSync was set for 4345 ** page pgno before the 'move' operation, it needs to be retained 4346 ** for the page moved there. 4347 */ 4348 pPg->needSync = 0; 4349 pPgOld = pager_lookup(pPager, pgno); 4350 if( pPgOld ){ 4351 assert( pPgOld->nRef==0 ); 4352 unlinkHashChain(pPager, pPgOld); 4353 makeClean(pPgOld); 4354 pPg->needSync = pPgOld->needSync; 4355 }else{ 4356 pPg->needSync = 0; 4357 } 4358 if( pPager->aInJournal && (int)pgno<=pPager->origDbSize ){ 4359 pPg->inJournal = (pPager->aInJournal[pgno/8] & (1<<(pgno&7)))!=0; 4360 }else{ 4361 pPg->inJournal = 0; 4362 assert( pPg->needSync==0 || (int)pgno>pPager->origDbSize ); 4363 } 4364 4365 /* Change the page number for pPg and insert it into the new hash-chain. */ 4366 assert( pgno!=0 ); 4367 pPg->pgno = pgno; 4368 h = pgno & (pPager->nHash-1); 4369 if( pPager->aHash[h] ){ 4370 assert( pPager->aHash[h]->pPrevHash==0 ); 4371 pPager->aHash[h]->pPrevHash = pPg; 4372 } 4373 pPg->pNextHash = pPager->aHash[h]; 4374 pPager->aHash[h] = pPg; 4375 pPg->pPrevHash = 0; 4376 4377 makeDirty(pPg); 4378 pPager->dirtyCache = 1; 4379 4380 if( needSyncPgno ){ 4381 /* If needSyncPgno is non-zero, then the journal file needs to be 4382 ** sync()ed before any data is written to database file page needSyncPgno. 4383 ** Currently, no such page exists in the page-cache and the 4384 ** Pager.aInJournal bit has been set. This needs to be remedied by loading 4385 ** the page into the pager-cache and setting the PgHdr.needSync flag. 4386 ** 4387 ** The sqlite3PagerGet() call may cause the journal to sync. So make 4388 ** sure the Pager.needSync flag is set too. 4389 */ 4390 int rc; 4391 PgHdr *pPgHdr; 4392 assert( pPager->needSync ); 4393 rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr); 4394 if( rc!=SQLITE_OK ) return rc; 4395 pPager->needSync = 1; 4396 pPgHdr->needSync = 1; 4397 pPgHdr->inJournal = 1; 4398 makeDirty(pPgHdr); 4399 sqlite3PagerUnref(pPgHdr); 4400 } 4401 4402 return SQLITE_OK; 4403 } 4404 #endif 4405 4406 /* 4407 ** Return a pointer to the data for the specified page. 4408 */ 4409 void *sqlite3PagerGetData(DbPage *pPg){ 4410 return PGHDR_TO_DATA(pPg); 4411 } 4412 4413 /* 4414 ** Return a pointer to the Pager.nExtra bytes of "extra" space 4415 ** allocated along with the specified page. 4416 */ 4417 void *sqlite3PagerGetExtra(DbPage *pPg){ 4418 Pager *pPager = pPg->pPager; 4419 return (pPager?PGHDR_TO_EXTRA(pPg, pPager):0); 4420 } 4421 4422 /* 4423 ** Get/set the locking-mode for this pager. Parameter eMode must be one 4424 ** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or 4425 ** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then 4426 ** the locking-mode is set to the value specified. 4427 ** 4428 ** The returned value is either PAGER_LOCKINGMODE_NORMAL or 4429 ** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated) 4430 ** locking-mode. 4431 */ 4432 int sqlite3PagerLockingMode(Pager *pPager, int eMode){ 4433 assert( eMode==PAGER_LOCKINGMODE_QUERY 4434 || eMode==PAGER_LOCKINGMODE_NORMAL 4435 || eMode==PAGER_LOCKINGMODE_EXCLUSIVE ); 4436 assert( PAGER_LOCKINGMODE_QUERY<0 ); 4437 assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 ); 4438 if( eMode>=0 && !pPager->tempFile ){ 4439 pPager->exclusiveMode = eMode; 4440 } 4441 return (int)pPager->exclusiveMode; 4442 } 4443 4444 #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) 4445 /* 4446 ** Return the current state of the file lock for the given pager. 4447 ** The return value is one of NO_LOCK, SHARED_LOCK, RESERVED_LOCK, 4448 ** PENDING_LOCK, or EXCLUSIVE_LOCK. 4449 */ 4450 int sqlite3PagerLockstate(Pager *pPager){ 4451 return sqlite3OsLockState(pPager->fd); 4452 } 4453 #endif 4454 4455 #ifdef SQLITE_DEBUG 4456 /* 4457 ** Print a listing of all referenced pages and their ref count. 4458 */ 4459 void sqlite3PagerRefdump(Pager *pPager){ 4460 PgHdr *pPg; 4461 for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){ 4462 if( pPg->nRef<=0 ) continue; 4463 sqlite3DebugPrintf("PAGE %3d addr=%p nRef=%d\n", 4464 pPg->pgno, PGHDR_TO_DATA(pPg), pPg->nRef); 4465 } 4466 } 4467 #endif 4468 4469 #endif /* SQLITE_OMIT_DISKIO */ 4470