xref: /sqlite-3.40.0/src/pager.c (revision 5665b3ea)
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