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