OpenCoverage

pager.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/sqlite/src/src/pager.c
Source codeSwitch to Preprocessed file
LineSourceCount
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#ifndef SQLITE_OMIT_DISKIO-
22#include "sqliteInt.h"-
23#include "wal.h"-
24-
25-
26/******************* NOTES ON THE DESIGN OF THE PAGER ************************-
27**-
28** This comment block describes invariants that hold when using a rollback-
29** journal. These invariants do not apply for journal_mode=WAL,-
30** journal_mode=MEMORY, or journal_mode=OFF.-
31**-
32** Within this comment block, a page is deemed to have been synced-
33** automatically as soon as it is written when PRAGMA synchronous=OFF.-
34** Otherwise, the page is not synced until the xSync method of the VFS-
35** is called successfully on the file containing the page.-
36**-
37** Definition: A page of the database file is said to be "overwriteable" if-
38** one or more of the following are true about the page:-
39** -
40** (a) The original content of the page as it was at the beginning of-
41** the transaction has been written into the rollback journal and-
42** synced.-
43** -
44** (b) The page was a freelist leaf page at the start of the transaction.-
45** -
46** (c) The page number is greater than the largest page that existed in-
47** the database file at the start of the transaction.-
48** -
49** (1) A page of the database file is never overwritten unless one of the-
50** following are true:-
51** -
52** (a) The page and all other pages on the same sector are overwriteable.-
53** -
54** (b) The atomic page write optimization is enabled, and the entire-
55** transaction other than the update of the transaction sequence-
56** number consists of a single page change.-
57** -
58** (2) The content of a page written into the rollback journal exactly matches-
59** both the content in the database when the rollback journal was written-
60** and the content in the database at the beginning of the current-
61** transaction.-
62** -
63** (3) Writes to the database file are an integer multiple of the page size-
64** in length and are aligned on a page boundary.-
65** -
66** (4) Reads from the database file are either aligned on a page boundary and-
67** an integer multiple of the page size in length or are taken from the-
68** first 100 bytes of the database file.-
69** -
70** (5) All writes to the database file are synced prior to the rollback journal-
71** being deleted, truncated, or zeroed.-
72** -
73** (6) If a master journal file is used, then all writes to the database file-
74** are synced prior to the master journal being deleted.-
75** -
76** Definition: Two databases (or the same database at two points it time)-
77** are said to be "logically equivalent" if they give the same answer to-
78** all queries. Note in particular the content of freelist leaf-
79** pages can be changed arbitrarily without affecting the logical equivalence-
80** of the database.-
81** -
82** (7) At any time, if any subset, including the empty set and the total set,-
83** of the unsynced changes to a rollback journal are removed and the -
84** journal is rolled back, the resulting database file will be logically-
85** equivalent to the database file at the beginning of the transaction.-
86** -
87** (8) When a transaction is rolled back, the xTruncate method of the VFS-
88** is called to restore the database file to the same size it was at-
89** the beginning of the transaction. (In some VFSes, the xTruncate-
90** method is a no-op, but that does not change the fact the SQLite will-
91** invoke it.)-
92** -
93** (9) Whenever the database file is modified, at least one bit in the range-
94** of bytes from 24 through 39 inclusive will be changed prior to releasing-
95** the EXCLUSIVE lock, thus signaling other connections on the same-
96** database to flush their caches.-
97**-
98** (10) The pattern of bits in bytes 24 through 39 shall not repeat in less-
99** than one billion transactions.-
100**-
101** (11) A database file is well-formed at the beginning and at the conclusion-
102** of every transaction.-
103**-
104** (12) An EXCLUSIVE lock is held on the database file when writing to-
105** the database file.-
106**-
107** (13) A SHARED lock is held on the database file while reading any-
108** content out of the database file.-
109**-
110******************************************************************************/-
111-
112/*-
113** Macros for troubleshooting. Normally turned off-
114*/-
115#if 0-
116int sqlite3PagerTrace=1; /* True to enable tracing */-
117#define sqlite3DebugPrintf printf-
118#define PAGERTRACE(X) if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; }-
119#else-
120#define PAGERTRACE(X)-
121#endif-
122-
123/*-
124** The following two macros are used within the PAGERTRACE() macros above-
125** to print out file-descriptors. -
126**-
127** PAGERID() takes a pointer to a Pager struct as its argument. The-
128** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file-
129** struct as its argument.-
130*/-
131#define PAGERID(p) (SQLITE_PTR_TO_INT(p->fd))-
132#define FILEHANDLEID(fd) (SQLITE_PTR_TO_INT(fd))-
133-
134/*-
135** The Pager.eState variable stores the current 'state' of a pager. A-
136** pager may be in any one of the seven states shown in the following-
137** state diagram.-
138**-
139** OPEN <------+------+-
140** | | |-
141** V | |-
142** +---------> READER-------+ |-
143** | | |-
144** | V |-
145** |<-------WRITER_LOCKED------> ERROR-
146** | | ^ -
147** | V |-
148** |<------WRITER_CACHEMOD-------->|-
149** | | |-
150** | V |-
151** |<-------WRITER_DBMOD---------->|-
152** | | |-
153** | V |-
154** +<------WRITER_FINISHED-------->+-
155**-
156**-
157** List of state transitions and the C [function] that performs each:-
158** -
159** OPEN -> READER [sqlite3PagerSharedLock]-
160** READER -> OPEN [pager_unlock]-
161**-
162** READER -> WRITER_LOCKED [sqlite3PagerBegin]-
163** WRITER_LOCKED -> WRITER_CACHEMOD [pager_open_journal]-
164** WRITER_CACHEMOD -> WRITER_DBMOD [syncJournal]-
165** WRITER_DBMOD -> WRITER_FINISHED [sqlite3PagerCommitPhaseOne]-
166** WRITER_*** -> READER [pager_end_transaction]-
167**-
168** WRITER_*** -> ERROR [pager_error]-
169** ERROR -> OPEN [pager_unlock]-
170** -
171**-
172** OPEN:-
173**-
174** The pager starts up in this state. Nothing is guaranteed in this-
175** state - the file may or may not be locked and the database size is-
176** unknown. The database may not be read or written.-
177**-
178** * No read or write transaction is active.-
179** * Any lock, or no lock at all, may be held on the database file.-
180** * The dbSize, dbOrigSize and dbFileSize variables may not be trusted.-
181**-
182** READER:-
183**-
184** In this state all the requirements for reading the database in -
185** rollback (non-WAL) mode are met. Unless the pager is (or recently-
186** was) in exclusive-locking mode, a user-level read transaction is -
187** open. The database size is known in this state.-
188**-
189** A connection running with locking_mode=normal enters this state when-
190** it opens a read-transaction on the database and returns to state-
191** OPEN after the read-transaction is completed. However a connection-
192** running in locking_mode=exclusive (including temp databases) remains in-
193** this state even after the read-transaction is closed. The only way-
194** a locking_mode=exclusive connection can transition from READER to OPEN-
195** is via the ERROR state (see below).-
196** -
197** * A read transaction may be active (but a write-transaction cannot).-
198** * A SHARED or greater lock is held on the database file.-
199** * The dbSize variable may be trusted (even if a user-level read -
200** transaction is not active). The dbOrigSize and dbFileSize variables-
201** may not be trusted at this point.-
202** * If the database is a WAL database, then the WAL connection is open.-
203** * Even if a read-transaction is not open, it is guaranteed that -
204** there is no hot-journal in the file-system.-
205**-
206** WRITER_LOCKED:-
207**-
208** The pager moves to this state from READER when a write-transaction-
209** is first opened on the database. In WRITER_LOCKED state, all locks -
210** required to start a write-transaction are held, but no actual -
211** modifications to the cache or database have taken place.-
212**-
213** In rollback mode, a RESERVED or (if the transaction was opened with -
214** BEGIN EXCLUSIVE) EXCLUSIVE lock is obtained on the database file when-
215** moving to this state, but the journal file is not written to or opened -
216** to in this state. If the transaction is committed or rolled back while -
217** in WRITER_LOCKED state, all that is required is to unlock the database -
218** file.-
219**-
220** IN WAL mode, WalBeginWriteTransaction() is called to lock the log file.-
221** If the connection is running with locking_mode=exclusive, an attempt-
222** is made to obtain an EXCLUSIVE lock on the database file.-
223**-
224** * A write transaction is active.-
225** * If the connection is open in rollback-mode, a RESERVED or greater -
226** lock is held on the database file.-
227** * If the connection is open in WAL-mode, a WAL write transaction-
228** is open (i.e. sqlite3WalBeginWriteTransaction() has been successfully-
229** called).-
230** * The dbSize, dbOrigSize and dbFileSize variables are all valid.-
231** * The contents of the pager cache have not been modified.-
232** * The journal file may or may not be open.-
233** * Nothing (not even the first header) has been written to the journal.-
234**-
235** WRITER_CACHEMOD:-
236**-
237** A pager moves from WRITER_LOCKED state to this state when a page is-
238** first modified by the upper layer. In rollback mode the journal file-
239** is opened (if it is not already open) and a header written to the-
240** start of it. The database file on disk has not been modified.-
241**-
242** * A write transaction is active.-
243** * A RESERVED or greater lock is held on the database file.-
244** * The journal file is open and the first header has been written -
245** to it, but the header has not been synced to disk.-
246** * The contents of the page cache have been modified.-
247**-
248** WRITER_DBMOD:-
249**-
250** The pager transitions from WRITER_CACHEMOD into WRITER_DBMOD state-
251** when it modifies the contents of the database file. WAL connections-
252** never enter this state (since they do not modify the database file,-
253** just the log file).-
254**-
255** * A write transaction is active.-
256** * An EXCLUSIVE or greater lock is held on the database file.-
257** * The journal file is open and the first header has been written -
258** and synced to disk.-
259** * The contents of the page cache have been modified (and possibly-
260** written to disk).-
261**-
262** WRITER_FINISHED:-
263**-
264** It is not possible for a WAL connection to enter this state.-
265**-
266** A rollback-mode pager changes to WRITER_FINISHED state from WRITER_DBMOD-
267** state after the entire transaction has been successfully written into the-
268** database file. In this state the transaction may be committed simply-
269** by finalizing the journal file. Once in WRITER_FINISHED state, it is -
270** not possible to modify the database further. At this point, the upper -
271** layer must either commit or rollback the transaction.-
272**-
273** * A write transaction is active.-
274** * An EXCLUSIVE or greater lock is held on the database file.-
275** * All writing and syncing of journal and database data has finished.-
276** If no error occurred, all that remains is to finalize the journal to-
277** commit the transaction. If an error did occur, the caller will need-
278** to rollback the transaction. -
279**-
280** ERROR:-
281**-
282** The ERROR state is entered when an IO or disk-full error (including-
283** SQLITE_IOERR_NOMEM) occurs at a point in the code that makes it -
284** difficult to be sure that the in-memory pager state (cache contents, -
285** db size etc.) are consistent with the contents of the file-system.-
286**-
287** Temporary pager files may enter the ERROR state, but in-memory pagers-
288** cannot.-
289**-
290** For example, if an IO error occurs while performing a rollback, -
291** the contents of the page-cache may be left in an inconsistent state.-
292** At this point it would be dangerous to change back to READER state-
293** (as usually happens after a rollback). Any subsequent readers might-
294** report database corruption (due to the inconsistent cache), and if-
295** they upgrade to writers, they may inadvertently corrupt the database-
296** file. To avoid this hazard, the pager switches into the ERROR state-
297** instead of READER following such an error.-
298**-
299** Once it has entered the ERROR state, any attempt to use the pager-
300** to read or write data returns an error. Eventually, once all -
301** outstanding transactions have been abandoned, the pager is able to-
302** transition back to OPEN state, discarding the contents of the -
303** page-cache and any other in-memory state at the same time. Everything-
304** is reloaded from disk (and, if necessary, hot-journal rollback peformed)-
305** when a read-transaction is next opened on the pager (transitioning-
306** the pager into READER state). At that point the system has recovered -
307** from the error.-
308**-
309** Specifically, the pager jumps into the ERROR state if:-
310**-
311** 1. An error occurs while attempting a rollback. This happens in-
312** function sqlite3PagerRollback().-
313**-
314** 2. An error occurs while attempting to finalize a journal file-
315** following a commit in function sqlite3PagerCommitPhaseTwo().-
316**-
317** 3. An error occurs while attempting to write to the journal or-
318** database file in function pagerStress() in order to free up-
319** memory.-
320**-
321** In other cases, the error is returned to the b-tree layer. The b-tree-
322** layer then attempts a rollback operation. If the error condition -
323** persists, the pager enters the ERROR state via condition (1) above.-
324**-
325** Condition (3) is necessary because it can be triggered by a read-only-
326** statement executed within a transaction. In this case, if the error-
327** code were simply returned to the user, the b-tree layer would not-
328** automatically attempt a rollback, as it assumes that an error in a-
329** read-only statement cannot leave the pager in an internally inconsistent -
330** state.-
331**-
332** * The Pager.errCode variable is set to something other than SQLITE_OK.-
333** * There are one or more outstanding references to pages (after the-
334** last reference is dropped the pager should move back to OPEN state).-
335** * The pager is not an in-memory pager.-
336** -
337**-
338** Notes:-
339**-
340** * A pager is never in WRITER_DBMOD or WRITER_FINISHED state if the-
341** connection is open in WAL mode. A WAL connection is always in one-
342** of the first four states.-
343**-
344** * Normally, a connection open in exclusive mode is never in PAGER_OPEN-
345** state. There are two exceptions: immediately after exclusive-mode has-
346** been turned on (and before any read or write transactions are -
347** executed), and when the pager is leaving the "error state".-
348**-
349** * See also: assert_pager_state().-
350*/-
351#define PAGER_OPEN 0-
352#define PAGER_READER 1-
353#define PAGER_WRITER_LOCKED 2-
354#define PAGER_WRITER_CACHEMOD 3-
355#define PAGER_WRITER_DBMOD 4-
356#define PAGER_WRITER_FINISHED 5-
357#define PAGER_ERROR 6-
358-
359/*-
360** The Pager.eLock variable is almost always set to one of the -
361** following locking-states, according to the lock currently held on-
362** the database file: NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.-
363** This variable is kept up to date as locks are taken and released by-
364** the pagerLockDb() and pagerUnlockDb() wrappers.-
365**-
366** If the VFS xLock() or xUnlock() returns an error other than SQLITE_BUSY-
367** (i.e. one of the SQLITE_IOERR subtypes), it is not clear whether or not-
368** the operation was successful. In these circumstances pagerLockDb() and-
369** pagerUnlockDb() take a conservative approach - eLock is always updated-
370** when unlocking the file, and only updated when locking the file if the-
371** VFS call is successful. This way, the Pager.eLock variable may be set-
372** to a less exclusive (lower) value than the lock that is actually held-
373** at the system level, but it is never set to a more exclusive value.-
374**-
375** This is usually safe. If an xUnlock fails or appears to fail, there may -
376** be a few redundant xLock() calls or a lock may be held for longer than-
377** required, but nothing really goes wrong.-
378**-
379** The exception is when the database file is unlocked as the pager moves-
380** from ERROR to OPEN state. At this point there may be a hot-journal file -
381** in the file-system that needs to be rolled back (as part of an OPEN->SHARED-
382** transition, by the same pager or any other). If the call to xUnlock()-
383** fails at this point and the pager is left holding an EXCLUSIVE lock, this-
384** can confuse the call to xCheckReservedLock() call made later as part-
385** of hot-journal detection.-
386**-
387** xCheckReservedLock() is defined as returning true "if there is a RESERVED -
388** lock held by this process or any others". So xCheckReservedLock may -
389** return true because the caller itself is holding an EXCLUSIVE lock (but-
390** doesn't know it because of a previous error in xUnlock). If this happens-
391** a hot-journal may be mistaken for a journal being created by an active-
392** transaction in another process, causing SQLite to read from the database-
393** without rolling it back.-
394**-
395** To work around this, if a call to xUnlock() fails when unlocking the-
396** database in the ERROR state, Pager.eLock is set to UNKNOWN_LOCK. It-
397** is only changed back to a real locking state after a successful call-
398** to xLock(EXCLUSIVE). Also, the code to do the OPEN->SHARED state transition-
399** omits the check for a hot-journal if Pager.eLock is set to UNKNOWN_LOCK -
400** lock. Instead, it assumes a hot-journal exists and obtains an EXCLUSIVE-
401** lock on the database file before attempting to roll it back. See function-
402** PagerSharedLock() for more detail.-
403**-
404** Pager.eLock may only be set to UNKNOWN_LOCK when the pager is in -
405** PAGER_OPEN state.-
406*/-
407#define UNKNOWN_LOCK (EXCLUSIVE_LOCK+1)-
408-
409/*-
410** A macro used for invoking the codec if there is one-
411*/-
412#ifdef SQLITE_HAS_CODEC-
413# define CODEC1(P,D,N,X,E) \-
414 if( P->xCodec && P->xCodec(P->pCodec,D,N,X)==0 ){ E; }-
415# define CODEC2(P,D,N,X,E,O) \-
416 if( P->xCodec==0 ){ O=(char*)D; }else \-
417 if( (O=(char*)(P->xCodec(P->pCodec,D,N,X)))==0 ){ E; }-
418#else-
419# define CODEC1(P,D,N,X,E) /* NO-OP */-
420# define CODEC2(P,D,N,X,E,O) O=(char*)D-
421#endif-
422-
423/*-
424** The maximum allowed sector size. 64KiB. If the xSectorsize() method -
425** returns a value larger than this, then MAX_SECTOR_SIZE is used instead.-
426** This could conceivably cause corruption following a power failure on-
427** such a system. This is currently an undocumented limit.-
428*/-
429#define MAX_SECTOR_SIZE 0x10000-
430-
431-
432/*-
433** An instance of the following structure is allocated for each active-
434** savepoint and statement transaction in the system. All such structures-
435** are stored in the Pager.aSavepoint[] array, which is allocated and-
436** resized using sqlite3Realloc().-
437**-
438** When a savepoint is created, the PagerSavepoint.iHdrOffset field is-
439** set to 0. If a journal-header is written into the main journal while-
440** the savepoint is active, then iHdrOffset is set to the byte offset -
441** immediately following the last journal record written into the main-
442** journal before the journal-header. This is required during savepoint-
443** rollback (see pagerPlaybackSavepoint()).-
444*/-
445typedef struct PagerSavepoint PagerSavepoint;-
446struct PagerSavepoint {-
447 i64 iOffset; /* Starting offset in main journal */-
448 i64 iHdrOffset; /* See above */-
449 Bitvec *pInSavepoint; /* Set of pages in this savepoint */-
450 Pgno nOrig; /* Original number of pages in file */-
451 Pgno iSubRec; /* Index of first record in sub-journal */-
452#ifndef SQLITE_OMIT_WAL-
453 u32 aWalData[WAL_SAVEPOINT_NDATA]; /* WAL savepoint context */-
454#endif-
455};-
456-
457/*-
458** Bits of the Pager.doNotSpill flag. See further description below.-
459*/-
460#define SPILLFLAG_OFF 0x01 /* Never spill cache. Set via pragma */-
461#define SPILLFLAG_ROLLBACK 0x02 /* Current rolling back, so do not spill */-
462#define SPILLFLAG_NOSYNC 0x04 /* Spill is ok, but do not sync */-
463-
464/*-
465** An open page cache is an instance of struct Pager. A description of-
466** some of the more important member variables follows:-
467**-
468** eState-
469**-
470** The current 'state' of the pager object. See the comment and state-
471** diagram above for a description of the pager state.-
472**-
473** eLock-
474**-
475** For a real on-disk database, the current lock held on the database file --
476** NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.-
477**-
478** For a temporary or in-memory database (neither of which require any-
479** locks), this variable is always set to EXCLUSIVE_LOCK. Since such-
480** databases always have Pager.exclusiveMode==1, this tricks the pager-
481** logic into thinking that it already has all the locks it will ever-
482** need (and no reason to release them).-
483**-
484** In some (obscure) circumstances, this variable may also be set to-
485** UNKNOWN_LOCK. See the comment above the #define of UNKNOWN_LOCK for-
486** details.-
487**-
488** changeCountDone-
489**-
490** This boolean variable is used to make sure that the change-counter -
491** (the 4-byte header field at byte offset 24 of the database file) is -
492** not updated more often than necessary. -
493**-
494** It is set to true when the change-counter field is updated, which -
495** can only happen if an exclusive lock is held on the database file.-
496** It is cleared (set to false) whenever an exclusive lock is -
497** relinquished on the database file. Each time a transaction is committed,-
498** The changeCountDone flag is inspected. If it is true, the work of-
499** updating the change-counter is omitted for the current transaction.-
500**-
501** This mechanism means that when running in exclusive mode, a connection -
502** need only update the change-counter once, for the first transaction-
503** committed.-
504**-
505** setMaster-
506**-
507** When PagerCommitPhaseOne() is called to commit a transaction, it may-
508** (or may not) specify a master-journal name to be written into the -
509** journal file before it is synced to disk.-
510**-
511** Whether or not a journal file contains a master-journal pointer affects -
512** the way in which the journal file is finalized after the transaction is -
513** committed or rolled back when running in "journal_mode=PERSIST" mode.-
514** If a journal file does not contain a master-journal pointer, it is-
515** finalized by overwriting the first journal header with zeroes. If-
516** it does contain a master-journal pointer the journal file is finalized -
517** by truncating it to zero bytes, just as if the connection were -
518** running in "journal_mode=truncate" mode.-
519**-
520** Journal files that contain master journal pointers cannot be finalized-
521** simply by overwriting the first journal-header with zeroes, as the-
522** master journal pointer could interfere with hot-journal rollback of any-
523** subsequently interrupted transaction that reuses the journal file.-
524**-
525** The flag is cleared as soon as the journal file is finalized (either-
526** by PagerCommitPhaseTwo or PagerRollback). If an IO error prevents the-
527** journal file from being successfully finalized, the setMaster flag-
528** is cleared anyway (and the pager will move to ERROR state).-
529**-
530** doNotSpill-
531**-
532** This variables control the behavior of cache-spills (calls made by-
533** the pcache module to the pagerStress() routine to write cached data-
534** to the file-system in order to free up memory).-
535**-
536** When bits SPILLFLAG_OFF or SPILLFLAG_ROLLBACK of doNotSpill are set,-
537** writing to the database from pagerStress() is disabled altogether.-
538** The SPILLFLAG_ROLLBACK case is done in a very obscure case that-
539** comes up during savepoint rollback that requires the pcache module-
540** to allocate a new page to prevent the journal file from being written-
541** while it is being traversed by code in pager_playback(). The SPILLFLAG_OFF-
542** case is a user preference.-
543** -
544** If the SPILLFLAG_NOSYNC bit is set, writing to the database from-
545** pagerStress() is permitted, but syncing the journal file is not.-
546** This flag is set by sqlite3PagerWrite() when the file-system sector-size-
547** is larger than the database page-size in order to prevent a journal sync-
548** from happening in between the journalling of two pages on the same sector. -
549**-
550** subjInMemory-
551**-
552** This is a boolean variable. If true, then any required sub-journal-
553** is opened as an in-memory journal file. If false, then in-memory-
554** sub-journals are only used for in-memory pager files.-
555**-
556** This variable is updated by the upper layer each time a new -
557** write-transaction is opened.-
558**-
559** dbSize, dbOrigSize, dbFileSize-
560**-
561** Variable dbSize is set to the number of pages in the database file.-
562** It is valid in PAGER_READER and higher states (all states except for-
563** OPEN and ERROR). -
564**-
565** dbSize is set based on the size of the database file, which may be -
566** larger than the size of the database (the value stored at offset-
567** 28 of the database header by the btree). If the size of the file-
568** is not an integer multiple of the page-size, the value stored in-
569** dbSize is rounded down (i.e. a 5KB file with 2K page-size has dbSize==2).-
570** Except, any file that is greater than 0 bytes in size is considered-
571** to have at least one page. (i.e. a 1KB file with 2K page-size leads-
572** to dbSize==1).-
573**-
574** During a write-transaction, if pages with page-numbers greater than-
575** dbSize are modified in the cache, dbSize is updated accordingly.-
576** Similarly, if the database is truncated using PagerTruncateImage(), -
577** dbSize is updated.-
578**-
579** Variables dbOrigSize and dbFileSize are valid in states -
580** PAGER_WRITER_LOCKED and higher. dbOrigSize is a copy of the dbSize-
581** variable at the start of the transaction. It is used during rollback,-
582** and to determine whether or not pages need to be journalled before-
583** being modified.-
584**-
585** Throughout a write-transaction, dbFileSize contains the size of-
586** the file on disk in pages. It is set to a copy of dbSize when the-
587** write-transaction is first opened, and updated when VFS calls are made-
588** to write or truncate the database file on disk. -
589**-
590** The only reason the dbFileSize variable is required is to suppress -
591** unnecessary calls to xTruncate() after committing a transaction. If, -
592** when a transaction is committed, the dbFileSize variable indicates -
593** that the database file is larger than the database image (Pager.dbSize), -
594** pager_truncate() is called. The pager_truncate() call uses xFilesize()-
595** to measure the database file on disk, and then truncates it if required.-
596** dbFileSize is not used when rolling back a transaction. In this case-
597** pager_truncate() is called unconditionally (which means there may be-
598** a call to xFilesize() that is not strictly required). In either case,-
599** pager_truncate() may cause the file to become smaller or larger.-
600**-
601** dbHintSize-
602**-
603** The dbHintSize variable is used to limit the number of calls made to-
604** the VFS xFileControl(FCNTL_SIZE_HINT) method. -
605**-
606** dbHintSize is set to a copy of the dbSize variable when a-
607** write-transaction is opened (at the same time as dbFileSize and-
608** dbOrigSize). If the xFileControl(FCNTL_SIZE_HINT) method is called,-
609** dbHintSize is increased to the number of pages that correspond to the-
610** size-hint passed to the method call. See pager_write_pagelist() for -
611** details.-
612**-
613** errCode-
614**-
615** The Pager.errCode variable is only ever used in PAGER_ERROR state. It-
616** is set to zero in all other states. In PAGER_ERROR state, Pager.errCode -
617** is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX -
618** sub-codes.-
619**-
620** syncFlags, walSyncFlags-
621**-
622** syncFlags is either SQLITE_SYNC_NORMAL (0x02) or SQLITE_SYNC_FULL (0x03).-
623** syncFlags is used for rollback mode. walSyncFlags is used for WAL mode-
624** and contains the flags used to sync the checkpoint operations in the-
625** lower two bits, and sync flags used for transaction commits in the WAL-
626** file in bits 0x04 and 0x08. In other words, to get the correct sync flags-
627** for checkpoint operations, use (walSyncFlags&0x03) and to get the correct-
628** sync flags for transaction commit, use ((walSyncFlags>>2)&0x03). Note-
629** that with synchronous=NORMAL in WAL mode, transaction commit is not synced-
630** meaning that the 0x04 and 0x08 bits are both zero.-
631*/-
632struct Pager {-
633 sqlite3_vfs *pVfs; /* OS functions to use for IO */-
634 u8 exclusiveMode; /* Boolean. True if locking_mode==EXCLUSIVE */-
635 u8 journalMode; /* One of the PAGER_JOURNALMODE_* values */-
636 u8 useJournal; /* Use a rollback journal on this file */-
637 u8 noSync; /* Do not sync the journal if true */-
638 u8 fullSync; /* Do extra syncs of the journal for robustness */-
639 u8 extraSync; /* sync directory after journal delete */-
640 u8 syncFlags; /* SYNC_NORMAL or SYNC_FULL otherwise */-
641 u8 walSyncFlags; /* See description above */-
642 u8 tempFile; /* zFilename is a temporary or immutable file */-
643 u8 noLock; /* Do not lock (except in WAL mode) */-
644 u8 readOnly; /* True for a read-only database */-
645 u8 memDb; /* True to inhibit all file I/O */-
646-
647 /**************************************************************************-
648 ** The following block contains those class members that change during-
649 ** routine operation. Class members not in this block are either fixed-
650 ** when the pager is first created or else only change when there is a-
651 ** significant mode change (such as changing the page_size, locking_mode,-
652 ** or the journal_mode). From another view, these class members describe-
653 ** the "state" of the pager, while other class members describe the-
654 ** "configuration" of the pager.-
655 */-
656 u8 eState; /* Pager state (OPEN, READER, WRITER_LOCKED..) */-
657 u8 eLock; /* Current lock held on database file */-
658 u8 changeCountDone; /* Set after incrementing the change-counter */-
659 u8 setMaster; /* True if a m-j name has been written to jrnl */-
660 u8 doNotSpill; /* Do not spill the cache when non-zero */-
661 u8 subjInMemory; /* True to use in-memory sub-journals */-
662 u8 bUseFetch; /* True to use xFetch() */-
663 u8 hasHeldSharedLock; /* True if a shared lock has ever been held */-
664 Pgno dbSize; /* Number of pages in the database */-
665 Pgno dbOrigSize; /* dbSize before the current transaction */-
666 Pgno dbFileSize; /* Number of pages in the database file */-
667 Pgno dbHintSize; /* Value passed to FCNTL_SIZE_HINT call */-
668 int errCode; /* One of several kinds of errors */-
669 int nRec; /* Pages journalled since last j-header written */-
670 u32 cksumInit; /* Quasi-random value added to every checksum */-
671 u32 nSubRec; /* Number of records written to sub-journal */-
672 Bitvec *pInJournal; /* One bit for each page in the database file */-
673 sqlite3_file *fd; /* File descriptor for database */-
674 sqlite3_file *jfd; /* File descriptor for main journal */-
675 sqlite3_file *sjfd; /* File descriptor for sub-journal */-
676 i64 journalOff; /* Current write offset in the journal file */-
677 i64 journalHdr; /* Byte offset to previous journal header */-
678 sqlite3_backup *pBackup; /* Pointer to list of ongoing backup processes */-
679 PagerSavepoint *aSavepoint; /* Array of active savepoints */-
680 int nSavepoint; /* Number of elements in aSavepoint[] */-
681 u32 iDataVersion; /* Changes whenever database content changes */-
682 char dbFileVers[16]; /* Changes whenever database file changes */-
683-
684 int nMmapOut; /* Number of mmap pages currently outstanding */-
685 sqlite3_int64 szMmap; /* Desired maximum mmap size */-
686 PgHdr *pMmapFreelist; /* List of free mmap page headers (pDirty) */-
687 /*-
688 ** End of the routinely-changing class members-
689 ***************************************************************************/-
690-
691 u16 nExtra; /* Add this many bytes to each in-memory page */-
692 i16 nReserve; /* Number of unused bytes at end of each page */-
693 u32 vfsFlags; /* Flags for sqlite3_vfs.xOpen() */-
694 u32 sectorSize; /* Assumed sector size during rollback */-
695 int pageSize; /* Number of bytes in a page */-
696 Pgno mxPgno; /* Maximum allowed size of the database */-
697 i64 journalSizeLimit; /* Size limit for persistent journal files */-
698 char *zFilename; /* Name of the database file */-
699 char *zJournal; /* Name of the journal file */-
700 int (*xBusyHandler)(void*); /* Function to call when busy */-
701 void *pBusyHandlerArg; /* Context argument for xBusyHandler */-
702 int aStat[4]; /* Total cache hits, misses, writes, spills */-
703#ifdef SQLITE_TEST-
704 int nRead; /* Database pages read */-
705#endif-
706 void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */-
707 int (*xGet)(Pager*,Pgno,DbPage**,int); /* Routine to fetch a patch */-
708#ifdef SQLITE_HAS_CODEC-
709 void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */-
710 void (*xCodecSizeChng)(void*,int,int); /* Notify of page size changes */-
711 void (*xCodecFree)(void*); /* Destructor for the codec */-
712 void *pCodec; /* First argument to xCodec... methods */-
713#endif-
714 char *pTmpSpace; /* Pager.pageSize bytes of space for tmp use */-
715 PCache *pPCache; /* Pointer to page cache object */-
716#ifndef SQLITE_OMIT_WAL-
717 Wal *pWal; /* Write-ahead log used by "journal_mode=wal" */-
718 char *zWal; /* File name for write-ahead log */-
719#endif-
720};-
721-
722/*-
723** Indexes for use with Pager.aStat[]. The Pager.aStat[] array contains-
724** the values accessed by passing SQLITE_DBSTATUS_CACHE_HIT, CACHE_MISS -
725** or CACHE_WRITE to sqlite3_db_status().-
726*/-
727#define PAGER_STAT_HIT 0-
728#define PAGER_STAT_MISS 1-
729#define PAGER_STAT_WRITE 2-
730#define PAGER_STAT_SPILL 3-
731-
732/*-
733** The following global variables hold counters used for-
734** testing purposes only. These variables do not exist in-
735** a non-testing build. These variables are not thread-safe.-
736*/-
737#ifdef SQLITE_TEST-
738int sqlite3_pager_readdb_count = 0; /* Number of full pages read from DB */-
739int sqlite3_pager_writedb_count = 0; /* Number of full pages written to DB */-
740int sqlite3_pager_writej_count = 0; /* Number of pages written to journal */-
741# define PAGER_INCR(v) v++-
742#else-
743# define PAGER_INCR(v)-
744#endif-
745-
746-
747-
748/*-
749** Journal files begin with the following magic string. The data-
750** was obtained from /dev/random. It is used only as a sanity check.-
751**-
752** Since version 2.8.0, the journal format contains additional sanity-
753** checking information. If the power fails while the journal is being-
754** written, semi-random garbage data might appear in the journal-
755** file after power is restored. If an attempt is then made-
756** to roll the journal back, the database could be corrupted. The additional-
757** sanity checking data is an attempt to discover the garbage in the-
758** journal and ignore it.-
759**-
760** The sanity checking information for the new journal format consists-
761** of a 32-bit checksum on each page of data. The checksum covers both-
762** the page number and the pPager->pageSize bytes of data for the page.-
763** This cksum is initialized to a 32-bit random value that appears in the-
764** journal file right after the header. The random initializer is important,-
765** because garbage data that appears at the end of a journal is likely-
766** data that was once in other files that have now been deleted. If the-
767** garbage data came from an obsolete journal file, the checksums might-
768** be correct. But by initializing the checksum to random value which-
769** is different for every journal, we minimize that risk.-
770*/-
771static const unsigned char aJournalMagic[] = {-
772 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7,-
773};-
774-
775/*-
776** The size of the of each page record in the journal is given by-
777** the following macro.-
778*/-
779#define JOURNAL_PG_SZ(pPager) ((pPager->pageSize) + 8)-
780-
781/*-
782** The journal header size for this pager. This is usually the same -
783** size as a single disk sector. See also setSectorSize().-
784*/-
785#define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize)-
786-
787/*-
788** The macro MEMDB is true if we are dealing with an in-memory database.-
789** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set,-
790** the value of MEMDB will be a constant and the compiler will optimize-
791** out code that would never execute.-
792*/-
793#ifdef SQLITE_OMIT_MEMORYDB-
794# define MEMDB 0-
795#else-
796# define MEMDB pPager->memDb-
797#endif-
798-
799/*-
800** The macro USEFETCH is true if we are allowed to use the xFetch and xUnfetch-
801** interfaces to access the database using memory-mapped I/O.-
802*/-
803#if SQLITE_MAX_MMAP_SIZE>0-
804# define USEFETCH(x) ((x)->bUseFetch)-
805#else-
806# define USEFETCH(x) 0-
807#endif-
808-
809/*-
810** The maximum legal page number is (2^31 - 1).-
811*/-
812#define PAGER_MAX_PGNO 2147483647-
813-
814/*-
815** The argument to this macro is a file descriptor (type sqlite3_file*).-
816** Return 0 if it is not open, or non-zero (but not 1) if it is.-
817**-
818** This is so that expressions can be written as:-
819**-
820** if( isOpen(pPager->jfd) ){ ...-
821**-
822** instead of-
823**-
824** if( pPager->jfd->pMethods ){ ...-
825*/-
826#define isOpen(pFd) ((pFd)->pMethods!=0)-
827-
828/*-
829** Return true if this pager uses a write-ahead log to read page pgno.-
830** Return false if the pager reads pgno directly from the database.-
831*/-
832#if !defined(SQLITE_OMIT_WAL) && defined(SQLITE_DIRECT_OVERFLOW_READ)-
833int sqlite3PagerUseWal(Pager *pPager, Pgno pgno){-
834 u32 iRead = 0;-
835 int rc;-
836 if( pPager->pWal==0 ) return 0;-
837 rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iRead);-
838 return rc || iRead;-
839}-
840#endif-
841#ifndef SQLITE_OMIT_WAL-
842# define pagerUseWal(x) ((x)->pWal!=0)-
843#else-
844# define pagerUseWal(x) 0-
845# define pagerRollbackWal(x) 0-
846# define pagerWalFrames(v,w,x,y) 0-
847# define pagerOpenWalIfPresent(z) SQLITE_OK-
848# define pagerBeginReadTransaction(z) SQLITE_OK-
849#endif-
850-
851#ifndef NDEBUG -
852/*-
853** Usage:-
854**-
855** assert( assert_pager_state(pPager) );-
856**-
857** This function runs many asserts to try to find inconsistencies in-
858** the internal state of the Pager object.-
859*/-
860static int assert_pager_state(Pager *p){-
861 Pager *pPager = p;-
862-
863 /* State must be valid. */-
864 assert( p->eState==PAGER_OPEN-
865 || p->eState==PAGER_READER-
866 || p->eState==PAGER_WRITER_LOCKED-
867 || p->eState==PAGER_WRITER_CACHEMOD-
868 || p->eState==PAGER_WRITER_DBMOD-
869 || p->eState==PAGER_WRITER_FINISHED-
870 || p->eState==PAGER_ERROR-
871 );-
872-
873 /* Regardless of the current state, a temp-file connection always behaves-
874 ** as if it has an exclusive lock on the database file. It never updates-
875 ** the change-counter field, so the changeCountDone flag is always set.-
876 */-
877 assert( p->tempFile==0 || p->eLock==EXCLUSIVE_LOCK );-
878 assert( p->tempFile==0 || pPager->changeCountDone );-
879-
880 /* If the useJournal flag is clear, the journal-mode must be "OFF". -
881 ** And if the journal-mode is "OFF", the journal file must not be open.-
882 */-
883 assert( p->journalMode==PAGER_JOURNALMODE_OFF || p->useJournal );-
884 assert( p->journalMode!=PAGER_JOURNALMODE_OFF || !isOpen(p->jfd) );-
885-
886 /* Check that MEMDB implies noSync. And an in-memory journal. Since -
887 ** this means an in-memory pager performs no IO at all, it cannot encounter -
888 ** either SQLITE_IOERR or SQLITE_FULL during rollback or while finalizing -
889 ** a journal file. (although the in-memory journal implementation may -
890 ** return SQLITE_IOERR_NOMEM while the journal file is being written). It -
891 ** is therefore not possible for an in-memory pager to enter the ERROR -
892 ** state.-
893 */-
894 if( MEMDB ){-
895 assert( !isOpen(p->fd) );-
896 assert( p->noSync );-
897 assert( p->journalMode==PAGER_JOURNALMODE_OFF -
898 || p->journalMode==PAGER_JOURNALMODE_MEMORY -
899 );-
900 assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN );-
901 assert( pagerUseWal(p)==0 );-
902 }-
903-
904 /* If changeCountDone is set, a RESERVED lock or greater must be held-
905 ** on the file.-
906 */-
907 assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK );-
908 assert( p->eLock!=PENDING_LOCK );-
909-
910 switch( p->eState ){-
911 case PAGER_OPEN:-
912 assert( !MEMDB );-
913 assert( pPager->errCode==SQLITE_OK );-
914 assert( sqlite3PcacheRefCount(pPager->pPCache)==0 || pPager->tempFile );-
915 break;-
916-
917 case PAGER_READER:-
918 assert( pPager->errCode==SQLITE_OK );-
919 assert( p->eLock!=UNKNOWN_LOCK );-
920 assert( p->eLock>=SHARED_LOCK );-
921 break;-
922-
923 case PAGER_WRITER_LOCKED:-
924 assert( p->eLock!=UNKNOWN_LOCK );-
925 assert( pPager->errCode==SQLITE_OK );-
926 if( !pagerUseWal(pPager) ){-
927 assert( p->eLock>=RESERVED_LOCK );-
928 }-
929 assert( pPager->dbSize==pPager->dbOrigSize );-
930 assert( pPager->dbOrigSize==pPager->dbFileSize );-
931 assert( pPager->dbOrigSize==pPager->dbHintSize );-
932 assert( pPager->setMaster==0 );-
933 break;-
934-
935 case PAGER_WRITER_CACHEMOD:-
936 assert( p->eLock!=UNKNOWN_LOCK );-
937 assert( pPager->errCode==SQLITE_OK );-
938 if( !pagerUseWal(pPager) ){-
939 /* It is possible that if journal_mode=wal here that neither the-
940 ** journal file nor the WAL file are open. This happens during-
941 ** a rollback transaction that switches from journal_mode=off-
942 ** to journal_mode=wal.-
943 */-
944 assert( p->eLock>=RESERVED_LOCK );-
945 assert( isOpen(p->jfd) -
946 || p->journalMode==PAGER_JOURNALMODE_OFF -
947 || p->journalMode==PAGER_JOURNALMODE_WAL -
948 );-
949 }-
950 assert( pPager->dbOrigSize==pPager->dbFileSize );-
951 assert( pPager->dbOrigSize==pPager->dbHintSize );-
952 break;-
953-
954 case PAGER_WRITER_DBMOD:-
955 assert( p->eLock==EXCLUSIVE_LOCK );-
956 assert( pPager->errCode==SQLITE_OK );-
957 assert( !pagerUseWal(pPager) );-
958 assert( p->eLock>=EXCLUSIVE_LOCK );-
959 assert( isOpen(p->jfd) -
960 || p->journalMode==PAGER_JOURNALMODE_OFF -
961 || p->journalMode==PAGER_JOURNALMODE_WAL -
962 || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC)-
963 );-
964 assert( pPager->dbOrigSize<=pPager->dbHintSize );-
965 break;-
966-
967 case PAGER_WRITER_FINISHED:-
968 assert( p->eLock==EXCLUSIVE_LOCK );-
969 assert( pPager->errCode==SQLITE_OK );-
970 assert( !pagerUseWal(pPager) );-
971 assert( isOpen(p->jfd) -
972 || p->journalMode==PAGER_JOURNALMODE_OFF -
973 || p->journalMode==PAGER_JOURNALMODE_WAL -
974 || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC)-
975 );-
976 break;-
977-
978 case PAGER_ERROR:-
979 /* There must be at least one outstanding reference to the pager if-
980 ** in ERROR state. Otherwise the pager should have already dropped-
981 ** back to OPEN state.-
982 */-
983 assert( pPager->errCode!=SQLITE_OK );-
984 assert( sqlite3PcacheRefCount(pPager->pPCache)>0 || pPager->tempFile );-
985 break;-
986 }-
987-
988 return 1;-
989}-
990#endif /* ifndef NDEBUG */-
991-
992#ifdef SQLITE_DEBUG -
993/*-
994** Return a pointer to a human readable string in a static buffer-
995** containing the state of the Pager object passed as an argument. This-
996** is intended to be used within debuggers. For example, as an alternative-
997** to "print *pPager" in gdb:-
998**-
999** (gdb) printf "%s", print_pager_state(pPager)-
1000**-
1001** This routine has external linkage in order to suppress compiler warnings-
1002** about an unused function. It is enclosed within SQLITE_DEBUG and so does-
1003** not appear in normal builds.-
1004*/-
1005char *print_pager_state(Pager *p){-
1006 static char zRet[1024];-
1007-
1008 sqlite3_snprintf(1024, zRet,-
1009 "Filename: %s\n"-
1010 "State: %s errCode=%d\n"-
1011 "Lock: %s\n"-
1012 "Locking mode: locking_mode=%s\n"-
1013 "Journal mode: journal_mode=%s\n"-
1014 "Backing store: tempFile=%d memDb=%d useJournal=%d\n"-
1015 "Journal: journalOff=%lld journalHdr=%lld\n"-
1016 "Size: dbsize=%d dbOrigSize=%d dbFileSize=%d\n"-
1017 , p->zFilename-
1018 , p->eState==PAGER_OPEN ? "OPEN" :-
1019 p->eState==PAGER_READER ? "READER" :-
1020 p->eState==PAGER_WRITER_LOCKED ? "WRITER_LOCKED" :-
1021 p->eState==PAGER_WRITER_CACHEMOD ? "WRITER_CACHEMOD" :-
1022 p->eState==PAGER_WRITER_DBMOD ? "WRITER_DBMOD" :-
1023 p->eState==PAGER_WRITER_FINISHED ? "WRITER_FINISHED" :-
1024 p->eState==PAGER_ERROR ? "ERROR" : "?error?"-
1025 , (int)p->errCode-
1026 , p->eLock==NO_LOCK ? "NO_LOCK" :-
1027 p->eLock==RESERVED_LOCK ? "RESERVED" :-
1028 p->eLock==EXCLUSIVE_LOCK ? "EXCLUSIVE" :-
1029 p->eLock==SHARED_LOCK ? "SHARED" :-
1030 p->eLock==UNKNOWN_LOCK ? "UNKNOWN" : "?error?"-
1031 , p->exclusiveMode ? "exclusive" : "normal"-
1032 , p->journalMode==PAGER_JOURNALMODE_MEMORY ? "memory" :-
1033 p->journalMode==PAGER_JOURNALMODE_OFF ? "off" :-
1034 p->journalMode==PAGER_JOURNALMODE_DELETE ? "delete" :-
1035 p->journalMode==PAGER_JOURNALMODE_PERSIST ? "persist" :-
1036 p->journalMode==PAGER_JOURNALMODE_TRUNCATE ? "truncate" :-
1037 p->journalMode==PAGER_JOURNALMODE_WAL ? "wal" : "?error?"-
1038 , (int)p->tempFile, (int)p->memDb, (int)p->useJournal-
1039 , p->journalOff, p->journalHdr-
1040 , (int)p->dbSize, (int)p->dbOrigSize, (int)p->dbFileSize-
1041 );-
1042-
1043 return zRet;-
1044}-
1045#endif-
1046-
1047/* Forward references to the various page getters */-
1048static int getPageNormal(Pager*,Pgno,DbPage**,int);-
1049static int getPageError(Pager*,Pgno,DbPage**,int);-
1050#if SQLITE_MAX_MMAP_SIZE>0-
1051static int getPageMMap(Pager*,Pgno,DbPage**,int);-
1052#endif-
1053-
1054/*-
1055** Set the Pager.xGet method for the appropriate routine used to fetch-
1056** content from the pager.-
1057*/-
1058static void setGetterMethod(Pager *pPager){-
1059 if( pPager->errCode ){
pPager->errCodeDescription
TRUEevaluated 60410 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 254106 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
60410-254106
1060 pPager->xGet = getPageError;-
1061#if SQLITE_MAX_MMAP_SIZE>0-
1062 }else if( USEFETCH(pPager)
executed 60410 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
((pPager)->bUseFetch)Description
TRUEevaluated 224 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 253882 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
224-253882
1063#ifdef SQLITE_HAS_CODEC-
1064 && pPager->xCodec==0-
1065#endif-
1066 ){-
1067 pPager->xGet = getPageMMap;-
1068#endif /* SQLITE_MAX_MMAP_SIZE>0 */-
1069 }else{
executed 224 times by 2 tests: end of block
Executed by:
  • Self test (33)
  • Self test (438)
224
1070 pPager->xGet = getPageNormal;-
1071 }
executed 253882 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
253882
1072}-
1073-
1074/*-
1075** Return true if it is necessary to write page *pPg into the sub-journal.-
1076** A page needs to be written into the sub-journal if there exists one-
1077** or more open savepoints for which:-
1078**-
1079** * The page-number is less than or equal to PagerSavepoint.nOrig, and-
1080** * The bit corresponding to the page-number is not set in-
1081** PagerSavepoint.pInSavepoint.-
1082*/-
1083static int subjRequiresPage(PgHdr *pPg){-
1084 Pager *pPager = pPg->pPager;-
1085 PagerSavepoint *p;-
1086 Pgno pgno = pPg->pgno;-
1087 int i;-
1088 for(i=0; i<pPager->nSavepoint; i++){
i<pPager->nSavepointDescription
TRUEevaluated 22270187 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 955488 times by 18 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (8)
955488-22270187
1089 p = &pPager->aSavepoint[i];-
1090 if( p->nOrig>=pgno && 0==sqlite3BitvecTestNotNull(p->pInSavepoint, pgno) ){
p->nOrig>=pgnoDescription
TRUEevaluated 21899078 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 371109 times by 9 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (8)
0==sqlite3Bitv...vepoint, pgno)Description
TRUEevaluated 128957 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 21770121 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
128957-21899078
1091 return 1;
executed 128957 times by 2 tests: return 1;
Executed by:
  • Self test (438)
  • Self test (54)
128957
1092 }-
1093 }
executed 22141230 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
22141230
1094 return 0;
executed 955488 times by 18 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (8)
955488
1095}-
1096-
1097#ifdef SQLITE_DEBUG-
1098/*-
1099** Return true if the page is already in the journal file.-
1100*/-
1101static int pageInJournal(Pager *pPager, PgHdr *pPg){-
1102 return sqlite3BitvecTest(pPager->pInJournal, pPg->pgno);-
1103}-
1104#endif-
1105-
1106/*-
1107** Read a 32-bit integer from the given file descriptor. Store the integer-
1108** that is read in *pRes. Return SQLITE_OK if everything worked, or an-
1109** error code is something goes wrong.-
1110**-
1111** All values are stored on disk as big-endian.-
1112*/-
1113static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){-
1114 unsigned char ac[4];-
1115 int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset);-
1116 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 521226 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-521226
1117 *pRes = sqlite3Get4byte(ac);-
1118 }
executed 521226 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
521226
1119 return rc;
executed 521227 times by 12 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
521227
1120}-
1121-
1122/*-
1123** Write a 32-bit integer into a string buffer in big-endian byte order.-
1124*/-
1125#define put32bits(A,B) sqlite3Put4byte((u8*)A,B)-
1126-
1127-
1128/*-
1129** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK-
1130** on success or an error code is something goes wrong.-
1131*/-
1132static int write32bits(sqlite3_file *fd, i64 offset, u32 val){-
1133 char ac[4];-
1134 put32bits(ac, val);-
1135 return sqlite3OsWrite(fd, ac, 4, offset);
executed 839042 times by 377 tests: return sqlite3OsWrite(fd, ac, 4, offset);
Executed by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
839042
1136}-
1137-
1138/*-
1139** Unlock the database file to level eLock, which must be either NO_LOCK-
1140** or SHARED_LOCK. Regardless of whether or not the call to xUnlock()-
1141** succeeds, set the Pager.eLock variable to match the (attempted) new lock.-
1142**-
1143** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is-
1144** called, do not modify it. See the comment above the #define of -
1145** UNKNOWN_LOCK for an explanation of this.-
1146*/-
1147static int pagerUnlockDb(Pager *pPager, int eLock){-
1148 int rc = SQLITE_OK;-
1149-
1150 assert( !pPager->exclusiveMode || pPager->eLock==eLock );-
1151 assert( eLock==NO_LOCK || eLock==SHARED_LOCK );-
1152 assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 );-
1153 if( isOpen(pPager->fd) ){
((pPager->fd)->pMethods!=0)Description
TRUEevaluated 205445 times by 428 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 126780 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
126780-205445
1154 assert( pPager->eLock>=eLock );-
1155 rc = pPager->noLock ? SQLITE_OK : sqlite3OsUnlock(pPager->fd, eLock);
pPager->noLockDescription
TRUEevaluated 88 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (64)
FALSEevaluated 205357 times by 427 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
88-205357
1156 if( pPager->eLock!=UNKNOWN_LOCK ){
pPager->eLock!=(4 +1)Description
TRUEevaluated 205445 times by 428 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEnever evaluated
0-205445
1157 pPager->eLock = (u8)eLock;-
1158 }
executed 205445 times by 428 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
205445
1159 IOTRACE(("UNLOCK %p %d\n", pPager, eLock))-
1160 }
executed 205445 times by 428 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
205445
1161 return rc;
executed 332225 times by 428 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
332225
1162}-
1163-
1164/*-
1165** Lock the database file to level eLock, which must be either SHARED_LOCK,-
1166** RESERVED_LOCK or EXCLUSIVE_LOCK. If the caller is successful, set the-
1167** Pager.eLock variable to the new locking state. -
1168**-
1169** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is -
1170** called, do not modify it unless the new locking state is EXCLUSIVE_LOCK. -
1171** See the comment above the #define of UNKNOWN_LOCK for an explanation -
1172** of this.-
1173*/-
1174static int pagerLockDb(Pager *pPager, int eLock){-
1175 int rc = SQLITE_OK;-
1176-
1177 assert( eLock==SHARED_LOCK || eLock==RESERVED_LOCK || eLock==EXCLUSIVE_LOCK );-
1178 if( pPager->eLock<eLock || pPager->eLock==UNKNOWN_LOCK ){
pPager->eLock<eLockDescription
TRUEevaluated 218643 times by 436 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 141898 times by 133 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
pPager->eLock==(4 +1)Description
TRUEnever evaluated
FALSEevaluated 141898 times by 133 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
0-218643
1179 rc = pPager->noLock ? SQLITE_OK : sqlite3OsLock(pPager->fd, eLock);
pPager->noLockDescription
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 218625 times by 436 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
18-218625
1180 if( rc==SQLITE_OK && (pPager->eLock!=UNKNOWN_LOCK||eLock==EXCLUSIVE_LOCK) ){
rc==0Description
TRUEevaluated 215596 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 3047 times by 10 tests
Evaluated by:
  • Self test (30)
  • Self test (31)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (438)
  • Self test (52)
  • Self test (55)
  • Self test (59)
  • Self test (61)
pPager->eLock!=(4 +1)Description
TRUEevaluated 215596 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEnever evaluated
eLock==4Description
TRUEnever evaluated
FALSEnever evaluated
0-215596
1181 pPager->eLock = (u8)eLock;-
1182 IOTRACE(("LOCK %p %d\n", pPager, eLock))-
1183 }
executed 215596 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
215596
1184 }
executed 218643 times by 436 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
218643
1185 return rc;
executed 360541 times by 436 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
360541
1186}-
1187-
1188/*-
1189** This function determines whether or not the atomic-write or-
1190** atomic-batch-write optimizations can be used with this pager. The-
1191** atomic-write optimization can be used if:-
1192**-
1193** (a) the value returned by OsDeviceCharacteristics() indicates that-
1194** a database page may be written atomically, and-
1195** (b) the value returned by OsSectorSize() is less than or equal-
1196** to the page size.-
1197**-
1198** If it can be used, then the value returned is the size of the journal -
1199** file when it contains rollback data for exactly one page.-
1200**-
1201** The atomic-batch-write optimization can be used if OsDeviceCharacteristics()-
1202** returns a value with the SQLITE_IOCAP_BATCH_ATOMIC bit set. -1 is-
1203** returned in this case.-
1204**-
1205** If neither optimization can be used, 0 is returned.-
1206*/-
1207static int jrnlBufferSize(Pager *pPager){-
1208 assert( !MEMDB );-
1209-
1210#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \-
1211 || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)-
1212 int dc; /* Device characteristics */-
1213-
1214 assert( isOpen(pPager->fd) );-
1215 dc = sqlite3OsDeviceCharacteristics(pPager->fd);-
1216#else-
1217 UNUSED_PARAMETER(pPager);-
1218#endif-
1219-
1220#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE-
1221 if( pPager->dbSize>0 && (dc&SQLITE_IOCAP_BATCH_ATOMIC) ){-
1222 return -1;-
1223 }-
1224#endif-
1225-
1226#ifdef SQLITE_ENABLE_ATOMIC_WRITE-
1227 {-
1228 int nSector = pPager->sectorSize;-
1229 int szPage = pPager->pageSize;-
1230-
1231 assert(SQLITE_IOCAP_ATOMIC512==(512>>8));-
1232 assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));-
1233 if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){-
1234 return 0;-
1235 }-
1236 }-
1237-
1238 return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager);-
1239#endif-
1240-
1241 return 0;
executed 40369 times by 380 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
40369
1242}-
1243-
1244/*-
1245** If SQLITE_CHECK_PAGES is defined then we do some sanity checking-
1246** on the cache using a hash function. This is used for testing-
1247** and debugging only.-
1248*/-
1249#ifdef SQLITE_CHECK_PAGES-
1250/*-
1251** Return a 32-bit hash of the page data for pPage.-
1252*/-
1253static u32 pager_datahash(int nByte, unsigned char *pData){-
1254 u32 hash = 0;-
1255 int i;-
1256 for(i=0; i<nByte; i++){-
1257 hash = (hash*1039) + pData[i];-
1258 }-
1259 return hash;-
1260}-
1261static u32 pager_pagehash(PgHdr *pPage){-
1262 return pager_datahash(pPage->pPager->pageSize, (unsigned char *)pPage->pData);-
1263}-
1264static void pager_set_pagehash(PgHdr *pPage){-
1265 pPage->pageHash = pager_pagehash(pPage);-
1266}-
1267-
1268/*-
1269** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES-
1270** is defined, and NDEBUG is not defined, an assert() statement checks-
1271** that the page is either dirty or still matches the calculated page-hash.-
1272*/-
1273#define CHECK_PAGE(x) checkPage(x)-
1274static void checkPage(PgHdr *pPg){-
1275 Pager *pPager = pPg->pPager;-
1276 assert( pPager->eState!=PAGER_ERROR );-
1277 assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) );-
1278}-
1279-
1280#else-
1281#define pager_datahash(X,Y) 0-
1282#define pager_pagehash(X) 0-
1283#define pager_set_pagehash(X)-
1284#define CHECK_PAGE(x)-
1285#endif /* SQLITE_CHECK_PAGES */-
1286-
1287/*-
1288** When this is called the journal file for pager pPager must be open.-
1289** This function attempts to read a master journal file name from the -
1290** end of the file and, if successful, copies it into memory supplied -
1291** by the caller. See comments above writeMasterJournal() for the format-
1292** used to store a master journal file name at the end of a journal file.-
1293**-
1294** zMaster must point to a buffer of at least nMaster bytes allocated by-
1295** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is-
1296** enough space to write the master journal name). If the master journal-
1297** name in the journal is longer than nMaster bytes (including a-
1298** nul-terminator), then this is handled as if no master journal name-
1299** were present in the journal.-
1300**-
1301** If a master journal file name is present at the end of the journal-
1302** file, then it is copied into the buffer pointed to by zMaster. A-
1303** nul-terminator byte is appended to the buffer following the master-
1304** journal file name.-
1305**-
1306** If it is determined that no master journal file name is present -
1307** zMaster[0] is set to 0 and SQLITE_OK returned.-
1308**-
1309** If an error occurs while reading from the journal file, an SQLite-
1310** error code is returned.-
1311*/-
1312static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){-
1313 int rc; /* Return code */-
1314 u32 len; /* Length in bytes of master journal name */-
1315 i64 szJ; /* Total size in bytes of journal file pJrnl */-
1316 u32 cksum; /* MJ checksum value read from journal */-
1317 u32 u; /* Unsigned loop counter */-
1318 unsigned char aMagic[8]; /* A buffer to hold the magic header */-
1319 zMaster[0] = '\0';-
1320-
1321 if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ))
0!=(rc = sqlit...(pJrnl, &szJ))Description
TRUEnever evaluated
FALSEevaluated 6500 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-6500
1322 || szJ<16
szJ<16Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6497 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3-6497
1323 || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len))
0!=(rc = read3...szJ-16, &len))Description
TRUEnever evaluated
FALSEevaluated 6497 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-6497
1324 || len>=nMaster
len>=nMasterDescription
TRUEevaluated 3118 times by 3 tests
Evaluated by:
  • Self test (22)
  • Self test (39)
  • Self test (438)
FALSEevaluated 3379 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3118-3379
1325 || len>szJ-16
len>szJ-16Description
TRUEnever evaluated
FALSEevaluated 3379 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-3379
1326 || len==0
len==0Description
TRUEevaluated 3234 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 145 times by 1 test
Evaluated by:
  • Self test (438)
145-3234
1327 || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum))
0!=(rc = read3...J-12, &cksum))Description
TRUEnever evaluated
FALSEevaluated 145 times by 1 test
Evaluated by:
  • Self test (438)
0-145
1328 || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8))
0!=(rc = sqlit...ic, 8, szJ-8))Description
TRUEnever evaluated
FALSEevaluated 145 times by 1 test
Evaluated by:
  • Self test (438)
0-145
1329 || memcmp(aMagic, aJournalMagic, 8)
memcmp(aMagic,...urnalMagic, 8)Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 119 times by 1 test
Evaluated by:
  • Self test (438)
26-119
1330 || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zMaster, len, szJ-16-len))
0!=(rc = sqlit..., szJ-16-len))Description
TRUEnever evaluated
FALSEevaluated 119 times by 1 test
Evaluated by:
  • Self test (438)
0-119
1331 ){-
1332 return rc;
executed 6381 times by 12 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
6381
1333 }-
1334-
1335 /* See if the checksum matches the master journal name */-
1336 for(u=0; u<len; u++){
u<lenDescription
TRUEevaluated 25420 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 119 times by 1 test
Evaluated by:
  • Self test (438)
119-25420
1337 cksum -= zMaster[u];-
1338 }
executed 25420 times by 1 test: end of block
Executed by:
  • Self test (438)
25420
1339 if( cksum ){
cksumDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 115 times by 1 test
Evaluated by:
  • Self test (438)
4-115
1340 /* If the checksum doesn't add up, then one or more of the disk sectors-
1341 ** containing the master journal filename is corrupted. This means-
1342 ** definitely roll back, so just return SQLITE_OK and report a (nul)-
1343 ** master-journal filename.-
1344 */-
1345 len = 0;-
1346 }
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
1347 zMaster[len] = '\0';-
1348 -
1349 return SQLITE_OK;
executed 119 times by 1 test: return 0;
Executed by:
  • Self test (438)
119
1350}-
1351-
1352/*-
1353** Return the offset of the sector boundary at or immediately -
1354** following the value in pPager->journalOff, assuming a sector -
1355** size of pPager->sectorSize bytes.-
1356**-
1357** i.e for a sector size of 512:-
1358**-
1359** Pager.journalOff Return value-
1360** ----------------------------------------
1361** 0 0-
1362** 512 512-
1363** 100 512-
1364** 2000 2048-
1365** -
1366*/-
1367static i64 journalHdrOffset(Pager *pPager){-
1368 i64 offset = 0;-
1369 i64 c = pPager->journalOff;-
1370 if( c ){
cDescription
TRUEevaluated 90873 times by 133 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 48578 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
48578-90873
1371 offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager);-
1372 }
executed 90873 times by 133 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
90873
1373 assert( offset%JOURNAL_HDR_SZ(pPager)==0 );-
1374 assert( offset>=c );-
1375 assert( (offset-c)<JOURNAL_HDR_SZ(pPager) );-
1376 return offset;
executed 139451 times by 380 tests: return offset;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
139451
1377}-
1378-
1379/*-
1380** The journal file must be open when this function is called.-
1381**-
1382** This function is a no-op if the journal file has not been written to-
1383** within the current transaction (i.e. if Pager.journalOff==0).-
1384**-
1385** If doTruncate is non-zero or the Pager.journalSizeLimit variable is-
1386** set to 0, then truncate the journal file to zero bytes in size. Otherwise,-
1387** zero the 28-byte header at the start of the journal file. In either case, -
1388** if the pager is not in no-sync mode, sync the journal file immediately -
1389** after writing or truncating it.-
1390**-
1391** If Pager.journalSizeLimit is set to a positive, non-zero value, and-
1392** following the truncation or zeroing described above the size of the -
1393** journal file in bytes is larger than this value, then truncate the-
1394** journal file to Pager.journalSizeLimit bytes. The journal file does-
1395** not need to be synced following this operation.-
1396**-
1397** If an IO error occurs, abandon processing and return the IO error code.-
1398** Otherwise, return SQLITE_OK.-
1399*/-
1400static int zeroJournalHdr(Pager *pPager, int doTruncate){-
1401 int rc = SQLITE_OK; /* Return code */-
1402 assert( isOpen(pPager->jfd) );-
1403 assert( !sqlite3JournalIsInMemory(pPager->jfd) );-
1404 if( pPager->journalOff ){
pPager->journalOffDescription
TRUEevaluated 554 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-554
1405 const i64 iLimit = pPager->journalSizeLimit; /* Local cache of jsl */-
1406-
1407 IOTRACE(("JZEROHDR %p\n", pPager))-
1408 if( doTruncate || iLimit==0 ){
doTruncateDescription
TRUEevaluated 129 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 425 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
iLimit==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 424 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
1-425
1409 rc = sqlite3OsTruncate(pPager->jfd, 0);-
1410 }else{
executed 130 times by 1 test: end of block
Executed by:
  • Self test (438)
130
1411 static const char zeroHdr[28] = {0};-
1412 rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0);-
1413 }
executed 424 times by 3 tests: end of block
Executed by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
424
1414 if( rc==SQLITE_OK && !pPager->noSync ){
rc==0Description
TRUEevaluated 553 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
!pPager->noSyncDescription
TRUEevaluated 438 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
FALSEevaluated 115 times by 1 test
Evaluated by:
  • Self test (438)
1-553
1415 rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags);-
1416 }
executed 438 times by 3 tests: end of block
Executed by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
438
1417-
1418 /* At this point the transaction is committed but the write lock -
1419 ** is still held on the file. If there is a size limit configured for -
1420 ** the persistent journal and the journal file currently consumes more-
1421 ** space than that limit allows for, truncate it now. There is no need-
1422 ** to sync the file following this operation.-
1423 */-
1424 if( rc==SQLITE_OK && iLimit>0 ){
rc==0Description
TRUEevaluated 552 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
iLimit>0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 546 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
2-552
1425 i64 sz;-
1426 rc = sqlite3OsFileSize(pPager->jfd, &sz);-
1427 if( rc==SQLITE_OK && sz>iLimit ){
rc==0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
sz>iLimitDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
0-6
1428 rc = sqlite3OsTruncate(pPager->jfd, iLimit);-
1429 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
1430 }
executed 6 times by 1 test: end of block
Executed by:
  • Self test (438)
6
1431 }
executed 554 times by 3 tests: end of block
Executed by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
554
1432 return rc;
executed 558 times by 3 tests: return rc;
Executed by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
558
1433}-
1434-
1435/*-
1436** The journal file must be open when this routine is called. A journal-
1437** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the-
1438** current location.-
1439**-
1440** The format for the journal header is as follows:-
1441** - 8 bytes: Magic identifying journal format.-
1442** - 4 bytes: Number of records in journal, or -1 no-sync mode is on.-
1443** - 4 bytes: Random number used for page hash.-
1444** - 4 bytes: Initial database page count.-
1445** - 4 bytes: Sector size used by the process that wrote this journal.-
1446** - 4 bytes: Database page size.-
1447** -
1448** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space.-
1449*/-
1450static int writeJournalHdr(Pager *pPager){-
1451 int rc = SQLITE_OK; /* Return code */-
1452 char *zHeader = pPager->pTmpSpace; /* Temporary space used to build header */-
1453 u32 nHeader = (u32)pPager->pageSize;/* Size of buffer pointed to by zHeader */-
1454 u32 nWrite; /* Bytes of header sector written */-
1455 int ii; /* Loop counter */-
1456-
1457 assert( isOpen(pPager->jfd) ); /* Journal file must be open. */-
1458-
1459 if( nHeader>JOURNAL_HDR_SZ(pPager) ){
nHeader>(pPager->sectorSize)Description
TRUEevaluated 60161 times by 358 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
FALSEevaluated 934 times by 23 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
934-60161
1460 nHeader = JOURNAL_HDR_SZ(pPager);-
1461 }
executed 60161 times by 358 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
60161
1462-
1463 /* If there are active savepoints and any of them were created -
1464 ** since the most recent journal header was written, update the -
1465 ** PagerSavepoint.iHdrOffset fields now.-
1466 */-
1467 for(ii=0; ii<pPager->nSavepoint; ii++){
ii<pPager->nSavepointDescription
TRUEevaluated 13913 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 61095 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
13913-61095
1468 if( pPager->aSavepoint[ii].iHdrOffset==0 ){
pPager->aSavep....iHdrOffset==0Description
TRUEevaluated 2202 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 11711 times by 11 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
2202-11711
1469 pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff;-
1470 }
executed 2202 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
2202
1471 }
executed 13913 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
13913
1472-
1473 pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager);-
1474-
1475 /* -
1476 ** Write the nRec Field - the number of page records that follow this-
1477 ** journal header. Normally, zero is written to this value at this time.-
1478 ** After the records are added to the journal (and the journal synced, -
1479 ** if in full-sync mode), the zero is overwritten with the true number-
1480 ** of records (see syncJournal()).-
1481 **-
1482 ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When-
1483 ** reading the journal this value tells SQLite to assume that the-
1484 ** rest of the journal file contains valid page records. This assumption-
1485 ** is dangerous, as if a failure occurred whilst writing to the journal-
1486 ** file it may contain some garbage data. There are two scenarios-
1487 ** where this risk can be ignored:-
1488 **-
1489 ** * When the pager is in no-sync mode. Corruption can follow a-
1490 ** power failure in this case anyway.-
1491 **-
1492 ** * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees-
1493 ** that garbage data is never appended to the journal file.-
1494 */-
1495 assert( isOpen(pPager->fd) || pPager->noSync );-
1496 if( pPager->noSync || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY)
pPager->noSyncDescription
TRUEevaluated 4887 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 56208 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
(pPager->journalMode==4)Description
TRUEevaluated 108 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 56100 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
108-56208
1497 || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND)
(sqlite3OsDevi...d)&0x00000200)Description
TRUEevaluated 27 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 56073 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
27-56073
1498 ){-
1499 memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));-
1500 put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff);-
1501 }else{
executed 5022 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
5022
1502 memset(zHeader, 0, sizeof(aJournalMagic)+4);-
1503 }
executed 56073 times by 380 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
56073
1504-
1505 /* The random check-hash initializer */ -
1506 sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit);-
1507 put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit);-
1508 /* The initial database size */-
1509 put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize);-
1510 /* The assumed sector size for this process */-
1511 put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize);-
1512-
1513 /* The page size */-
1514 put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize);-
1515-
1516 /* Initializing the tail of the buffer is not necessary. Everything-
1517 ** works find if the following memset() is omitted. But initializing-
1518 ** the memory prevents valgrind from complaining, so we are willing to-
1519 ** take the performance hit.-
1520 */-
1521 memset(&zHeader[sizeof(aJournalMagic)+20], 0,-
1522 nHeader-(sizeof(aJournalMagic)+20));-
1523-
1524 /* In theory, it is only necessary to write the 28 bytes that the -
1525 ** journal header consumes to the journal file here. Then increment the -
1526 ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next -
1527 ** record is written to the following sector (leaving a gap in the file-
1528 ** that will be implicitly filled in by the OS).-
1529 **-
1530 ** However it has been discovered that on some systems this pattern can -
1531 ** be significantly slower than contiguously writing data to the file,-
1532 ** even if that means explicitly writing data to the block of -
1533 ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what-
1534 ** is done. -
1535 **-
1536 ** The loop is required here in case the sector-size is larger than the -
1537 ** database page size. Since the zHeader buffer is only Pager.pageSize-
1538 ** bytes in size, more than one call to sqlite3OsWrite() may be required-
1539 ** to populate the entire journal header sector.-
1540 */ -
1541 for(nWrite=0; rc==SQLITE_OK&&nWrite<JOURNAL_HDR_SZ(pPager); nWrite+=nHeader){
rc==0Description
TRUEevaluated 128403 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
nWrite<(pPager->sectorSize)Description
TRUEevaluated 67325 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 61078 times by 379 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
16-128403
1542 IOTRACE(("JHDR %p %lld %d\n", pPager, pPager->journalHdr, nHeader))-
1543 rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff);-
1544 assert( pPager->journalHdr <= pPager->journalOff );-
1545 pPager->journalOff += nHeader;-
1546 }
executed 67324 times by 379 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
67324
1547-
1548 return rc;
executed 61094 times by 379 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
61094
1549}-
1550-
1551/*-
1552** The journal file must be open when this is called. A journal header file-
1553** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal-
1554** file. The current location in the journal file is given by-
1555** pPager->journalOff. See comments above function writeJournalHdr() for-
1556** a description of the journal header format.-
1557**-
1558** If the header is read successfully, *pNRec is set to the number of-
1559** page records following this header and *pDbSize is set to the size of the-
1560** database before the transaction began, in pages. Also, pPager->cksumInit-
1561** is set to the value read from the journal header. SQLITE_OK is returned-
1562** in this case.-
1563**-
1564** If the journal header file appears to be corrupted, SQLITE_DONE is-
1565** returned and *pNRec and *PDbSize are undefined. If JOURNAL_HDR_SZ bytes-
1566** cannot be read from the journal file an error code is returned.-
1567*/-
1568static int readJournalHdr(-
1569 Pager *pPager, /* Pager object */-
1570 int isHot,-
1571 i64 journalSize, /* Size of the open journal file in bytes */-
1572 u32 *pNRec, /* OUT: Value read from the nRec field */-
1573 u32 *pDbSize /* OUT: Value of original database size field */-
1574){-
1575 int rc; /* Return code */-
1576 unsigned char aMagic[8]; /* A buffer to hold the magic header */-
1577 i64 iHdrOff; /* Offset of journal header being read */-
1578-
1579 assert( isOpen(pPager->jfd) ); /* Journal file must be open. */-
1580-
1581 /* Advance Pager.journalOff to the start of the next sector. If the-
1582 ** journal file is too small for there to be a header stored at this-
1583 ** point, return SQLITE_DONE.-
1584 */-
1585 pPager->journalOff = journalHdrOffset(pPager);-
1586 if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){
pPager->journa... > journalSizeDescription
TRUEevaluated 2887 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 21481 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
2887-21481
1587 return SQLITE_DONE;
executed 2887 times by 12 tests: return 101;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
2887
1588 }-
1589 iHdrOff = pPager->journalOff;-
1590-
1591 /* Read in the first 8 bytes of the journal header. If they do not match-
1592 ** the magic string found at the start of each journal header, return-
1593 ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise,-
1594 ** proceed.-
1595 */-
1596 if( isHot || iHdrOff!=pPager->journalHdr ){
isHotDescription
TRUEevaluated 5078 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 16403 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
iHdrOff!=pPager->journalHdrDescription
TRUEevaluated 13548 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 2855 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
2855-16403
1597 rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff);-
1598 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 18626 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
0-18626
1599 return rc;
never executed: return rc;
0
1600 }-
1601 if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){
memcmp(aMagic,...of(aMagic))!=0Description
TRUEevaluated 271 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 18355 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
271-18355
1602 return SQLITE_DONE;
executed 271 times by 1 test: return 101;
Executed by:
  • Self test (438)
271
1603 }-
1604 }
executed 18355 times by 10 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
18355
1605-
1606 /* Read the first three 32-bit fields of the journal header: The nRec-
1607 ** field, the checksum-initializer and the database size at the start-
1608 ** of the transaction. Return an error code if anything goes wrong.-
1609 */-
1610 if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec))
0!=(rc = read3...Off+8, pNRec))Description
TRUEnever evaluated
FALSEevaluated 21210 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-21210
1611 || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit))
0!=(rc = read3...r->cksumInit))Description
TRUEnever evaluated
FALSEevaluated 21210 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-21210
1612 || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize))
0!=(rc = read3...+16, pDbSize))Description
TRUEnever evaluated
FALSEevaluated 21210 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-21210
1613 ){-
1614 return rc;
never executed: return rc;
0
1615 }-
1616-
1617 if( pPager->journalOff==0 ){
pPager->journalOff==0Description
TRUEevaluated 3308 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 17902 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
3308-17902
1618 u32 iPageSize; /* Page-size field of journal header */-
1619 u32 iSectorSize; /* Sector-size field of journal header */-
1620-
1621 /* Read the page-size and sector-size journal header fields. */-
1622 if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize))
0!=(rc = read3...&iSectorSize))Description
TRUEnever evaluated
FALSEevaluated 3308 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-3308
1623 || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize))
0!=(rc = read3..., &iPageSize))Description
TRUEnever evaluated
FALSEevaluated 3308 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-3308
1624 ){-
1625 return rc;
never executed: return rc;
0
1626 }-
1627-
1628 /* Versions of SQLite prior to 3.5.8 set the page-size field of the-
1629 ** journal header to zero. In this case, assume that the Pager.pageSize-
1630 ** variable is already set to the correct page size.-
1631 */-
1632 if( iPageSize==0 ){
iPageSize==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3307 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
1-3307
1633 iPageSize = pPager->pageSize;-
1634 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
1635-
1636 /* Check that the values read from the page-size and sector-size fields-
1637 ** are within range. To be 'in range', both values need to be a power-
1638 ** of two greater than or equal to 512 or 32, and not greater than their -
1639 ** respective compile time maximum limits.-
1640 */-
1641 if( iPageSize<512 || iSectorSize<32
iPageSize<512Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3306 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
iSectorSize<32Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3305 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
1-3306
1642 || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE
iPageSize>65536Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3303 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
iSectorSize>0x10000Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3301 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
2-3303
1643 || ((iPageSize-1)&iPageSize)!=0 || ((iSectorSize-1)&iSectorSize)!=0
((iPageSize-1)&iPageSize)!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3299 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
((iSectorSize-...SectorSize)!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3297 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
2-3299
1644 ){-
1645 /* If the either the page-size or sector-size in the journal-header is -
1646 ** invalid, then the process that wrote the journal-header must have -
1647 ** crashed before the header was synced. In this case stop reading -
1648 ** the journal file here.-
1649 */-
1650 return SQLITE_DONE;
executed 11 times by 1 test: return 101;
Executed by:
  • Self test (438)
11
1651 }-
1652-
1653 /* Update the page-size to match the value read from the journal. -
1654 ** Use a testcase() macro to make sure that malloc failure within -
1655 ** PagerSetPagesize() is tested.-
1656 */-
1657 rc = sqlite3PagerSetPagesize(pPager, &iPageSize, -1);-
1658 testcase( rc!=SQLITE_OK );-
1659-
1660 /* Update the assumed sector-size to match the value used by -
1661 ** the process that created this journal. If this journal was-
1662 ** created by a process other than this one, then this routine-
1663 ** is being called from within pager_playback(). The local value-
1664 ** of Pager.sectorSize is restored at the end of that routine.-
1665 */-
1666 pPager->sectorSize = iSectorSize;-
1667 }
executed 3297 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3297
1668-
1669 pPager->journalOff += JOURNAL_HDR_SZ(pPager);-
1670 return rc;
executed 21199 times by 12 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
21199
1671}-
1672-
1673-
1674/*-
1675** Write the supplied master journal name into the journal file for pager-
1676** pPager at the current location. The master journal name must be the last-
1677** thing written to a journal file. If the pager is in full-sync mode, the-
1678** journal file descriptor is advanced to the next sector boundary before-
1679** anything is written. The format is:-
1680**-
1681** + 4 bytes: PAGER_MJ_PGNO.-
1682** + N bytes: Master journal filename in utf-8.-
1683** + 4 bytes: N (length of master journal name in bytes, no nul-terminator).-
1684** + 4 bytes: Master journal name checksum.-
1685** + 8 bytes: aJournalMagic[].-
1686**-
1687** The master journal page checksum is the sum of the bytes in the master-
1688** journal name, where each byte is interpreted as a signed 8-bit integer.-
1689**-
1690** If zMaster is a NULL pointer (occurs for a single database transaction), -
1691** this call is a no-op.-
1692*/-
1693static int writeMasterJournal(Pager *pPager, const char *zMaster){-
1694 int rc; /* Return code */-
1695 int nMaster; /* Length of string zMaster */-
1696 i64 iHdrOff; /* Offset of header in journal file */-
1697 i64 jrnlSize; /* Size of journal file on disk */-
1698 u32 cksum = 0; /* Checksum of string zMaster */-
1699-
1700 assert( pPager->setMaster==0 );-
1701 assert( !pagerUseWal(pPager) );-
1702-
1703 if( !zMaster
!zMasterDescription
TRUEevaluated 38371 times by 125 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
135-38371
1704 || pPager->journalMode==PAGER_JOURNALMODE_MEMORY
pPager->journalMode==4Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1705 || !isOpen(pPager->jfd)
!((pPager->jfd)->pMethods!=0)Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1706 ){-
1707 return SQLITE_OK;
executed 38371 times by 125 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
38371
1708 }-
1709 pPager->setMaster = 1;-
1710 assert( pPager->journalHdr <= pPager->journalOff );-
1711-
1712 /* Calculate the length in bytes and the checksum of zMaster */-
1713 for(nMaster=0; zMaster[nMaster]; nMaster++){
zMaster[nMaster]Description
TRUEevaluated 15562 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
135-15562
1714 cksum += zMaster[nMaster];-
1715 }
executed 15562 times by 3 tests: end of block
Executed by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
15562
1716-
1717 /* If in full-sync mode, advance to the next disk sector before writing-
1718 ** the master journal name. This is in case the previous page written to-
1719 ** the journal has already been synced.-
1720 */-
1721 if( pPager->fullSync ){
pPager->fullSyncDescription
TRUEevaluated 120 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
15-120
1722 pPager->journalOff = journalHdrOffset(pPager);-
1723 }
executed 120 times by 3 tests: end of block
Executed by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
120
1724 iHdrOff = pPager->journalOff;-
1725-
1726 /* Write the master journal data to the end of the journal file. If-
1727 ** an error occurs, return the error code to the caller.-
1728 */-
1729 if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_MJ_PGNO(pPager))))
(0 != (rc = wr...eSize))+1)))))Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1730 || (0 != (rc = sqlite3OsWrite(pPager->jfd, zMaster, nMaster, iHdrOff+4)))
(0 != (rc = sq..., iHdrOff+4)))Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1731 || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster, nMaster)))
(0 != (rc = wr...er, nMaster)))Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1732 || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster+4, cksum)))
(0 != (rc = wr...er+4, cksum)))Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1733 || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8,
(0 != (rc = sq...4+nMaster+8)))Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1734 iHdrOff+4+nMaster+8)))
(0 != (rc = sq...4+nMaster+8)))Description
TRUEnever evaluated
FALSEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
0-135
1735 ){-
1736 return rc;
never executed: return rc;
0
1737 }-
1738 pPager->journalOff += (nMaster+20);-
1739-
1740 /* If the pager is in peristent-journal mode, then the physical -
1741 ** journal-file may extend past the end of the master-journal name-
1742 ** and 8 bytes of magic data just written to the file. This is -
1743 ** dangerous because the code to rollback a hot-journal file-
1744 ** will not be able to find the master-journal name to determine -
1745 ** whether or not the journal is hot. -
1746 **-
1747 ** Easiest thing to do in this scenario is to truncate the journal -
1748 ** file to the required size.-
1749 */ -
1750 if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize))
0==(rc = sqlit...d, &jrnlSize))Description
TRUEevaluated 135 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
FALSEnever evaluated
0-135
1751 && jrnlSize>pPager->journalOff
jrnlSize>pPager->journalOffDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 132 times by 3 tests
Evaluated by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
3-132
1752 ){-
1753 rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff);-
1754 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
1755 return rc;
executed 135 times by 3 tests: return rc;
Executed by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
135
1756}-
1757-
1758/*-
1759** Discard the entire contents of the in-memory page-cache.-
1760*/-
1761static void pager_reset(Pager *pPager){-
1762 pPager->iDataVersion++;-
1763 sqlite3BackupRestart(pPager->pBackup);-
1764 sqlite3PcacheClear(pPager->pPCache);-
1765}
executed 194667 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
194667
1766-
1767/*-
1768** Return the pPager->iDataVersion value-
1769*/-
1770u32 sqlite3PagerDataVersion(Pager *pPager){-
1771 return pPager->iDataVersion;
executed 47 times by 1 test: return pPager->iDataVersion;
Executed by:
  • Self test (438)
47
1772}-
1773-
1774/*-
1775** Free all structures in the Pager.aSavepoint[] array and set both-
1776** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal-
1777** if it is open and the pager is not in exclusive mode.-
1778*/-
1779static void releaseAllSavepoints(Pager *pPager){-
1780 int ii; /* Iterator for looping through Pager.aSavepoint */-
1781 for(ii=0; ii<pPager->nSavepoint; ii++){
ii<pPager->nSavepointDescription
TRUEevaluated 5924 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 584296 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
5924-584296
1782 sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);-
1783 }
executed 5924 times by 1 test: end of block
Executed by:
  • Self test (438)
5924
1784 if( !pPager->exclusiveMode || sqlite3JournalIsInMemory(pPager->sjfd) ){
!pPager->exclusiveModeDescription
TRUEevaluated 446732 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 137564 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
sqlite3Journal...(pPager->sjfd)Description
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 137529 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
35-446732
1785 sqlite3OsClose(pPager->sjfd);-
1786 }
executed 446767 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
446767
1787 sqlite3_free(pPager->aSavepoint);-
1788 pPager->aSavepoint = 0;-
1789 pPager->nSavepoint = 0;-
1790 pPager->nSubRec = 0;-
1791}
executed 584296 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
584296
1792-
1793/*-
1794** Set the bit number pgno in the PagerSavepoint.pInSavepoint -
1795** bitvecs of all open savepoints. Return SQLITE_OK if successful-
1796** or SQLITE_NOMEM if a malloc failure occurs.-
1797*/-
1798static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){-
1799 int ii; /* Loop counter */-
1800 int rc = SQLITE_OK; /* Result code */-
1801-
1802 for(ii=0; ii<pPager->nSavepoint; ii++){
ii<pPager->nSavepointDescription
TRUEevaluated 16938736 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 1319072 times by 390 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
1319072-16938736
1803 PagerSavepoint *p = &pPager->aSavepoint[ii];-
1804 if( pgno<=p->nOrig ){
pgno<=p->nOrigDescription
TRUEevaluated 16778265 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 160471 times by 9 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (8)
160471-16778265
1805 rc |= sqlite3BitvecSet(p->pInSavepoint, pgno);-
1806 testcase( rc==SQLITE_NOMEM );-
1807 assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );-
1808 }
executed 16778265 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
16778265
1809 }
executed 16938736 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
16938736
1810 return rc;
executed 1319072 times by 390 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
1319072
1811}-
1812-
1813/*-
1814** This function is a no-op if the pager is in exclusive mode and not-
1815** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN-
1816** state.-
1817**-
1818** If the pager is not in exclusive-access mode, the database file is-
1819** completely unlocked. If the file is unlocked and the file-system does-
1820** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is-
1821** closed (if it is open).-
1822**-
1823** If the pager is in ERROR state when this function is called, the -
1824** contents of the pager cache are discarded before switching back to -
1825** the OPEN state. Regardless of whether the pager is in exclusive-mode-
1826** or not, any journal file left in the file-system will be treated-
1827** as a hot-journal and rolled back the next time a read-transaction-
1828** is opened (by this or by any other connection).-
1829*/-
1830static void pager_unlock(Pager *pPager){-
1831-
1832 assert( pPager->eState==PAGER_READER -
1833 || pPager->eState==PAGER_OPEN -
1834 || pPager->eState==PAGER_ERROR -
1835 );-
1836-
1837 sqlite3BitvecDestroy(pPager->pInJournal);-
1838 pPager->pInJournal = 0;-
1839 releaseAllSavepoints(pPager);-
1840-
1841 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 59008 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 298248 times by 428 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
59008-298248
1842 assert( !isOpen(pPager->jfd) );-
1843 sqlite3WalEndReadTransaction(pPager->pWal);-
1844 pPager->eState = PAGER_OPEN;-
1845 }else if( !pPager->exclusiveMode ){
executed 59008 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
!pPager->exclusiveModeDescription
TRUEevaluated 226019 times by 428 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 72229 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
59008-226019
1846 int rc; /* Error code returned by pagerUnlockDb() */-
1847 int iDc = isOpen(pPager->fd)?sqlite3OsDeviceCharacteristics(pPager->fd):0;
((pPager->fd)->pMethods!=0)Description
TRUEevaluated 162472 times by 428 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 63547 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
63547-162472
1848-
1849 /* If the operating system support deletion of open files, then-
1850 ** close the journal file when dropping the database lock. Otherwise-
1851 ** another connection with journal_mode=delete might delete the file-
1852 ** out from under us.-
1853 */-
1854 assert( (PAGER_JOURNALMODE_MEMORY & 5)!=1 );-
1855 assert( (PAGER_JOURNALMODE_OFF & 5)!=1 );-
1856 assert( (PAGER_JOURNALMODE_WAL & 5)!=1 );-
1857 assert( (PAGER_JOURNALMODE_DELETE & 5)!=1 );-
1858 assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );-
1859 assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 );-
1860 if( 0==(iDc & SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN)
0==(iDc & 0x00000800)Description
TRUEevaluated 225985 times by 428 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 34 times by 1 test
Evaluated by:
  • Self test (438)
34-225985
1861 || 1!=(pPager->journalMode & 5)
1!=(pPager->journalMode & 5)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
13-21
1862 ){-
1863 sqlite3OsClose(pPager->jfd);-
1864 }
executed 225998 times by 428 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
225998
1865-
1866 /* If the pager is in the ERROR state and the call to unlock the database-
1867 ** file fails, set the current lock to UNKNOWN_LOCK. See the comment-
1868 ** above the #define for UNKNOWN_LOCK for an explanation of why this-
1869 ** is necessary.-
1870 */-
1871 rc = pagerUnlockDb(pPager, NO_LOCK);-
1872 if( rc!=SQLITE_OK && pPager->eState==PAGER_ERROR ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 226019 times by 428 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
pPager->eState==6Description
TRUEnever evaluated
FALSEnever evaluated
0-226019
1873 pPager->eLock = UNKNOWN_LOCK;-
1874 }
never executed: end of block
0
1875-
1876 /* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here-
1877 ** without clearing the error code. This is intentional - the error-
1878 ** code is cleared and the cache reset in the block below.-
1879 */-
1880 assert( pPager->errCode || pPager->eState!=PAGER_ERROR );-
1881 pPager->changeCountDone = 0;-
1882 pPager->eState = PAGER_OPEN;-
1883 }
executed 226019 times by 428 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
226019
1884-
1885 /* If Pager.errCode is set, the contents of the pager cache cannot be-
1886 ** trusted. Now that there are no outstanding references to the pager,-
1887 ** it can safely move back to PAGER_OPEN state. This happens in both-
1888 ** normal and exclusive-locking mode.-
1889 */-
1890 assert( pPager->errCode==SQLITE_OK || !MEMDB );-
1891 if( pPager->errCode ){
pPager->errCodeDescription
TRUEevaluated 60410 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 296846 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
60410-296846
1892 if( pPager->tempFile==0 ){
pPager->tempFile==0Description
TRUEevaluated 291 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 60119 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
291-60119
1893 pager_reset(pPager);-
1894 pPager->changeCountDone = 0;-
1895 pPager->eState = PAGER_OPEN;-
1896 }else{
executed 291 times by 1 test: end of block
Executed by:
  • Self test (438)
291
1897 pPager->eState = (isOpen(pPager->jfd) ? PAGER_OPEN : PAGER_READER);
((pPager->jfd)->pMethods!=0)Description
TRUEnever evaluated
FALSEevaluated 60119 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
0-60119
1898 }
executed 60119 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
60119
1899 if( USEFETCH(pPager) ) sqlite3OsUnfetch(pPager->fd, 0, 0);
never executed: sqlite3OsUnfetch(pPager->fd, 0, 0);
((pPager)->bUseFetch)Description
TRUEnever evaluated
FALSEevaluated 60410 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
0-60410
1900 pPager->errCode = SQLITE_OK;-
1901 setGetterMethod(pPager);-
1902 }
executed 60410 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
60410
1903-
1904 pPager->journalOff = 0;-
1905 pPager->journalHdr = 0;-
1906 pPager->setMaster = 0;-
1907}
executed 357256 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
357256
1908-
1909/*-
1910** This function is called whenever an IOERR or FULL error that requires-
1911** the pager to transition into the ERROR state may ahve occurred.-
1912** The first argument is a pointer to the pager structure, the second -
1913** the error-code about to be returned by a pager API function. The -
1914** value returned is a copy of the second argument to this function. -
1915**-
1916** If the second argument is SQLITE_FULL, SQLITE_IOERR or one of the-
1917** IOERR sub-codes, the pager enters the ERROR state and the error code-
1918** is stored in Pager.errCode. While the pager remains in the ERROR state,-
1919** all major API calls on the Pager will immediately return Pager.errCode.-
1920**-
1921** The ERROR state indicates that the contents of the pager-cache -
1922** cannot be trusted. This state can be cleared by completely discarding -
1923** the contents of the pager-cache. If a transaction was active when-
1924** the persistent error occurred, then the rollback journal may need-
1925** to be replayed to restore the contents of the database file (as if-
1926** it were a hot-journal).-
1927*/-
1928static int pager_error(Pager *pPager, int rc){-
1929 int rc2 = rc & 0xff;-
1930 assert( rc==SQLITE_OK || !MEMDB );-
1931 assert(-
1932 pPager->errCode==SQLITE_FULL ||-
1933 pPager->errCode==SQLITE_OK ||-
1934 (pPager->errCode & 0xff)==SQLITE_IOERR-
1935 );-
1936 if( rc2==SQLITE_FULL || rc2==SQLITE_IOERR ){
rc2==13Description
TRUEevaluated 100 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1453477 times by 71 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • ...
rc2==10Description
TRUEevaluated 178 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1453299 times by 71 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • ...
100-1453477
1937 pPager->errCode = rc;-
1938 pPager->eState = PAGER_ERROR;-
1939 setGetterMethod(pPager);-
1940 }
executed 278 times by 1 test: end of block
Executed by:
  • Self test (438)
278
1941 return rc;
executed 1453577 times by 71 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • ...
1453577
1942}-
1943-
1944static int pager_truncate(Pager *pPager, Pgno nPage);-
1945-
1946/*-
1947** The write transaction open on pPager is being committed (bCommit==1)-
1948** or rolled back (bCommit==0).-
1949**-
1950** Return TRUE if and only if all dirty pages should be flushed to disk.-
1951**-
1952** Rules:-
1953**-
1954** * For non-TEMP databases, always sync to disk. This is necessary-
1955** for transactions to be durable.-
1956**-
1957** * Sync TEMP database only on a COMMIT (not a ROLLBACK) when the backing-
1958** file has been created already (via a spill on pagerStress()) and-
1959** when the number of dirty pages in memory exceeds 25% of the total-
1960** cache size.-
1961*/-
1962static int pagerFlushOnCommit(Pager *pPager, int bCommit){-
1963 if( pPager->tempFile==0 ) return 1;
executed 192390 times by 152 tests: return 1;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
pPager->tempFile==0Description
TRUEevaluated 192390 times by 152 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 131328 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
131328-192390
1964 if( !bCommit ) return 0;
executed 124227 times by 17 tests: return 0;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
!bCommitDescription
TRUEevaluated 124227 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
FALSEevaluated 7101 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
7101-124227
1965 if( !isOpen(pPager->fd) ) return 0;
executed 6781 times by 2 tests: return 0;
Executed by:
  • Self test (34)
  • Self test (438)
!((pPager->fd)->pMethods!=0)Description
TRUEevaluated 6781 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 320 times by 1 test
Evaluated by:
  • Self test (438)
320-6781
1966 return (sqlite3PCachePercentDirty(pPager->pPCache)>=25);
executed 320 times by 1 test: return (sqlite3PCachePercentDirty(pPager->pPCache)>=25);
Executed by:
  • Self test (438)
320
1967}-
1968-
1969/*-
1970** This routine ends a transaction. A transaction is usually ended by -
1971** either a COMMIT or a ROLLBACK operation. This routine may be called -
1972** after rollback of a hot-journal, or if an error occurs while opening-
1973** the journal file or writing the very first journal-header of a-
1974** database transaction.-
1975** -
1976** This routine is never called in PAGER_ERROR state. If it is called-
1977** in PAGER_NONE or PAGER_SHARED state and the lock held is less-
1978** exclusive than a RESERVED lock, it is a no-op.-
1979**-
1980** Otherwise, any active savepoints are released.-
1981**-
1982** If the journal file is open, then it is "finalized". Once a journal -
1983** file has been finalized it is not possible to use it to roll back a -
1984** transaction. Nor will it be considered to be a hot-journal by this-
1985** or any other database connection. Exactly how a journal is finalized-
1986** depends on whether or not the pager is running in exclusive mode and-
1987** the current journal-mode (Pager.journalMode value), as follows:-
1988**-
1989** journalMode==MEMORY-
1990** Journal file descriptor is simply closed. This destroys an -
1991** in-memory journal.-
1992**-
1993** journalMode==TRUNCATE-
1994** Journal file is truncated to zero bytes in size.-
1995**-
1996** journalMode==PERSIST-
1997** The first 28 bytes of the journal file are zeroed. This invalidates-
1998** the first journal header in the file, and hence the entire journal-
1999** file. An invalid journal file cannot be rolled back.-
2000**-
2001** journalMode==DELETE-
2002** The journal file is closed and deleted using sqlite3OsDelete().-
2003**-
2004** If the pager is running in exclusive mode, this method of finalizing-
2005** the journal file is never used. Instead, if the journalMode is-
2006** DELETE and the pager is in exclusive mode, the method described under-
2007** journalMode==PERSIST is used instead.-
2008**-
2009** After the journal is finalized, the pager moves to PAGER_READER state.-
2010** If running in non-exclusive rollback mode, the lock on the file is -
2011** downgraded to a SHARED_LOCK.-
2012**-
2013** SQLITE_OK is returned if no error occurs. If an error occurs during-
2014** any of the IO operations to finalize the journal file or unlock the-
2015** database then the IO error code is returned to the user. If the -
2016** operation to finalize the journal file fails, then the code still-
2017** tries to unlock the database file if not in exclusive mode. If the-
2018** unlock operation fails as well, then the first error code related-
2019** to the first error encountered (the journal finalization one) is-
2020** returned.-
2021*/-
2022static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){-
2023 int rc = SQLITE_OK; /* Error code from journal finalization operation */-
2024 int rc2 = SQLITE_OK; /* Error code from db file unlock operation */-
2025-
2026 /* Do nothing if the pager does not have an open write transaction-
2027 ** or at least a RESERVED lock. This function may be called when there-
2028 ** is no write-transaction active but a RESERVED or greater lock is-
2029 ** held under two circumstances:-
2030 **-
2031 ** 1. After a successful hot-journal rollback, it is called with-
2032 ** eState==PAGER_NONE and eLock==EXCLUSIVE_LOCK.-
2033 **-
2034 ** 2. If a connection with locking_mode=exclusive holding an EXCLUSIVE -
2035 ** lock switches back to locking_mode=normal and then executes a-
2036 ** read-transaction, this function is called with eState==PAGER_READER -
2037 ** and eLock==EXCLUSIVE_LOCK when the read-transaction is closed.-
2038 */-
2039 assert( assert_pager_state(pPager) );-
2040 assert( pPager->eState!=PAGER_ERROR );-
2041 if( pPager->eState<PAGER_WRITER_LOCKED && pPager->eLock<RESERVED_LOCK ){
pPager->eState<2Description
TRUEevaluated 252119 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 163332 times by 62 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
pPager->eLock<2Description
TRUEevaluated 188411 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 63708 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
63708-252119
2042 return SQLITE_OK;
executed 188411 times by 435 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
188411
2043 }-
2044-
2045 releaseAllSavepoints(pPager);-
2046 assert( isOpen(pPager->jfd) || pPager->pInJournal==0 -
2047 || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_BATCH_ATOMIC)-
2048 );-
2049 if( isOpen(pPager->jfd) ){
((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 45114 times by 38 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • ...
FALSEevaluated 181926 times by 44 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (41)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • Self test (50)
  • Self test (53)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • ...
45114-181926
2050 assert( !pagerUseWal(pPager) );-
2051-
2052 /* Finalize the journal file. */-
2053 if( sqlite3JournalIsInMemory(pPager->jfd) ){
sqlite3Journal...y(pPager->jfd)Description
TRUEevaluated 4785 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 40329 times by 38 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • ...
4785-40329
2054 /* assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ); */-
2055 sqlite3OsClose(pPager->jfd);-
2056 }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){
executed 4785 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
pPager->journalMode==3Description
TRUEevaluated 113 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 40216 times by 38 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • ...
113-40216
2057 if( pPager->journalOff==0 ){
pPager->journalOff==0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 111 times by 1 test
Evaluated by:
  • Self test (438)
2-111
2058 rc = SQLITE_OK;-
2059 }else{
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
2060 rc = sqlite3OsTruncate(pPager->jfd, 0);-
2061 if( rc==SQLITE_OK && pPager->fullSync ){
rc==0Description
TRUEevaluated 111 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
pPager->fullSyncDescription
TRUEevaluated 98 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
0-111
2062 /* Make sure the new file size is written into the inode right away.-
2063 ** Otherwise the journal might resurrect following a power loss and-
2064 ** cause the last transaction to roll back. See-
2065 ** https://bugzilla.mozilla.org/show_bug.cgi?id=1072773-
2066 */-
2067 rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);-
2068 }
executed 98 times by 1 test: end of block
Executed by:
  • Self test (438)
98
2069 }
executed 111 times by 1 test: end of block
Executed by:
  • Self test (438)
111
2070 pPager->journalOff = 0;-
2071 }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST
executed 113 times by 1 test: end of block
Executed by:
  • Self test (438)
pPager->journalMode==1Description
TRUEevaluated 402 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
FALSEevaluated 39814 times by 36 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • ...
113-39814
2072 || (pPager->exclusiveMode && pPager->journalMode!=PAGER_JOURNALMODE_WAL)
pPager->exclusiveModeDescription
TRUEevaluated 161 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 39653 times by 36 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • ...
pPager->journalMode!=5Description
TRUEevaluated 156 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-39653
2073 ){-
2074 rc = zeroJournalHdr(pPager, hasMaster||pPager->tempFile);-
2075 pPager->journalOff = 0;-
2076 }else{
executed 558 times by 3 tests: end of block
Executed by:
  • Self test (3)
  • Self test (438)
  • Self test (58)
558
2077 /* This branch may be executed with Pager.journalMode==MEMORY if-
2078 ** a hot-journal was just rolled back. In this case the journal-
2079 ** file should be closed and deleted. If this connection writes to-
2080 ** the database file, it will do so using an in-memory journal.-
2081 */-
2082 int bDelete = !pPager->tempFile;-
2083 assert( sqlite3JournalIsInMemory(pPager->jfd)==0 );-
2084 assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE -
2085 || pPager->journalMode==PAGER_JOURNALMODE_MEMORY -
2086 || pPager->journalMode==PAGER_JOURNALMODE_WAL -
2087 );-
2088 sqlite3OsClose(pPager->jfd);-
2089 if( bDelete ){
bDeleteDescription
TRUEevaluated 39651 times by 36 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • ...
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
7-39651
2090 rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, pPager->extraSync);-
2091 }
executed 39651 times by 36 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • ...
39651
2092 }
executed 39658 times by 36 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • ...
39658
2093 }-
2094-
2095#ifdef SQLITE_CHECK_PAGES-
2096 sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash);-
2097 if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){-
2098 PgHdr *p = sqlite3PagerLookup(pPager, 1);-
2099 if( p ){-
2100 p->pageHash = 0;-
2101 sqlite3PagerUnrefNotNull(p);-
2102 }-
2103 }-
2104#endif-
2105-
2106 sqlite3BitvecDestroy(pPager->pInJournal);-
2107 pPager->pInJournal = 0;-
2108 pPager->nRec = 0;-
2109 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 227012 times by 73 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
28-227012
2110 if( MEMDB || pagerFlushOnCommit(pPager, bCommit) ){
pPager->memDbDescription
TRUEevaluated 1083 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 225929 times by 73 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
pagerFlushOnCo...ager, bCommit)Description
TRUEevaluated 98554 times by 62 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
FALSEevaluated 127375 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
1083-225929
2111 sqlite3PcacheCleanAll(pPager->pPCache);-
2112 }else{
executed 99637 times by 62 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
99637
2113 sqlite3PcacheClearWritable(pPager->pPCache);-
2114 }
executed 127375 times by 17 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
127375
2115 sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize);-
2116 }
executed 227012 times by 73 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
227012
2117-
2118 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 55608 times by 28 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
FALSEevaluated 171432 times by 50 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • ...
55608-171432
2119 /* Drop the WAL write-lock, if any. Also, if the connection was in -
2120 ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE -
2121 ** lock held on the database file.-
2122 */-
2123 rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);-
2124 assert( rc2==SQLITE_OK );-
2125 }else if( rc==SQLITE_OK && bCommit && pPager->dbFileSize>pPager->dbSize ){
executed 55608 times by 28 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
rc==0Description
TRUEevaluated 171404 times by 50 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • ...
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
bCommitDescription
TRUEevaluated 42623 times by 32 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • ...
FALSEevaluated 128781 times by 26 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • Self test (53)
  • Self test (55)
  • Self test (6)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • ...
pPager->dbFile...pPager->dbSizeDescription
TRUEevaluated 860 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
FALSEevaluated 41763 times by 32 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • ...
28-171404
2126 /* This branch is taken when committing a transaction in rollback-journal-
2127 ** mode if the database file on disk is larger than the database image.-
2128 ** At this point the journal has been finalized and the transaction -
2129 ** successfully committed, but the EXCLUSIVE lock is still held on the-
2130 ** file. So it is safe to truncate the database file to its minimum-
2131 ** required size. */-
2132 assert( pPager->eLock==EXCLUSIVE_LOCK );-
2133 rc = pager_truncate(pPager, pPager->dbSize);-
2134 }
executed 860 times by 4 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
860
2135-
2136 if( rc==SQLITE_OK && bCommit ){
rc==0Description
TRUEevaluated 226996 times by 73 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
FALSEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
bCommitDescription
TRUEevaluated 98109 times by 54 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
FALSEevaluated 128887 times by 28 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • Self test (53)
  • Self test (55)
  • Self test (6)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • ...
44-226996
2137 rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_COMMIT_PHASETWO, 0);-
2138 if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK;
executed 98109 times by 54 tests: rc = 0;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
rc==12Description
TRUEevaluated 98109 times by 54 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
FALSEnever evaluated
0-98109
2139 }
executed 98109 times by 54 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
98109
2140-
2141 if( !pPager->exclusiveMode
!pPager->exclusiveModeDescription
TRUEevaluated 161758 times by 73 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
FALSEevaluated 65282 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
65282-161758
2142 && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
!((pPager)->pWal!=0)Description
TRUEevaluated 106174 times by 50 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • ...
FALSEevaluated 55584 times by 28 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
sqlite3WalExcl...ager->pWal, 0)Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 55576 times by 28 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
8-106174
2143 ){-
2144 rc2 = pagerUnlockDb(pPager, SHARED_LOCK);-
2145 pPager->changeCountDone = 0;-
2146 }
executed 106182 times by 50 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (42)
  • ...
106182
2147 pPager->eState = PAGER_READER;-
2148 pPager->setMaster = 0;-
2149-
2150 return (rc==SQLITE_OK?rc2:rc);
executed 227040 times by 73 tests: return (rc==0?rc2:rc);
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
rc==0Description
TRUEevaluated 226996 times by 73 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
FALSEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
44-227040
2151}-
2152-
2153/*-
2154** Execute a rollback if a transaction is active and unlock the -
2155** database file. -
2156**-
2157** If the pager has already entered the ERROR state, do not attempt -
2158** the rollback at this time. Instead, pager_unlock() is called. The-
2159** call to pager_unlock() will discard all in-memory pages, unlock-
2160** the database file and move the pager back to OPEN state. If this -
2161** means that there is a hot-journal left in the file-system, the next -
2162** connection to obtain a shared lock on the pager (which may be this one) -
2163** will roll it back.-
2164**-
2165** If the pager has not already entered the ERROR state, but an IO or-
2166** malloc error occurs during a rollback, then this will itself cause -
2167** the pager to enter the ERROR state. Which will be cleared by the-
2168** call to pager_unlock(), as described above.-
2169*/-
2170static void pagerUnlockAndRollback(Pager *pPager){-
2171 if( pPager->eState!=PAGER_ERROR && pPager->eState!=PAGER_OPEN ){
pPager->eState!=6Description
TRUEevaluated 296240 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 60410 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
pPager->eState!=0Description
TRUEevaluated 263863 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 32377 times by 76 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
32377-296240
2172 assert( assert_pager_state(pPager) );-
2173 if( pPager->eState>=PAGER_WRITER_LOCKED ){
pPager->eState>=2Description
TRUEnever evaluated
FALSEevaluated 263863 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
0-263863
2174 sqlite3BeginBenignMalloc();-
2175 sqlite3PagerRollback(pPager);-
2176 sqlite3EndBenignMalloc();-
2177 }else if( !pPager->exclusiveMode ){
never executed: end of block
!pPager->exclusiveModeDescription
TRUEevaluated 251708 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 12155 times by 13 tests
Evaluated by:
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
0-251708
2178 assert( pPager->eState==PAGER_READER );-
2179 pager_end_transaction(pPager, 0, 0);-
2180 }
executed 251708 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
251708
2181 }
executed 263863 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
263863
2182 pager_unlock(pPager);-
2183}
executed 356650 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
356650
2184-
2185/*-
2186** Parameter aData must point to a buffer of pPager->pageSize bytes-
2187** of data. Compute and return a checksum based ont the contents of the -
2188** page of data and the current value of pPager->cksumInit.-
2189**-
2190** This is not a real checksum. It is really just the sum of the -
2191** random initial value (pPager->cksumInit) and every 200th byte-
2192** of the page data, starting with byte offset (pPager->pageSize%200).-
2193** Each byte is interpreted as an 8-bit unsigned integer.-
2194**-
2195** Changing the formula used to compute this checksum results in an-
2196** incompatible journal file format.-
2197**-
2198** If journal corruption occurs due to a power failure, the most likely -
2199** scenario is that one end or the other of the record will be changed. -
2200** It is much less likely that the two ends of the journal record will be-
2201** correct and the middle be corrupt. Thus, this "checksum" scheme,-
2202** though fast and simple, catches the mostly likely kind of corruption.-
2203*/-
2204static u32 pager_cksum(Pager *pPager, const u8 *aData){-
2205 u32 cksum = pPager->cksumInit; /* Checksum value to return */-
2206 int i = pPager->pageSize-200; /* Loop counter */-
2207 while( i>0 ){
i>0Description
TRUEevaluated 3316336 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 439084 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
439084-3316336
2208 cksum += aData[i];-
2209 i -= 200;-
2210 }
executed 3316336 times by 377 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
3316336
2211 return cksum;
executed 439084 times by 377 tests: return cksum;
Executed by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
439084
2212}-
2213-
2214/*-
2215** Report the current page size and number of reserved bytes back-
2216** to the codec.-
2217*/-
2218#ifdef SQLITE_HAS_CODEC-
2219static void pagerReportSize(Pager *pPager){-
2220 if( pPager->xCodecSizeChng ){-
2221 pPager->xCodecSizeChng(pPager->pCodec, pPager->pageSize,-
2222 (int)pPager->nReserve);-
2223 }-
2224}-
2225#else-
2226# define pagerReportSize(X) /* No-op if we do not support a codec */-
2227#endif-
2228-
2229#ifdef SQLITE_HAS_CODEC-
2230/*-
2231** Make sure the number of reserved bits is the same in the destination-
2232** pager as it is in the source. This comes up when a VACUUM changes the-
2233** number of reserved bits to the "optimal" amount.-
2234*/-
2235void sqlite3PagerAlignReserve(Pager *pDest, Pager *pSrc){-
2236 if( pDest->nReserve!=pSrc->nReserve ){-
2237 pDest->nReserve = pSrc->nReserve;-
2238 pagerReportSize(pDest);-
2239 }-
2240}-
2241#endif-
2242-
2243/*-
2244** Read a single page from either the journal file (if isMainJrnl==1) or-
2245** from the sub-journal (if isMainJrnl==0) and playback that page.-
2246** The page begins at offset *pOffset into the file. The *pOffset-
2247** value is increased to the start of the next page in the journal.-
2248**-
2249** The main rollback journal uses checksums - the statement journal does -
2250** not.-
2251**-
2252** If the page number of the page record read from the (sub-)journal file-
2253** is greater than the current value of Pager.dbSize, then playback is-
2254** skipped and SQLITE_OK is returned.-
2255**-
2256** If pDone is not NULL, then it is a record of pages that have already-
2257** been played back. If the page at *pOffset has already been played back-
2258** (if the corresponding pDone bit is set) then skip the playback.-
2259** Make sure the pDone bit corresponding to the *pOffset page is set-
2260** prior to returning.-
2261**-
2262** If the page record is successfully read from the (sub-)journal file-
2263** and played back, then SQLITE_OK is returned. If an IO error occurs-
2264** while reading the record from the (sub-)journal file or while writing-
2265** to the database file, then the IO error code is returned. If data-
2266** is successfully read from the (sub-)journal file but appears to be-
2267** corrupted, SQLITE_DONE is returned. Data is considered corrupted in-
2268** two circumstances:-
2269** -
2270** * If the record page-number is illegal (0 or PAGER_MJ_PGNO), or-
2271** * If the record is being rolled back from the main journal file-
2272** and the checksum field does not match the record content.-
2273**-
2274** Neither of these two scenarios are possible during a savepoint rollback.-
2275**-
2276** If this is a savepoint rollback, then memory may have to be dynamically-
2277** allocated by this function. If this is the case and an allocation fails,-
2278** SQLITE_NOMEM is returned.-
2279*/-
2280static int pager_playback_one_page(-
2281 Pager *pPager, /* The pager being played back */-
2282 i64 *pOffset, /* Offset of record to playback */-
2283 Bitvec *pDone, /* Bitvec of pages already played back */-
2284 int isMainJrnl, /* 1 -> main journal. 0 -> sub-journal. */-
2285 int isSavepnt /* True for a savepoint rollback */-
2286){-
2287 int rc;-
2288 PgHdr *pPg; /* An existing page in the cache */-
2289 Pgno pgno; /* The page number of a page in journal */-
2290 u32 cksum; /* Checksum used for sanity checking */-
2291 char *aData; /* Temporary storage for the page */-
2292 sqlite3_file *jfd; /* The file descriptor for the journal file */-
2293 int isSynced; /* True if journal page is synced */-
2294#ifdef SQLITE_HAS_CODEC-
2295 /* The jrnlEnc flag is true if Journal pages should be passed through-
2296 ** the codec. It is false for pure in-memory journals. */-
2297 const int jrnlEnc = (isMainJrnl || pPager->subjInMemory==0);-
2298#endif-
2299-
2300 assert( (isMainJrnl&~1)==0 ); /* isMainJrnl is 0 or 1 */-
2301 assert( (isSavepnt&~1)==0 ); /* isSavepnt is 0 or 1 */-
2302 assert( isMainJrnl || pDone ); /* pDone always used on sub-journals */-
2303 assert( isSavepnt || pDone==0 ); /* pDone never used on non-savepoint */-
2304-
2305 aData = pPager->pTmpSpace;-
2306 assert( aData ); /* Temp storage must have already been allocated */-
2307 assert( pagerUseWal(pPager)==0 || (!isMainJrnl && isSavepnt) );-
2308-
2309 /* Either the state is greater than PAGER_WRITER_CACHEMOD (a transaction -
2310 ** or savepoint rollback done at the request of the caller) or this is-
2311 ** a hot-journal rollback. If it is a hot-journal rollback, the pager-
2312 ** is in state OPEN and holds an EXCLUSIVE lock. Hot-journal rollback-
2313 ** only reads from the main journal, not the sub-journal.-
2314 */-
2315 assert( pPager->eState>=PAGER_WRITER_CACHEMOD-
2316 || (pPager->eState==PAGER_OPEN && pPager->eLock==EXCLUSIVE_LOCK)-
2317 );-
2318 assert( pPager->eState>=PAGER_WRITER_CACHEMOD || isMainJrnl );-
2319-
2320 /* Read the page number and page data from the journal or sub-journal-
2321 ** file. Return an error code to the caller if an IO error occurs.-
2322 */-
2323 jfd = isMainJrnl ? pPager->jfd : pPager->sjfd;
isMainJrnlDescription
TRUEevaluated 107686 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 228970 times by 1 test
Evaluated by:
  • Self test (438)
107686-228970
2324 rc = read32bits(jfd, *pOffset, &pgno);-
2325 if( rc!=SQLITE_OK ) return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 336655 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
1-336655
2326 rc = sqlite3OsRead(jfd, (u8*)aData, pPager->pageSize, (*pOffset)+4);-
2327 if( rc!=SQLITE_OK ) return rc;
never executed: return rc;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 336655 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-336655
2328 *pOffset += pPager->pageSize + 4 + isMainJrnl*4;-
2329-
2330 /* Sanity checking on the page. This is more important that I originally-
2331 ** thought. If a power failure occurs while the journal is being written,-
2332 ** it could cause invalid data to be written into the journal. We need to-
2333 ** detect this invalid data (with high probability) and ignore it.-
2334 */-
2335 if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){
pgno==0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 336653 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
pgno==((Pgno)(...pageSize))+1))Description
TRUEnever evaluated
FALSEevaluated 336653 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-336653
2336 assert( !isSavepnt );-
2337 return SQLITE_DONE;
executed 2 times by 1 test: return 101;
Executed by:
  • Self test (438)
2
2338 }-
2339 if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){
pgno>(Pgno)pPager->dbSizeDescription
TRUEevaluated 287 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 336366 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
sqlite3BitvecTest(pDone, pgno)Description
TRUEevaluated 188392 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 147974 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
287-336366
2340 return SQLITE_OK;
executed 188679 times by 1 test: return 0;
Executed by:
  • Self test (438)
188679
2341 }-
2342 if( isMainJrnl ){
isMainJrnlDescription
TRUEevaluated 107683 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 40291 times by 1 test
Evaluated by:
  • Self test (438)
40291-107683
2343 rc = read32bits(jfd, (*pOffset)-4, &cksum);-
2344 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 107683 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-107683
2345 if( !isSavepnt && pager_cksum(pPager, (u8*)aData)!=cksum ){
!isSavepntDescription
TRUEevaluated 84018 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 23665 times by 1 test
Evaluated by:
  • Self test (438)
pager_cksum(pP...)aData)!=cksumDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 84010 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
8-84018
2346 return SQLITE_DONE;
executed 8 times by 1 test: return 101;
Executed by:
  • Self test (438)
8
2347 }-
2348 }
executed 107675 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
107675
2349-
2350 /* If this page has already been played back before during the current-
2351 ** rollback, then don't bother to play it back again.-
2352 */-
2353 if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){
pDoneDescription
TRUEevaluated 53939 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 94027 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
(rc = sqlite3B...one, pgno))!=0Description
TRUEnever evaluated
FALSEevaluated 53939 times by 1 test
Evaluated by:
  • Self test (438)
0-94027
2354 return rc;
never executed: return rc;
0
2355 }-
2356-
2357 /* When playing back page 1, restore the nReserve setting-
2358 */-
2359 if( pgno==1 && pPager->nReserve!=((u8*)aData)[20] ){
pgno==1Description
TRUEevaluated 2308 times by 11 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 145658 times by 11 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
pPager->nReser...u8*)aData)[20]Description
TRUEnever evaluated
FALSEevaluated 2308 times by 11 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
0-145658
2360 pPager->nReserve = ((u8*)aData)[20];-
2361 pagerReportSize(pPager);-
2362 }
never executed: end of block
0
2363-
2364 /* If the pager is in CACHEMOD state, then there must be a copy of this-
2365 ** page in the pager cache. In this case just update the pager cache,-
2366 ** not the database file. The page is left marked dirty in this case.-
2367 **-
2368 ** An exception to the above rule: If the database is in no-sync mode-
2369 ** and a page is moved during an incremental vacuum then the page may-
2370 ** not be in the pager cache. Later: if a malloc() or IO error occurs-
2371 ** during a Movepage() call, then the page may not be in the cache-
2372 ** either. So the condition described in the above paragraph is not-
2373 ** assert()able.-
2374 **-
2375 ** If in WRITER_DBMOD, WRITER_FINISHED or OPEN state, then we update the-
2376 ** pager cache if it exists and the main file. The page is then marked -
2377 ** not dirty. Since this code is only executed in PAGER_OPEN state for-
2378 ** a hot-journal rollback, it is guaranteed that the page-cache is empty-
2379 ** if the pager is in OPEN state.-
2380 **-
2381 ** Ticket #1171: The statement journal might contain page content that is-
2382 ** different from the page content at the start of the transaction.-
2383 ** This occurs when a page is changed prior to the start of a statement-
2384 ** then changed again within the statement. When rolling back such a-
2385 ** statement we must not write to the original database unless we know-
2386 ** for certain that original page contents are synced into the main rollback-
2387 ** journal. Otherwise, a power loss might leave modified data in the-
2388 ** database file without an entry in the rollback journal that can-
2389 ** restore the database to its original form. Two conditions must be-
2390 ** met before writing to the database files. (1) the database must be-
2391 ** locked. (2) we know that the original page content is fully synced-
2392 ** in the main journal either because the page is not in cache or else-
2393 ** the page is marked as needSync==0.-
2394 **-
2395 ** 2008-04-14: When attempting to vacuum a corrupt database file, it-
2396 ** is possible to fail a statement on a database that does not yet exist.-
2397 ** Do not attempt to write if database file has never been opened.-
2398 */-
2399 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 3419 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 144547 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3419-144547
2400 pPg = 0;-
2401 }else{
executed 3419 times by 1 test: end of block
Executed by:
  • Self test (438)
3419
2402 pPg = sqlite3PagerLookup(pPager, pgno);-
2403 }
executed 144547 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
144547
2404 assert( pPg || !MEMDB );-
2405 assert( pPager->eState!=PAGER_OPEN || pPg==0 || pPager->tempFile );-
2406 PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n",-
2407 PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, (u8*)aData),-
2408 (isMainJrnl?"main-journal":"sub-journal")-
2409 ));-
2410 if( isMainJrnl ){
isMainJrnlDescription
TRUEevaluated 107675 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 40291 times by 1 test
Evaluated by:
  • Self test (438)
40291-107675
2411 isSynced = pPager->noSync || (*pOffset <= pPager->journalHdr);
pPager->noSyncDescription
TRUEevaluated 4973 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 102702 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
(*pOffset <= p...r->journalHdr)Description
TRUEevaluated 85198 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 17504 times by 4 tests
Evaluated by:
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
4973-102702
2412 }else{
executed 107675 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
107675
2413 isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC));
pPg==0Description
TRUEevaluated 33416 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6875 times by 1 test
Evaluated by:
  • Self test (438)
0==(pPg->flags & 0x008)Description
TRUEevaluated 4351 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2524 times by 1 test
Evaluated by:
  • Self test (438)
2524-33416
2414 }
executed 40291 times by 1 test: end of block
Executed by:
  • Self test (438)
40291
2415 if( isOpen(pPager->fd)
((pPager->fd)->pMethods!=0)Description
TRUEevaluated 144566 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 3400 times by 1 test
Evaluated by:
  • Self test (438)
3400-144566
2416 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
pPager->eState>=4Description
TRUEevaluated 94009 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 50557 times by 3 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
  • Self test (55)
pPager->eState==0Description
TRUEevaluated 28388 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22169 times by 3 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
  • Self test (55)
22169-94009
2417 && isSynced
isSyncedDescription
TRUEevaluated 121114 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 1283 times by 2 tests
Evaluated by:
  • Self test (22)
  • Self test (438)
1283-121114
2418 ){-
2419 i64 ofst = (pgno-1)*(i64)pPager->pageSize;-
2420 testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 );-
2421 assert( !pagerUseWal(pPager) );-
2422-
2423 /* Write the data read from the journal back into the database file.-
2424 ** This is usually safe even for an encrypted database - as the data-
2425 ** was encrypted before it was written to the journal file. The exception-
2426 ** is if the data was just read from an in-memory sub-journal. In that-
2427 ** case it must be encrypted here before it is copied into the database-
2428 ** file. */-
2429#ifdef SQLITE_HAS_CODEC-
2430 if( !jrnlEnc ){-
2431 CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM_BKPT, aData);-
2432 rc = sqlite3OsWrite(pPager->fd, (u8 *)aData, pPager->pageSize, ofst);-
2433 CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM_BKPT);-
2434 }else-
2435#endif-
2436 rc = sqlite3OsWrite(pPager->fd, (u8 *)aData, pPager->pageSize, ofst);-
2437-
2438 if( pgno>pPager->dbFileSize ){
pgno>pPager->dbFileSizeDescription
TRUEevaluated 10003 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 111111 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
10003-111111
2439 pPager->dbFileSize = pgno;-
2440 }
executed 10003 times by 1 test: end of block
Executed by:
  • Self test (438)
10003
2441 if( pPager->pBackup ){
pPager->pBackupDescription
TRUEevaluated 441 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 120673 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
441-120673
2442#ifdef SQLITE_HAS_CODEC-
2443 if( jrnlEnc ){-
2444 CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM_BKPT);-
2445 sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData);-
2446 CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM_BKPT,aData);-
2447 }else-
2448#endif-
2449 sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData);-
2450 }
executed 441 times by 1 test: end of block
Executed by:
  • Self test (438)
441
2451 }else if( !isMainJrnl && pPg==0 ){
executed 121114 times by 10 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
!isMainJrnlDescription
TRUEevaluated 5943 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 20909 times by 4 tests
Evaluated by:
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
pPg==0Description
TRUEevaluated 3419 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2524 times by 1 test
Evaluated by:
  • Self test (438)
2524-121114
2452 /* If this is a rollback of a savepoint and data was not written to-
2453 ** the database and the page is not in-memory, there is a potential-
2454 ** problem. When the page is next fetched by the b-tree layer, it -
2455 ** will be read from the database file, which may or may not be -
2456 ** current. -
2457 **-
2458 ** There are a couple of different ways this can happen. All are quite-
2459 ** obscure. When running in synchronous mode, this can only happen -
2460 ** if the page is on the free-list at the start of the transaction, then-
2461 ** populated, then moved using sqlite3PagerMovepage().-
2462 **-
2463 ** The solution is to add an in-memory page to the cache containing-
2464 ** the data just read from the sub-journal. Mark the page as dirty -
2465 ** and if the pager requires a journal-sync, then mark the page as -
2466 ** requiring a journal-sync before it is written.-
2467 */-
2468 assert( isSavepnt );-
2469 assert( (pPager->doNotSpill & SPILLFLAG_ROLLBACK)==0 );-
2470 pPager->doNotSpill |= SPILLFLAG_ROLLBACK;-
2471 rc = sqlite3PagerGet(pPager, pgno, &pPg, 1);-
2472 assert( (pPager->doNotSpill & SPILLFLAG_ROLLBACK)!=0 );-
2473 pPager->doNotSpill &= ~SPILLFLAG_ROLLBACK;-
2474 if( rc!=SQLITE_OK ) return rc;
never executed: return rc;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 3419 times by 1 test
Evaluated by:
  • Self test (438)
0-3419
2475 sqlite3PcacheMakeDirty(pPg);-
2476 }
executed 3419 times by 1 test: end of block
Executed by:
  • Self test (438)
3419
2477 if( pPg ){
pPgDescription
TRUEevaluated 32713 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 115253 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
32713-115253
2478 /* No page should ever be explicitly rolled back that is in use, except-
2479 ** for page 1 which is held in use in order to keep the lock on the-
2480 ** database active. However such a page may be rolled back as a result-
2481 ** of an internal error resulting in an automatic call to-
2482 ** sqlite3PagerRollback().-
2483 */-
2484 void *pData;-
2485 pData = pPg->pData;-
2486 memcpy(pData, (u8*)aData, pPager->pageSize);-
2487 pPager->xReiniter(pPg);-
2488 /* It used to be that sqlite3PcacheMakeClean(pPg) was called here. But-
2489 ** that call was dangerous and had no detectable benefit since the cache-
2490 ** is normally cleaned by sqlite3PcacheCleanAll() after rollback and so-
2491 ** has been removed. */-
2492 pager_set_pagehash(pPg);-
2493-
2494 /* If this was page 1, then restore the value of Pager.dbFileVers.-
2495 ** Do this before any decoding. */-
2496 if( pgno==1 ){
pgno==1Description
TRUEevaluated 1939 times by 11 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 30774 times by 11 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
1939-30774
2497 memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers));-
2498 }
executed 1939 times by 11 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
1939
2499-
2500 /* Decode the page just read from disk */-
2501#if SQLITE_HAS_CODEC-
2502 if( jrnlEnc ){ CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM_BKPT); }-
2503#endif-
2504 sqlite3PcacheRelease(pPg);-
2505 }
executed 32713 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
32713
2506 return rc;
executed 147966 times by 12 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
147966
2507}-
2508-
2509/*-
2510** Parameter zMaster is the name of a master journal file. A single journal-
2511** file that referred to the master journal file has just been rolled back.-
2512** This routine checks if it is possible to delete the master journal file,-
2513** and does so if it is.-
2514**-
2515** Argument zMaster may point to Pager.pTmpSpace. So that buffer is not -
2516** available for use within this function.-
2517**-
2518** When a master journal file is created, it is populated with the names -
2519** of all of its child journals, one after another, formatted as utf-8 -
2520** encoded text. The end of each child journal file is marked with a -
2521** nul-terminator byte (0x00). i.e. the entire contents of a master journal-
2522** file for a transaction involving two databases might be:-
2523**-
2524** "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00"-
2525**-
2526** A master journal file may only be deleted once all of its child -
2527** journals have been rolled back.-
2528**-
2529** This function reads the contents of the master-journal file into -
2530** memory and loops through each of the child journal names. For-
2531** each child journal, it checks if:-
2532**-
2533** * if the child journal exists, and if so-
2534** * if the child journal contains a reference to master journal -
2535** file zMaster-
2536**-
2537** If a child journal can be found that matches both of the criteria-
2538** above, this function returns without doing anything. Otherwise, if-
2539** no such child journal can be found, file zMaster is deleted from-
2540** the file-system using sqlite3OsDelete().-
2541**-
2542** If an IO error within this function, an error code is returned. This-
2543** function allocates memory by calling sqlite3Malloc(). If an allocation-
2544** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors -
2545** occur, SQLITE_OK is returned.-
2546**-
2547** TODO: This function allocates a single block of memory to load-
2548** the entire contents of the master journal file. This could be-
2549** a couple of kilobytes or so - potentially larger than the page -
2550** size.-
2551*/-
2552static int pager_delmaster(Pager *pPager, const char *zMaster){-
2553 sqlite3_vfs *pVfs = pPager->pVfs;-
2554 int rc; /* Return code */-
2555 sqlite3_file *pMaster; /* Malloc'd master-journal file descriptor */-
2556 sqlite3_file *pJournal; /* Malloc'd child-journal file descriptor */-
2557 char *zMasterJournal = 0; /* Contents of master journal file */-
2558 i64 nMasterJournal; /* Size of master journal file */-
2559 char *zJournal; /* Pointer to one journal within MJ file */-
2560 char *zMasterPtr; /* Space to hold MJ filename from a journal file */-
2561 int nMasterPtr; /* Amount of space allocated to zMasterPtr[] */-
2562-
2563 /* Allocate space for both the pJournal and pMaster file descriptors.-
2564 ** If successful, open the master journal file for reading.-
2565 */-
2566 pMaster = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile * 2);-
2567 pJournal = (sqlite3_file *)(((u8 *)pMaster) + pVfs->szOsFile);-
2568 if( !pMaster ){
!pMasterDescription
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
0-29
2569 rc = SQLITE_NOMEM_BKPT;-
2570 }else{
never executed: end of block
0
2571 const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MASTER_JOURNAL);-
2572 rc = sqlite3OsOpen(pVfs, zMaster, pMaster, flags, 0);-
2573 }
executed 29 times by 1 test: end of block
Executed by:
  • Self test (438)
29
2574 if( rc!=SQLITE_OK ) goto delmaster_out;
never executed: goto delmaster_out;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
0-29
2575-
2576 /* Load the entire master journal file into space obtained from-
2577 ** sqlite3_malloc() and pointed to by zMasterJournal. Also obtain-
2578 ** sufficient space (in zMasterPtr) to hold the names of master-
2579 ** journal files extracted from regular rollback-journals.-
2580 */-
2581 rc = sqlite3OsFileSize(pMaster, &nMasterJournal);-
2582 if( rc!=SQLITE_OK ) goto delmaster_out;
never executed: goto delmaster_out;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
0-29
2583 nMasterPtr = pVfs->mxPathname+1;-
2584 zMasterJournal = sqlite3Malloc(nMasterJournal + nMasterPtr + 1);-
2585 if( !zMasterJournal ){
!zMasterJournalDescription
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
0-29
2586 rc = SQLITE_NOMEM_BKPT;-
2587 goto delmaster_out;
never executed: goto delmaster_out;
0
2588 }-
2589 zMasterPtr = &zMasterJournal[nMasterJournal+1];-
2590 rc = sqlite3OsRead(pMaster, zMasterJournal, (int)nMasterJournal, 0);-
2591 if( rc!=SQLITE_OK ) goto delmaster_out;
never executed: goto delmaster_out;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
0-29
2592 zMasterJournal[nMasterJournal] = 0;-
2593-
2594 zJournal = zMasterJournal;-
2595 while( (zJournal-zMasterJournal)<nMasterJournal ){
(zJournal-zMas...nMasterJournalDescription
TRUEevaluated 53 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
15-53
2596 int exists;-
2597 rc = sqlite3OsAccess(pVfs, zJournal, SQLITE_ACCESS_EXISTS, &exists);-
2598 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 53 times by 1 test
Evaluated by:
  • Self test (438)
0-53
2599 goto delmaster_out;
never executed: goto delmaster_out;
0
2600 }-
2601 if( exists ){
existsDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 37 times by 1 test
Evaluated by:
  • Self test (438)
16-37
2602 /* One of the journals pointed to by the master journal exists.-
2603 ** Open it and check if it points at the master journal. If-
2604 ** so, return without deleting the master journal file.-
2605 */-
2606 int c;-
2607 int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL);-
2608 rc = sqlite3OsOpen(pVfs, zJournal, pJournal, flags, 0);-
2609 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
0-16
2610 goto delmaster_out;
never executed: goto delmaster_out;
0
2611 }-
2612-
2613 rc = readMasterJournal(pJournal, zMasterPtr, nMasterPtr);-
2614 sqlite3OsClose(pJournal);-
2615 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
0-16
2616 goto delmaster_out;
never executed: goto delmaster_out;
0
2617 }-
2618-
2619 c = zMasterPtr[0]!=0 && strcmp(zMasterPtr, zMaster)==0;
never executed: __result = (((const unsigned char *) (const char *) ( zMasterPtr ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( zMaster ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
zMasterPtr[0]!=0Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
__extension__ ...r )))); }) ==0Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-15
2620 if( c ){
cDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-14
2621 /* We have a match. Do not delete the master journal file. */-
2622 goto delmaster_out;
executed 14 times by 1 test: goto delmaster_out;
Executed by:
  • Self test (438)
14
2623 }-
2624 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
2625 zJournal += (sqlite3Strlen30(zJournal)+1);-
2626 }
executed 39 times by 1 test: end of block
Executed by:
  • Self test (438)
39
2627 -
2628 sqlite3OsClose(pMaster);-
2629 rc = sqlite3OsDelete(pVfs, zMaster, 0);-
2630-
2631delmaster_out:
code before this statement executed 15 times by 1 test: delmaster_out:
Executed by:
  • Self test (438)
15
2632 sqlite3_free(zMasterJournal);-
2633 if( pMaster ){
pMasterDescription
TRUEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-29
2634 sqlite3OsClose(pMaster);-
2635 assert( !isOpen(pJournal) );-
2636 sqlite3_free(pMaster);-
2637 }
executed 29 times by 1 test: end of block
Executed by:
  • Self test (438)
29
2638 return rc;
executed 29 times by 1 test: return rc;
Executed by:
  • Self test (438)
29
2639}-
2640-
2641-
2642/*-
2643** This function is used to change the actual size of the database -
2644** file in the file-system. This only happens when committing a transaction,-
2645** or rolling back a transaction (including rolling back a hot-journal).-
2646**-
2647** If the main database file is not open, or the pager is not in either-
2648** DBMOD or OPEN state, this function is a no-op. Otherwise, the size -
2649** of the file is changed to nPage pages (nPage*pPager->pageSize bytes). -
2650** If the file on disk is currently larger than nPage pages, then use the VFS-
2651** xTruncate() method to truncate it.-
2652**-
2653** Or, it might be the case that the file on disk is smaller than -
2654** nPage pages. Some operating system implementations can get confused if -
2655** you try to truncate a file to some size that is larger than it -
2656** currently is, so detect this case and write a single zero byte to -
2657** the end of the new file instead.-
2658**-
2659** If successful, return SQLITE_OK. If an IO error occurs while modifying-
2660** the database file, return the error code to the caller.-
2661*/-
2662static int pager_truncate(Pager *pPager, Pgno nPage){-
2663 int rc = SQLITE_OK;-
2664 assert( pPager->eState!=PAGER_ERROR );-
2665 assert( pPager->eState!=PAGER_READER );-
2666 -
2667 if( isOpen(pPager->fd)
((pPager->fd)->pMethods!=0)Description
TRUEevaluated 3284 times by 15 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 839 times by 1 test
Evaluated by:
  • Self test (438)
839-3284
2668 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
pPager->eState>=4Description
TRUEevaluated 1116 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 2168 times by 3 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
  • Self test (55)
pPager->eState==0Description
TRUEevaluated 375 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1793 times by 3 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
  • Self test (55)
375-2168
2669 ){-
2670 i64 currentSize, newSize;-
2671 int szPage = pPager->pageSize;-
2672 assert( pPager->eLock==EXCLUSIVE_LOCK );-
2673 /* TODO: Is it safe to use Pager.dbFileSize here? */-
2674 rc = sqlite3OsFileSize(pPager->fd, &currentSize);-
2675 newSize = szPage*(i64)nPage;-
2676 if( rc==SQLITE_OK && currentSize!=newSize ){
rc==0Description
TRUEevaluated 1481 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
currentSize!=newSizeDescription
TRUEevaluated 907 times by 8 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (8)
FALSEevaluated 574 times by 6 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (22)
  • Self test (438)
  • Self test (6)
10-1481
2677 if( currentSize>newSize ){
currentSize>newSizeDescription
TRUEevaluated 901 times by 8 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (8)
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
6-901
2678 rc = sqlite3OsTruncate(pPager->fd, newSize);-
2679 }else if( (currentSize+szPage)<=newSize ){
executed 901 times by 8 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (8)
(currentSize+szPage)<=newSizeDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-901
2680 char *pTmp = pPager->pTmpSpace;-
2681 memset(pTmp, 0, szPage);-
2682 testcase( (newSize-szPage) == currentSize );-
2683 testcase( (newSize-szPage) > currentSize );-
2684 rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, newSize-szPage);-
2685 }
executed 6 times by 1 test: end of block
Executed by:
  • Self test (438)
6
2686 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 899 times by 8 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (8)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
8-899
2687 pPager->dbFileSize = nPage;-
2688 }
executed 899 times by 8 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (8)
899
2689 }
executed 907 times by 8 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (20)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (8)
907
2690 }
executed 1491 times by 13 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (6)
  • Self test (8)
1491
2691 return rc;
executed 4123 times by 15 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
4123
2692}-
2693-
2694/*-
2695** Return a sanitized version of the sector-size of OS file pFile. The-
2696** return value is guaranteed to lie between 32 and MAX_SECTOR_SIZE.-
2697*/-
2698int sqlite3SectorSize(sqlite3_file *pFile){-
2699 int iRet = sqlite3OsSectorSize(pFile);-
2700 if( iRet<32 ){
iRet<32Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 656 times by 34 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
6-656
2701 iRet = 512;-
2702 }else if( iRet>MAX_SECTOR_SIZE ){
executed 6 times by 1 test: end of block
Executed by:
  • Self test (438)
iRet>0x10000Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 648 times by 34 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
6-648
2703 assert( MAX_SECTOR_SIZE>=512 );-
2704 iRet = MAX_SECTOR_SIZE;-
2705 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
2706 return iRet;
executed 662 times by 34 tests: return iRet;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
662
2707}-
2708-
2709/*-
2710** Set the value of the Pager.sectorSize variable for the given-
2711** pager based on the value returned by the xSectorSize method-
2712** of the open database file. The sector size will be used -
2713** to determine the size and alignment of journal header and -
2714** master journal pointers within created journal files.-
2715**-
2716** For temporary files the effective sector size is always 512 bytes.-
2717**-
2718** Otherwise, for non-temporary files, the effective sector size is-
2719** the value returned by the xSectorSize() method rounded up to 32 if-
2720** it is less than 32, or rounded down to MAX_SECTOR_SIZE if it-
2721** is greater than MAX_SECTOR_SIZE.-
2722**-
2723** If the file has the SQLITE_IOCAP_POWERSAFE_OVERWRITE property, then set-
2724** the effective sector size to its minimum value (512). The purpose of-
2725** pPager->sectorSize is to define the "blast radius" of bytes that-
2726** might change if a crash occurs while writing to a single byte in-
2727** that range. But with POWERSAFE_OVERWRITE, the blast radius is zero-
2728** (that is what POWERSAFE_OVERWRITE means), so we minimize the sector-
2729** size. For backwards compatibility of the rollback journal file format,-
2730** we cannot reduce the effective sector size below 512.-
2731*/-
2732static void setSectorSize(Pager *pPager){-
2733 assert( isOpen(pPager->fd) || pPager->tempFile );-
2734-
2735 if( pPager->tempFile
pPager->tempFileDescription
TRUEevaluated 64421 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
FALSEevaluated 57189 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
57189-64421
2736 || (sqlite3OsDeviceCharacteristics(pPager->fd) &
(sqlite3OsDevi...0x00001000)!=0Description
TRUEevaluated 56572 times by 406 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 617 times by 34 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
617-56572
2737 SQLITE_IOCAP_POWERSAFE_OVERWRITE)!=0
(sqlite3OsDevi...0x00001000)!=0Description
TRUEevaluated 56572 times by 406 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 617 times by 34 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
617-56572
2738 ){-
2739 /* Sector size doesn't matter for temporary files. Also, the file-
2740 ** may not have been opened yet, in which case the OsSectorSize()-
2741 ** call will segfault. */-
2742 pPager->sectorSize = 512;-
2743 }else{
executed 120993 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
120993
2744 pPager->sectorSize = sqlite3SectorSize(pPager->fd);-
2745 }
executed 617 times by 34 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
617
2746}-
2747-
2748/*-
2749** Playback the journal and thus restore the database file to-
2750** the state it was in before we started making changes. -
2751**-
2752** The journal file format is as follows: -
2753**-
2754** (1) 8 byte prefix. A copy of aJournalMagic[].-
2755** (2) 4 byte big-endian integer which is the number of valid page records-
2756** in the journal. If this value is 0xffffffff, then compute the-
2757** number of page records from the journal size.-
2758** (3) 4 byte big-endian integer which is the initial value for the -
2759** sanity checksum.-
2760** (4) 4 byte integer which is the number of pages to truncate the-
2761** database to during a rollback.-
2762** (5) 4 byte big-endian integer which is the sector size. The header-
2763** is this many bytes in size.-
2764** (6) 4 byte big-endian integer which is the page size.-
2765** (7) zero padding out to the next sector size.-
2766** (8) Zero or more pages instances, each as follows:-
2767** + 4 byte page number.-
2768** + pPager->pageSize bytes of data.-
2769** + 4 byte checksum-
2770**-
2771** When we speak of the journal header, we mean the first 7 items above.-
2772** Each entry in the journal is an instance of the 8th item.-
2773**-
2774** Call the value from the second bullet "nRec". nRec is the number of-
2775** valid page entries in the journal. In most cases, you can compute the-
2776** value of nRec from the size of the journal file. But if a power-
2777** failure occurred while the journal was being written, it could be the-
2778** case that the size of the journal file had already been increased but-
2779** the extra entries had not yet made it safely to disk. In such a case,-
2780** the value of nRec computed from the file size would be too large. For-
2781** that reason, we always use the nRec value in the header.-
2782**-
2783** If the nRec value is 0xffffffff it means that nRec should be computed-
2784** from the file size. This value is used when the user selects the-
2785** no-sync option for the journal. A power failure could lead to corruption-
2786** in this case. But for things like temporary table (which will be-
2787** deleted when the power is restored) we don't care. -
2788**-
2789** If the file opened as the journal file is not a well-formed-
2790** journal file then all pages up to the first corrupted page are rolled-
2791** back (or no pages if the journal header is corrupted). The journal file-
2792** is then deleted and SQLITE_OK returned, just as if no corruption had-
2793** been encountered.-
2794**-
2795** If an I/O or malloc() error occurs, the journal-file is not deleted-
2796** and an error code is returned.-
2797**-
2798** The isHot parameter indicates that we are trying to rollback a journal-
2799** that might be a hot journal. Or, it could be that the journal is -
2800** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE.-
2801** If the journal really is hot, reset the pager cache prior rolling-
2802** back any content. If the journal is merely persistent, no reset is-
2803** needed.-
2804*/-
2805static int pager_playback(Pager *pPager, int isHot){-
2806 sqlite3_vfs *pVfs = pPager->pVfs;-
2807 i64 szJ; /* Size of the journal file in bytes */-
2808 u32 nRec; /* Number of Records in the journal */-
2809 u32 u; /* Unsigned loop counter */-
2810 Pgno mxPg = 0; /* Size of the original file in pages */-
2811 int rc; /* Result code of a subroutine */-
2812 int res = 1; /* Value returned by sqlite3OsAccess() */-
2813 char *zMaster = 0; /* Name of master journal file if any */-
2814 int needPagerReset; /* True to reset page prior to first page rollback */-
2815 int nPlayback = 0; /* Total number of pages restored from journal */-
2816 u32 savedPageSize = pPager->pageSize;-
2817-
2818 /* Figure out how many records are in the journal. Abort early if-
2819 ** the journal is empty.-
2820 */-
2821 assert( isOpen(pPager->jfd) );-
2822 rc = sqlite3OsFileSize(pPager->jfd, &szJ);-
2823 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 132 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3293 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
132-3293
2824 goto end_playback;
executed 132 times by 1 test: goto end_playback;
Executed by:
  • Self test (438)
132
2825 }-
2826-
2827 /* Read the master journal name from the journal, if it is present.-
2828 ** If a master journal file name is specified, but the file is not-
2829 ** present on disk, then the journal is not hot and does not need to be-
2830 ** played back.-
2831 **-
2832 ** TODO: Technically the following is an error because it assumes that-
2833 ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that-
2834 ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c,-
2835 ** mxPathname is 512, which is the same as the minimum allowable value-
2836 ** for pageSize.-
2837 */-
2838 zMaster = pPager->pTmpSpace;-
2839 rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);-
2840 if( rc==SQLITE_OK && zMaster[0] ){
rc==0Description
TRUEevaluated 3293 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEnever evaluated
zMaster[0]Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3243 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-3293
2841 rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);-
2842 }
executed 50 times by 1 test: end of block
Executed by:
  • Self test (438)
50
2843 zMaster = 0;-
2844 if( rc!=SQLITE_OK || !res ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 3293 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
!resDescription
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3272 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
0-3293
2845 goto end_playback;
executed 21 times by 1 test: goto end_playback;
Executed by:
  • Self test (438)
21
2846 }-
2847 pPager->journalOff = 0;-
2848 needPagerReset = isHot;-
2849-
2850 /* This loop terminates either when a readJournalHdr() or -
2851 ** pager_playback_one_page() call returns SQLITE_DONE or an IO error -
2852 ** occurs. -
2853 */-
2854 while( 1 ){-
2855 /* Read the next journal header from the journal file. If there are-
2856 ** not enough bytes left in the journal file for a complete header, or-
2857 ** it is corrupted, then a process must have failed while writing it.-
2858 ** This indicates nothing more needs to be rolled back.-
2859 */-
2860 rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg);-
2861 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 3169 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 16197 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3169-16197
2862 if( rc==SQLITE_DONE ){
rc==101Description
TRUEevaluated 3169 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEnever evaluated
0-3169
2863 rc = SQLITE_OK;-
2864 }
executed 3169 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3169
2865 goto end_playback;
executed 3169 times by 12 tests: goto end_playback;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3169
2866 }-
2867-
2868 /* If nRec is 0xffffffff, then this journal was created by a process-
2869 ** working in no-sync mode. This means that the rest of the journal-
2870 ** file consists of pages, there are no more journal headers. Compute-
2871 ** the value of nRec based on this assumption.-
2872 */-
2873 if( nRec==0xffffffff ){
nRec==0xffffffffDescription
TRUEevaluated 852 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15345 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
852-15345
2874 assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) );-
2875 nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager));-
2876 }
executed 852 times by 1 test: end of block
Executed by:
  • Self test (438)
852
2877-
2878 /* If nRec is 0 and this rollback is of a transaction created by this-
2879 ** process and if this is the final header in the journal, then it means-
2880 ** that this part of the journal was being filled but has not yet been-
2881 ** synced to disk. Compute the number of pages based on the remaining-
2882 ** size of the file.-
2883 **-
2884 ** The third term of the test was added to fix ticket #2565.-
2885 ** When rolling back a hot journal, nRec==0 always means that the next-
2886 ** chunk of the journal contains zero pages to be rolled back. But-
2887 ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in-
2888 ** the journal, it means that the journal might contain additional-
2889 ** pages that need to be rolled back and that the number of pages -
2890 ** should be computed based on the journal file size.-
2891 */-
2892 if( nRec==0 && !isHot &&
nRec==0Description
TRUEevaluated 2663 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 13534 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
!isHotDescription
TRUEevaluated 2652 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
11-13534
2893 pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){
pPager->journa...er->journalOffDescription
TRUEevaluated 2652 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEnever evaluated
0-2652
2894 nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager));-
2895 }
executed 2652 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
2652
2896-
2897 /* If this is the first header read from the journal, truncate the-
2898 ** database file back to its original size.-
2899 */-
2900 if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){
pPager->journa...r->sectorSize)Description
TRUEevaluated 3257 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 12940 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
3257-12940
2901 rc = pager_truncate(pPager, mxPg);-
2902 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3255 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
2-3255
2903 goto end_playback;
executed 2 times by 1 test: goto end_playback;
Executed by:
  • Self test (438)
2
2904 }-
2905 pPager->dbSize = mxPg;-
2906 }
executed 3255 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3255
2907-
2908 /* Copy original pages out of the journal and back into the -
2909 ** database file and/or page cache.-
2910 */-
2911 for(u=0; u<nRec; u++){
u<nRecDescription
TRUEevaluated 84021 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 16084 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
16084-84021
2912 if( needPagerReset ){
needPagerResetDescription
TRUEevaluated 374 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 83647 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
374-83647
2913 pager_reset(pPager);-
2914 needPagerReset = 0;-
2915 }
executed 374 times by 1 test: end of block
Executed by:
  • Self test (438)
374
2916 rc = pager_playback_one_page(pPager,&pPager->journalOff,0,1,0);-
2917 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 83910 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 111 times by 1 test
Evaluated by:
  • Self test (438)
111-83910
2918 nPlayback++;-
2919 }else{
executed 83910 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
83910
2920 if( rc==SQLITE_DONE ){
rc==101Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 101 times by 1 test
Evaluated by:
  • Self test (438)
10-101
2921 pPager->journalOff = szJ;-
2922 break;
executed 10 times by 1 test: break;
Executed by:
  • Self test (438)
10
2923 }else if( rc==SQLITE_IOERR_SHORT_READ ){
rc==(10 | (2<<8))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 100 times by 1 test
Evaluated by:
  • Self test (438)
1-100
2924 /* If the journal has been truncated, simply stop reading and-
2925 ** processing the journal. This might happen if the journal was-
2926 ** not completely written and synced prior to a crash. In that-
2927 ** case, the database should have never been written in the-
2928 ** first place so it is OK to simply abandon the rollback. */-
2929 rc = SQLITE_OK;-
2930 goto end_playback;
executed 1 time by 1 test: goto end_playback;
Executed by:
  • Self test (438)
1
2931 }else{-
2932 /* If we are unable to rollback, quit and return the error-
2933 ** code. This will cause the pager to enter the error state-
2934 ** so that no further harm will be done. Perhaps the next-
2935 ** process to come along will be able to rollback the database.-
2936 */-
2937 goto end_playback;
executed 100 times by 1 test: goto end_playback;
Executed by:
  • Self test (438)
100
2938 }-
2939 }-
2940 }-
2941 }
executed 16094 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
16094
2942 /*NOTREACHED*/-
2943 assert( 0 );-
2944-
2945end_playback:
code before this statement never executed: end_playback:
0
2946 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 3191 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 234 times by 1 test
Evaluated by:
  • Self test (438)
234-3191
2947 rc = sqlite3PagerSetPagesize(pPager, &savedPageSize, -1);-
2948 }
executed 3191 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3191
2949 /* Following a rollback, the database file should be back in its original-
2950 ** state prior to the start of the transaction, so invoke the-
2951 ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the-
2952 ** assertion that the transaction counter was modified.-
2953 */-
2954#ifdef SQLITE_DEBUG-
2955 sqlite3OsFileControlHint(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0);-
2956#endif-
2957-
2958 /* If this playback is happening automatically as a result of an IO or -
2959 ** malloc error that occurred after the change-counter was updated but -
2960 ** before the transaction was committed, then the change-counter -
2961 ** modification may just have been reverted. If this happens in exclusive -
2962 ** mode, then subsequent transactions performed by the connection will not-
2963 ** update the change-counter at all. This may lead to cache inconsistency-
2964 ** problems for other processes at some point in the future. So, just-
2965 ** in case this has happened, clear the changeCountDone flag now.-
2966 */-
2967 pPager->changeCountDone = pPager->tempFile;-
2968-
2969 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 3191 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 234 times by 1 test
Evaluated by:
  • Self test (438)
234-3191
2970 zMaster = pPager->pTmpSpace;-
2971 rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);-
2972 testcase( rc!=SQLITE_OK );-
2973 }
executed 3191 times by 12 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
3191
2974 if( rc==SQLITE_OK
rc==0Description
TRUEevaluated 3191 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
FALSEevaluated 234 times by 1 test
Evaluated by:
  • Self test (438)
234-3191
2975 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
pPager->eState>=4Description
TRUEevaluated 152 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 3039 times by 3 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
  • Self test (55)
pPager->eState==0Description
TRUEevaluated 411 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2628 times by 3 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
  • Self test (55)
152-3039
2976 ){-
2977 rc = sqlite3PagerSync(pPager, 0);-
2978 }
executed 559 times by 6 tests: end of block
Executed by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (438)
  • Self test (6)
559
2979 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 3187 times by 8 tests
Evaluated by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
FALSEevaluated 234 times by 1 test
Evaluated by:
  • Self test (438)
234-3187
2980 rc = pager_end_transaction(pPager, zMaster[0]!='\0', 0);-
2981 testcase( rc!=SQLITE_OK );-
2982 }
executed 3187 times by 8 tests: end of block
Executed by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
3187
2983 if( rc==SQLITE_OK && zMaster[0] && res ){
rc==0Description
TRUEevaluated 3187 times by 8 tests
Evaluated by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
FALSEevaluated 234 times by 1 test
Evaluated by:
  • Self test (438)
zMaster[0]Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3137 times by 8 tests
Evaluated by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
resDescription
TRUEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
21-3187
2984 /* If there was a master journal and this routine will return success,-
2985 ** see if it is possible to delete the master journal.-
2986 */-
2987 rc = pager_delmaster(pPager, zMaster);-
2988 testcase( rc!=SQLITE_OK );-
2989 }
executed 29 times by 1 test: end of block
Executed by:
  • Self test (438)
29
2990 if( isHot && nPlayback ){
isHotDescription
TRUEevaluated 411 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3010 times by 8 tests
Evaluated by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
nPlaybackDescription
TRUEevaluated 370 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 41 times by 1 test
Evaluated by:
  • Self test (438)
41-3010
2991 sqlite3_log(SQLITE_NOTICE_RECOVER_ROLLBACK, "recovered %d pages from %s",-
2992 nPlayback, pPager->zJournal);-
2993 }
executed 370 times by 1 test: end of block
Executed by:
  • Self test (438)
370
2994-
2995 /* The Pager.sectorSize variable may have been updated while rolling-
2996 ** back a journal created by a process with a different sector size-
2997 ** value. Reset it to the correct value for this process.-
2998 */-
2999 setSectorSize(pPager);-
3000 return rc;
executed 3421 times by 8 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
3421
3001}-
3002-
3003-
3004/*-
3005** Read the content for page pPg out of the database file (or out of-
3006** the WAL if that is where the most recent copy if found) into -
3007** pPg->pData. A shared lock or greater must be held on the database-
3008** file before this function is called.-
3009**-
3010** If page 1 is read, then the value of Pager.dbFileVers[] is set to-
3011** the value read from the database file.-
3012**-
3013** If an IO error occurs, then the IO error is returned to the caller.-
3014** Otherwise, SQLITE_OK is returned.-
3015*/-
3016static int readDbPage(PgHdr *pPg){-
3017 Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */-
3018 int rc = SQLITE_OK; /* Return code */-
3019-
3020#ifndef SQLITE_OMIT_WAL-
3021 u32 iFrame = 0; /* Frame of WAL containing pgno */-
3022-
3023 assert( pPager->eState>=PAGER_READER && !MEMDB );-
3024 assert( isOpen(pPager->fd) );-
3025-
3026 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 1609932 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 4210012 times by 408 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
1609932-4210012
3027 rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame);-
3028 if( rc ) return rc;
executed 2 times by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1609930 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
2-1609930
3029 }
executed 1609930 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
1609930
3030 if( iFrame ){
iFrameDescription
TRUEevaluated 1512497 times by 36 tests
Evaluated by:
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • Self test (75)
  • Self test (76)
  • ...
FALSEevaluated 4307445 times by 416 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
1512497-4307445
3031 rc = sqlite3WalReadFrame(pPager->pWal, iFrame,pPager->pageSize,pPg->pData);-
3032 }else
executed 1512497 times by 36 tests: end of block
Executed by:
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • Self test (75)
  • Self test (76)
  • ...
1512497
3033#endif-
3034 {-
3035 i64 iOffset = (pPg->pgno-1)*(i64)pPager->pageSize;-
3036 rc = sqlite3OsRead(pPager->fd, pPg->pData, pPager->pageSize, iOffset);-
3037 if( rc==SQLITE_IOERR_SHORT_READ ){
rc==(10 | (2<<8))Description
TRUEevaluated 92 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4307353 times by 416 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
92-4307353
3038 rc = SQLITE_OK;-
3039 }
executed 92 times by 1 test: end of block
Executed by:
  • Self test (438)
92
3040 }
executed 4307445 times by 416 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
4307445
3041-
3042 if( pPg->pgno==1 ){
pPg->pgno==1Description
TRUEevaluated 16604 times by 432 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 5803338 times by 415 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
16604-5803338
3043 if( rc ){
rcDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 16588 times by 432 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
16-16588
3044 /* If the read is unsuccessful, set the dbFileVers[] to something-
3045 ** that will never be a valid file version. dbFileVers[] is a copy-
3046 ** of bytes 24..39 of the database. Bytes 28..31 should always be-
3047 ** zero or the size of the database in page. Bytes 32..35 and 35..39-
3048 ** should be page numbers which are never 0xffffffff. So filling-
3049 ** pPager->dbFileVers[] with all 0xff bytes should suffice.-
3050 **-
3051 ** For an encrypted database, the situation is more complex: bytes-
3052 ** 24..39 of the database are white noise. But the probability of-
3053 ** white noise equaling 16 bytes of 0xff is vanishingly small so-
3054 ** we should still be ok.-
3055 */-
3056 memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));-
3057 }else{
executed 16 times by 1 test: end of block
Executed by:
  • Self test (438)
16
3058 u8 *dbFileVers = &((u8*)pPg->pData)[24];-
3059 memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));-
3060 }
executed 16588 times by 432 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
16588
3061 }-
3062 CODEC1(pPager, pPg->pData, pPg->pgno, 3, rc = SQLITE_NOMEM_BKPT);-
3063-
3064 PAGER_INCR(sqlite3_pager_readdb_count);-
3065 PAGER_INCR(pPager->nRead);-
3066 IOTRACE(("PGIN %p %d\n", pPager, pPg->pgno));-
3067 PAGERTRACE(("FETCH %d page %d hash(%08x)\n",-
3068 PAGERID(pPager), pPg->pgno, pager_pagehash(pPg)));-
3069-
3070 return rc;
executed 5819942 times by 432 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
5819942
3071}-
3072-
3073/*-
3074** Update the value of the change-counter at offsets 24 and 92 in-
3075** the header and the sqlite version number at offset 96.-
3076**-
3077** This is an unconditional update. See also the pager_incr_changecounter()-
3078** routine which only updates the change-counter if the update is actually-
3079** needed, as determined by the pPager->changeCountDone state variable.-
3080*/-
3081static void pager_write_changecounter(PgHdr *pPg){-
3082 u32 change_counter;-
3083-
3084 /* Increment the value just read and write it back to byte 24. */-
3085 change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1;-
3086 put32bits(((char*)pPg->pData)+24, change_counter);-
3087-
3088 /* Also store the SQLite version number in bytes 96..99 and in-
3089 ** bytes 92..95 store the change counter for which the version number-
3090 ** is valid. */-
3091 put32bits(((char*)pPg->pData)+92, change_counter);-
3092 put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER);-
3093}
executed 94112 times by 141 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • ...
94112
3094-
3095#ifndef SQLITE_OMIT_WAL-
3096/*-
3097** This function is invoked once for each page that has already been -
3098** written into the log file when a WAL transaction is rolled back.-
3099** Parameter iPg is the page number of said page. The pCtx argument -
3100** is actually a pointer to the Pager structure.-
3101**-
3102** If page iPg is present in the cache, and has no outstanding references,-
3103** it is discarded. Otherwise, if there are one or more outstanding-
3104** references, the page content is reloaded from the database. If the-
3105** attempt to reload content from the database is required and fails, -
3106** return an SQLite error code. Otherwise, SQLITE_OK.-
3107*/-
3108static int pagerUndoCallback(void *pCtx, Pgno iPg){-
3109 int rc = SQLITE_OK;-
3110 Pager *pPager = (Pager *)pCtx;-
3111 PgHdr *pPg;-
3112-
3113 assert( pagerUseWal(pPager) );-
3114 pPg = sqlite3PagerLookup(pPager, iPg);-
3115 if( pPg ){
pPgDescription
TRUEevaluated 541 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 6687 times by 1 test
Evaluated by:
  • Self test (438)
541-6687
3116 if( sqlite3PcachePageRefcount(pPg)==1 ){
sqlite3PcacheP...fcount(pPg)==1Description
TRUEevaluated 484 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 57 times by 1 test
Evaluated by:
  • Self test (438)
57-484
3117 sqlite3PcacheDrop(pPg);-
3118 }else{
executed 484 times by 3 tests: end of block
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
484
3119 rc = readDbPage(pPg);-
3120 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 56 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-56
3121 pPager->xReiniter(pPg);-
3122 }
executed 56 times by 1 test: end of block
Executed by:
  • Self test (438)
56
3123 sqlite3PagerUnrefNotNull(pPg);-
3124 }
executed 57 times by 1 test: end of block
Executed by:
  • Self test (438)
57
3125 }-
3126-
3127 /* Normally, if a transaction is rolled back, any backup processes are-
3128 ** updated as data is copied out of the rollback journal and into the-
3129 ** database. This is not generally possible with a WAL database, as-
3130 ** rollback involves simply truncating the log file. Therefore, if one-
3131 ** or more frames have already been written to the log (and therefore -
3132 ** also copied into the backup databases) as part of this transaction,-
3133 ** the backups must be restarted.-
3134 */-
3135 sqlite3BackupRestart(pPager->pBackup);-
3136-
3137 return rc;
executed 7228 times by 3 tests: return rc;
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
7228
3138}-
3139-
3140/*-
3141** This function is called to rollback a transaction on a WAL database.-
3142*/-
3143static int pagerRollbackWal(Pager *pPager){-
3144 int rc; /* Return Code */-
3145 PgHdr *pList; /* List of dirty pages to revert */-
3146-
3147 /* For all pages in the cache that are currently dirty or have already-
3148 ** been written (but not committed) to the log file, do one of the -
3149 ** following:-
3150 **-
3151 ** + Discard the cached page (if refcount==0), or-
3152 ** + Reload page content from the database (if refcount>0).-
3153 */-
3154 pPager->dbSize = pPager->dbOrigSize;-
3155 rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager);-
3156 pList = sqlite3PcacheDirtyList(pPager->pPCache);-
3157 while( pList && rc==SQLITE_OK ){
pListDescription
TRUEevaluated 520 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 101 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
rc==0Description
TRUEevaluated 519 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-520
3158 PgHdr *pNext = pList->pDirty;-
3159 rc = pagerUndoCallback((void *)pPager, pList->pgno);-
3160 pList = pNext;-
3161 }
executed 519 times by 3 tests: end of block
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
519
3162-
3163 return rc;
executed 102 times by 3 tests: return rc;
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
102
3164}-
3165-
3166/*-
3167** This function is a wrapper around sqlite3WalFrames(). As well as logging-
3168** the contents of the list of pages headed by pList (connected by pDirty),-
3169** this function notifies any active backup processes that the pages have-
3170** changed. -
3171**-
3172** The list of pages passed into this routine is always sorted by page number.-
3173** Hence, if page 1 appears anywhere on the list, it will be the first page.-
3174*/ -
3175static int pagerWalFrames(-
3176 Pager *pPager, /* Pager object */-
3177 PgHdr *pList, /* List of frames to log */-
3178 Pgno nTruncate, /* Database size after this commit */-
3179 int isCommit /* True if this is a commit */-
3180){-
3181 int rc; /* Return code */-
3182 int nList; /* Number of pages in pList */-
3183 PgHdr *p; /* For looping over pages */-
3184-
3185 assert( pPager->pWal );-
3186 assert( pList );-
3187#ifdef SQLITE_DEBUG-
3188 /* Verify that the page list is in accending order */-
3189 for(p=pList; p && p->pDirty; p=p->pDirty){-
3190 assert( p->pgno < p->pDirty->pgno );-
3191 }-
3192#endif-
3193-
3194 assert( pList->pDirty==0 || isCommit );-
3195 if( isCommit ){
isCommitDescription
TRUEevaluated 55469 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
FALSEevaluated 97425 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
55469-97425
3196 /* If a WAL transaction is being committed, there is no point in writing-
3197 ** any pages with page numbers greater than nTruncate into the WAL file.-
3198 ** They will never be read by any client. So remove them from the pDirty-
3199 ** list here. */-
3200 PgHdr **ppNext = &pList;-
3201 nList = 0;-
3202 for(p=pList; (*ppNext = p)!=0; p=p->pDirty){
(*ppNext = p)!=0Description
TRUEevaluated 116945 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
FALSEevaluated 55469 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
55469-116945
3203 if( p->pgno<=nTruncate ){
p->pgno<=nTruncateDescription
TRUEevaluated 112594 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
FALSEevaluated 4351 times by 1 test
Evaluated by:
  • Self test (438)
4351-112594
3204 ppNext = &p->pDirty;-
3205 nList++;-
3206 }
executed 112594 times by 26 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
112594
3207 }
executed 116945 times by 26 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
116945
3208 assert( pList );-
3209 }else{
executed 55469 times by 26 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
55469
3210 nList = 1;-
3211 }
executed 97425 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
97425
3212 pPager->aStat[PAGER_STAT_WRITE] += nList;-
3213-
3214 if( pList->pgno==1 ) pager_write_changecounter(pList);
executed 17361 times by 17 tests: pager_write_changecounter(pList);
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (28)
  • Self test (29)
  • Self test (438)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
pList->pgno==1Description
TRUEevaluated 17361 times by 17 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (28)
  • Self test (29)
  • Self test (438)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
FALSEevaluated 135533 times by 14 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
17361-135533
3215 rc = sqlite3WalFrames(pPager->pWal, -
3216 pPager->pageSize, pList, nTruncate, isCommit, pPager->walSyncFlags-
3217 );-
3218 if( rc==SQLITE_OK && pPager->pBackup ){
rc==0Description
TRUEevaluated 152893 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
pPager->pBackupDescription
TRUEevaluated 118 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 152775 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
1-152893
3219 for(p=pList; p; p=p->pDirty){
pDescription
TRUEevaluated 186 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 118 times by 1 test
Evaluated by:
  • Self test (438)
118-186
3220 sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData);-
3221 }
executed 186 times by 1 test: end of block
Executed by:
  • Self test (438)
186
3222 }
executed 118 times by 1 test: end of block
Executed by:
  • Self test (438)
118
3223-
3224#ifdef SQLITE_CHECK_PAGES-
3225 pList = sqlite3PcacheDirtyList(pPager->pPCache);-
3226 for(p=pList; p; p=p->pDirty){-
3227 pager_set_pagehash(p);-
3228 }-
3229#endif-
3230-
3231 return rc;
executed 152894 times by 26 tests: return rc;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
152894
3232}-
3233-
3234/*-
3235** Begin a read transaction on the WAL.-
3236**-
3237** This routine used to be called "pagerOpenSnapshot()" because it essentially-
3238** makes a snapshot of the database at the current point in time and preserves-
3239** that snapshot for use by the reader in spite of concurrently changes by-
3240** other writers or checkpointers.-
3241*/-
3242static int pagerBeginReadTransaction(Pager *pPager){-
3243 int rc; /* Return code */-
3244 int changed = 0; /* True if cache must be reset */-
3245-
3246 assert( pagerUseWal(pPager) );-
3247 assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );-
3248-
3249 /* sqlite3WalEndReadTransaction() was not called for the previous-
3250 ** transaction in locking_mode=EXCLUSIVE. So call it now. If we-
3251 ** are in locking_mode=NORMAL and EndRead() was previously called,-
3252 ** the duplicate call is harmless.-
3253 */-
3254 sqlite3WalEndReadTransaction(pPager->pWal);-
3255-
3256 rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed);-
3257 if( rc!=SQLITE_OK || changed ){
rc!=0Description
TRUEevaluated 22 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (50)
  • Self test (51)
FALSEevaluated 58294 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
changedDescription
TRUEevaluated 1583 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 56711 times by 45 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
22-58294
3258 pager_reset(pPager);-
3259 if( USEFETCH(pPager) ) sqlite3OsUnfetch(pPager->fd, 0, 0);
executed 5 times by 1 test: sqlite3OsUnfetch(pPager->fd, 0, 0);
Executed by:
  • Self test (438)
((pPager)->bUseFetch)Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1600 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
5-1600
3260 }
executed 1605 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
1605
3261-
3262 return rc;
executed 58316 times by 49 tests: return rc;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
58316
3263}-
3264#endif-
3265-
3266/*-
3267** This function is called as part of the transition from PAGER_OPEN-
3268** to PAGER_READER state to determine the size of the database file-
3269** in pages (assuming the page size currently stored in Pager.pageSize).-
3270**-
3271** If no error occurs, SQLITE_OK is returned and the size of the database-
3272** in pages is stored in *pnPage. Otherwise, an error code (perhaps-
3273** SQLITE_IOERR_FSTAT) is returned and *pnPage is left unmodified.-
3274*/-
3275static int pagerPagecount(Pager *pPager, Pgno *pnPage){-
3276 Pgno nPage; /* Value to return via *pnPage */-
3277-
3278 /* Query the WAL sub-system for the database size. The WalDbsize()-
3279 ** function returns zero if the WAL is not open (i.e. Pager.pWal==0), or-
3280 ** if the database size is not available. The database size is not-
3281 ** available from the WAL sub-system if the log file is empty or-
3282 ** contains no valid committed transactions.-
3283 */-
3284 assert( pPager->eState==PAGER_OPEN );-
3285 assert( pPager->eLock>=SHARED_LOCK );-
3286 assert( isOpen(pPager->fd) );-
3287 assert( pPager->tempFile==0 );-
3288 nPage = sqlite3WalDbsize(pPager->pWal);-
3289-
3290 /* If the number of pages in the database is not available from the-
3291 ** WAL sub-system, determine the page count based on the size of-
3292 ** the database file. If the size of the database file is not an-
3293 ** integer multiple of the page-size, round up the result.-
3294 */-
3295 if( nPage==0 && ALWAYS(isOpen(pPager->fd)) ){
nPage==0Description
TRUEevaluated 135924 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 57341 times by 38 tests
Evaluated by:
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • Self test (75)
  • Self test (76)
  • ...
(((pPager->fd)->pMethods!=0))Description
TRUEevaluated 135924 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEnever evaluated
0-135924
3296 i64 n = 0; /* Size of db file in bytes */-
3297 int rc = sqlite3OsFileSize(pPager->fd, &n);-
3298 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 58 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 135866 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
58-135866
3299 return rc;
executed 58 times by 1 test: return rc;
Executed by:
  • Self test (438)
58
3300 }-
3301 nPage = (Pgno)((n+pPager->pageSize-1) / pPager->pageSize);-
3302 }
executed 135866 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
135866
3303-
3304 /* If the current number of pages in the file is greater than the-
3305 ** configured maximum pager number, increase the allowed limit so-
3306 ** that the file can be read.-
3307 */-
3308 if( nPage>pPager->mxPgno ){
nPage>pPager->mxPgnoDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
FALSEevaluated 193205 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
2-193205
3309 pPager->mxPgno = (Pgno)nPage;-
3310 }
executed 2 times by 2 tests: end of block
Executed by:
  • Self test (39)
  • Self test (438)
2
3311-
3312 *pnPage = nPage;-
3313 return SQLITE_OK;
executed 193207 times by 435 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
193207
3314}-
3315-
3316#ifndef SQLITE_OMIT_WAL-
3317/*-
3318** Check if the *-wal file that corresponds to the database opened by pPager-
3319** exists if the database is not empy, or verify that the *-wal file does-
3320** not exist (by deleting it) if the database file is empty.-
3321**-
3322** If the database is not empty and the *-wal file exists, open the pager-
3323** in WAL mode. If the database is empty or if no *-wal file exists and-
3324** if no error occurs, make sure Pager.journalMode is not set to-
3325** PAGER_JOURNALMODE_WAL.-
3326**-
3327** Return SQLITE_OK or an error code.-
3328**-
3329** The caller must hold a SHARED lock on the database file to call this-
3330** function. Because an EXCLUSIVE lock on the db file is required to delete -
3331** a WAL on a none-empty database, this ensures there is no race condition -
3332** between the xAccess() below and an xDelete() being executed by some -
3333** other connection.-
3334*/-
3335static int pagerOpenWalIfPresent(Pager *pPager){-
3336 int rc = SQLITE_OK;-
3337 assert( pPager->eState==PAGER_OPEN );-
3338 assert( pPager->eLock>=SHARED_LOCK );-
3339-
3340 if( !pPager->tempFile ){
!pPager->tempFileDescription
TRUEevaluated 132362 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEnever evaluated
0-132362
3341 int isWal; /* True if WAL file exists */-
3342 rc = sqlite3OsAccess(-
3343 pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal-
3344 );-
3345 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 132313 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
49-132313
3346 if( isWal ){
isWalDescription
TRUEevaluated 865 times by 35 tests
Evaluated by:
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (37)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • Self test (75)
  • Self test (76)
  • Self test (78)
  • Self test (79)
  • ...
FALSEevaluated 131448 times by 412 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
865-131448
3347 Pgno nPage; /* Size of the database file */-
3348-
3349 rc = pagerPagecount(pPager, &nPage);-
3350 if( rc ) return rc;
executed 4 times by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 861 times by 35 tests
Evaluated by:
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (37)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • Self test (75)
  • Self test (76)
  • Self test (78)
  • Self test (79)
  • ...
4-861
3351 if( nPage==0 ){
nPage==0Description
TRUEevaluated 155 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 706 times by 35 tests
Evaluated by:
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (37)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • Self test (75)
  • Self test (76)
  • Self test (78)
  • Self test (79)
  • ...
155-706
3352 rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);-
3353 }else{
executed 155 times by 1 test: end of block
Executed by:
  • Self test (438)
155
3354 testcase( sqlite3PcachePagecount(pPager->pPCache)==0 );-
3355 rc = sqlite3PagerOpenWal(pPager, 0);-
3356 }
executed 706 times by 35 tests: end of block
Executed by:
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (37)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • Self test (75)
  • Self test (76)
  • Self test (78)
  • Self test (79)
  • ...
706
3357 }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){
pPager->journalMode==5Description
TRUEevaluated 424 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
FALSEevaluated 131024 times by 412 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
424-131024
3358 pPager->journalMode = PAGER_JOURNALMODE_DELETE;-
3359 }
executed 424 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
424
3360 }
executed 132309 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
132309
3361 }
executed 132358 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
132358
3362 return rc;
executed 132358 times by 435 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
132358
3363}-
3364#endif-
3365-
3366/*-
3367** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback-
3368** the entire master journal file. The case pSavepoint==NULL occurs when -
3369** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction -
3370** savepoint.-
3371**-
3372** When pSavepoint is not NULL (meaning a non-transaction savepoint is -
3373** being rolled back), then the rollback consists of up to three stages,-
3374** performed in the order specified:-
3375**-
3376** * Pages are played back from the main journal starting at byte-
3377** offset PagerSavepoint.iOffset and continuing to -
3378** PagerSavepoint.iHdrOffset, or to the end of the main journal-
3379** file if PagerSavepoint.iHdrOffset is zero.-
3380**-
3381** * If PagerSavepoint.iHdrOffset is not zero, then pages are played-
3382** back starting from the journal header immediately following -
3383** PagerSavepoint.iHdrOffset to the end of the main journal file.-
3384**-
3385** * Pages are then played back from the sub-journal file, starting-
3386** with the PagerSavepoint.iSubRec and continuing to the end of-
3387** the journal file.-
3388**-
3389** Throughout the rollback process, each time a page is rolled back, the-
3390** corresponding bit is set in a bitvec structure (variable pDone in the-
3391** implementation below). This is used to ensure that a page is only-
3392** rolled back the first time it is encountered in either journal.-
3393**-
3394** If pSavepoint is NULL, then pages are only played back from the main-
3395** journal file. There is no need for a bitvec in this case.-
3396**-
3397** In either case, before playback commences the Pager.dbSize variable-
3398** is reset to the value that it held at the start of the savepoint -
3399** (or transaction). No page with a page-number greater than this value-
3400** is played back. If one is encountered it is simply skipped.-
3401*/-
3402static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){-
3403 i64 szJ; /* Effective size of the main journal */-
3404 i64 iHdrOff; /* End of first segment of main-journal records */-
3405 int rc = SQLITE_OK; /* Return code */-
3406 Bitvec *pDone = 0; /* Bitvec to ensure pages played back only once */-
3407-
3408 assert( pPager->eState!=PAGER_ERROR );-
3409 assert( pPager->eState>=PAGER_WRITER_LOCKED );-
3410-
3411 /* Allocate a bitvec to use to store the set of pages rolled back */-
3412 if( pSavepoint ){
pSavepointDescription
TRUEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 142 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
142-1171
3413 pDone = sqlite3BitvecCreate(pSavepoint->nOrig);-
3414 if( !pDone ){
!pDoneDescription
TRUEnever evaluated
FALSEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
0-1171
3415 return SQLITE_NOMEM_BKPT;
never executed: return 7;
0
3416 }-
3417 }
executed 1171 times by 1 test: end of block
Executed by:
  • Self test (438)
1171
3418-
3419 /* Set the database size back to the value it was before the savepoint -
3420 ** being reverted was opened.-
3421 */-
3422 pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize;
pSavepointDescription
TRUEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 142 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
142-1171
3423 pPager->changeCountDone = pPager->tempFile;-
3424-
3425 if( !pSavepoint && pagerUseWal(pPager) ){
!pSavepointDescription
TRUEevaluated 142 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
((pPager)->pWal!=0)Description
TRUEevaluated 102 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
40-1171
3426 return pagerRollbackWal(pPager);
executed 102 times by 3 tests: return pagerRollbackWal(pPager);
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
102
3427 }-
3428-
3429 /* Use pPager->journalOff as the effective size of the main rollback-
3430 ** journal. The actual file might be larger than this in-
3431 ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST. But anything-
3432 ** past pPager->journalOff is off-limits to us.-
3433 */-
3434 szJ = pPager->journalOff;-
3435 assert( pagerUseWal(pPager)==0 || szJ==0 );-
3436-
3437 /* Begin by rolling back records from the main journal starting at-
3438 ** PagerSavepoint.iOffset and continuing to the next journal header.-
3439 ** There might be records in the main journal that have a page number-
3440 ** greater than the current database size (pPager->dbSize) but those-
3441 ** will be skipped automatically. Pages are added to pDone as they-
3442 ** are played back.-
3443 */-
3444 if( pSavepoint && !pagerUseWal(pPager) ){
pSavepointDescription
TRUEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
!((pPager)->pWal!=0)Description
TRUEevaluated 1058 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 113 times by 1 test
Evaluated by:
  • Self test (438)
40-1171
3445 iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ;
pSavepoint->iHdrOffsetDescription
TRUEevaluated 71 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 987 times by 1 test
Evaluated by:
  • Self test (438)
71-987
3446 pPager->journalOff = pSavepoint->iOffset;-
3447 while( rc==SQLITE_OK && pPager->journalOff<iHdrOff ){
rc==0Description
TRUEevaluated 2966 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
pPager->journalOff<iHdrOffDescription
TRUEevaluated 1908 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1058 times by 1 test
Evaluated by:
  • Self test (438)
0-2966
3448 rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);-
3449 }
executed 1908 times by 1 test: end of block
Executed by:
  • Self test (438)
1908
3450 assert( rc!=SQLITE_DONE );-
3451 }else{
executed 1058 times by 1 test: end of block
Executed by:
  • Self test (438)
1058
3452 pPager->journalOff = 0;-
3453 }
executed 153 times by 1 test: end of block
Executed by:
  • Self test (438)
153
3454-
3455 /* Continue rolling back records out of the main journal starting at-
3456 ** the first journal header seen and continuing until the effective end-
3457 ** of the main journal file. Continue to skip out-of-range pages and-
3458 ** continue adding pages rolled back to pDone.-
3459 */-
3460 while( rc==SQLITE_OK && pPager->journalOff<szJ ){
rc==0Description
TRUEevaluated 6213 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
pPager->journalOff<szJDescription
TRUEevaluated 5002 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1211 times by 1 test
Evaluated by:
  • Self test (438)
0-6213
3461 u32 ii; /* Loop counter */-
3462 u32 nJRec = 0; /* Number of Journal Records */-
3463 u32 dummy;-
3464 rc = readJournalHdr(pPager, 0, szJ, &nJRec, &dummy);-
3465 assert( rc!=SQLITE_DONE );-
3466-
3467 /*-
3468 ** The "pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff"-
3469 ** test is related to ticket #2565. See the discussion in the-
3470 ** pager_playback() function for additional information.-
3471 */-
3472 if( nJRec==0
nJRec==0Description
TRUEevaluated 109 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4893 times by 1 test
Evaluated by:
  • Self test (438)
109-4893
3473 && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff
pPager->journa...er->journalOffDescription
TRUEevaluated 109 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-109
3474 ){-
3475 nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager));-
3476 }
executed 109 times by 1 test: end of block
Executed by:
  • Self test (438)
109
3477 for(ii=0; rc==SQLITE_OK && ii<nJRec && pPager->journalOff<szJ; ii++){
rc==0Description
TRUEevaluated 26759 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
ii<nJRecDescription
TRUEevaluated 21759 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5000 times by 1 test
Evaluated by:
  • Self test (438)
pPager->journalOff<szJDescription
TRUEevaluated 21757 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
0-26759
3478 rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);-
3479 }
executed 21757 times by 1 test: end of block
Executed by:
  • Self test (438)
21757
3480 assert( rc!=SQLITE_DONE );-
3481 }
executed 5002 times by 1 test: end of block
Executed by:
  • Self test (438)
5002
3482 assert( rc!=SQLITE_OK || pPager->journalOff>=szJ );-
3483-
3484 /* Finally, rollback pages from the sub-journal. Page that were-
3485 ** previously rolled back out of the main journal (and are hence in pDone)-
3486 ** will be skipped. Out-of-range pages are also skipped.-
3487 */-
3488 if( pSavepoint ){
pSavepointDescription
TRUEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
40-1171
3489 u32 ii; /* Loop counter */-
3490 i64 offset = (i64)pSavepoint->iSubRec*(4+pPager->pageSize);-
3491-
3492 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 113 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1058 times by 1 test
Evaluated by:
  • Self test (438)
113-1058
3493 rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData);-
3494 }
executed 113 times by 1 test: end of block
Executed by:
  • Self test (438)
113
3495 for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && ii<pPager->nSubRec; ii++){
rc==0Description
TRUEevaluated 230141 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
ii<pPager->nSubRecDescription
TRUEevaluated 228970 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
0-230141
3496 assert( offset==(i64)ii*(4+pPager->pageSize) );-
3497 rc = pager_playback_one_page(pPager, &offset, pDone, 0, 1);-
3498 }
executed 228970 times by 1 test: end of block
Executed by:
  • Self test (438)
228970
3499 assert( rc!=SQLITE_DONE );-
3500 }
executed 1171 times by 1 test: end of block
Executed by:
  • Self test (438)
1171
3501-
3502 sqlite3BitvecDestroy(pDone);-
3503 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1211 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1211
3504 pPager->journalOff = szJ;-
3505 }
executed 1211 times by 1 test: end of block
Executed by:
  • Self test (438)
1211
3506-
3507 return rc;
executed 1211 times by 1 test: return rc;
Executed by:
  • Self test (438)
1211
3508}-
3509-
3510/*-
3511** Change the maximum number of in-memory pages that are allowed-
3512** before attempting to recycle clean and unused pages.-
3513*/-
3514void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){-
3515 sqlite3PcacheSetCachesize(pPager->pPCache, mxPage);-
3516}
executed 116524 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
116524
3517-
3518/*-
3519** Change the maximum number of in-memory pages that are allowed-
3520** before attempting to spill pages to journal.-
3521*/-
3522int sqlite3PagerSetSpillsize(Pager *pPager, int mxPage){-
3523 return sqlite3PcacheSetSpillsize(pPager->pPCache, mxPage);
executed 1752 times by 2 tests: return sqlite3PcacheSetSpillsize(pPager->pPCache, mxPage);
Executed by:
  • Self test (34)
  • Self test (438)
1752
3524}-
3525-
3526/*-
3527** Invoke SQLITE_FCNTL_MMAP_SIZE based on the current value of szMmap.-
3528*/-
3529static void pagerFixMaplimit(Pager *pPager){-
3530#if SQLITE_MAX_MMAP_SIZE>0-
3531 sqlite3_file *fd = pPager->fd;-
3532 if( isOpen(fd) && fd->pMethods->iVersion>=3 ){
((fd)->pMethods!=0)Description
TRUEevaluated 103412 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 196458 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
fd->pMethods->iVersion>=3Description
TRUEevaluated 98036 times by 74 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
FALSEevaluated 5376 times by 366 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
5376-196458
3533 sqlite3_int64 sz;-
3534 sz = pPager->szMmap;-
3535 pPager->bUseFetch = (sz>0);-
3536 setGetterMethod(pPager);-
3537 sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_MMAP_SIZE, &sz);-
3538 }
executed 98036 times by 74 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
98036
3539#endif-
3540}
executed 299870 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
299870
3541-
3542/*-
3543** Change the maximum size of any memory mapping made of the database file.-
3544*/-
3545void sqlite3PagerSetMmapLimit(Pager *pPager, sqlite3_int64 szMmap){-
3546 pPager->szMmap = szMmap;-
3547 pagerFixMaplimit(pPager);-
3548}
executed 95928 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
95928
3549-
3550/*-
3551** Free as much memory as possible from the pager.-
3552*/-
3553void sqlite3PagerShrink(Pager *pPager){-
3554 sqlite3PcacheShrink(pPager->pPCache);-
3555}
executed 6 times by 1 test: end of block
Executed by:
  • Self test (438)
6
3556-
3557/*-
3558** Adjust settings of the pager to those specified in the pgFlags parameter.-
3559**-
3560** The "level" in pgFlags & PAGER_SYNCHRONOUS_MASK sets the robustness-
3561** of the database to damage due to OS crashes or power failures by-
3562** changing the number of syncs()s when writing the journals.-
3563** There are four levels:-
3564**-
3565** OFF sqlite3OsSync() is never called. This is the default-
3566** for temporary and transient files.-
3567**-
3568** NORMAL The journal is synced once before writes begin on the-
3569** database. This is normally adequate protection, but-
3570** it is theoretically possible, though very unlikely,-
3571** that an inopertune power failure could leave the journal-
3572** in a state which would cause damage to the database-
3573** when it is rolled back.-
3574**-
3575** FULL The journal is synced twice before writes begin on the-
3576** database (with some additional information - the nRec field-
3577** of the journal header - being written in between the two-
3578** syncs). If we assume that writing a-
3579** single disk sector is atomic, then this mode provides-
3580** assurance that the journal will not be corrupted to the-
3581** point of causing damage to the database during rollback.-
3582**-
3583** EXTRA This is like FULL except that is also syncs the directory-
3584** that contains the rollback journal after the rollback-
3585** journal is unlinked.-
3586**-
3587** The above is for a rollback-journal mode. For WAL mode, OFF continues-
3588** to mean that no syncs ever occur. NORMAL means that the WAL is synced-
3589** prior to the start of checkpoint and that the database file is synced-
3590** at the conclusion of the checkpoint if the entire content of the WAL-
3591** was written back into the database. But no sync operations occur for-
3592** an ordinary commit in NORMAL mode with WAL. FULL means that the WAL-
3593** file is synced following each commit operation, in addition to the-
3594** syncs associated with NORMAL. There is no difference between FULL-
3595** and EXTRA for WAL mode.-
3596**-
3597** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL. The-
3598** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync-
3599** using fcntl(F_FULLFSYNC). SQLITE_SYNC_NORMAL means to do an-
3600** ordinary fsync() call. There is no difference between SQLITE_SYNC_FULL-
3601** and SQLITE_SYNC_NORMAL on platforms other than MacOSX. But the-
3602** synchronous=FULL versus synchronous=NORMAL setting determines when-
3603** the xSync primitive is called and is relevant to all platforms.-
3604**-
3605** Numeric values associated with these states are OFF==1, NORMAL=2,-
3606** and FULL=3.-
3607*/-
3608#ifndef SQLITE_OMIT_PAGER_PRAGMAS-
3609void sqlite3PagerSetFlags(-
3610 Pager *pPager, /* The pager to set safety level for */-
3611 unsigned pgFlags /* Various flags */-
3612){-
3613 unsigned level = pgFlags & PAGER_SYNCHRONOUS_MASK;-
3614 if( pPager->tempFile ){
pPager->tempFileDescription
TRUEevaluated 2124 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 2014 times by 21 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
2014-2124
3615 pPager->noSync = 1;-
3616 pPager->fullSync = 0;-
3617 pPager->extraSync = 0;-
3618 }else{
executed 2124 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
2124
3619 pPager->noSync = level==PAGER_SYNCHRONOUS_OFF ?1:0;
level==0x01Description
TRUEevaluated 41 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1973 times by 21 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
41-1973
3620 pPager->fullSync = level>=PAGER_SYNCHRONOUS_FULL ?1:0;
level>=0x03Description
TRUEevaluated 1840 times by 21 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
FALSEevaluated 174 times by 1 test
Evaluated by:
  • Self test (438)
174-1840
3621 pPager->extraSync = level==PAGER_SYNCHRONOUS_EXTRA ?1:0;
level==0x04Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2012 times by 21 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
2-2012
3622 }
executed 2014 times by 21 tests: end of block
Executed by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
2014
3623 if( pPager->noSync ){
pPager->noSyncDescription
TRUEevaluated 2165 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 1973 times by 21 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
1973-2165
3624 pPager->syncFlags = 0;-
3625 }else if( pgFlags & PAGER_FULLFSYNC ){
executed 2165 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
pgFlags & 0x08Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1941 times by 21 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
32-2165
3626 pPager->syncFlags = SQLITE_SYNC_FULL;-
3627 }else{
executed 32 times by 1 test: end of block
Executed by:
  • Self test (438)
32
3628 pPager->syncFlags = SQLITE_SYNC_NORMAL;-
3629 }
executed 1941 times by 21 tests: end of block
Executed by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
1941
3630 pPager->walSyncFlags = (pPager->syncFlags<<2);-
3631 if( pPager->fullSync ){
pPager->fullSyncDescription
TRUEevaluated 1840 times by 21 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
FALSEevaluated 2298 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1840-2298
3632 pPager->walSyncFlags |= pPager->syncFlags;-
3633 }
executed 1840 times by 21 tests: end of block
Executed by:
  • Self test (100)
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
1840
3634 if( (pgFlags & PAGER_CKPT_FULLFSYNC) && !pPager->noSync ){
(pgFlags & 0x10)Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4116 times by 22 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (34)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
!pPager->noSyncDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-4116
3635 pPager->walSyncFlags |= (SQLITE_SYNC_FULL<<2);-
3636 }
executed 20 times by 1 test: end of block
Executed by:
  • Self test (438)
20
3637 if( pgFlags & PAGER_CACHESPILL ){
pgFlags & 0x20Description
TRUEevaluated 4128 times by 22 tests
Evaluated by:
  • Self test (100)
  • Self test (27)
  • Self test (34)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
10-4128
3638 pPager->doNotSpill &= ~SPILLFLAG_OFF;-
3639 }else{
executed 4128 times by 22 tests: end of block
Executed by:
  • Self test (100)
  • Self test (27)
  • Self test (34)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
4128
3640 pPager->doNotSpill |= SPILLFLAG_OFF;-
3641 }
executed 10 times by 1 test: end of block
Executed by:
  • Self test (438)
10
3642}-
3643#endif-
3644-
3645/*-
3646** The following global variable is incremented whenever the library-
3647** attempts to open a temporary file. This information is used for-
3648** testing and analysis only. -
3649*/-
3650#ifdef SQLITE_TEST-
3651int sqlite3_opentemp_count = 0;-
3652#endif-
3653-
3654/*-
3655** Open a temporary file.-
3656**-
3657** Write the file descriptor into *pFile. Return SQLITE_OK on success -
3658** or some other error code if we fail. The OS will automatically -
3659** delete the temporary file when it is closed.-
3660**-
3661** The flags passed to the VFS layer xOpen() call are those specified-
3662** by parameter vfsFlags ORed with the following:-
3663**-
3664** SQLITE_OPEN_READWRITE-
3665** SQLITE_OPEN_CREATE-
3666** SQLITE_OPEN_EXCLUSIVE-
3667** SQLITE_OPEN_DELETEONCLOSE-
3668*/-
3669static int pagerOpentemp(-
3670 Pager *pPager, /* The pager object */-
3671 sqlite3_file *pFile, /* Write the file descriptor here */-
3672 int vfsFlags /* Flags passed through to the VFS */-
3673){-
3674 int rc; /* Return code */-
3675-
3676#ifdef SQLITE_TEST-
3677 sqlite3_opentemp_count++; /* Used for testing and analysis only */-
3678#endif-
3679-
3680 vfsFlags |= SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |-
3681 SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE;-
3682 rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0);-
3683 assert( rc!=SQLITE_OK || isOpen(pFile) );-
3684 return rc;
executed 31 times by 2 tests: return rc;
Executed by:
  • Self test (438)
  • Self test (64)
31
3685}-
3686-
3687/*-
3688** Set the busy handler function.-
3689**-
3690** The pager invokes the busy-handler if sqlite3OsLock() returns -
3691** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock,-
3692** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE -
3693** lock. It does *not* invoke the busy handler when upgrading from-
3694** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE-
3695** (which occurs during hot-journal rollback). Summary:-
3696**-
3697** Transition | Invokes xBusyHandler-
3698** ---------------------------------------------------------
3699** NO_LOCK -> SHARED_LOCK | Yes-
3700** SHARED_LOCK -> RESERVED_LOCK | No-
3701** SHARED_LOCK -> EXCLUSIVE_LOCK | No-
3702** RESERVED_LOCK -> EXCLUSIVE_LOCK | Yes-
3703**-
3704** If the busy-handler callback returns non-zero, the lock is -
3705** retried. If it returns zero, then the SQLITE_BUSY error is-
3706** returned to the caller of the pager API function.-
3707*/-
3708void sqlite3PagerSetBusyHandler(-
3709 Pager *pPager, /* Pager object */-
3710 int (*xBusyHandler)(void *), /* Pointer to busy-handler function */-
3711 void *pBusyHandlerArg /* Argument to pass to xBusyHandler */-
3712){-
3713 void **ap;-
3714 pPager->xBusyHandler = xBusyHandler;-
3715 pPager->pBusyHandlerArg = pBusyHandlerArg;-
3716 ap = (void **)&pPager->xBusyHandler;-
3717 assert( ((int(*)(void *))(ap[0]))==xBusyHandler );-
3718 assert( ap[1]==pBusyHandlerArg );-
3719 sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_BUSYHANDLER, (void *)ap);-
3720}
executed 95643 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
95643
3721-
3722/*-
3723** Change the page size used by the Pager object. The new page size -
3724** is passed in *pPageSize.-
3725**-
3726** If the pager is in the error state when this function is called, it-
3727** is a no-op. The value returned is the error state error code (i.e. -
3728** one of SQLITE_IOERR, an SQLITE_IOERR_xxx sub-code or SQLITE_FULL).-
3729**-
3730** Otherwise, if all of the following are true:-
3731**-
3732** * the new page size (value of *pPageSize) is valid (a power -
3733** of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and-
3734**-
3735** * there are no outstanding page references, and-
3736**-
3737** * the database is either not an in-memory database or it is-
3738** an in-memory database that currently consists of zero pages.-
3739**-
3740** then the pager object page size is set to *pPageSize.-
3741**-
3742** If the page size is changed, then this function uses sqlite3PagerMalloc() -
3743** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt -
3744** fails, SQLITE_NOMEM is returned and the page size remains unchanged. -
3745** In all other cases, SQLITE_OK is returned.-
3746**-
3747** If the page size is not changed, either because one of the enumerated-
3748** conditions above is not true, the pager was in error state when this-
3749** function was called, or because the memory allocation attempt failed, -
3750** then *pPageSize is set to the old, retained page size before returning.-
3751*/-
3752int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){-
3753 int rc = SQLITE_OK;-
3754-
3755 /* It is not possible to do a full assert_pager_state() here, as this-
3756 ** function may be called from within PagerOpen(), before the state-
3757 ** of the Pager object is internally consistent.-
3758 **-
3759 ** At one point this function returned an error if the pager was in -
3760 ** PAGER_ERROR state. But since PAGER_ERROR state guarantees that-
3761 ** there is at least one outstanding page reference, this function-
3762 ** is a no-op for that case anyhow.-
3763 */-
3764-
3765 u32 pageSize = *pPageSize;-
3766 assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) );-
3767 if( (pPager->memDb==0 || pPager->dbSize==0)
pPager->memDb==0Description
TRUEevaluated 202167 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 375 times by 1 test
Evaluated by:
  • Self test (438)
pPager->dbSize==0Description
TRUEevaluated 306 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 69 times by 1 test
Evaluated by:
  • Self test (438)
69-202167
3768 && sqlite3PcacheRefCount(pPager->pPCache)==0
sqlite3PcacheR...r->pPCache)==0Description
TRUEevaluated 196830 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 5643 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
5643-196830
3769 && pageSize && pageSize!=(u32)pPager->pageSize
pageSizeDescription
TRUEevaluated 127001 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 69829 times by 65 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • Self test (438)
  • Self test (44)
  • ...
pageSize!=(u32...ager->pageSizeDescription
TRUEevaluated 96105 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 30896 times by 368 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
30896-127001
3770 ){-
3771 char *pNew = NULL; /* New temp space */-
3772 i64 nByte = 0;-
3773-
3774 if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){
pPager->eState>0Description
TRUEevaluated 63655 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
FALSEevaluated 32450 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
((pPager->fd)->pMethods!=0)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 63649 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
6-63655
3775 rc = sqlite3OsFileSize(pPager->fd, &nByte);-
3776 }
executed 6 times by 1 test: end of block
Executed by:
  • Self test (438)
6
3777 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 96105 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEnever evaluated
0-96105
3778 pNew = (char *)sqlite3PageMalloc(pageSize);-
3779 if( !pNew ) rc = SQLITE_NOMEM_BKPT;
executed 14 times by 1 test: rc = 7;
Executed by:
  • Self test (438)
!pNewDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96091 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
14-96091
3780 }
executed 96105 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
96105
3781-
3782 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 96091 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
14-96091
3783 pager_reset(pPager);-
3784 rc = sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);-
3785 }
executed 96091 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
96091
3786 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 96091 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
14-96091
3787 sqlite3PageFree(pPager->pTmpSpace);-
3788 pPager->pTmpSpace = pNew;-
3789 pPager->dbSize = (Pgno)((nByte+pageSize-1)/pageSize);-
3790 pPager->pageSize = pageSize;-
3791 }else{
executed 96091 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
96091
3792 sqlite3PageFree(pNew);-
3793 }
executed 14 times by 1 test: end of block
Executed by:
  • Self test (438)
14
3794 }-
3795-
3796 *pPageSize = pPager->pageSize;-
3797 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 202528 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
14-202528
3798 if( nReserve<0 ) nReserve = pPager->nReserve;
executed 102176 times by 438 tests: nReserve = pPager->nReserve;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
nReserve<0Description
TRUEevaluated 102176 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 100352 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
100352-102176
3799 assert( nReserve>=0 && nReserve<1000 );-
3800 pPager->nReserve = (i16)nReserve;-
3801 pagerReportSize(pPager);-
3802 pagerFixMaplimit(pPager);-
3803 }
executed 202528 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
202528
3804 return rc;
executed 202542 times by 438 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
202542
3805}-
3806-
3807/*-
3808** Return a pointer to the "temporary page" buffer held internally-
3809** by the pager. This is a buffer that is big enough to hold the-
3810** entire content of a database page. This buffer is used internally-
3811** during rollback and will be overwritten whenever a rollback-
3812** occurs. But other modules are free to use it too, as long as-
3813** no rollbacks are happening.-
3814*/-
3815void *sqlite3PagerTempSpace(Pager *pPager){-
3816 return pPager->pTmpSpace;
executed 458185 times by 23 tests: return pPager->pTmpSpace;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
458185
3817}-
3818-
3819/*-
3820** Attempt to set the maximum database page count if mxPage is positive. -
3821** Make no changes if mxPage is zero or negative. And never reduce the-
3822** maximum page count below the current size of the database.-
3823**-
3824** Regardless of mxPage, return the current maximum page count.-
3825*/-
3826int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){-
3827 if( mxPage>0 ){
mxPage>0Description
TRUEevaluated 10 times by 2 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-10
3828 pPager->mxPgno = mxPage;-
3829 }
executed 10 times by 2 tests: end of block
Executed by:
  • Self test (39)
  • Self test (438)
10
3830 assert( pPager->eState!=PAGER_OPEN ); /* Called only by OP_MaxPgcnt */-
3831 assert( pPager->mxPgno>=pPager->dbSize ); /* OP_MaxPgcnt enforces this */-
3832 return pPager->mxPgno;
executed 12 times by 2 tests: return pPager->mxPgno;
Executed by:
  • Self test (39)
  • Self test (438)
12
3833}-
3834-
3835/*-
3836** The following set of routines are used to disable the simulated-
3837** I/O error mechanism. These routines are used to avoid simulated-
3838** errors in places where we do not care about errors.-
3839**-
3840** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops-
3841** and generate no code.-
3842*/-
3843#ifdef SQLITE_TEST-
3844extern int sqlite3_io_error_pending;-
3845extern int sqlite3_io_error_hit;-
3846static int saved_cnt;-
3847void disable_simulated_io_errors(void){-
3848 saved_cnt = sqlite3_io_error_pending;-
3849 sqlite3_io_error_pending = -1;-
3850}
executed 95345 times by 67 tests: end of block
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
95345
3851void enable_simulated_io_errors(void){-
3852 sqlite3_io_error_pending = saved_cnt;-
3853}
executed 95345 times by 67 tests: end of block
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
95345
3854#else-
3855# define disable_simulated_io_errors()-
3856# define enable_simulated_io_errors()-
3857#endif-
3858-
3859/*-
3860** Read the first N bytes from the beginning of the file into memory-
3861** that pDest points to. -
3862**-
3863** If the pager was opened on a transient file (zFilename==""), or-
3864** opened on a file less than N bytes in size, the output buffer is-
3865** zeroed and SQLITE_OK returned. The rationale for this is that this -
3866** function is used to read database headers, and a new transient or-
3867** zero sized database has a header than consists entirely of zeroes.-
3868**-
3869** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered,-
3870** the error code is returned to the caller and the contents of the-
3871** output buffer undefined.-
3872*/-
3873int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){-
3874 int rc = SQLITE_OK;-
3875 memset(pDest, 0, N);-
3876 assert( isOpen(pPager->fd) || pPager->tempFile );-
3877-
3878 /* This routine is only called by btree immediately after creating-
3879 ** the Pager object. There has not been an opportunity to transition-
3880 ** to WAL mode yet.-
3881 */-
3882 assert( !pagerUseWal(pPager) );-
3883-
3884 if( isOpen(pPager->fd) ){
((pPager->fd)->pMethods!=0)Description
TRUEevaluated 32082 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 63578 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
32082-63578
3885 IOTRACE(("DBHDR %p 0 %d\n", pPager, N))-
3886 rc = sqlite3OsRead(pPager->fd, pDest, N, 0);-
3887 if( rc==SQLITE_IOERR_SHORT_READ ){
rc==(10 | (2<<8))Description
TRUEevaluated 6248 times by 64 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • Self test (438)
  • Self test (44)
  • ...
FALSEevaluated 25834 times by 387 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
6248-25834
3888 rc = SQLITE_OK;-
3889 }
executed 6248 times by 64 tests: end of block
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • Self test (438)
  • Self test (44)
  • ...
6248
3890 }
executed 32082 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32082
3891 return rc;
executed 95660 times by 438 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
95660
3892}-
3893-
3894/*-
3895** This function may only be called when a read-transaction is open on-
3896** the pager. It returns the total number of pages in the database.-
3897**-
3898** However, if the file is between 1 and <page-size> bytes in size, then -
3899** this is considered a 1 page file.-
3900*/-
3901void sqlite3PagerPagecount(Pager *pPager, int *pnPage){-
3902 assert( pPager->eState>=PAGER_READER );-
3903 assert( pPager->eState!=PAGER_WRITER_FINISHED );-
3904 *pnPage = (int)pPager->dbSize;-
3905}
executed 262887 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
262887
3906-
3907-
3908/*-
3909** Try to obtain a lock of type locktype on the database file. If-
3910** a similar or greater lock is already held, this function is a no-op-
3911** (returning SQLITE_OK immediately).-
3912**-
3913** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke -
3914** the busy callback if the lock is currently not available. Repeat -
3915** until the busy callback returns false or until the attempt to -
3916** obtain the lock succeeds.-
3917**-
3918** Return SQLITE_OK on success and an error code if we cannot obtain-
3919** the lock. If the lock is obtained successfully, set the Pager.state -
3920** variable to locktype before returning.-
3921*/-
3922static int pager_wait_on_lock(Pager *pPager, int locktype){-
3923 int rc; /* Return code */-
3924-
3925 /* Check that this is either a no-op (because the requested lock is -
3926 ** already held), or one of the transitions that the busy-handler-
3927 ** may be invoked during, according to the comment above-
3928 ** sqlite3PagerSetBusyhandler().-
3929 */-
3930 assert( (pPager->eLock>=locktype)-
3931 || (pPager->eLock==NO_LOCK && locktype==SHARED_LOCK)-
3932 || (pPager->eLock==RESERVED_LOCK && locktype==EXCLUSIVE_LOCK)-
3933 );-
3934-
3935 do {-
3936 rc = pagerLockDb(pPager, locktype);-
3937 }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) );
executed 251634 times by 436 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
rc==5Description
TRUEevaluated 2924 times by 9 tests
Evaluated by:
  • Self test (30)
  • Self test (31)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (438)
  • Self test (55)
  • Self test (59)
  • Self test (61)
FALSEevaluated 248710 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
pPager->xBusyH...usyHandlerArg)Description
TRUEevaluated 1026 times by 2 tests
Evaluated by:
  • Self test (31)
  • Self test (438)
FALSEevaluated 1898 times by 8 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (438)
  • Self test (55)
  • Self test (59)
  • Self test (61)
1026-251634
3938 return rc;
executed 250608 times by 436 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
250608
3939}-
3940-
3941/*-
3942** Function assertTruncateConstraint(pPager) checks that one of the -
3943** following is true for all dirty pages currently in the page-cache:-
3944**-
3945** a) The page number is less than or equal to the size of the -
3946** current database image, in pages, OR-
3947**-
3948** b) if the page content were written at this time, it would not-
3949** be necessary to write the current content out to the sub-journal-
3950** (as determined by function subjRequiresPage()).-
3951**-
3952** If the condition asserted by this function were not true, and the-
3953** dirty page were to be discarded from the cache via the pagerStress()-
3954** routine, pagerStress() would not write the current page content to-
3955** the database file. If a savepoint transaction were rolled back after-
3956** this happened, the correct behavior would be to restore the current-
3957** content of the page. However, since this content is not present in either-
3958** the database file or the portion of the rollback journal and -
3959** sub-journal rolled back the content could not be restored and the-
3960** database image would become corrupt. It is therefore fortunate that -
3961** this circumstance cannot arise.-
3962*/-
3963#if defined(SQLITE_DEBUG)-
3964static void assertTruncateConstraintCb(PgHdr *pPg){-
3965 assert( pPg->flags&PGHDR_DIRTY );-
3966 assert( !subjRequiresPage(pPg) || pPg->pgno<=pPg->pPager->dbSize );-
3967}-
3968static void assertTruncateConstraint(Pager *pPager){-
3969 sqlite3PcacheIterateDirty(pPager->pPCache, assertTruncateConstraintCb);-
3970}-
3971#else-
3972# define assertTruncateConstraint(pPager)-
3973#endif-
3974-
3975/*-
3976** Truncate the in-memory database file image to nPage pages. This -
3977** function does not actually modify the database file on disk. It -
3978** just sets the internal state of the pager object so that the -
3979** truncation will be done when the current transaction is committed.-
3980**-
3981** This function is only called right before committing a transaction.-
3982** Once this function has been called, the transaction must either be-
3983** rolled back or committed. It is not safe to call this function and-
3984** then continue writing to the database.-
3985*/-
3986void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){-
3987 assert( pPager->dbSize>=nPage );-
3988 assert( pPager->eState>=PAGER_WRITER_CACHEMOD );-
3989 pPager->dbSize = nPage;-
3990-
3991 /* At one point the code here called assertTruncateConstraint() to-
3992 ** ensure that all pages being truncated away by this operation are,-
3993 ** if one or more savepoints are open, present in the savepoint -
3994 ** journal so that they can be restored if the savepoint is rolled-
3995 ** back. This is no longer necessary as this function is now only-
3996 ** called right before committing a transaction. So although the -
3997 ** Pager object may still have open savepoints (Pager.nSavepoint!=0), -
3998 ** they cannot be rolled back. So the assertTruncateConstraint() call-
3999 ** is no longer correct. */-
4000}
executed 5336 times by 4 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
5336
4001-
4002-
4003/*-
4004** This function is called before attempting a hot-journal rollback. It-
4005** syncs the journal file to disk, then sets pPager->journalHdr to the-
4006** size of the journal file so that the pager_playback() routine knows-
4007** that the entire journal file has been synced.-
4008**-
4009** Syncing a hot-journal to disk before attempting to roll it back ensures -
4010** that if a power-failure occurs during the rollback, the process that-
4011** attempts rollback following system recovery sees the same journal-
4012** content as this process.-
4013**-
4014** If everything goes as planned, SQLITE_OK is returned. Otherwise, -
4015** an SQLite error code.-
4016*/-
4017static int pagerSyncHotJournal(Pager *pPager){-
4018 int rc = SQLITE_OK;-
4019 if( !pPager->noSync ){
!pPager->noSyncDescription
TRUEevaluated 427 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
14-427
4020 rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_NORMAL);-
4021 }
executed 427 times by 1 test: end of block
Executed by:
  • Self test (438)
427
4022 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 441 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-441
4023 rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr);-
4024 }
executed 441 times by 1 test: end of block
Executed by:
  • Self test (438)
441
4025 return rc;
executed 441 times by 1 test: return rc;
Executed by:
  • Self test (438)
441
4026}-
4027-
4028#if SQLITE_MAX_MMAP_SIZE>0-
4029/*-
4030** Obtain a reference to a memory mapped page object for page number pgno. -
4031** The new object will use the pointer pData, obtained from xFetch().-
4032** If successful, set *ppPage to point to the new page reference-
4033** and return SQLITE_OK. Otherwise, return an SQLite error code and set-
4034** *ppPage to zero.-
4035**-
4036** Page references obtained by calling this function should be released-
4037** by calling pagerReleaseMapPage().-
4038*/-
4039static int pagerAcquireMapPage(-
4040 Pager *pPager, /* Pager object */-
4041 Pgno pgno, /* Page number */-
4042 void *pData, /* xFetch()'d data for this page */-
4043 PgHdr **ppPage /* OUT: Acquired page object */-
4044){-
4045 PgHdr *p; /* Memory mapped page to return */-
4046 -
4047 if( pPager->pMmapFreelist ){
pPager->pMmapFreelistDescription
TRUEevaluated 57103 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 207 times by 1 test
Evaluated by:
  • Self test (438)
207-57103
4048 *ppPage = p = pPager->pMmapFreelist;-
4049 pPager->pMmapFreelist = p->pDirty;-
4050 p->pDirty = 0;-
4051 assert( pPager->nExtra>=8 );-
4052 memset(p->pExtra, 0, 8);-
4053 }else{
executed 57103 times by 1 test: end of block
Executed by:
  • Self test (438)
57103
4054 *ppPage = p = (PgHdr *)sqlite3MallocZero(sizeof(PgHdr) + pPager->nExtra);-
4055 if( p==0 ){
p==0Description
TRUEnever evaluated
FALSEevaluated 207 times by 1 test
Evaluated by:
  • Self test (438)
0-207
4056 sqlite3OsUnfetch(pPager->fd, (i64)(pgno-1) * pPager->pageSize, pData);-
4057 return SQLITE_NOMEM_BKPT;
never executed: return 7;
0
4058 }-
4059 p->pExtra = (void *)&p[1];-
4060 p->flags = PGHDR_MMAP;-
4061 p->nRef = 1;-
4062 p->pPager = pPager;-
4063 }
executed 207 times by 1 test: end of block
Executed by:
  • Self test (438)
207
4064-
4065 assert( p->pExtra==(void *)&p[1] );-
4066 assert( p->pPage==0 );-
4067 assert( p->flags==PGHDR_MMAP );-
4068 assert( p->pPager==pPager );-
4069 assert( p->nRef==1 );-
4070-
4071 p->pgno = pgno;-
4072 p->pData = pData;-
4073 pPager->nMmapOut++;-
4074-
4075 return SQLITE_OK;
executed 57310 times by 1 test: return 0;
Executed by:
  • Self test (438)
57310
4076}-
4077#endif-
4078-
4079/*-
4080** Release a reference to page pPg. pPg must have been returned by an -
4081** earlier call to pagerAcquireMapPage().-
4082*/-
4083static void pagerReleaseMapPage(PgHdr *pPg){-
4084 Pager *pPager = pPg->pPager;-
4085 pPager->nMmapOut--;-
4086 pPg->pDirty = pPager->pMmapFreelist;-
4087 pPager->pMmapFreelist = pPg;-
4088-
4089 assert( pPager->fd->pMethods->iVersion>=3 );-
4090 sqlite3OsUnfetch(pPager->fd, (i64)(pPg->pgno-1)*pPager->pageSize, pPg->pData);-
4091}
executed 57310 times by 1 test: end of block
Executed by:
  • Self test (438)
57310
4092-
4093/*-
4094** Free all PgHdr objects stored in the Pager.pMmapFreelist list.-
4095*/-
4096static void pagerFreeMapHdrs(Pager *pPager){-
4097 PgHdr *p;-
4098 PgHdr *pNext;-
4099 for(p=pPager->pMmapFreelist; p; p=pNext){
pDescription
TRUEevaluated 207 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95285 times by 67 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
207-95285
4100 pNext = p->pDirty;-
4101 sqlite3_free(p);-
4102 }
executed 207 times by 1 test: end of block
Executed by:
  • Self test (438)
207
4103}
executed 95285 times by 67 tests: end of block
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
95285
4104-
4105/* Verify that the database file has not be deleted or renamed out from-
4106** under the pager. Return SQLITE_OK if the database is still where it ought-
4107** to be on disk. Return non-zero (SQLITE_READONLY_DBMOVED or some other error-
4108** code from sqlite3OsAccess()) if the database has gone missing.-
4109*/-
4110static int databaseIsUnmoved(Pager *pPager){-
4111 int bHasMoved = 0;-
4112 int rc;-
4113-
4114 if( pPager->tempFile ) return SQLITE_OK;
executed 67328 times by 17 tests: return 0;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
pPager->tempFileDescription
TRUEevaluated 67328 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
FALSEevaluated 72053 times by 426 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
67328-72053
4115 if( pPager->dbSize==0 ) return SQLITE_OK;
executed 16972 times by 22 tests: return 0;
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (61)
  • Self test (75)
  • Self test (76)
  • Self test (77)
  • Self test (84)
  • Self test (89)
pPager->dbSize==0Description
TRUEevaluated 16972 times by 22 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (61)
  • Self test (75)
  • Self test (76)
  • Self test (77)
  • Self test (84)
  • Self test (89)
FALSEevaluated 55081 times by 422 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
16972-55081
4116 assert( pPager->zFilename && pPager->zFilename[0] );-
4117 rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_HAS_MOVED, &bHasMoved);-
4118 if( rc==SQLITE_NOTFOUND ){
rc==12Description
TRUEnever evaluated
FALSEevaluated 55081 times by 422 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
0-55081
4119 /* If the HAS_MOVED file-control is unimplemented, assume that the file-
4120 ** has not been moved. That is the historical behavior of SQLite: prior to-
4121 ** version 3.8.3, it never checked */-
4122 rc = SQLITE_OK;-
4123 }else if( rc==SQLITE_OK && bHasMoved ){
never executed: end of block
rc==0Description
TRUEevaluated 55073 times by 422 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
bHasMovedDescription
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 55056 times by 422 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
0-55073
4124 rc = SQLITE_READONLY_DBMOVED;-
4125 }
executed 17 times by 1 test: end of block
Executed by:
  • Self test (438)
17
4126 return rc;
executed 55081 times by 422 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
55081
4127}-
4128-
4129-
4130/*-
4131** Shutdown the page cache. Free all memory and close all files.-
4132**-
4133** If a transaction was in progress when this routine is called, that-
4134** transaction is rolled back. All outstanding pages are invalidated-
4135** and their memory is freed. Any attempt to use a page associated-
4136** with this page cache after this function returns will likely-
4137** result in a coredump.-
4138**-
4139** This function always succeeds. If a transaction is active an attempt-
4140** is made to roll it back. If an error occurs during the rollback -
4141** a hot journal may be left in the filesystem but no error is returned-
4142** to the caller.-
4143*/-
4144int sqlite3PagerClose(Pager *pPager, sqlite3 *db){-
4145 u8 *pTmp = (u8*)pPager->pTmpSpace;-
4146 assert( db || pagerUseWal(pPager)==0 );-
4147 assert( assert_pager_state(pPager) );-
4148 disable_simulated_io_errors();-
4149 sqlite3BeginBenignMalloc();-
4150 pagerFreeMapHdrs(pPager);-
4151 /* pPager->errCode = 0; */-
4152 pPager->exclusiveMode = 0;-
4153#ifndef SQLITE_OMIT_WAL-
4154 {-
4155 u8 *a = 0;-
4156 assert( db || pPager->pWal==0 );-
4157 if( db && 0==(db->flags & SQLITE_NoCkptOnClose)
dbDescription
TRUEevaluated 95268 times by 67 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
0==(db->flags & 0x00000800)Description
TRUEevaluated 95266 times by 67 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-95268
4158 && SQLITE_OK==databaseIsUnmoved(pPager)
0==databaseIsUnmoved(pPager)Description
TRUEevaluated 95254 times by 67 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
12-95254
4159 ){-
4160 a = pTmp;-
4161 }
executed 95254 times by 67 tests: end of block
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
95254
4162 sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags, pPager->pageSize,a);-
4163 pPager->pWal = 0;-
4164 }-
4165#endif-
4166 pager_reset(pPager);-
4167 if( MEMDB ){
pPager->memDbDescription
TRUEevaluated 296 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 94989 times by 67 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
296-94989
4168 pager_unlock(pPager);-
4169 }else{
executed 296 times by 1 test: end of block
Executed by:
  • Self test (438)
296
4170 /* If it is open, sync the journal file before calling UnlockAndRollback.-
4171 ** If this is not done, then an unsynced portion of the open journal -
4172 ** file may be played back into the database. If a power failure occurs -
4173 ** while this is happening, the database could become corrupt.-
4174 **-
4175 ** If an error occurs while trying to sync the journal, shift the pager-
4176 ** into the ERROR state. This causes UnlockAndRollback to unlock the-
4177 ** database and close the journal file without attempting to roll it-
4178 ** back or finalize it. The next database user will have to do hot-journal-
4179 ** rollback before accessing the database file.-
4180 */-
4181 if( isOpen(pPager->jfd) ){
((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 94959 times by 67 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
30-94959
4182 pager_error(pPager, pagerSyncHotJournal(pPager));-
4183 }
executed 30 times by 1 test: end of block
Executed by:
  • Self test (438)
30
4184 pagerUnlockAndRollback(pPager);-
4185 }
executed 94989 times by 67 tests: end of block
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
94989
4186 sqlite3EndBenignMalloc();-
4187 enable_simulated_io_errors();-
4188 PAGERTRACE(("CLOSE %d\n", PAGERID(pPager)));-
4189 IOTRACE(("CLOSE %p\n", pPager))-
4190 sqlite3OsClose(pPager->jfd);-
4191 sqlite3OsClose(pPager->fd);-
4192 sqlite3PageFree(pTmp);-
4193 sqlite3PcacheClose(pPager->pPCache);-
4194-
4195#ifdef SQLITE_HAS_CODEC-
4196 if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);-
4197#endif-
4198-
4199 assert( !pPager->aSavepoint && !pPager->pInJournal );-
4200 assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) );-
4201-
4202 sqlite3_free(pPager);-
4203 return SQLITE_OK;
executed 95285 times by 67 tests: return 0;
Executed by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (25)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (30)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • Self test (43)
  • ...
95285
4204}-
4205-
4206#if !defined(NDEBUG) || defined(SQLITE_TEST)-
4207/*-
4208** Return the page number for page pPg.-
4209*/-
4210Pgno sqlite3PagerPagenumber(DbPage *pPg){-
4211 return pPg->pgno;
never executed: return pPg->pgno;
0
4212}-
4213#endif-
4214-
4215/*-
4216** Increment the reference count for page pPg.-
4217*/-
4218void sqlite3PagerRef(DbPage *pPg){-
4219 sqlite3PcacheRef(pPg);-
4220}
executed 283690 times by 350 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • ...
283690
4221-
4222/*-
4223** Sync the journal. In other words, make sure all the pages that have-
4224** been written to the journal have actually reached the surface of the-
4225** disk and can be restored in the event of a hot-journal rollback.-
4226**-
4227** If the Pager.noSync flag is set, then this function is a no-op.-
4228** Otherwise, the actions required depend on the journal-mode and the -
4229** device characteristics of the file-system, as follows:-
4230**-
4231** * If the journal file is an in-memory journal file, no action need-
4232** be taken.-
4233**-
4234** * Otherwise, if the device does not support the SAFE_APPEND property,-
4235** then the nRec field of the most recently written journal header-
4236** is updated to contain the number of journal records that have-
4237** been written following it. If the pager is operating in full-sync-
4238** mode, then the journal file is synced before this field is updated.-
4239**-
4240** * If the device does not support the SEQUENTIAL property, then -
4241** journal file is synced.-
4242**-
4243** Or, in pseudo-code:-
4244**-
4245** if( NOT <in-memory journal> ){-
4246** if( NOT SAFE_APPEND ){-
4247** if( <full-sync mode> ) xSync(<journal file>);-
4248** <update nRec field>-
4249** } -
4250** if( NOT SEQUENTIAL ) xSync(<journal file>);-
4251** }-
4252**-
4253** If successful, this routine clears the PGHDR_NEED_SYNC flag of every -
4254** page currently held in memory before returning SQLITE_OK. If an IO-
4255** error is encountered, then the IO error code is returned to the caller.-
4256*/-
4257static int syncJournal(Pager *pPager, int newHdr){-
4258 int rc; /* Return code */-
4259-
4260 assert( pPager->eState==PAGER_WRITER_CACHEMOD-
4261 || pPager->eState==PAGER_WRITER_DBMOD-
4262 );-
4263 assert( assert_pager_state(pPager) );-
4264 assert( !pagerUseWal(pPager) );-
4265-
4266 rc = sqlite3PagerExclusiveLock(pPager);-
4267 if( rc!=SQLITE_OK ) return rc;
executed 1818 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 1818 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 72141 times by 133 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
1818-72141
4268-
4269 if( !pPager->noSync ){
!pPager->noSyncDescription
TRUEevaluated 54320 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 17821 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (64)
17821-54320
4270 assert( !pPager->tempFile );-
4271 if( isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){
((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 54225 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 95 times by 1 test
Evaluated by:
  • Self test (438)
pPager->journalMode!=4Description
TRUEevaluated 53969 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 256 times by 1 test
Evaluated by:
  • Self test (438)
95-54225
4272 const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);-
4273 assert( isOpen(pPager->jfd) );-
4274-
4275 if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
0==(iDc&0x00000200)Description
TRUEevaluated 53868 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 101 times by 1 test
Evaluated by:
  • Self test (438)
101-53868
4276 /* This block deals with an obscure problem. If the last connection-
4277 ** that wrote to this database was operating in persistent-journal-
4278 ** mode, then the journal file may at this point actually be larger-
4279 ** than Pager.journalOff bytes. If the next thing in the journal-
4280 ** file happens to be a journal-header (written as part of the-
4281 ** previous connection's transaction), and a crash or power-failure -
4282 ** occurs after nRec is updated but before this connection writes -
4283 ** anything else to the journal file (or commits/rolls back its -
4284 ** transaction), then SQLite may become confused when doing the -
4285 ** hot-journal rollback following recovery. It may roll back all-
4286 ** of this connections data, then proceed to rolling back the old,-
4287 ** out-of-date data that follows it. Database corruption.-
4288 **-
4289 ** To work around this, if the journal file does appear to contain-
4290 ** a valid header following Pager.journalOff, then write a 0x00-
4291 ** byte to the start of it to prevent it from being recognized.-
4292 **-
4293 ** Variable iNextHdrOffset is set to the offset at which this-
4294 ** problematic header will occur, if it exists. aMagic is used -
4295 ** as a temporary buffer to inspect the first couple of bytes of-
4296 ** the potential journal header.-
4297 */-
4298 i64 iNextHdrOffset;-
4299 u8 aMagic[8];-
4300 u8 zHeader[sizeof(aJournalMagic)+4];-
4301-
4302 memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));-
4303 put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec);-
4304-
4305 iNextHdrOffset = journalHdrOffset(pPager);-
4306 rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset);-
4307 if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){
rc==0Description
TRUEevaluated 1536 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (54)
FALSEevaluated 52332 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
0==memcmp(aMag...urnalMagic, 8)Description
TRUEevaluated 632 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 904 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (54)
632-52332
4308 static const u8 zerobyte = 0;-
4309 rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset);-
4310 }
executed 632 times by 1 test: end of block
Executed by:
  • Self test (438)
632
4311 if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){
rc!=0Description
TRUEevaluated 52332 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 1536 times by 3 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
  • Self test (54)
rc!=(10 | (2<<8))Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 52319 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
13-52332
4312 return rc;
executed 13 times by 1 test: return rc;
Executed by:
  • Self test (438)
13
4313 }-
4314-
4315 /* Write the nRec value into the journal file header. If in-
4316 ** full-synchronous mode, sync the journal first. This ensures that-
4317 ** all data has really hit the disk before nRec is updated to mark-
4318 ** it as a candidate for rollback.-
4319 **-
4320 ** This is not required if the persistent media supports the-
4321 ** SAFE_APPEND property. Because in this case it is not possible -
4322 ** for garbage data to be appended to the file, the nRec field-
4323 ** is populated with 0xFFFFFFFF when the journal header is written-
4324 ** and never needs to be updated.-
4325 */-
4326 if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
pPager->fullSyncDescription
TRUEevaluated 53443 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 412 times by 1 test
Evaluated by:
  • Self test (438)
0==(iDc&0x00000400)Description
TRUEevaluated 53419 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
24-53443
4327 PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));-
4328 IOTRACE(("JSYNC %p\n", pPager))-
4329 rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);-
4330 if( rc!=SQLITE_OK ) return rc;
executed 17 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 53402 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
17-53402
4331 }
executed 53402 times by 132 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
53402
4332 IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr));-
4333 rc = sqlite3OsWrite(-
4334 pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr-
4335 );-
4336 if( rc!=SQLITE_OK ) return rc;
executed 17 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 53820 times by 131 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
17-53820
4337 }
executed 53820 times by 131 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
53820
4338 if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
0==(iDc&0x00000400)Description
TRUEevaluated 53876 times by 131 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 45 times by 1 test
Evaluated by:
  • Self test (438)
45-53876
4339 PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));-
4340 IOTRACE(("JSYNC %p\n", pPager))-
4341 rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags| -
4342 (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)-
4343 );-
4344 if( rc!=SQLITE_OK ) return rc;
executed 16 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 53860 times by 131 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
16-53860
4345 }
executed 53860 times by 131 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
53860
4346-
4347 pPager->journalHdr = pPager->journalOff;-
4348 if( newHdr && 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
newHdrDescription
TRUEevaluated 15904 times by 25 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 38001 times by 126 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (354)
  • ...
0==(iDc&0x00000200)Description
TRUEevaluated 15829 times by 25 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 75 times by 1 test
Evaluated by:
  • Self test (438)
75-38001
4349 pPager->nRec = 0;-
4350 rc = writeJournalHdr(pPager);-
4351 if( rc!=SQLITE_OK ) return rc;
never executed: return rc;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 15829 times by 25 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
0-15829
4352 }
executed 15829 times by 25 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
15829
4353 }else{
executed 53905 times by 131 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
53905
4354 pPager->journalHdr = pPager->journalOff;-
4355 }
executed 351 times by 1 test: end of block
Executed by:
  • Self test (438)
351
4356 }-
4357-
4358 /* Unless the pager is in noSync mode, the journal file was just -
4359 ** successfully synced. Either way, clear the PGHDR_NEED_SYNC flag on -
4360 ** all pages.-
4361 */-
4362 sqlite3PcacheClearSyncFlags(pPager->pPCache);-
4363 pPager->eState = PAGER_WRITER_DBMOD;-
4364 assert( assert_pager_state(pPager) );-
4365 return SQLITE_OK;
executed 72077 times by 132 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
72077
4366}-
4367-
4368/*-
4369** The argument is the first in a linked list of dirty pages connected-
4370** by the PgHdr.pDirty pointer. This function writes each one of the-
4371** in-memory pages in the list to the database file. The argument may-
4372** be NULL, representing an empty list. In this case this function is-
4373** a no-op.-
4374**-
4375** The pager must hold at least a RESERVED lock when this function-
4376** is called. Before writing anything to the database file, this lock-
4377** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained,-
4378** SQLITE_BUSY is returned and no data is written to the database file.-
4379** -
4380** If the pager is a temp-file pager and the actual file-system file-
4381** is not yet open, it is created and opened before any data is -
4382** written out.-
4383**-
4384** Once the lock has been upgraded and, if necessary, the file opened,-
4385** the pages are written out to the database file in list order. Writing-
4386** a page is skipped if it meets either of the following criteria:-
4387**-
4388** * The page number is greater than Pager.dbSize, or-
4389** * The PGHDR_DONT_WRITE flag is set on the page.-
4390**-
4391** If writing out a page causes the database file to grow, Pager.dbFileSize-
4392** is updated accordingly. If page 1 is written out, then the value cached-
4393** in Pager.dbFileVers[] is updated to match the new value stored in-
4394** the database file.-
4395**-
4396** If everything is successful, SQLITE_OK is returned. If an IO error -
4397** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot-
4398** be obtained, SQLITE_BUSY is returned.-
4399*/-
4400static int pager_write_pagelist(Pager *pPager, PgHdr *pList){-
4401 int rc = SQLITE_OK; /* Return code */-
4402-
4403 /* This function is only called for rollback pagers in WRITER_DBMOD state. */-
4404 assert( !pagerUseWal(pPager) );-
4405 assert( pPager->tempFile || pPager->eState==PAGER_WRITER_DBMOD );-
4406 assert( pPager->eLock==EXCLUSIVE_LOCK );-
4407 assert( isOpen(pPager->fd) || pList->pDirty==0 );-
4408-
4409 /* If the file is a temp-file has not yet been opened, open it now. It-
4410 ** is not possible for rc to be other than SQLITE_OK if this branch-
4411 ** is taken, as pager_wait_on_lock() is a no-op for temp-files.-
4412 */-
4413 if( !isOpen(pPager->fd) ){
!((pPager->fd)->pMethods!=0)Description
TRUEevaluated 31 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (64)
FALSEevaluated 1289277 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
31-1289277
4414 assert( pPager->tempFile && rc==SQLITE_OK );-
4415 rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags);-
4416 }
executed 31 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (64)
31
4417-
4418 /* Before the first write, give the VFS a hint of what the final-
4419 ** file size will be.-
4420 */-
4421 assert( rc!=SQLITE_OK || isOpen(pPager->fd) );-
4422 if( rc==SQLITE_OK
rc==0Description
TRUEevaluated 1289308 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEnever evaluated
0-1289308
4423 && pPager->dbHintSize<pPager->dbSize
pPager->dbHint...pPager->dbSizeDescription
TRUEevaluated 710396 times by 120 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • ...
FALSEevaluated 578912 times by 35 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (438)
  • ...
578912-710396
4424 && (pList->pDirty || pList->pgno>pPager->dbHintSize)
pList->pDirtyDescription
TRUEevaluated 8488 times by 110 tests
Evaluated by:
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • Self test (357)
  • Self test (358)
  • Self test (359)
  • Self test (360)
  • Self test (361)
  • ...
FALSEevaluated 701908 times by 27 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
pList->pgno>pPager->dbHintSizeDescription
TRUEevaluated 22306 times by 17 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (15)
  • Self test (20)
  • Self test (23)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (7)
  • Self test (8)
FALSEevaluated 679602 times by 23 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
  • Self test (9)
8488-701908
4425 ){-
4426 sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize;-
4427 sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile);-
4428 pPager->dbHintSize = pPager->dbSize;-
4429 }
executed 30794 times by 120 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • ...
30794
4430-
4431 while( rc==SQLITE_OK && pList ){
rc==0Description
TRUEevaluated 2802238 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 139 times by 1 test
Evaluated by:
  • Self test (438)
pListDescription
TRUEevaluated 1513152 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 1289086 times by 49 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
139-2802238
4432 Pgno pgno = pList->pgno;-
4433-
4434 /* If there are dirty pages in the page cache with page numbers greater-
4435 ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to-
4436 ** make the file smaller (presumably by auto-vacuum code). Do not write-
4437 ** any such pages to the file.-
4438 **-
4439 ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag-
4440 ** set (set by sqlite3PagerDontWrite()).-
4441 */-
4442 if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){
pgno<=pPager->dbSizeDescription
TRUEevaluated 1509182 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 3970 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0==(pList->flags&0x010)Description
TRUEevaluated 1494486 times by 132 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 14696 times by 1 test
Evaluated by:
  • Self test (438)
3970-1509182
4443 i64 offset = (pgno-1)*(i64)pPager->pageSize; /* Offset to write */-
4444 char *pData; /* Data to write */ -
4445-
4446 assert( (pList->flags&PGHDR_NEED_SYNC)==0 );-
4447 if( pList->pgno==1 ) pager_write_changecounter(pList);
executed 38426 times by 126 tests: pager_write_changecounter(pList);
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (354)
  • ...
pList->pgno==1Description
TRUEevaluated 38426 times by 126 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (354)
  • ...
FALSEevaluated 1456060 times by 129 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • ...
38426-1456060
4448-
4449 /* Encode the database */-
4450 CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM_BKPT, pData);-
4451-
4452 /* Write out the page data. */-
4453 rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset);-
4454-
4455 /* If page 1 was just written, update Pager.dbFileVers to match-
4456 ** the value now stored in the database file. If writing this -
4457 ** page caused the database file to grow, update dbFileSize. -
4458 */-
4459 if( pgno==1 ){
pgno==1Description
TRUEevaluated 38425 times by 125 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (355)
  • ...
FALSEevaluated 1455978 times by 128 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • ...
38425-1455978
4460 memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers));-
4461 }
executed 38425 times by 125 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (355)
  • ...
38425
4462 if( pgno>pPager->dbFileSize ){
pgno>pPager->dbFileSizeDescription
TRUEevaluated 460365 times by 37 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • ...
FALSEevaluated 1034038 times by 129 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • ...
460365-1034038
4463 pPager->dbFileSize = pgno;-
4464 }
executed 460365 times by 37 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • ...
460365
4465 pPager->aStat[PAGER_STAT_WRITE]++;-
4466-
4467 /* Update any backup objects copying the contents of this pager. */-
4468 sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData);-
4469-
4470 PAGERTRACE(("STORE %d page %d hash(%08x)\n",-
4471 PAGERID(pPager), pgno, pager_pagehash(pList)));-
4472 IOTRACE(("PGOUT %p %d\n", pPager, pgno));-
4473 PAGER_INCR(sqlite3_pager_writedb_count);-
4474 }else{
executed 1494403 times by 131 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
1494403
4475 PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno));-
4476 }
executed 18666 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
18666
4477 pager_set_pagehash(pList);-
4478 pList = pList->pDirty;-
4479 }
executed 1513069 times by 131 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
1513069
4480-
4481 return rc;
executed 1289225 times by 49 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
1289225
4482}-
4483-
4484/*-
4485** Ensure that the sub-journal file is open. If it is already open, this -
4486** function is a no-op.-
4487**-
4488** SQLITE_OK is returned if everything goes according to plan. An -
4489** SQLITE_IOERR_XXX error code is returned if a call to sqlite3OsOpen() -
4490** fails.-
4491*/-
4492static int openSubJournal(Pager *pPager){-
4493 int rc = SQLITE_OK;-
4494 if( !isOpen(pPager->sjfd) ){
!((pPager->sjfd)->pMethods!=0)Description
TRUEevaluated 431 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 128518 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
431-128518
4495 const int flags = SQLITE_OPEN_SUBJOURNAL | SQLITE_OPEN_READWRITE -
4496 | SQLITE_OPEN_CREATE | SQLITE_OPEN_EXCLUSIVE -
4497 | SQLITE_OPEN_DELETEONCLOSE;-
4498 int nStmtSpill = sqlite3Config.nStmtSpill;-
4499 if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){
pPager->journalMode==4Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 417 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
pPager->subjInMemoryDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 407 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
10-417
4500 nStmtSpill = -1;-
4501 }
executed 24 times by 1 test: end of block
Executed by:
  • Self test (438)
24
4502 rc = sqlite3JournalOpen(pPager->pVfs, 0, pPager->sjfd, flags, nStmtSpill);-
4503 }
executed 431 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
431
4504 return rc;
executed 128949 times by 2 tests: return rc;
Executed by:
  • Self test (438)
  • Self test (54)
128949
4505}-
4506-
4507/*-
4508** Append a record of the current state of page pPg to the sub-journal. -
4509**-
4510** If successful, set the bit corresponding to pPg->pgno in the bitvecs-
4511** for all open savepoints before returning.-
4512**-
4513** This function returns SQLITE_OK if everything is successful, an IO-
4514** error code if the attempt to write to the sub-journal fails, or -
4515** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint-
4516** bitvec.-
4517*/-
4518static int subjournalPage(PgHdr *pPg){-
4519 int rc = SQLITE_OK;-
4520 Pager *pPager = pPg->pPager;-
4521 if( pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
pPager->journalMode!=2Description
TRUEevaluated 128949 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
8-128949
4522-
4523 /* Open the sub-journal, if it has not already been opened */-
4524 assert( pPager->useJournal );-
4525 assert( isOpen(pPager->jfd) || pagerUseWal(pPager) );-
4526 assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 );-
4527 assert( pagerUseWal(pPager) -
4528 || pageInJournal(pPager, pPg) -
4529 || pPg->pgno>pPager->dbOrigSize -
4530 );-
4531 rc = openSubJournal(pPager);-
4532-
4533 /* If the sub-journal was opened successfully (or was already open),-
4534 ** write the journal record into the file. */-
4535 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 128949 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEnever evaluated
0-128949
4536 void *pData = pPg->pData;-
4537 i64 offset = (i64)pPager->nSubRec*(4+pPager->pageSize);-
4538 char *pData2;-
4539-
4540#if SQLITE_HAS_CODEC -
4541 if( !pPager->subjInMemory ){-
4542 CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM_BKPT, pData2);-
4543 }else-
4544#endif-
4545 pData2 = pData;-
4546 PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));-
4547 rc = write32bits(pPager->sjfd, offset, pPg->pgno);-
4548 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 128948 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-128948
4549 rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4);-
4550 }
executed 128948 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
128948
4551 }
executed 128949 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
128949
4552 }
executed 128949 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
128949
4553 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 128956 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-128956
4554 pPager->nSubRec++;-
4555 assert( pPager->nSavepoint>0 );-
4556 rc = addToSavepointBitvecs(pPager, pPg->pgno);-
4557 }
executed 128956 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
128956
4558 return rc;
executed 128957 times by 2 tests: return rc;
Executed by:
  • Self test (438)
  • Self test (54)
128957
4559}-
4560static int subjournalPageIfRequired(PgHdr *pPg){-
4561 if( subjRequiresPage(pPg) ){
subjRequiresPage(pPg)Description
TRUEevaluated 128957 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 955488 times by 18 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (8)
128957-955488
4562 return subjournalPage(pPg);
executed 128957 times by 2 tests: return subjournalPage(pPg);
Executed by:
  • Self test (438)
  • Self test (54)
128957
4563 }else{-
4564 return SQLITE_OK;
executed 955488 times by 18 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (8)
955488
4565 }-
4566}-
4567-
4568/*-
4569** This function is called by the pcache layer when it has reached some-
4570** soft memory limit. The first argument is a pointer to a Pager object-
4571** (cast as a void*). The pager is always 'purgeable' (not an in-memory-
4572** database). The second argument is a reference to a page that is -
4573** currently dirty but has no outstanding references. The page-
4574** is always associated with the Pager object passed as the first -
4575** argument.-
4576**-
4577** The job of this function is to make pPg clean by writing its contents-
4578** out to the database file, if possible. This may involve syncing the-
4579** journal file. -
4580**-
4581** If successful, sqlite3PcacheMakeClean() is called on the page and-
4582** SQLITE_OK returned. If an IO error occurs while trying to make the-
4583** page clean, the IO error code is returned. If the page cannot be-
4584** made clean for some other reason, but no error occurs, then SQLITE_OK-
4585** is returned by sqlite3PcacheMakeClean() is not called.-
4586*/-
4587static int pagerStress(void *p, PgHdr *pPg){-
4588 Pager *pPager = (Pager *)p;-
4589 int rc = SQLITE_OK;-
4590-
4591 assert( pPg->pPager==pPager );-
4592 assert( pPg->flags&PGHDR_DIRTY );-
4593-
4594 /* The doNotSpill NOSYNC bit is set during times when doing a sync of-
4595 ** journal (and adding a new header) is not allowed. This occurs-
4596 ** during calls to sqlite3PagerWrite() while trying to journal multiple-
4597 ** pages belonging to the same sector.-
4598 **-
4599 ** The doNotSpill ROLLBACK and OFF bits inhibits all cache spilling-
4600 ** regardless of whether or not a sync is required. This is set during-
4601 ** a rollback or by user request, respectively.-
4602 **-
4603 ** Spilling is also prohibited when in an error state since that could-
4604 ** lead to database corruption. In the current implementation it -
4605 ** is impossible for sqlite3PcacheFetch() to be called with createFlag==3-
4606 ** while in the error state, hence it is impossible for this routine to-
4607 ** be called in the error state. Nevertheless, we include a NEVER()-
4608 ** test for the error state as a safeguard against future changes.-
4609 */-
4610 if( NEVER(pPager->errCode) ) return SQLITE_OK;
never executed: return 0;
(pPager->errCode)Description
TRUEnever evaluated
FALSEevaluated 1352282 times by 27 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
0-1352282
4611 testcase( pPager->doNotSpill & SPILLFLAG_ROLLBACK );-
4612 testcase( pPager->doNotSpill & SPILLFLAG_OFF );-
4613 testcase( pPager->doNotSpill & SPILLFLAG_NOSYNC );-
4614 if( pPager->doNotSpill
pPager->doNotSpillDescription
TRUEevaluated 2872 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
FALSEevaluated 1349410 times by 27 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
2872-1349410
4615 && ((pPager->doNotSpill & (SPILLFLAG_ROLLBACK|SPILLFLAG_OFF))!=0
(pPager->doNot...0x02|0x01))!=0Description
TRUEevaluated 1333 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1539 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
1333-1539
4616 || (pPg->flags & PGHDR_NEED_SYNC)!=0)
(pPg->flags & 0x008)!=0Description
TRUEevaluated 840 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
FALSEevaluated 699 times by 15 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
699-840
4617 ){-
4618 return SQLITE_OK;
executed 2173 times by 20 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
2173
4619 }-
4620-
4621 pPager->aStat[PAGER_STAT_SPILL]++;-
4622 pPg->pDirty = 0;-
4623 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 97425 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
FALSEevaluated 1252684 times by 26 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
  • ...
97425-1252684
4624 /* Write a single frame for this page to the log. */-
4625 rc = subjournalPageIfRequired(pPg); -
4626 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 97425 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
FALSEnever evaluated
0-97425
4627 rc = pagerWalFrames(pPager, pPg, 0, 0);-
4628 }
executed 97425 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
97425
4629 }else{
executed 97425 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
97425
4630 -
4631#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE-
4632 if( pPager->tempFile==0 ){-
4633 rc = sqlite3JournalCreate(pPager->jfd);-
4634 if( rc!=SQLITE_OK ) return pager_error(pPager, rc);-
4635 }-
4636#endif-
4637 -
4638 /* Sync the journal file if required. */-
4639 if( pPg->flags&PGHDR_NEED_SYNC
pPg->flags&0x008Description
TRUEevaluated 35057 times by 25 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 1217627 times by 20 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
35057-1217627
4640 || pPager->eState==PAGER_WRITER_CACHEMOD
pPager->eState==3Description
TRUEevaluated 396 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (64)
FALSEevaluated 1217231 times by 20 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
396-1217231
4641 ){-
4642 rc = syncJournal(pPager, 1);-
4643 }
executed 35453 times by 26 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
  • ...
35453
4644 -
4645 /* Write the contents of the page out to the database file. */-
4646 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1250866 times by 26 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
  • ...
FALSEevaluated 1818 times by 1 test
Evaluated by:
  • Self test (438)
1818-1250866
4647 assert( (pPg->flags&PGHDR_NEED_SYNC)==0 );-
4648 rc = pager_write_pagelist(pPager, pPg);-
4649 }
executed 1250866 times by 26 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
  • ...
1250866
4650 }
executed 1252684 times by 26 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
  • ...
1252684
4651-
4652 /* Mark the page as clean. */-
4653 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1348291 times by 27 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
FALSEevaluated 1818 times by 1 test
Evaluated by:
  • Self test (438)
1818-1348291
4654 PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno));-
4655 sqlite3PcacheMakeClean(pPg);-
4656 }
executed 1348291 times by 27 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
1348291
4657-
4658 return pager_error(pPager, rc);
executed 1350109 times by 27 tests: return pager_error(pPager, rc);
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
1350109
4659}-
4660-
4661/*-
4662** Flush all unreferenced dirty pages to disk.-
4663*/-
4664int sqlite3PagerFlush(Pager *pPager){-
4665 int rc = pPager->errCode;-
4666 if( !MEMDB ){
!pPager->memDbDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-20
4667 PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache);-
4668 assert( assert_pager_state(pPager) );-
4669 while( rc==SQLITE_OK && pList ){
rc==0Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
pListDescription
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
2-36
4670 PgHdr *pNext = pList->pDirty;-
4671 if( pList->nRef==0 ){
pList->nRef==0Description
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-17
4672 rc = pagerStress((void*)pPager, pList);-
4673 }
executed 17 times by 1 test: end of block
Executed by:
  • Self test (438)
17
4674 pList = pNext;-
4675 }
executed 18 times by 1 test: end of block
Executed by:
  • Self test (438)
18
4676 }
executed 20 times by 1 test: end of block
Executed by:
  • Self test (438)
20
4677-
4678 return rc;
executed 21 times by 1 test: return rc;
Executed by:
  • Self test (438)
21
4679}-
4680-
4681/*-
4682** Allocate and initialize a new Pager object and put a pointer to it-
4683** in *ppPager. The pager should eventually be freed by passing it-
4684** to sqlite3PagerClose().-
4685**-
4686** The zFilename argument is the path to the database file to open.-
4687** If zFilename is NULL then a randomly-named temporary file is created-
4688** and used as the file to be cached. Temporary files are be deleted-
4689** automatically when they are closed. If zFilename is ":memory:" then -
4690** all information is held in cache. It is never written to disk. -
4691** This can be used to implement an in-memory database.-
4692**-
4693** The nExtra parameter specifies the number of bytes of space allocated-
4694** along with each page reference. This space is available to the user-
4695** via the sqlite3PagerGetExtra() API. When a new page is allocated, the-
4696** first 8 bytes of this space are zeroed but the remainder is uninitialized.-
4697** (The extra space is used by btree as the MemPage object.)-
4698**-
4699** The flags argument is used to specify properties that affect the-
4700** operation of the pager. It should be passed some bitwise combination-
4701** of the PAGER_* flags.-
4702**-
4703** The vfsFlags parameter is a bitmask to pass to the flags parameter-
4704** of the xOpen() method of the supplied VFS when opening files. -
4705**-
4706** If the pager object is allocated and the specified file opened -
4707** successfully, SQLITE_OK is returned and *ppPager set to point to-
4708** the new pager object. If an error occurs, *ppPager is set to NULL-
4709** and error code returned. This function may return SQLITE_NOMEM-
4710** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or -
4711** various SQLITE_IO_XXX errors.-
4712*/-
4713int sqlite3PagerOpen(-
4714 sqlite3_vfs *pVfs, /* The virtual file system to use */-
4715 Pager **ppPager, /* OUT: Return the Pager structure here */-
4716 const char *zFilename, /* Name of the database file to open */-
4717 int nExtra, /* Extra bytes append to each in-memory page */-
4718 int flags, /* flags controlling this file */-
4719 int vfsFlags, /* flags passed through to sqlite3_vfs.xOpen() */-
4720 void (*xReinit)(DbPage*) /* Function to reinitialize pages */-
4721){-
4722 u8 *pPtr;-
4723 Pager *pPager = 0; /* Pager object to allocate and return */-
4724 int rc = SQLITE_OK; /* Return code */-
4725 int tempFile = 0; /* True for temp files (incl. in-memory files) */-
4726 int memDb = 0; /* True if this is an in-memory file */-
4727#ifdef SQLITE_ENABLE_DESERIALIZE-
4728 int memJM = 0; /* Memory journal mode */-
4729#else-
4730# define memJM 0-
4731#endif-
4732 int readOnly = 0; /* True if this is a read-only file */-
4733 int journalFileSize; /* Bytes to allocate for each journal fd */-
4734 char *zPathname = 0; /* Full path to database file */-
4735 int nPathname = 0; /* Number of bytes in zPathname */-
4736 int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */-
4737 int pcacheSize = sqlite3PcacheSize(); /* Bytes to allocate for PCache */-
4738 u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size */-
4739 const char *zUri = 0; /* URI args to copy */-
4740 int nUri = 0; /* Number of bytes of URI args at *zUri */-
4741-
4742 /* Figure out how much space is required for each journal file-handle-
4743 ** (there are two of them, the main journal and the sub-journal). */-
4744 journalFileSize = ROUND8(sqlite3JournalSize(pVfs));-
4745-
4746 /* Set the output variable to NULL in case an error occurs. */-
4747 *ppPager = 0;-
4748-
4749#ifndef SQLITE_OMIT_MEMORYDB-
4750 if( flags & PAGER_MEMORY ){
flags & 0x0002Description
TRUEevaluated 296 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96012 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
296-96012
4751 memDb = 1;-
4752 if( zFilename && zFilename[0] ){
zFilenameDescription
TRUEevaluated 218 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 78 times by 1 test
Evaluated by:
  • Self test (438)
zFilename[0]Description
TRUEevaluated 217 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-218
4753 zPathname = sqlite3DbStrDup(0, zFilename);-
4754 if( zPathname==0 ) return SQLITE_NOMEM_BKPT;
never executed: return 7;
zPathname==0Description
TRUEnever evaluated
FALSEevaluated 217 times by 1 test
Evaluated by:
  • Self test (438)
0-217
4755 nPathname = sqlite3Strlen30(zPathname);-
4756 zFilename = 0;-
4757 }
executed 217 times by 1 test: end of block
Executed by:
  • Self test (438)
217
4758 }
executed 296 times by 1 test: end of block
Executed by:
  • Self test (438)
296
4759#endif-
4760-
4761 /* Compute and store the full pathname in an allocated buffer pointed-
4762 ** to by zPathname, length nPathname. Or, if this is a temporary file,-
4763 ** leave both nPathname and zPathname set to 0.-
4764 */-
4765 if( zFilename && zFilename[0] ){
zFilenameDescription
TRUEevaluated 33602 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 62706 times by 16 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
zFilename[0]Description
TRUEevaluated 32706 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 896 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
896-62706
4766 const char *z;-
4767 nPathname = pVfs->mxPathname+1;-
4768 zPathname = sqlite3DbMallocRaw(0, nPathname*2);-
4769 if( zPathname==0 ){
zPathname==0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32698 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
8-32698
4770 return SQLITE_NOMEM_BKPT;
executed 8 times by 1 test: return 7;
Executed by:
  • Self test (438)
8
4771 }-
4772 zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */-
4773 rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);-
4774 nPathname = sqlite3Strlen30(zPathname);-
4775 z = zUri = &zFilename[sqlite3Strlen30(zFilename)+1];-
4776 while( *z ){
*zDescription
TRUEevaluated 145 times by 4 tests
Evaluated by:
  • Self test (103)
  • Self test (104)
  • Self test (438)
  • Self test (61)
FALSEevaluated 32698 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
145-32698
4777 z += sqlite3Strlen30(z)+1;-
4778 z += sqlite3Strlen30(z)+1;-
4779 }
executed 145 times by 4 tests: end of block
Executed by:
  • Self test (103)
  • Self test (104)
  • Self test (438)
  • Self test (61)
145
4780 nUri = (int)(&z[1] - zUri);-
4781 assert( nUri>=0 );-
4782 if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){
rc==0Description
TRUEevaluated 32672 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
nPathname+8>pVfs->mxPathnameDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32664 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
8-32672
4783 /* This branch is taken when the journal path required by-
4784 ** the database being opened will be more than pVfs->mxPathname-
4785 ** bytes in length. This means the database cannot be opened,-
4786 ** as it will not be possible to open the journal file or even-
4787 ** check for a hot-journal before reading.-
4788 */-
4789 rc = SQLITE_CANTOPEN_BKPT;-
4790 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
4791 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 34 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32664 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
34-32664
4792 sqlite3DbFree(0, zPathname);-
4793 return rc;
executed 34 times by 1 test: return rc;
Executed by:
  • Self test (438)
34
4794 }-
4795 }
executed 32664 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32664
4796-
4797 /* Allocate memory for the Pager structure, PCache object, the-
4798 ** three file descriptors, the database file name and the journal -
4799 ** file name. The layout in memory is as follows:-
4800 **-
4801 ** Pager object (sizeof(Pager) bytes)-
4802 ** PCache object (sqlite3PcacheSize() bytes)-
4803 ** Database file handle (pVfs->szOsFile bytes)-
4804 ** Sub-journal file handle (journalFileSize bytes)-
4805 ** Main journal file handle (journalFileSize bytes)-
4806 ** Database file name (nPathname+1 bytes)-
4807 ** Journal file name (nPathname+8+1 bytes)-
4808 */-
4809 pPtr = (u8 *)sqlite3MallocZero(-
4810 ROUND8(sizeof(*pPager)) + /* Pager structure */-
4811 ROUND8(pcacheSize) + /* PCache object */-
4812 ROUND8(pVfs->szOsFile) + /* The main db file */-
4813 journalFileSize * 2 + /* The two journal files */ -
4814 nPathname + 1 + nUri + /* zFilename */-
4815 nPathname + 8 + 2 /* zJournal */-
4816#ifndef SQLITE_OMIT_WAL-
4817 + nPathname + 4 + 2 /* zWal */-
4818#endif-
4819 );-
4820 assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) );-
4821 if( !pPtr ){
!pPtrDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96252 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
14-96252
4822 sqlite3DbFree(0, zPathname);-
4823 return SQLITE_NOMEM_BKPT;
executed 14 times by 1 test: return 7;
Executed by:
  • Self test (438)
14
4824 }-
4825 pPager = (Pager*)(pPtr);-
4826 pPager->pPCache = (PCache*)(pPtr += ROUND8(sizeof(*pPager)));-
4827 pPager->fd = (sqlite3_file*)(pPtr += ROUND8(pcacheSize));-
4828 pPager->sjfd = (sqlite3_file*)(pPtr += ROUND8(pVfs->szOsFile));-
4829 pPager->jfd = (sqlite3_file*)(pPtr += journalFileSize);-
4830 pPager->zFilename = (char*)(pPtr += journalFileSize);-
4831 assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) );-
4832-
4833 /* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */-
4834 if( zPathname ){
zPathnameDescription
TRUEevaluated 32873 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 63379 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
32873-63379
4835 assert( nPathname>0 );-
4836 pPager->zJournal = (char*)(pPtr += nPathname + 1 + nUri);-
4837 memcpy(pPager->zFilename, zPathname, nPathname);-
4838 if( nUri ) memcpy(&pPager->zFilename[nPathname+1], zUri, nUri);
executed 32656 times by 438 tests: memcpy(&pPager->zFilename[nPathname+1], zUri, nUri);
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
nUriDescription
TRUEevaluated 32656 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 217 times by 1 test
Evaluated by:
  • Self test (438)
217-32656
4839 memcpy(pPager->zJournal, zPathname, nPathname);-
4840 memcpy(&pPager->zJournal[nPathname], "-journal\000", 8+2);-
4841 sqlite3FileSuffix3(pPager->zFilename, pPager->zJournal);-
4842#ifndef SQLITE_OMIT_WAL-
4843 pPager->zWal = &pPager->zJournal[nPathname+8+1];-
4844 memcpy(pPager->zWal, zPathname, nPathname);-
4845 memcpy(&pPager->zWal[nPathname], "-wal\000", 4+1);-
4846 sqlite3FileSuffix3(pPager->zFilename, pPager->zWal);-
4847#endif-
4848 sqlite3DbFree(0, zPathname);-
4849 }
executed 32873 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32873
4850 pPager->pVfs = pVfs;-
4851 pPager->vfsFlags = vfsFlags;-
4852-
4853 /* Open the pager file.-
4854 */-
4855 if( zFilename && zFilename[0] ){
zFilenameDescription
TRUEevaluated 33552 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 62700 times by 16 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
zFilename[0]Description
TRUEevaluated 32656 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 896 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
896-62700
4856 int fout = 0; /* VFS flags returned by xOpen() */-
4857 rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout);-
4858 assert( !memDb );-
4859#ifdef SQLITE_ENABLE_DESERIALIZE-
4860 memJM = (fout&SQLITE_OPEN_MEMORY)!=0;-
4861#endif-
4862 readOnly = (fout&SQLITE_OPEN_READONLY)!=0;-
4863-
4864 /* If the file was successfully opened for read/write access,-
4865 ** choose a default page size in case we have to create the-
4866 ** database file. The default page size is the maximum of:-
4867 **-
4868 ** + SQLITE_DEFAULT_PAGE_SIZE,-
4869 ** + The value returned by sqlite3OsSectorSize()-
4870 ** + The largest page size that can be written atomically.-
4871 */-
4872 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 32106 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 550 times by 1 test
Evaluated by:
  • Self test (438)
550-32106
4873 int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);-
4874 if( !readOnly ){
!readOnlyDescription
TRUEevaluated 22529 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 9577 times by 1 test
Evaluated by:
  • Self test (438)
9577-22529
4875 setSectorSize(pPager);-
4876 assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);-
4877 if( szPageDflt<pPager->sectorSize ){
szPageDflt<pPager->sectorSizeDescription
TRUEevaluated 204 times by 34 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
FALSEevaluated 22325 times by 406 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
204-22325
4878 if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){
pPager->sectorSize>8192Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 191 times by 34 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
13-191
4879 szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;-
4880 }else{
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
13
4881 szPageDflt = (u32)pPager->sectorSize;-
4882 }
executed 191 times by 34 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (61)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • ...
191
4883 }-
4884#ifdef SQLITE_ENABLE_ATOMIC_WRITE-
4885 {-
4886 int ii;-
4887 assert(SQLITE_IOCAP_ATOMIC512==(512>>8));-
4888 assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));-
4889 assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536);-
4890 for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){-
4891 if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){-
4892 szPageDflt = ii;-
4893 }-
4894 }-
4895 }-
4896#endif-
4897 }
executed 22529 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
22529
4898 pPager->noLock = sqlite3_uri_boolean(zFilename, "nolock", 0);-
4899 if( (iDc & SQLITE_IOCAP_IMMUTABLE)!=0
(iDc & 0x00002000)!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32104 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
2-32104
4900 || sqlite3_uri_boolean(zFilename, "immutable", 0) ){
sqlite3_uri_bo...immutable", 0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32102 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
2-32102
4901 vfsFlags |= SQLITE_OPEN_READONLY;-
4902 goto act_like_temp_file;
executed 4 times by 1 test: goto act_like_temp_file;
Executed by:
  • Self test (438)
4
4903 }-
4904 }
executed 32102 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32102
4905 }else{
executed 32652 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32652
4906 /* If a temporary file is requested, it is not opened immediately.-
4907 ** In this case we accept the default page size and delay actually-
4908 ** opening the file until the first call to OsWrite().-
4909 **-
4910 ** This branch is also run for an in-memory database. An in-memory-
4911 ** database is the same as a temp-file that is never written out to-
4912 ** disk and uses an in-memory rollback journal.-
4913 **-
4914 ** This branch also runs for files marked as immutable.-
4915 */ -
4916act_like_temp_file:-
4917 tempFile = 1;-
4918 pPager->eState = PAGER_READER; /* Pretend we already have a lock */-
4919 pPager->eLock = EXCLUSIVE_LOCK; /* Pretend we are in EXCLUSIVE mode */-
4920 pPager->noLock = 1; /* Do no locking */-
4921 readOnly = (vfsFlags&SQLITE_OPEN_READONLY);-
4922 }
executed 63600 times by 17 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
63600
4923-
4924 /* The following call to PagerSetPagesize() serves to set the value of -
4925 ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.-
4926 */-
4927 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 95702 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 550 times by 1 test
Evaluated by:
  • Self test (438)
550-95702
4928 assert( pPager->memDb==0 );-
4929 rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1);-
4930 testcase( rc!=SQLITE_OK );-
4931 }
executed 95702 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
95702
4932-
4933 /* Initialize the PCache object. */-
4934 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 95688 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 564 times by 1 test
Evaluated by:
  • Self test (438)
564-95688
4935 nExtra = ROUND8(nExtra);-
4936 assert( nExtra>=8 && nExtra<1000 );-
4937 rc = sqlite3PcacheOpen(szPageDflt, nExtra, !memDb,-
4938 !memDb?pagerStress:0, (void *)pPager, pPager->pPCache);-
4939 }
executed 95688 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
95688
4940-
4941 /* If an error occurred above, free the Pager structure and close the file.-
4942 */-
4943 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 592 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95660 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
592-95660
4944 sqlite3OsClose(pPager->fd);-
4945 sqlite3PageFree(pPager->pTmpSpace);-
4946 sqlite3_free(pPager);-
4947 return rc;
executed 592 times by 1 test: return rc;
Executed by:
  • Self test (438)
592
4948 }-
4949-
4950 PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename));-
4951 IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename))-
4952-
4953 pPager->useJournal = (u8)useJournal;-
4954 /* pPager->stmtOpen = 0; */-
4955 /* pPager->stmtInUse = 0; */-
4956 /* pPager->nRef = 0; */-
4957 /* pPager->stmtSize = 0; */-
4958 /* pPager->stmtJSize = 0; */-
4959 /* pPager->nPage = 0; */-
4960 pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;-
4961 /* pPager->state = PAGER_UNLOCK; */-
4962 /* pPager->errMask = 0; */-
4963 pPager->tempFile = (u8)tempFile;-
4964 assert( tempFile==PAGER_LOCKINGMODE_NORMAL -
4965 || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE );-
4966 assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 );-
4967 pPager->exclusiveMode = (u8)tempFile; -
4968 pPager->changeCountDone = pPager->tempFile;-
4969 pPager->memDb = (u8)memDb;-
4970 pPager->readOnly = (u8)readOnly;-
4971 assert( useJournal || pPager->tempFile );-
4972 pPager->noSync = pPager->tempFile;-
4973 if( pPager->noSync ){
pPager->noSyncDescription
TRUEevaluated 63582 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
FALSEevaluated 32078 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32078-63582
4974 assert( pPager->fullSync==0 );-
4975 assert( pPager->extraSync==0 );-
4976 assert( pPager->syncFlags==0 );-
4977 assert( pPager->walSyncFlags==0 );-
4978 }else{
executed 63582 times by 17 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
63582
4979 pPager->fullSync = 1;-
4980 pPager->extraSync = 0;-
4981 pPager->syncFlags = SQLITE_SYNC_NORMAL;-
4982 pPager->walSyncFlags = SQLITE_SYNC_NORMAL | (SQLITE_SYNC_NORMAL<<2);-
4983 }
executed 32078 times by 438 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
32078
4984 /* pPager->pFirst = 0; */-
4985 /* pPager->pFirstSynced = 0; */-
4986 /* pPager->pLast = 0; */-
4987 pPager->nExtra = (u16)nExtra;-
4988 pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT;-
4989 assert( isOpen(pPager->fd) || tempFile );-
4990 setSectorSize(pPager);-
4991 if( !useJournal ){
!useJournalDescription
TRUEevaluated 60197 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 35463 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
35463-60197
4992 pPager->journalMode = PAGER_JOURNALMODE_OFF;-
4993 }else if( memDb || memJM ){
executed 60197 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
memDbDescription
TRUEevaluated 221 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 35242 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
221-60197
4994 pPager->journalMode = PAGER_JOURNALMODE_MEMORY;-
4995 }
executed 221 times by 1 test: end of block
Executed by:
  • Self test (438)
221
4996 /* pPager->xBusyHandler = 0; */-
4997 /* pPager->pBusyHandlerArg = 0; */-
4998 pPager->xReiniter = xReinit;-
4999 setGetterMethod(pPager);-
5000 /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */-
5001 /* pPager->szMmap = SQLITE_DEFAULT_MMAP_SIZE // will be set by btree.c */-
5002-
5003 *ppPager = pPager;-
5004 return SQLITE_OK;
executed 95660 times by 438 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
95660
5005}-
5006-
5007-
5008-
5009/*-
5010** This function is called after transitioning from PAGER_UNLOCK to-
5011** PAGER_SHARED state. It tests if there is a hot journal present in-
5012** the file-system for the given pager. A hot journal is one that -
5013** needs to be played back. According to this function, a hot-journal-
5014** file exists if the following criteria are met:-
5015**-
5016** * The journal file exists in the file system, and-
5017** * No process holds a RESERVED or greater lock on the database file, and-
5018** * The database file itself is greater than 0 bytes in size, and-
5019** * The first byte of the journal file exists and is not 0x00.-
5020**-
5021** If the current size of the database file is 0 but a journal file-
5022** exists, that is probably an old journal left over from a prior-
5023** database with the same name. In this case the journal file is-
5024** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK-
5025** is returned.-
5026**-
5027** This routine does not check if there is a master journal filename-
5028** at the end of the file. If there is, and that master journal file-
5029** does not exist, then the journal file is not really hot. In this-
5030** case this routine will return a false-positive. The pager_playback()-
5031** routine will discover that the journal file is not really hot and -
5032** will not roll it back. -
5033**-
5034** If a hot-journal file is found to exist, *pExists is set to 1 and -
5035** SQLITE_OK returned. If no hot-journal file is present, *pExists is-
5036** set to 0 and SQLITE_OK returned. If an IO error occurs while trying-
5037** to determine whether or not a hot-journal file exists, the IO error-
5038** code is returned and the value of *pExists is undefined.-
5039*/-
5040static int hasHotJournal(Pager *pPager, int *pExists){-
5041 sqlite3_vfs * const pVfs = pPager->pVfs;-
5042 int rc = SQLITE_OK; /* Return code */-
5043 int exists = 1; /* True if a journal file is present */-
5044 int jrnlOpen = !!isOpen(pPager->jfd);-
5045-
5046 assert( pPager->useJournal );-
5047 assert( isOpen(pPager->fd) );-
5048 assert( pPager->eState==PAGER_OPEN );-
5049-
5050 assert( jrnlOpen==0 || ( sqlite3OsDeviceCharacteristics(pPager->jfd) &-
5051 SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN-
5052 ));-
5053-
5054 *pExists = 0;-
5055 if( !jrnlOpen ){
!jrnlOpenDescription
TRUEevaluated 132408 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
17-132408
5056 rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists);-
5057 }
executed 132408 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
132408
5058 if( rc==SQLITE_OK && exists ){
rc==0Description
TRUEevaluated 132376 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
existsDescription
TRUEevaluated 2590 times by 258 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEevaluated 129786 times by 184 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • ...
49-132376
5059 int locked = 0; /* True if some process holds a RESERVED lock */-
5060-
5061 /* Race condition here: Another process might have been holding the-
5062 ** the RESERVED lock and have a journal open at the sqlite3OsAccess() -
5063 ** call above, but then delete the journal and drop the lock before-
5064 ** we get to the following sqlite3OsCheckReservedLock() call. If that-
5065 ** is the case, this routine might think there is a hot journal when-
5066 ** in fact there is none. This results in a false-positive which will-
5067 ** be dealt with by the playback routine. Ticket #3883.-
5068 */-
5069 rc = sqlite3OsCheckReservedLock(pPager->fd, &locked);-
5070 if( rc==SQLITE_OK && !locked ){
rc==0Description
TRUEevaluated 2590 times by 258 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEnever evaluated
!lockedDescription
TRUEevaluated 2508 times by 253 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEevaluated 82 times by 6 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (49)
  • Self test (52)
0-2590
5071 Pgno nPage; /* Number of pages in database file */-
5072-
5073 assert( pPager->tempFile==0 );-
5074 rc = pagerPagecount(pPager, &nPage);-
5075 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 2508 times by 253 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEnever evaluated
0-2508
5076 /* If the database is zero pages in size, that means that either (1) the-
5077 ** journal is a remnant from a prior database with the same name where-
5078 ** the database file but not the journal was deleted, or (2) the initial-
5079 ** transaction that populates a new database is being rolled back.-
5080 ** In either case, the journal file can be deleted. However, take care-
5081 ** not to delete the journal file if it is already open due to-
5082 ** journal_mode=PERSIST.-
5083 */-
5084 if( nPage==0 && !jrnlOpen ){
nPage==0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2504 times by 253 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
!jrnlOpenDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-2504
5085 sqlite3BeginBenignMalloc();-
5086 if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){
pagerLockDb(pPager, 2)==0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-4
5087 sqlite3OsDelete(pVfs, pPager->zJournal, 0);-
5088 if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK);
executed 2 times by 1 test: pagerUnlockDb(pPager, 1);
Executed by:
  • Self test (438)
!pPager->exclusiveModeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2
5089 }
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
5090 sqlite3EndBenignMalloc();-
5091 }else{
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
5092 /* The journal file exists and no other connection has a reserved-
5093 ** or greater lock on the database file. Now check that there is-
5094 ** at least one non-zero bytes at the start of the journal file.-
5095 ** If there is, then we consider this journal to be hot. If not, -
5096 ** it can be ignored.-
5097 */-
5098 if( !jrnlOpen ){
!jrnlOpenDescription
TRUEevaluated 2487 times by 253 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
17-2487
5099 int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL;-
5100 rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f);-
5101 }
executed 2487 times by 253 tests: end of block
Executed by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
2487
5102 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 2502 times by 253 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-2502
5103 u8 first = 0;-
5104 rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0);-
5105 if( rc==SQLITE_IOERR_SHORT_READ ){
rc==(10 | (2<<8))Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2489 times by 253 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
13-2489
5106 rc = SQLITE_OK;-
5107 }
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
13
5108 if( !jrnlOpen ){
!jrnlOpenDescription
TRUEevaluated 2485 times by 253 tests
Evaluated by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
17-2485
5109 sqlite3OsClose(pPager->jfd);-
5110 }
executed 2485 times by 253 tests: end of block
Executed by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
2485
5111 *pExists = (first!=0);-
5112 }else if( rc==SQLITE_CANTOPEN ){
executed 2502 times by 253 tests: end of block
Executed by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
rc==14Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-2502
5113 /* If we cannot open the rollback journal file in order to see if-
5114 ** it has a zero header, that might be due to an I/O error, or-
5115 ** it might be due to the race condition described above and in-
5116 ** ticket #3883. Either way, assume that the journal is hot.-
5117 ** This might be a false positive. But if it is, then the-
5118 ** automatic journal playback and recovery mechanism will deal-
5119 ** with it under an EXCLUSIVE lock where we do not need to-
5120 ** worry so much with race conditions.-
5121 */-
5122 *pExists = 1;-
5123 rc = SQLITE_OK;-
5124 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
5125 }
executed 2504 times by 253 tests: end of block
Executed by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
2504
5126 }-
5127 }
executed 2508 times by 253 tests: end of block
Executed by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
2508
5128 }
executed 2590 times by 258 tests: end of block
Executed by:
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
2590
5129-
5130 return rc;
executed 132425 times by 435 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
132425
5131}-
5132-
5133/*-
5134** This function is called to obtain a shared lock on the database file.-
5135** It is illegal to call sqlite3PagerGet() until after this function-
5136** has been successfully called. If a shared-lock is already held when-
5137** this function is called, it is a no-op.-
5138**-
5139** The following operations are also performed by this function.-
5140**-
5141** 1) If the pager is currently in PAGER_OPEN state (no lock held-
5142** on the database file), then an attempt is made to obtain a-
5143** SHARED lock on the database file. Immediately after obtaining-
5144** the SHARED lock, the file-system is checked for a hot-journal,-
5145** which is played back if present. Following any hot-journal -
5146** rollback, the contents of the cache are validated by checking-
5147** the 'change-counter' field of the database file header and-
5148** discarded if they are found to be invalid.-
5149**-
5150** 2) If the pager is running in exclusive-mode, and there are currently-
5151** no outstanding references to any pages, and is in the error state,-
5152** then an attempt is made to clear the error state by discarding-
5153** the contents of the page cache and rolling back any open journal-
5154** file.-
5155**-
5156** If everything is successful, SQLITE_OK is returned. If an IO error -
5157** occurs while locking the database, checking for a hot-journal file or -
5158** rolling back a journal file, the IO error code is returned.-
5159*/-
5160int sqlite3PagerSharedLock(Pager *pPager){-
5161 int rc = SQLITE_OK; /* Return code */-
5162-
5163 /* This routine is only called from b-tree and only when there are no-
5164 ** outstanding pages. This implies that the pager state should either-
5165 ** be OPEN or READER. READER is only possible if the pager is or was in -
5166 ** exclusive access mode. */-
5167 assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );-
5168 assert( assert_pager_state(pPager) );-
5169 assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );-
5170 assert( pPager->errCode==SQLITE_OK );-
5171-
5172 if( !pagerUseWal(pPager) && pPager->eState==PAGER_OPEN ){
!((pPager)->pWal!=0)Description
TRUEevaluated 204723 times by 436 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 57618 times by 47 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
pPager->eState==0Description
TRUEevaluated 132512 times by 436 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 72211 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
57618-204723
5173 int bHotJournal = 1; /* True if there exists a hot journal-file */-
5174-
5175 assert( !MEMDB );-
5176 assert( pPager->tempFile==0 || pPager->eLock==EXCLUSIVE_LOCK );-
5177-
5178 rc = pager_wait_on_lock(pPager, SHARED_LOCK);-
5179 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 65 times by 6 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (59)
  • Self test (61)
FALSEevaluated 132447 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
65-132447
5180 assert( pPager->eLock==NO_LOCK || pPager->eLock==UNKNOWN_LOCK );-
5181 goto failed;
executed 65 times by 6 tests: goto failed;
Executed by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (59)
  • Self test (61)
65
5182 }-
5183-
5184 /* If a journal file exists, and there is no RESERVED lock on the-
5185 ** database file, then it either needs to be played back or deleted.-
5186 */-
5187 if( pPager->eLock<=SHARED_LOCK ){
pPager->eLock<=1Description
TRUEevaluated 132425 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
22-132425
5188 rc = hasHotJournal(pPager, &bHotJournal);-
5189 }
executed 132425 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
132425
5190 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 132398 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
49-132398
5191 goto failed;
executed 49 times by 1 test: goto failed;
Executed by:
  • Self test (438)
49
5192 }-
5193 if( bHotJournal ){
bHotJournalDescription
TRUEevaluated 438 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 131960 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
438-131960
5194 if( pPager->readOnly ){
pPager->readOnlyDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 437 times by 1 test
Evaluated by:
  • Self test (438)
1-437
5195 rc = SQLITE_READONLY_ROLLBACK;-
5196 goto failed;
executed 1 time by 1 test: goto failed;
Executed by:
  • Self test (438)
1
5197 }-
5198-
5199 /* Get an EXCLUSIVE lock on the database file. At this point it is-
5200 ** important that a RESERVED lock is not obtained on the way to the-
5201 ** EXCLUSIVE lock. If it were, another process might open the-
5202 ** database file, detect the RESERVED lock, and conclude that the-
5203 ** database is safe to read while this process is still rolling the -
5204 ** hot-journal back.-
5205 ** -
5206 ** Because the intermediate RESERVED lock is not requested, any-
5207 ** other process attempting to access the database file will get to -
5208 ** this point in the code and fail to obtain its own EXCLUSIVE lock -
5209 ** on the database file.-
5210 **-
5211 ** Unless the pager is in locking_mode=exclusive mode, the lock is-
5212 ** downgraded to SHARED_LOCK before this function returns.-
5213 */-
5214 rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);-
5215 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 437 times by 1 test
Evaluated by:
  • Self test (438)
0-437
5216 goto failed;
never executed: goto failed;
0
5217 }-
5218 -
5219 /* If it is not already open and the file exists on disk, open the -
5220 ** journal for read/write access. Write access is required because -
5221 ** in exclusive-access mode the file descriptor will be kept open -
5222 ** and possibly used for a transaction later on. Also, write-access -
5223 ** is usually required to finalize the journal in journal_mode=persist -
5224 ** mode (and also for journal_mode=truncate on some systems).-
5225 **-
5226 ** If the journal does not exist, it usually means that some -
5227 ** other connection managed to get in and roll it back before -
5228 ** this connection obtained the exclusive lock above. Or, it -
5229 ** may mean that the pager was in the error-state when this-
5230 ** function was called and the journal file does not exist.-
5231 */-
5232 if( !isOpen(pPager->jfd) ){
!((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 435 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-435
5233 sqlite3_vfs * const pVfs = pPager->pVfs;-
5234 int bExists; /* True if journal file exists */-
5235 rc = sqlite3OsAccess(-
5236 pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &bExists);-
5237 if( rc==SQLITE_OK && bExists ){
rc==0Description
TRUEevaluated 435 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
bExistsDescription
TRUEevaluated 413 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
0-435
5238 int fout = 0;-
5239 int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL;-
5240 assert( !pPager->tempFile );-
5241 rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout);-
5242 assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );-
5243 if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){
rc==0Description
TRUEevaluated 411 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
fout&0x00000001Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 409 times by 1 test
Evaluated by:
  • Self test (438)
2-411
5244 rc = SQLITE_CANTOPEN_BKPT;-
5245 sqlite3OsClose(pPager->jfd);-
5246 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
5247 }
executed 413 times by 1 test: end of block
Executed by:
  • Self test (438)
413
5248 }
executed 435 times by 1 test: end of block
Executed by:
  • Self test (438)
435
5249 -
5250 /* Playback and delete the journal. Drop the database write-
5251 ** lock and reacquire the read lock. Purge the cache before-
5252 ** playing back the hot-journal so that we don't end up with-
5253 ** an inconsistent cache. Sync the hot journal before playing-
5254 ** it back since the process that crashed and left the hot journal-
5255 ** probably did not sync it and we are required to always sync-
5256 ** the journal before playing it back.-
5257 */-
5258 if( isOpen(pPager->jfd) ){
((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 411 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 26 times by 1 test
Evaluated by:
  • Self test (438)
26-411
5259 assert( rc==SQLITE_OK );-
5260 rc = pagerSyncHotJournal(pPager);-
5261 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 411 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-411
5262 rc = pager_playback(pPager, !pPager->tempFile);-
5263 pPager->eState = PAGER_OPEN;-
5264 }
executed 411 times by 1 test: end of block
Executed by:
  • Self test (438)
411
5265 }else if( !pPager->exclusiveMode ){
executed 411 times by 1 test: end of block
Executed by:
  • Self test (438)
!pPager->exclusiveModeDescription
TRUEevaluated 19 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
7-411
5266 pagerUnlockDb(pPager, SHARED_LOCK);-
5267 }
executed 19 times by 1 test: end of block
Executed by:
  • Self test (438)
19
5268-
5269 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 433 times by 1 test
Evaluated by:
  • Self test (438)
4-433
5270 /* This branch is taken if an error occurs while trying to open-
5271 ** or roll back a hot-journal while holding an EXCLUSIVE lock. The-
5272 ** pager_unlock() routine will be called before returning to unlock-
5273 ** the file. If the unlock attempt fails, then Pager.eLock must be-
5274 ** set to UNKNOWN_LOCK (see the comment above the #define for -
5275 ** UNKNOWN_LOCK above for an explanation). -
5276 **-
5277 ** In order to get pager_unlock() to do this, set Pager.eState to-
5278 ** PAGER_ERROR now. This is not actually counted as a transition-
5279 ** to ERROR state in the state diagram at the top of this file,-
5280 ** since we know that the same call to pager_unlock() will very-
5281 ** shortly transition the pager object to the OPEN state. Calling-
5282 ** assert_pager_state() would fail now, as it should not be possible-
5283 ** to be in ERROR state when there are zero outstanding page -
5284 ** references.-
5285 */-
5286 pager_error(pPager, rc);-
5287 goto failed;
executed 4 times by 1 test: goto failed;
Executed by:
  • Self test (438)
4
5288 }-
5289-
5290 assert( pPager->eState==PAGER_OPEN );-
5291 assert( (pPager->eLock==SHARED_LOCK)-
5292 || (pPager->exclusiveMode && pPager->eLock>SHARED_LOCK)-
5293 );-
5294 }
executed 433 times by 1 test: end of block
Executed by:
  • Self test (438)
433
5295-
5296 if( !pPager->tempFile && pPager->hasHeldSharedLock ){
!pPager->tempFileDescription
TRUEevaluated 132393 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEnever evaluated
pPager->hasHeldSharedLockDescription
TRUEevaluated 113757 times by 395 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 18636 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
0-132393
5297 /* The shared-lock has just been acquired then check to-
5298 ** see if the database has been modified. If the database has changed,-
5299 ** flush the cache. The hasHeldSharedLock flag prevents this from-
5300 ** occurring on the very first access to a file, in order to save a-
5301 ** single unnecessary sqlite3OsRead() call at the start-up.-
5302 **-
5303 ** Database changes are detected by looking at 15 bytes beginning-
5304 ** at offset 24 into the file. The first 4 of these 16 bytes are-
5305 ** a 32-bit counter that is incremented with each change. The-
5306 ** other bytes change randomly with each file change when-
5307 ** a codec is in use.-
5308 ** -
5309 ** There is a vanishingly small chance that a change will not be -
5310 ** detected. The chance of an undetected change is so small that-
5311 ** it can be neglected.-
5312 */-
5313 char dbFileVers[sizeof(pPager->dbFileVers)];-
5314-
5315 IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers)));-
5316 rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24);-
5317 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 3809 times by 11 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
FALSEevaluated 109948 times by 395 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
3809-109948
5318 if( rc!=SQLITE_IOERR_SHORT_READ ){
rc!=(10 | (2<<8))Description
TRUEevaluated 31 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3778 times by 11 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
31-3778
5319 goto failed;
executed 31 times by 1 test: goto failed;
Executed by:
  • Self test (438)
31
5320 }-
5321 memset(dbFileVers, 0, sizeof(dbFileVers));-
5322 }
executed 3778 times by 11 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
3778
5323-
5324 if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){
memcmp(pPager-...bFileVers))!=0Description
TRUEevaluated 653 times by 22 tests
Evaluated by:
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (30)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (52)
  • Self test (53)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
FALSEevaluated 113073 times by 389 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
653-113073
5325 pager_reset(pPager);-
5326-
5327 /* Unmap the database file. It is possible that external processes-
5328 ** may have truncated the database file and then extended it back-
5329 ** to its original size while this process was not holding a lock.-
5330 ** In this case there may exist a Pager.pMap mapping that appears-
5331 ** to be the right size but is not actually valid. Avoid this-
5332 ** possibility by unmapping the db here. */-
5333 if( USEFETCH(pPager) ){
((pPager)->bUseFetch)Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 621 times by 22 tests
Evaluated by:
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (30)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (52)
  • Self test (53)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
32-621
5334 sqlite3OsUnfetch(pPager->fd, 0, 0);-
5335 }
executed 32 times by 1 test: end of block
Executed by:
  • Self test (438)
32
5336 }
executed 653 times by 22 tests: end of block
Executed by:
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (30)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (52)
  • Self test (53)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
653
5337 }
executed 113726 times by 395 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
113726
5338-
5339 /* If there is a WAL file in the file-system, open this database in WAL-
5340 ** mode. Otherwise, the following function call is a no-op.-
5341 */-
5342 rc = pagerOpenWalIfPresent(pPager);-
5343#ifndef SQLITE_OMIT_WAL-
5344 assert( pPager->pWal==0 || rc==SQLITE_OK );-
5345#endif-
5346 }
executed 132362 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
132362
5347-
5348 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 58316 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 203875 times by 421 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
58316-203875
5349 assert( rc==SQLITE_OK );-
5350 rc = pagerBeginReadTransaction(pPager);-
5351 }
executed 58316 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
58316
5352-
5353 if( pPager->tempFile==0 && pPager->eState==PAGER_OPEN && rc==SQLITE_OK ){
pPager->tempFile==0Description
TRUEevaluated 190085 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 72106 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
pPager->eState==0Description
TRUEevaluated 189980 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 105 times by 1 test
Evaluated by:
  • Self test (438)
rc==0Description
TRUEevaluated 189892 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 88 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (50)
  • Self test (51)
88-190085
5354 rc = pagerPagecount(pPager, &pPager->dbSize);-
5355 }
executed 189892 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
189892
5356-
5357 failed:
code before this statement executed 262191 times by 435 tests: failed:
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
262191
5358 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 292 times by 8 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (59)
  • Self test (61)
FALSEevaluated 262049 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
292-262049
5359 assert( !MEMDB );-
5360 pager_unlock(pPager);-
5361 assert( pPager->eState==PAGER_OPEN );-
5362 }else{
executed 292 times by 8 tests: end of block
Executed by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (59)
  • Self test (61)
292
5363 pPager->eState = PAGER_READER;-
5364 pPager->hasHeldSharedLock = 1;-
5365 }
executed 262049 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
262049
5366 return rc;
executed 262341 times by 436 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
262341
5367}-
5368-
5369/*-
5370** If the reference count has reached zero, rollback any active-
5371** transaction and unlock the pager.-
5372**-
5373** Except, in locking_mode=EXCLUSIVE when there is nothing to in-
5374** the rollback journal, the unlock is not performed and there is-
5375** nothing to rollback, so this routine is a no-op.-
5376*/ -
5377static void pagerUnlockIfUnused(Pager *pPager){-
5378 if( sqlite3PcacheRefCount(pPager->pPCache)==0 ){
sqlite3PcacheR...r->pPCache)==0Description
TRUEevaluated 261661 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 5115 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (27)
  • Self test (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (6)
  • Self test (79)
  • Self test (88)
5115-261661
5379 assert( pPager->nMmapOut==0 ); /* because page1 is never memory mapped */-
5380 pagerUnlockAndRollback(pPager);-
5381 }
executed 261661 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
261661
5382}
executed 266776 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
266776
5383-
5384/*-
5385** The page getter methods each try to acquire a reference to a-
5386** page with page number pgno. If the requested reference is -
5387** successfully obtained, it is copied to *ppPage and SQLITE_OK returned.-
5388**-
5389** There are different implementations of the getter method depending-
5390** on the current state of the pager.-
5391**-
5392** getPageNormal() -- The normal getter-
5393** getPageError() -- Used if the pager is in an error state-
5394** getPageMmap() -- Used if memory-mapped I/O is enabled-
5395**-
5396** If the requested page is already in the cache, it is returned. -
5397** Otherwise, a new page object is allocated and populated with data-
5398** read from the database file. In some cases, the pcache module may-
5399** choose not to allocate a new page object and may reuse an existing-
5400** object with no outstanding references.-
5401**-
5402** The extra data appended to a page is always initialized to zeros the -
5403** first time a page is loaded into memory. If the page requested is -
5404** already in the cache when this function is called, then the extra-
5405** data is left as it was when the page object was last used.-
5406**-
5407** If the database image is smaller than the requested page or if -
5408** the flags parameter contains the PAGER_GET_NOCONTENT bit and the -
5409** requested page is not already stored in the cache, then no -
5410** actual disk read occurs. In this case the memory image of the -
5411** page is initialized to all zeros. -
5412**-
5413** If PAGER_GET_NOCONTENT is true, it means that we do not care about-
5414** the contents of the page. This occurs in two scenarios:-
5415**-
5416** a) When reading a free-list leaf page from the database, and-
5417**-
5418** b) When a savepoint is being rolled back and we need to load-
5419** a new page into the cache to be filled with the data read-
5420** from the savepoint journal.-
5421**-
5422** If PAGER_GET_NOCONTENT is true, then the data returned is zeroed instead-
5423** of being read from the database. Additionally, the bits corresponding-
5424** to pgno in Pager.pInJournal (bitvec of pages already written to the-
5425** journal file) and the PagerSavepoint.pInSavepoint bitvecs of any open-
5426** savepoints are set. This means if the page is made writable at any-
5427** point in the future, using a call to sqlite3PagerWrite(), its contents-
5428** will not be journaled. This saves IO.-
5429**-
5430** The acquisition might fail for several reasons. In all cases,-
5431** an appropriate error code is returned and *ppPage is set to NULL.-
5432**-
5433** See also sqlite3PagerLookup(). Both this routine and Lookup() attempt-
5434** to find a page in the in-memory cache first. If the page is not already-
5435** in memory, this routine goes to disk to read it in whereas Lookup()-
5436** just returns 0. This routine acquires a read-lock the first time it-
5437** has to go to disk, and could also playback an old journal if necessary.-
5438** Since Lookup() never goes to disk, it never has to deal with locks-
5439** or journal files.-
5440*/-
5441static int getPageNormal(-
5442 Pager *pPager, /* The pager open on the database file */-
5443 Pgno pgno, /* Page number to fetch */-
5444 DbPage **ppPage, /* Write a pointer to the page here */-
5445 int flags /* PAGER_GET_XXX flags */-
5446){-
5447 int rc = SQLITE_OK;-
5448 PgHdr *pPg;-
5449 u8 noContent; /* True if PAGER_GET_NOCONTENT is set */-
5450 sqlite3_pcache_page *pBase;-
5451-
5452 assert( pPager->errCode==SQLITE_OK );-
5453 assert( pPager->eState>=PAGER_READER );-
5454 assert( assert_pager_state(pPager) );-
5455 assert( pPager->hasHeldSharedLock==1 );-
5456-
5457 if( pgno==0 ) return SQLITE_CORRUPT_BKPT;
executed 2 times by 1 test: return sqlite3CorruptError(5457);
Executed by:
  • Self test (438)
pgno==0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 23373814 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
2-23373814
5458 pBase = sqlite3PcacheFetch(pPager->pPCache, pgno, 3);-
5459 if( pBase==0 ){
pBase==0Description
TRUEevaluated 1489725 times by 27 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
FALSEevaluated 21884089 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
1489725-21884089
5460 pPg = 0;-
5461 rc = sqlite3PcacheFetchStress(pPager->pPCache, pgno, &pBase);-
5462 if( rc!=SQLITE_OK ) goto pager_acquire_err;
never executed: goto pager_acquire_err;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 1489725 times by 27 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
0-1489725
5463 if( pBase==0 ){
pBase==0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1489717 times by 27 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
8-1489717
5464 rc = SQLITE_NOMEM_BKPT;-
5465 goto pager_acquire_err;
executed 8 times by 1 test: goto pager_acquire_err;
Executed by:
  • Self test (438)
8
5466 }-
5467 }
executed 1489717 times by 27 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
1489717
5468 pPg = *ppPage = sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pBase);-
5469 assert( pPg==(*ppPage) );-
5470 assert( pPg->pgno==pgno );-
5471 assert( pPg->pPager==pPager || pPg->pPager==0 );-
5472-
5473 noContent = (flags & PAGER_GET_NOCONTENT)!=0;-
5474 if( pPg->pPager && !noContent ){
pPg->pPagerDescription
TRUEevaluated 16660880 times by 434 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 6712926 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
!noContentDescription
TRUEevaluated 16650057 times by 434 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 10823 times by 1 test
Evaluated by:
  • Self test (438)
10823-16660880
5475 /* In this case the pcache already contains an initialized copy of-
5476 ** the page. Return without further ado. */-
5477 assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) );-
5478 pPager->aStat[PAGER_STAT_HIT]++;-
5479 return SQLITE_OK;
executed 16650057 times by 434 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
16650057
5480-
5481 }else{-
5482 /* The pager cache has created a new page. Its content needs to -
5483 ** be initialized. But first some error checks:-
5484 **-
5485 ** (1) The maximum page number is 2^31-
5486 ** (2) Never try to fetch the locking page-
5487 */-
5488 if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){
pgno>2147483647Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6723748 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
pgno==((Pgno)(...pageSize))+1))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6723746 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
1-6723748
5489 rc = SQLITE_CORRUPT_BKPT;-
5490 goto pager_acquire_err;
executed 3 times by 1 test: goto pager_acquire_err;
Executed by:
  • Self test (438)
3
5491 }-
5492-
5493 pPg->pPager = pPager;-
5494-
5495 assert( !isOpen(pPager->fd) || !MEMDB );-
5496 if( !isOpen(pPager->fd) || pPager->dbSize<pgno || noContent ){
!((pPager->fd)->pMethods!=0)Description
TRUEevaluated 241048 times by 17 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
FALSEevaluated 6482698 times by 435 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
pPager->dbSize<pgnoDescription
TRUEevaluated 627951 times by 311 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
FALSEevaluated 5854747 times by 432 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
noContentDescription
TRUEevaluated 34860 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5819887 times by 432 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
34860-6482698
5497 if( pgno>pPager->mxPgno ){
pgno>pPager->mxPgnoDescription
TRUEevaluated 7 times by 2 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
FALSEevaluated 903852 times by 322 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
7-903852
5498 rc = SQLITE_FULL;-
5499 goto pager_acquire_err;
executed 7 times by 2 tests: goto pager_acquire_err;
Executed by:
  • Self test (39)
  • Self test (438)
7
5500 }-
5501 if( noContent ){
noContentDescription
TRUEevaluated 835716 times by 303 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
FALSEevaluated 68136 times by 31 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • Self test (53)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
  • Self test (77)
  • ...
68136-835716
5502 /* Failure to set the bits in the InJournal bit-vectors is benign.-
5503 ** It merely means that we might do some extra work to journal a -
5504 ** page that does not need to be journaled. Nevertheless, be sure -
5505 ** to test the case where a malloc error occurs while trying to set -
5506 ** a bit in a bit vector.-
5507 */-
5508 sqlite3BeginBenignMalloc();-
5509 if( pgno<=pPager->dbOrigSize ){
pgno<=pPager->dbOrigSizeDescription
TRUEevaluated 34951 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 800765 times by 303 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
34951-800765
5510 TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno);-
5511 testcase( rc==SQLITE_NOMEM );-
5512 }
executed 34951 times by 1 test: end of block
Executed by:
  • Self test (438)
34951
5513 TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno);-
5514 testcase( rc==SQLITE_NOMEM );-
5515 sqlite3EndBenignMalloc();-
5516 }
executed 835716 times by 303 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
835716
5517 memset(pPg->pData, 0, pPager->pageSize);-
5518 IOTRACE(("ZERO %p %d\n", pPager, pgno));-
5519 }else{
executed 903852 times by 322 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
903852
5520 assert( pPg->pPager==pPager );-
5521 pPager->aStat[PAGER_STAT_MISS]++;-
5522 rc = readDbPage(pPg);-
5523 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 57 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5819830 times by 432 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
57-5819830
5524 goto pager_acquire_err;
executed 57 times by 1 test: goto pager_acquire_err;
Executed by:
  • Self test (438)
57
5525 }-
5526 }
executed 5819830 times by 432 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
5819830
5527 pager_set_pagehash(pPg);-
5528 }-
5529 return SQLITE_OK;
executed 6723682 times by 435 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
6723682
5530-
5531pager_acquire_err:-
5532 assert( rc!=SQLITE_OK );-
5533 if( pPg ){
pPgDescription
TRUEevaluated 67 times by 2 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
8-67
5534 sqlite3PcacheDrop(pPg);-
5535 }
executed 67 times by 2 tests: end of block
Executed by:
  • Self test (39)
  • Self test (438)
67
5536 pagerUnlockIfUnused(pPager);-
5537 *ppPage = 0;-
5538 return rc;
executed 75 times by 2 tests: return rc;
Executed by:
  • Self test (39)
  • Self test (438)
75
5539}-
5540-
5541#if SQLITE_MAX_MMAP_SIZE>0-
5542/* The page getter for when memory-mapped I/O is enabled */-
5543static int getPageMMap(-
5544 Pager *pPager, /* The pager open on the database file */-
5545 Pgno pgno, /* Page number to fetch */-
5546 DbPage **ppPage, /* Write a pointer to the page here */-
5547 int flags /* PAGER_GET_XXX flags */-
5548){-
5549 int rc = SQLITE_OK;-
5550 PgHdr *pPg = 0;-
5551 u32 iFrame = 0; /* Frame to read from WAL file */-
5552-
5553 /* It is acceptable to use a read-only (mmap) page for any page except-
5554 ** page 1 if there is no write-transaction open or the ACQUIRE_READONLY-
5555 ** flag was specified by the caller. And so long as the db is not a -
5556 ** temporary or in-memory database. */-
5557 const int bMmapOk = (pgno>1
pgno>1Description
TRUEevaluated 129614 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 2031 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
2031-129614
5558 && (pPager->eState==PAGER_READER || (flags & PAGER_GET_READONLY))
pPager->eState==1Description
TRUEevaluated 77220 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 52394 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
(flags & 0x02)Description
TRUEevaluated 27696 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 24698 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
24698-77220
5559 );-
5560-
5561 assert( USEFETCH(pPager) );-
5562#ifdef SQLITE_HAS_CODEC-
5563 assert( pPager->xCodec==0 );-
5564#endif-
5565-
5566 /* Optimization note: Adding the "pgno<=1" term before "pgno==0" here-
5567 ** allows the compiler optimizer to reuse the results of the "pgno>1"-
5568 ** test in the previous statement, and avoid testing pgno==0 in the-
5569 ** common case where pgno is large. */-
5570 if( pgno<=1 && pgno==0 ){
pgno<=1Description
TRUEevaluated 2031 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 129614 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
pgno==0Description
TRUEnever evaluated
FALSEevaluated 2031 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
0-129614
5571 return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(5571);
0
5572 }-
5573 assert( pPager->eState>=PAGER_READER );-
5574 assert( assert_pager_state(pPager) );-
5575 assert( pPager->hasHeldSharedLock==1 );-
5576 assert( pPager->errCode==SQLITE_OK );-
5577-
5578 if( bMmapOk && pagerUseWal(pPager) ){
bMmapOkDescription
TRUEevaluated 104916 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 26729 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
((pPager)->pWal!=0)Description
TRUEevaluated 132 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 104784 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
132-104916
5579 rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame);-
5580 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 132 times by 1 test
Evaluated by:
  • Self test (438)
0-132
5581 *ppPage = 0;-
5582 return rc;
never executed: return rc;
0
5583 }-
5584 }
executed 132 times by 1 test: end of block
Executed by:
  • Self test (438)
132
5585 if( bMmapOk && iFrame==0 ){
bMmapOkDescription
TRUEevaluated 104916 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 26729 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
iFrame==0Description
TRUEevaluated 104827 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 89 times by 1 test
Evaluated by:
  • Self test (438)
89-104916
5586 void *pData = 0;-
5587 rc = sqlite3OsFetch(pPager->fd, -
5588 (i64)(pgno-1) * pPager->pageSize, pPager->pageSize, &pData-
5589 );-
5590 if( rc==SQLITE_OK && pData ){
rc==0Description
TRUEevaluated 104827 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEnever evaluated
pDataDescription
TRUEevaluated 75402 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 29425 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
0-104827
5591 if( pPager->eState>PAGER_READER || pPager->tempFile ){
pPager->eState>1Description
TRUEevaluated 17374 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEevaluated 58028 times by 1 test
Evaluated by:
  • Self test (438)
pPager->tempFileDescription
TRUEevaluated 1365 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 56663 times by 1 test
Evaluated by:
  • Self test (438)
1365-58028
5592 pPg = sqlite3PagerLookup(pPager, pgno);-
5593 }
executed 18739 times by 2 tests: end of block
Executed by:
  • Self test (33)
  • Self test (438)
18739
5594 if( pPg==0 ){
pPg==0Description
TRUEevaluated 57310 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 18092 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
18092-57310
5595 rc = pagerAcquireMapPage(pPager, pgno, pData, &pPg);-
5596 }else{
executed 57310 times by 1 test: end of block
Executed by:
  • Self test (438)
57310
5597 sqlite3OsUnfetch(pPager->fd, (i64)(pgno-1)*pPager->pageSize, pData);-
5598 }
executed 18092 times by 2 tests: end of block
Executed by:
  • Self test (33)
  • Self test (438)
18092
5599 if( pPg ){
pPgDescription
TRUEevaluated 75402 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
FALSEnever evaluated
0-75402
5600 assert( rc==SQLITE_OK );-
5601 *ppPage = pPg;-
5602 return SQLITE_OK;
executed 75402 times by 2 tests: return 0;
Executed by:
  • Self test (33)
  • Self test (438)
75402
5603 }-
5604 }
never executed: end of block
0
5605 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 29425 times by 2 tests
Evaluated by:
  • Self test (33)
  • Self test (438)
0-29425
5606 *ppPage = 0;-
5607 return rc;
never executed: return rc;
0
5608 }-
5609 }
executed 29425 times by 2 tests: end of block
Executed by:
  • Self test (33)
  • Self test (438)
29425
5610 return getPageNormal(pPager, pgno, ppPage, flags);
executed 56243 times by 2 tests: return getPageNormal(pPager, pgno, ppPage, flags);
Executed by:
  • Self test (33)
  • Self test (438)
56243
5611}-
5612#endif /* SQLITE_MAX_MMAP_SIZE>0 */-
5613-
5614/* The page getter method for when the pager is an error state */-
5615static int getPageError(-
5616 Pager *pPager, /* The pager open on the database file */-
5617 Pgno pgno, /* Page number to fetch */-
5618 DbPage **ppPage, /* Write a pointer to the page here */-
5619 int flags /* PAGER_GET_XXX flags */-
5620){-
5621 UNUSED_PARAMETER(pgno);-
5622 UNUSED_PARAMETER(flags);-
5623 assert( pPager->errCode!=SQLITE_OK );-
5624 *ppPage = 0;-
5625 return pPager->errCode;
executed 60410 times by 5 tests: return pPager->errCode;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
60410
5626}-
5627-
5628-
5629/* Dispatch all page fetch requests to the appropriate getter method.-
5630*/-
5631int sqlite3PagerGet(-
5632 Pager *pPager, /* The pager open on the database file */-
5633 Pgno pgno, /* Page number to fetch */-
5634 DbPage **ppPage, /* Write a pointer to the page here */-
5635 int flags /* PAGER_GET_XXX flags */-
5636){-
5637 return pPager->xGet(pPager, pgno, ppPage, flags);
executed 23509628 times by 435 tests: return pPager->xGet(pPager, pgno, ppPage, flags);
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
23509628
5638}-
5639-
5640/*-
5641** Acquire a page if it is already in the in-memory cache. Do-
5642** not read the page from disk. Return a pointer to the page,-
5643** or 0 if the page is not in cache. -
5644**-
5645** See also sqlite3PagerGet(). The difference between this routine-
5646** and sqlite3PagerGet() is that _get() will go to the disk and read-
5647** in the page if the page is not already in cache. This routine-
5648** returns NULL if the page is not in cache or if a disk I/O error -
5649** has ever happened.-
5650*/-
5651DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){-
5652 sqlite3_pcache_page *pPage;-
5653 assert( pPager!=0 );-
5654 assert( pgno!=0 );-
5655 assert( pPager->pPCache!=0 );-
5656 pPage = sqlite3PcacheFetch(pPager->pPCache, pgno, 0);-
5657 assert( pPage==0 || pPager->hasHeldSharedLock );-
5658 if( pPage==0 ) return 0;
executed 142389 times by 17 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
pPage==0Description
TRUEevaluated 142389 times by 17 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 99713 times by 359 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • ...
99713-142389
5659 return sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pPage);
executed 99713 times by 359 tests: return sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pPage);
Executed by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • ...
99713
5660}-
5661-
5662/*-
5663** Release a page reference.-
5664**-
5665** The sqlite3PagerUnref() and sqlite3PagerUnrefNotNull() may only be-
5666** used if we know that the page being released is not the last page.-
5667** The btree layer always holds page1 open until the end, so these first-
5668** to routines can be used to release any page other than BtShared.pPage1.-
5669**-
5670** Use sqlite3PagerUnrefPageOne() to release page1. This latter routine-
5671** checks the total number of outstanding pages and if the number of-
5672** pages reaches zero it drops the database lock.-
5673*/-
5674void sqlite3PagerUnrefNotNull(DbPage *pPg){-
5675 TESTONLY( Pager *pPager = pPg->pPager; )-
5676 assert( pPg!=0 );-
5677 if( pPg->flags & PGHDR_MMAP ){
pPg->flags & 0x020Description
TRUEevaluated 57310 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 23451366 times by 434 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
57310-23451366
5678 assert( pPg->pgno!=1 ); /* Page1 is never memory mapped */-
5679 pagerReleaseMapPage(pPg);-
5680 }else{
executed 57310 times by 1 test: end of block
Executed by:
  • Self test (438)
57310
5681 sqlite3PcacheRelease(pPg);-
5682 }
executed 23451366 times by 434 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
23451366
5683 /* Do not use this routine to release the last reference to page1 */-
5684 assert( sqlite3PcacheRefCount(pPager->pPCache)>0 );-
5685}
executed 23508676 times by 434 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
23508676
5686void sqlite3PagerUnref(DbPage *pPg){-
5687 if( pPg ) sqlite3PagerUnrefNotNull(pPg);
executed 3326506 times by 396 tests: sqlite3PagerUnrefNotNull(pPg);
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
pPgDescription
TRUEevaluated 3326506 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
FALSEevaluated 56931 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
56931-3326506
5688}
executed 3383437 times by 405 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
3383437
5689void sqlite3PagerUnrefPageOne(DbPage *pPg){-
5690 Pager *pPager;-
5691 assert( pPg!=0 );-
5692 assert( pPg->pgno==1 );-
5693 assert( (pPg->flags & PGHDR_MMAP)==0 ); /* Page1 is never memory mapped */-
5694 pPager = pPg->pPager;-
5695 sqlite3PagerResetLockTimeout(pPager);-
5696 sqlite3PcacheRelease(pPg);-
5697 pagerUnlockIfUnused(pPager);-
5698}
executed 266701 times by 435 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
266701
5699-
5700/*-
5701** This function is called at the start of every write transaction.-
5702** There must already be a RESERVED or EXCLUSIVE lock on the database -
5703** file when this routine is called.-
5704**-
5705** Open the journal file for pager pPager and write a journal header-
5706** to the start of it. If there are active savepoints, open the sub-journal-
5707** as well. This function is only used when the journal file is being -
5708** opened to write a rollback log for a transaction. It is not used -
5709** when opening a hot journal file to roll it back.-
5710**-
5711** If the journal file is already open (as it may be in exclusive mode),-
5712** then this function just writes a journal header to the start of the-
5713** already open file. -
5714**-
5715** Whether or not the journal file is opened by this function, the-
5716** Pager.pInJournal bitvec structure is allocated.-
5717**-
5718** Return SQLITE_OK if everything is successful. Otherwise, return -
5719** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or -
5720** an IO error code if opening or writing the journal file fails.-
5721*/-
5722static int pager_open_journal(Pager *pPager){-
5723 int rc = SQLITE_OK; /* Return code */-
5724 sqlite3_vfs * const pVfs = pPager->pVfs; /* Local cache of vfs pointer */-
5725-
5726 assert( pPager->eState==PAGER_WRITER_LOCKED );-
5727 assert( assert_pager_state(pPager) );-
5728 assert( pPager->pInJournal==0 );-
5729 -
5730 /* If already in the error state, this function is a no-op. But on-
5731 ** the other hand, this routine is never called if we are already in-
5732 ** an error state. */-
5733 if( NEVER(pPager->errCode) ) return pPager->errCode;
never executed: return pPager->errCode;
(pPager->errCode)Description
TRUEnever evaluated
FALSEevaluated 161168 times by 404 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
0-161168
5734-
5735 if( !pagerUseWal(pPager) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
!((pPager)->pWal!=0)Description
TRUEevaluated 105616 times by 381 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 55552 times by 28 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
pPager->journalMode!=2Description
TRUEevaluated 45315 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 60301 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
45315-105616
5736 pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize);-
5737 if( pPager->pInJournal==0 ){
pPager->pInJournal==0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 45307 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
8-45307
5738 return SQLITE_NOMEM_BKPT;
executed 8 times by 1 test: return 7;
Executed by:
  • Self test (438)
8
5739 }-
5740 -
5741 /* Open the journal file if it is not already open. */-
5742 if( !isOpen(pPager->jfd) ){
!((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 45161 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 146 times by 1 test
Evaluated by:
  • Self test (438)
146-45161
5743 if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){
pPager->journalMode==4Description
TRUEevaluated 1046 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 44115 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
1046-44115
5744 sqlite3MemJournalOpen(pPager->jfd);-
5745 }else{
executed 1046 times by 1 test: end of block
Executed by:
  • Self test (438)
1046
5746 int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;-
5747 int nSpill;-
5748-
5749 if( pPager->tempFile ){
pPager->tempFileDescription
TRUEevaluated 3746 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 40369 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
3746-40369
5750 flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL);-
5751 nSpill = sqlite3Config.nStmtSpill;-
5752 }else{
executed 3746 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
3746
5753 flags |= SQLITE_OPEN_MAIN_JOURNAL;-
5754 nSpill = jrnlBufferSize(pPager);-
5755 }
executed 40369 times by 380 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
40369
5756 -
5757 /* Verify that the database still has the same name as it did when-
5758 ** it was originally opened. */-
5759 rc = databaseIsUnmoved(pPager);-
5760 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 44102 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-44102
5761 rc = sqlite3JournalOpen (-
5762 pVfs, pPager->zJournal, pPager->jfd, flags, nSpill-
5763 );-
5764 }
executed 44102 times by 380 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
44102
5765 }
executed 44115 times by 380 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
44115
5766 assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );-
5767 }
executed 45161 times by 380 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
45161
5768 -
5769 -
5770 /* Write the first journal header to the journal file and open -
5771 ** the sub-journal if necessary.-
5772 */-
5773 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 45266 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 41 times by 1 test
Evaluated by:
  • Self test (438)
41-45266
5774 /* TODO: Check if all of these are really required. */-
5775 pPager->nRec = 0;-
5776 pPager->journalOff = 0;-
5777 pPager->setMaster = 0;-
5778 pPager->journalHdr = 0;-
5779 rc = writeJournalHdr(pPager);-
5780 }
executed 45265 times by 379 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
45265
5781 }
executed 45306 times by 379 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
45306
5782-
5783 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 57 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 161102 times by 403 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
57-161102
5784 sqlite3BitvecDestroy(pPager->pInJournal);-
5785 pPager->pInJournal = 0;-
5786 }else{
executed 57 times by 1 test: end of block
Executed by:
  • Self test (438)
57
5787 assert( pPager->eState==PAGER_WRITER_LOCKED );-
5788 pPager->eState = PAGER_WRITER_CACHEMOD;-
5789 }
executed 161102 times by 403 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
161102
5790-
5791 return rc;
executed 161159 times by 403 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
161159
5792}-
5793-
5794/*-
5795** Begin a write-transaction on the specified pager object. If a -
5796** write-transaction has already been opened, this function is a no-op.-
5797**-
5798** If the exFlag argument is false, then acquire at least a RESERVED-
5799** lock on the database file. If exFlag is true, then acquire at least-
5800** an EXCLUSIVE lock. If such a lock is already held, no locking -
5801** functions need be called.-
5802**-
5803** If the subjInMemory argument is non-zero, then any sub-journal opened-
5804** within this transaction will be opened as an in-memory file. This-
5805** has no effect if the sub-journal is already opened (as it may be when-
5806** running in exclusive mode) or if the transaction does not require a-
5807** sub-journal. If the subjInMemory argument is zero, then any required-
5808** sub-journal is implemented in-memory if pPager is an in-memory database, -
5809** or using a temporary file otherwise.-
5810*/-
5811int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){-
5812 int rc = SQLITE_OK;-
5813-
5814 if( pPager->errCode ) return pPager->errCode;
never executed: return pPager->errCode;
pPager->errCodeDescription
TRUEnever evaluated
FALSEevaluated 164057 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
0-164057
5815 assert( pPager->eState>=PAGER_READER && pPager->eState<PAGER_ERROR );-
5816 pPager->subjInMemory = (u8)subjInMemory;-
5817-
5818 if( ALWAYS(pPager->eState==PAGER_READER) ){
(pPager->eState==1)Description
TRUEevaluated 164057 times by 406 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEnever evaluated
0-164057
5819 assert( pPager->pInJournal==0 );-
5820-
5821 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 55661 times by 28 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
FALSEevaluated 108396 times by 383 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
55661-108396
5822 /* If the pager is configured to use locking_mode=exclusive, and an-
5823 ** exclusive lock on the database is not already held, obtain it now.-
5824 */-
5825 if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){
pPager->exclusiveModeDescription
TRUEevaluated 27 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 55634 times by 28 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
sqlite3WalExcl...ger->pWal, -1)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
13-55634
5826 rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);-
5827 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
3-10
5828 return rc;
executed 3 times by 1 test: return rc;
Executed by:
  • Self test (438)
3
5829 }-
5830 (void)sqlite3WalExclusiveMode(pPager->pWal, 1);-
5831 }
executed 10 times by 1 test: end of block
Executed by:
  • Self test (438)
10
5832-
5833 /* Grab the write lock on the log file. If successful, upgrade to-
5834 ** PAGER_RESERVED state. Otherwise, return an error code to the caller.-
5835 ** The busy-handler is not invoked if another connection already-
5836 ** holds the write-lock. If possible, the upper layer will call it.-
5837 */-
5838 rc = sqlite3WalBeginWriteTransaction(pPager->pWal);-
5839 }else{
executed 55658 times by 28 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
55658
5840 /* Obtain a RESERVED lock on the database file. If the exFlag parameter-
5841 ** is true, then immediately upgrade this to an EXCLUSIVE lock. The-
5842 ** busy-handler callback can be used when upgrading to the EXCLUSIVE-
5843 ** lock, but not when obtaining the RESERVED lock.-
5844 */-
5845 rc = pagerLockDb(pPager, RESERVED_LOCK);-
5846 if( rc==SQLITE_OK && exFlag ){
rc==0Description
TRUEevaluated 108320 times by 381 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
FALSEevaluated 76 times by 4 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (438)
  • Self test (52)
exFlagDescription
TRUEevaluated 1459 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (34)
  • Self test (438)
FALSEevaluated 106861 times by 380 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
76-108320
5847 rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);-
5848 }
executed 1459 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (34)
  • Self test (438)
1459
5849 }
executed 108396 times by 383 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • ...
108396
5850-
5851 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 163921 times by 404 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 133 times by 4 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (438)
  • Self test (52)
133-163921
5852 /* Change to WRITER_LOCKED state.-
5853 **-
5854 ** WAL mode sets Pager.eState to PAGER_WRITER_LOCKED or CACHEMOD-
5855 ** when it has an open transaction, but never to DBMOD or FINISHED.-
5856 ** This is because in those states the code to roll back savepoint -
5857 ** transactions may copy data from the sub-journal into the database -
5858 ** file as well as into the page cache. Which would be incorrect in -
5859 ** WAL mode.-
5860 */-
5861 pPager->eState = PAGER_WRITER_LOCKED;-
5862 pPager->dbHintSize = pPager->dbSize;-
5863 pPager->dbFileSize = pPager->dbSize;-
5864 pPager->dbOrigSize = pPager->dbSize;-
5865 pPager->journalOff = 0;-
5866 }
executed 163921 times by 404 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
163921
5867-
5868 assert( rc==SQLITE_OK || pPager->eState==PAGER_READER );-
5869 assert( rc!=SQLITE_OK || pPager->eState==PAGER_WRITER_LOCKED );-
5870 assert( assert_pager_state(pPager) );-
5871 }
executed 164054 times by 406 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
164054
5872-
5873 PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager)));-
5874 return rc;
executed 164054 times by 406 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
164054
5875}-
5876-
5877/*-
5878** Write page pPg onto the end of the rollback journal.-
5879*/-
5880static SQLITE_NOINLINE int pagerAddPageToRollbackJournal(PgHdr *pPg){-
5881 Pager *pPager = pPg->pPager;-
5882 int rc;-
5883 u32 cksum;-
5884 char *pData2;-
5885 i64 iOff = pPager->journalOff;-
5886-
5887 /* We should never write to the journal file the page that-
5888 ** contains the database locks. The following assert verifies-
5889 ** that we do not. */-
5890 assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );-
5891-
5892 assert( pPager->journalHdr<=pPager->journalOff );-
5893 CODEC2(pPager, pPg->pData, pPg->pgno, 7, return SQLITE_NOMEM_BKPT, pData2);-
5894 cksum = pager_cksum(pPager, (u8*)pData2);-
5895-
5896 /* Even if an IO or diskfull error occurs while journalling the-
5897 ** page in the block above, set the need-sync flag for the page.-
5898 ** Otherwise, when the transaction is rolled back, the logic in-
5899 ** playback_one_page() will think that the page needs to be restored-
5900 ** in the database file. And if an IO error occurs while doing so,-
5901 ** then corruption may follow.-
5902 */-
5903 pPg->flags |= PGHDR_NEED_SYNC;-
5904-
5905 rc = write32bits(pPager->jfd, iOff, pPg->pgno);-
5906 if( rc!=SQLITE_OK ) return rc;
executed 140 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 140 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 354844 times by 376 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
140-354844
5907 rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, iOff+4);-
5908 if( rc!=SQLITE_OK ) return rc;
executed 140 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 140 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 354622 times by 375 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • ...
140-354622
5909 rc = write32bits(pPager->jfd, iOff+pPager->pageSize+4, cksum);-
5910 if( rc!=SQLITE_OK ) return rc;
executed 140 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 140 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 354400 times by 374 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • ...
140-354400
5911-
5912 IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, -
5913 pPager->journalOff, pPager->pageSize));-
5914 PAGER_INCR(sqlite3_pager_writej_count);-
5915 PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n",-
5916 PAGERID(pPager), pPg->pgno, -
5917 ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg)));-
5918-
5919 pPager->journalOff += 8 + pPager->pageSize;-
5920 pPager->nRec++;-
5921 assert( pPager->pInJournal!=0 );-
5922 rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno);-
5923 testcase( rc==SQLITE_NOMEM );-
5924 assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );-
5925 rc |= addToSavepointBitvecs(pPager, pPg->pgno);-
5926 assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );-
5927 return rc;
executed 354400 times by 374 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • ...
354400
5928}-
5929-
5930/*-
5931** Mark a single data page as writeable. The page is written into the -
5932** main journal or sub-journal as required. If the page is written into-
5933** one of the journals, the corresponding bit is set in the -
5934** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs-
5935** of any open savepoints as appropriate.-
5936*/-
5937static int pager_write(PgHdr *pPg){-
5938 Pager *pPager = pPg->pPager;-
5939 int rc = SQLITE_OK;-
5940-
5941 /* This routine is not called unless a write-transaction has already -
5942 ** been started. The journal file may or may not be open at this point.-
5943 ** It is never called in the ERROR state.-
5944 */-
5945 assert( pPager->eState==PAGER_WRITER_LOCKED-
5946 || pPager->eState==PAGER_WRITER_CACHEMOD-
5947 || pPager->eState==PAGER_WRITER_DBMOD-
5948 );-
5949 assert( assert_pager_state(pPager) );-
5950 assert( pPager->errCode==0 );-
5951 assert( pPager->readOnly==0 );-
5952 CHECK_PAGE(pPg);-
5953-
5954 /* The journal file needs to be opened. Higher level routines have already-
5955 ** obtained the necessary locks to begin the write-transaction, but the-
5956 ** rollback journal might not yet be open. Open it now if this is the case.-
5957 **-
5958 ** This is done before calling sqlite3PcacheMakeDirty() on the page. -
5959 ** Otherwise, if it were done after calling sqlite3PcacheMakeDirty(), then-
5960 ** an error might occur and the pager would end up in WRITER_LOCKED state-
5961 ** with pages marked as dirty in the cache.-
5962 */-
5963 if( pPager->eState==PAGER_WRITER_LOCKED ){
pPager->eState==2Description
TRUEevaluated 161168 times by 404 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 1860411 times by 391 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
161168-1860411
5964 rc = pager_open_journal(pPager);-
5965 if( rc!=SQLITE_OK ) return rc;
executed 65 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 161102 times by 403 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
65-161102
5966 }
executed 161102 times by 403 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
161102
5967 assert( pPager->eState>=PAGER_WRITER_CACHEMOD );-
5968 assert( assert_pager_state(pPager) );-
5969-
5970 /* Mark the page that is about to be modified as dirty. */-
5971 sqlite3PcacheMakeDirty(pPg);-
5972-
5973 /* If a rollback journal is in use, them make sure the page that is about-
5974 ** to change is in the rollback journal, or if the page is a new page off-
5975 ** then end of the file, make sure it is marked as PGHDR_NEED_SYNC.-
5976 */-
5977 assert( (pPager->pInJournal!=0) == isOpen(pPager->jfd) );-
5978 if( pPager->pInJournal!=0
pPager->pInJournal!=0Description
TRUEevaluated 1580446 times by 379 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
FALSEevaluated 441067 times by 30 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (79)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (88)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • ...
441067-1580446
5979 && sqlite3BitvecTestNotNull(pPager->pInJournal, pPg->pgno)==0
sqlite3BitvecT... pPg->pgno)==0Description
TRUEevaluated 1184692 times by 379 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • ...
FALSEevaluated 395754 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
395754-1184692
5980 ){-
5981 assert( pagerUseWal(pPager)==0 );-
5982 if( pPg->pgno<=pPager->dbOrigSize ){
pPg->pgno<=pPager->dbOrigSizeDescription
TRUEevaluated 355066 times by 377 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 829626 times by 289 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • Self test (197)
  • ...
355066-829626
5983 rc = pagerAddPageToRollbackJournal(pPg);-
5984 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 420 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 354400 times by 374 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • ...
420-354400
5985 return rc;
executed 420 times by 1 test: return rc;
Executed by:
  • Self test (438)
420
5986 }-
5987 }else{
executed 354400 times by 374 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • ...
354400
5988 if( pPager->eState!=PAGER_WRITER_DBMOD ){
pPager->eState!=4Description
TRUEevaluated 176666 times by 285 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • Self test (197)
  • Self test (198)
  • ...
FALSEevaluated 652960 times by 22 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
176666-652960
5989 pPg->flags |= PGHDR_NEED_SYNC;-
5990 }
executed 176666 times by 285 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • Self test (197)
  • Self test (198)
  • ...
176666
5991 PAGERTRACE(("APPEND %d page %d needSync=%d\n",-
5992 PAGERID(pPager), pPg->pgno,-
5993 ((pPg->flags&PGHDR_NEED_SYNC)?1:0)));-
5994 }
executed 829626 times by 289 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • Self test (197)
  • ...
829626
5995 }-
5996-
5997 /* The PGHDR_DIRTY bit is set above when the page was added to the dirty-list-
5998 ** and before writing the page into the rollback journal. Wait until now,-
5999 ** after the page has been successfully journalled, before setting the-
6000 ** PGHDR_WRITEABLE bit that indicates that the page can be safely modified.-
6001 */-
6002 pPg->flags |= PGHDR_WRITEABLE;-
6003 -
6004 /* If the statement journal is open and the page is not in it,-
6005 ** then write the page into the statement journal.-
6006 */-
6007 if( pPager->nSavepoint>0 ){
pPager->nSavepoint>0Description
TRUEevaluated 124376 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 1896471 times by 395 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
124376-1896471
6008 rc = subjournalPageIfRequired(pPg);-
6009 }
executed 124376 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
124376
6010-
6011 /* Update the database size and return. */-
6012 if( pPager->dbSize<pPg->pgno ){
pPager->dbSize<pPg->pgnoDescription
TRUEevaluated 866379 times by 303 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
FALSEevaluated 1154468 times by 400 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
866379-1154468
6013 pPager->dbSize = pPg->pgno;-
6014 }
executed 866379 times by 303 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • Self test (19)
  • Self test (190)
  • Self test (191)
  • Self test (192)
  • Self test (193)
  • Self test (194)
  • Self test (195)
  • Self test (196)
  • ...
866379
6015 return rc;
executed 2020847 times by 400 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
2020847
6016}-
6017-
6018/*-
6019** This is a variant of sqlite3PagerWrite() that runs when the sector size-
6020** is larger than the page size. SQLite makes the (reasonable) assumption that-
6021** all bytes of a sector are written together by hardware. Hence, all bytes of-
6022** a sector need to be journalled in case of a power loss in the middle of-
6023** a write.-
6024**-
6025** Usually, the sector size is less than or equal to the page size, in which-
6026** case pages can be individually written. This routine only runs in the-
6027** exceptional case where the page size is smaller than the sector size.-
6028*/-
6029static SQLITE_NOINLINE int pagerWriteLargeSector(PgHdr *pPg){-
6030 int rc = SQLITE_OK; /* Return code */-
6031 Pgno nPageCount; /* Total number of pages in database file */-
6032 Pgno pg1; /* First page of the sector pPg is located on. */-
6033 int nPage = 0; /* Number of pages starting at pg1 to journal */-
6034 int ii; /* Loop counter */-
6035 int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */-
6036 Pager *pPager = pPg->pPager; /* The pager that owns pPg */-
6037 Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize);-
6038-
6039 /* Set the doNotSpill NOSYNC bit to 1. This is because we cannot allow-
6040 ** a journal header to be written between the pages journaled by-
6041 ** this function.-
6042 */-
6043 assert( !MEMDB );-
6044 assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)==0 );-
6045 pPager->doNotSpill |= SPILLFLAG_NOSYNC;-
6046-
6047 /* This trick assumes that both the page-size and sector-size are-
6048 ** an integer power of 2. It sets variable pg1 to the identifier-
6049 ** of the first page of the sector pPg is located on.-
6050 */-
6051 pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;-
6052-
6053 nPageCount = pPager->dbSize;-
6054 if( pPg->pgno>nPageCount ){
pPg->pgno>nPageCountDescription
TRUEevaluated 4467 times by 28 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
FALSEevaluated 2534 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
2534-4467
6055 nPage = (pPg->pgno - pg1)+1;-
6056 }else if( (pg1+nPagePerSector-1)>nPageCount ){
executed 4467 times by 28 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
(pg1+nPagePerS...-1)>nPageCountDescription
TRUEevaluated 107 times by 12 tests
Evaluated by:
  • Self test (100)
  • Self test (438)
  • Self test (8)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
FALSEevaluated 2427 times by 23 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
107-4467
6057 nPage = nPageCount+1-pg1;-
6058 }else{
executed 107 times by 12 tests: end of block
Executed by:
  • Self test (100)
  • Self test (438)
  • Self test (8)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
107
6059 nPage = nPagePerSector;-
6060 }
executed 2427 times by 23 tests: end of block
Executed by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
2427
6061 assert(nPage>0);-
6062 assert(pg1<=pPg->pgno);-
6063 assert((pg1+nPage)>pPg->pgno);-
6064-
6065 for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){
ii<nPageDescription
TRUEevaluated 27320 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEevaluated 7001 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
rc==0Description
TRUEevaluated 27320 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEnever evaluated
0-27320
6066 Pgno pg = pg1+ii;-
6067 PgHdr *pPage;-
6068 if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
pg==pPg->pgnoDescription
TRUEevaluated 7001 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEevaluated 20319 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
!sqlite3Bitvec...InJournal, pg)Description
TRUEevaluated 12054 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEevaluated 8265 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
7001-20319
6069 if( pg!=PAGER_MJ_PGNO(pPager) ){
pg!=((Pgno)((s...pageSize))+1))Description
TRUEevaluated 18851 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEevaluated 204 times by 25 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
204-18851
6070 rc = sqlite3PagerGet(pPager, pg, &pPage, 0);-
6071 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 18851 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEnever evaluated
0-18851
6072 rc = pager_write(pPage);-
6073 if( pPage->flags&PGHDR_NEED_SYNC ){
pPage->flags&0x008Description
TRUEevaluated 5546 times by 23 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 13305 times by 29 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
5546-13305
6074 needSync = 1;-
6075 }
executed 5546 times by 23 tests: end of block
Executed by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
5546
6076 sqlite3PagerUnrefNotNull(pPage);-
6077 }
executed 18851 times by 33 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
18851
6078 }
executed 18851 times by 33 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
18851
6079 }else if( (pPage = sqlite3PagerLookup(pPager, pg))!=0 ){
executed 19055 times by 33 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
(pPage = sqlit...Pager, pg))!=0Description
TRUEevaluated 3361 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
FALSEevaluated 4904 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
3361-19055
6080 if( pPage->flags&PGHDR_NEED_SYNC ){
pPage->flags&0x008Description
TRUEevaluated 1987 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1374 times by 10 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
1374-1987
6081 needSync = 1;-
6082 }
executed 1987 times by 1 test: end of block
Executed by:
  • Self test (438)
1987
6083 sqlite3PagerUnrefNotNull(pPage);-
6084 }
executed 3361 times by 10 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (6)
  • Self test (8)
3361
6085 }
executed 27320 times by 33 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
27320
6086-
6087 /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages -
6088 ** starting at pg1, then it needs to be set for all of them. Because-
6089 ** writing to any of these nPage pages may damage the others, the-
6090 ** journal file must contain sync()ed copies of all of them-
6091 ** before any of them can be written out to the database file.-
6092 */-
6093 if( rc==SQLITE_OK && needSync ){
rc==0Description
TRUEevaluated 7001 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEnever evaluated
needSyncDescription
TRUEevaluated 1005 times by 23 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 5996 times by 29 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
0-7001
6094 assert( !MEMDB );-
6095 for(ii=0; ii<nPage; ii++){
ii<nPageDescription
TRUEevaluated 7558 times by 23 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 1005 times by 23 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
1005-7558
6096 PgHdr *pPage = sqlite3PagerLookup(pPager, pg1+ii);-
6097 if( pPage ){
pPageDescription
TRUEevaluated 7543 times by 23 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
FALSEevaluated 15 times by 15 tests
Evaluated by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (438)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
15-7543
6098 pPage->flags |= PGHDR_NEED_SYNC;-
6099 sqlite3PagerUnrefNotNull(pPage);-
6100 }
executed 7543 times by 23 tests: end of block
Executed by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
7543
6101 }
executed 7558 times by 23 tests: end of block
Executed by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
7558
6102 }
executed 1005 times by 23 tests: end of block
Executed by:
  • Self test (10)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
1005
6103-
6104 assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)!=0 );-
6105 pPager->doNotSpill &= ~SPILLFLAG_NOSYNC;-
6106 return rc;
executed 7001 times by 33 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
7001
6107}-
6108-
6109/*-
6110** Mark a data page as writeable. This routine must be called before -
6111** making changes to a page. The caller must check the return value -
6112** of this function and be careful not to change any page data unless -
6113** this routine returns SQLITE_OK.-
6114**-
6115** The difference between this function and pager_write() is that this-
6116** function also deals with the special case where 2 or more pages-
6117** fit on a single disk sector. In this case all co-resident pages-
6118** must have been written to the journal file before returning.-
6119**-
6120** If an error occurs, SQLITE_NOMEM or an IO error code is returned-
6121** as appropriate. Otherwise, SQLITE_OK.-
6122*/-
6123int sqlite3PagerWrite(PgHdr *pPg){-
6124 Pager *pPager = pPg->pPager;-
6125 assert( (pPg->flags & PGHDR_MMAP)==0 );-
6126 assert( pPager->eState>=PAGER_WRITER_LOCKED );-
6127 assert( assert_pager_state(pPager) );-
6128 if( (pPg->flags & PGHDR_WRITEABLE)!=0 && pPager->dbSize>=pPg->pgno ){
(pPg->flags & 0x004)!=0Description
TRUEevaluated 14616930 times by 378 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEevaluated 2009659 times by 404 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
pPager->dbSize>=pPg->pgnoDescription
TRUEevaluated 14616860 times by 378 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • ...
FALSEevaluated 70 times by 1 test
Evaluated by:
  • Self test (438)
70-14616930
6129 if( pPager->nSavepoint ) return subjournalPageIfRequired(pPg);
executed 857009 times by 14 tests: return subjournalPageIfRequired(pPg);
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
pPager->nSavepointDescription
TRUEevaluated 857009 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 13759851 times by 373 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • ...
857009-13759851
6130 return SQLITE_OK;
executed 13759851 times by 373 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • ...
13759851
6131 }else if( pPager->errCode ){
pPager->errCodeDescription
TRUEnever evaluated
FALSEevaluated 2009729 times by 404 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
0-2009729
6132 return pPager->errCode;
never executed: return pPager->errCode;
0
6133 }else if( pPager->sectorSize > (u32)pPager->pageSize ){
pPager->sector...ager->pageSizeDescription
TRUEevaluated 7001 times by 33 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
FALSEevaluated 2002728 times by 372 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
7001-2002728
6134 assert( pPager->tempFile==0 );-
6135 return pagerWriteLargeSector(pPg);
executed 7001 times by 33 tests: return pagerWriteLargeSector(pPg);
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (7)
  • Self test (8)
  • Self test (9)
  • Self test (91)
  • ...
7001
6136 }else{-
6137 return pager_write(pPg);
executed 2002728 times by 372 tests: return pager_write(pPg);
Executed by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
2002728
6138 }-
6139}-
6140-
6141/*-
6142** Return TRUE if the page given in the argument was previously passed-
6143** to sqlite3PagerWrite(). In other words, return TRUE if it is ok-
6144** to change the content of the page.-
6145*/-
6146#ifndef NDEBUG-
6147int sqlite3PagerIswriteable(DbPage *pPg){-
6148 return pPg->flags & PGHDR_WRITEABLE;-
6149}-
6150#endif-
6151-
6152/*-
6153** A call to this routine tells the pager that it is not necessary to-
6154** write the information on page pPg back to the disk, even though-
6155** that page might be marked as dirty. This happens, for example, when-
6156** the page has been added as a leaf of the freelist and so its-
6157** content no longer matters.-
6158**-
6159** The overlying software layer calls this routine when all of the data-
6160** on the given page is unused. The pager marks the page as clean so-
6161** that it does not get written to disk.-
6162**-
6163** Tests show that this optimization can quadruple the speed of large -
6164** DELETE operations.-
6165**-
6166** This optimization cannot be used with a temp-file, as the page may-
6167** have been dirty at the start of the transaction. In that case, if-
6168** memory pressure forces page pPg out of the cache, the data does need -
6169** to be written out to disk so that it may be read back in if the -
6170** current transaction is rolled back.-
6171*/-
6172void sqlite3PagerDontWrite(PgHdr *pPg){-
6173 Pager *pPager = pPg->pPager;-
6174 if( !pPager->tempFile && (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){
!pPager->tempFileDescription
TRUEevaluated 203405 times by 15 tests
Evaluated by:
  • Self test
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 57828 times by 1 test
Evaluated by:
  • Self test (438)
(pPg->flags&0x002)Description
TRUEevaluated 23763 times by 11 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
FALSEevaluated 179642 times by 15 tests
Evaluated by:
  • Self test
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
pPager->nSavepoint==0Description
TRUEevaluated 15671 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 8092 times by 9 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
8092-203405
6175 PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager)));-
6176 IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno))-
6177 pPg->flags |= PGHDR_DONT_WRITE;-
6178 pPg->flags &= ~PGHDR_WRITEABLE;-
6179 testcase( pPg->flags & PGHDR_NEED_SYNC );-
6180 pager_set_pagehash(pPg);-
6181 }
executed 15671 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
15671
6182}
executed 261233 times by 15 tests: end of block
Executed by:
  • Self test
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
261233
6183-
6184/*-
6185** This routine is called to increment the value of the database file -
6186** change-counter, stored as a 4-byte big-endian integer starting at -
6187** byte offset 24 of the pager file. The secondary change counter at-
6188** 92 is also updated, as is the SQLite version number at offset 96.-
6189**-
6190** But this only happens if the pPager->changeCountDone flag is false.-
6191** To avoid excess churning of page 1, the update only happens once.-
6192** See also the pager_write_changecounter() routine that does an -
6193** unconditional update of the change counters.-
6194**-
6195** If the isDirectMode flag is zero, then this is done by calling -
6196** sqlite3PagerWrite() on page 1, then modifying the contents of the-
6197** page data. In this case the file will be updated when the current-
6198** transaction is committed.-
6199**-
6200** The isDirectMode flag may only be non-zero if the library was compiled-
6201** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case,-
6202** if isDirect is non-zero, then the database file is updated directly-
6203** by writing an updated version of page 1 using a call to the -
6204** sqlite3OsWrite() function.-
6205*/-
6206static int pager_incr_changecounter(Pager *pPager, int isDirectMode){-
6207 int rc = SQLITE_OK;-
6208-
6209 assert( pPager->eState==PAGER_WRITER_CACHEMOD-
6210 || pPager->eState==PAGER_WRITER_DBMOD-
6211 );-
6212 assert( assert_pager_state(pPager) );-
6213-
6214 /* Declare and initialize constant integer 'isDirect'. If the-
6215 ** atomic-write optimization is enabled in this build, then isDirect-
6216 ** is initialized to the value passed as the isDirectMode parameter-
6217 ** to this function. Otherwise, it is always set to zero.-
6218 **-
6219 ** The idea is that if the atomic-write optimization is not-
6220 ** enabled at compile time, the compiler can omit the tests of-
6221 ** 'isDirect' below, as well as the block enclosed in the-
6222 ** "if( isDirect )" condition.-
6223 */-
6224#ifndef SQLITE_ENABLE_ATOMIC_WRITE-
6225# define DIRECT_MODE 0-
6226 assert( isDirectMode==0 );-
6227 UNUSED_PARAMETER(isDirectMode);-
6228#else-
6229# define DIRECT_MODE isDirectMode-
6230#endif-
6231-
6232 if( !pPager->changeCountDone && ALWAYS(pPager->dbSize>0) ){
!pPager->changeCountDoneDescription
TRUEevaluated 38340 times by 127 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
FALSEevaluated 181 times by 1 test
Evaluated by:
  • Self test (438)
(pPager->dbSize>0)Description
TRUEevaluated 38340 times by 127 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
FALSEnever evaluated
0-38340
6233 PgHdr *pPgHdr; /* Reference to page 1 */-
6234-
6235 assert( !pPager->tempFile && isOpen(pPager->fd) );-
6236-
6237 /* Open page 1 of the file for writing. */-
6238 rc = sqlite3PagerGet(pPager, 1, &pPgHdr, 0);-
6239 assert( pPgHdr==0 || rc==SQLITE_OK );-
6240-
6241 /* If page one was fetched successfully, and this function is not-
6242 ** operating in direct-mode, make page 1 writable. When not in -
6243 ** direct mode, page 1 is always held in cache and hence the PagerGet()-
6244 ** above is always successful - hence the ALWAYS on rc==SQLITE_OK.-
6245 */-
6246 if( !DIRECT_MODE && ALWAYS(rc==SQLITE_OK) ){
(rc==0)Description
TRUEevaluated 38340 times by 127 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
FALSEnever evaluated
0-38340
6247 rc = sqlite3PagerWrite(pPgHdr);-
6248 }
executed 38340 times by 127 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
38340
6249-
6250 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 38325 times by 127 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
15-38325
6251 /* Actually do the update of the change counter */-
6252 pager_write_changecounter(pPgHdr);-
6253-
6254 /* If running in direct mode, write the contents of page 1 to the file. */-
6255 if( DIRECT_MODE ){
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6256 const void *zBuf;
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6257 assert( pPager->dbFileSize>0 );
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6258 CODEC2(pPager, pPgHdr->pData, 1, 6, rc=SQLITE_NOMEM_BKPT, zBuf);
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6259 if( rc==SQLITE_OK ){
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6260 rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0);
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6261 pPager->aStat[PAGER_STAT_WRITE]++;
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6262 }
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6263 if( rc==SQLITE_OK ){
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6264 /* Update the pager's copy of the change-counter. Otherwise, the
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6265 ** next time a read transaction is opened the cache will be
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6266 ** flushed (as the change-counter values will not match). */
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6267 const void *pCopy = (const void *)&((const char *)zBuf)[24];
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6268 memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers));
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6269 pPager->changeCountDone = 1;
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6270 }
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6271 }else{
dead code: { const void *zBuf; ((void) (0)) ; zBuf=(char*)pPgHdr->pData; if( rc==0 ){ rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); pPager->aStat[2]++; } if( rc==0 ){ const void *pCopy = (const void *)&((const char *)zBuf)[24]; memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); pPager->changeCountDone = 1; } }
-
6272 pPager->changeCountDone = 1;-
6273 }
executed 38325 times by 127 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
38325
6274 }-
6275-
6276 /* Release the page reference. */-
6277 sqlite3PagerUnref(pPgHdr);-
6278 }
executed 38340 times by 127 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
38340
6279 return rc;
executed 38521 times by 127 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
38521
6280}-
6281-
6282/*-
6283** Sync the database file to disk. This is a no-op for in-memory databases-
6284** or pages with the Pager.noSync flag set.-
6285**-
6286** If successful, or if called on a pager for which it is a no-op, this-
6287** function returns SQLITE_OK. Otherwise, an IO error code is returned.-
6288*/-
6289int sqlite3PagerSync(Pager *pPager, const char *zMaster){-
6290 int rc = SQLITE_OK;-
6291 void *pArg = (void*)zMaster;-
6292 rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC, pArg);-
6293 if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK;
executed 38775 times by 47 tests: rc = 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
rc==12Description
TRUEevaluated 38775 times by 47 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
8-38775
6294 if( rc==SQLITE_OK && !pPager->noSync ){
rc==0Description
TRUEevaluated 38775 times by 47 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
!pPager->noSyncDescription
TRUEevaluated 38517 times by 47 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 258 times by 1 test
Evaluated by:
  • Self test (438)
8-38775
6295 assert( !MEMDB );-
6296 rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);-
6297 }
executed 38500 times by 39 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • ...
38500
6298 return rc;
executed 38766 times by 39 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (14)
  • Self test (15)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • ...
38766
6299}-
6300-
6301/*-
6302** This function may only be called while a write-transaction is active in-
6303** rollback. If the connection is in WAL mode, this call is a no-op. -
6304** Otherwise, if the connection does not already have an EXCLUSIVE lock on -
6305** the database file, an attempt is made to obtain one.-
6306**-
6307** If the EXCLUSIVE lock is already held or the attempt to obtain it is-
6308** successful, or the connection is in WAL mode, SQLITE_OK is returned.-
6309** Otherwise, either SQLITE_BUSY or an SQLITE_IOERR_XXX error code is -
6310** returned.-
6311*/-
6312int sqlite3PagerExclusiveLock(Pager *pPager){-
6313 int rc = pPager->errCode;-
6314 assert( assert_pager_state(pPager) );-
6315 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 172117 times by 155 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • ...
FALSEnever evaluated
0-172117
6316 assert( pPager->eState==PAGER_WRITER_CACHEMOD -
6317 || pPager->eState==PAGER_WRITER_DBMOD -
6318 || pPager->eState==PAGER_WRITER_LOCKED -
6319 );-
6320 assert( assert_pager_state(pPager) );-
6321 if( 0==pagerUseWal(pPager) ){
0==((pPager)->pWal!=0)Description
TRUEevaluated 116637 times by 134 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
FALSEevaluated 55480 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
55480-116637
6322 rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);-
6323 }
executed 116637 times by 134 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
116637
6324 }
executed 172117 times by 155 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • ...
172117
6325 return rc;
executed 172117 times by 155 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (20)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • ...
172117
6326}-
6327-
6328/*-
6329** Sync the database file for the pager pPager. zMaster points to the name-
6330** of a master journal file that should be written into the individual-
6331** journal file. zMaster may be NULL, which is interpreted as no master-
6332** journal (a single database transaction).-
6333**-
6334** This routine ensures that:-
6335**-
6336** * The database file change-counter is updated,-
6337** * the journal is synced (unless the atomic-write optimization is used),-
6338** * all dirty pages are written to the database file, -
6339** * the database file is truncated (if required), and-
6340** * the database file synced. -
6341**-
6342** The only thing that remains to commit the transaction is to finalize -
6343** (delete, truncate or zero the first part of) the journal file (or -
6344** delete the master journal file if specified).-
6345**-
6346** Note that if zMaster==NULL, this does not overwrite a previous value-
6347** passed to an sqlite3PagerCommitPhaseOne() call.-
6348**-
6349** If the final parameter - noSync - is true, then the database file itself-
6350** is not synced. The caller must call sqlite3PagerSync() directly to-
6351** sync the database file before calling CommitPhaseTwo() to delete the-
6352** journal file in this case.-
6353*/-
6354int sqlite3PagerCommitPhaseOne(-
6355 Pager *pPager, /* Pager object */-
6356 const char *zMaster, /* If not NULL, the master journal name */-
6357 int noSync /* True to omit the xSync on the db file */-
6358){-
6359 int rc = SQLITE_OK; /* Return code */-
6360-
6361 assert( pPager->eState==PAGER_WRITER_LOCKED-
6362 || pPager->eState==PAGER_WRITER_CACHEMOD-
6363 || pPager->eState==PAGER_WRITER_DBMOD-
6364 || pPager->eState==PAGER_ERROR-
6365 );-
6366 assert( assert_pager_state(pPager) );-
6367-
6368 /* If a prior error occurred, report that error again. */-
6369 if( NEVER(pPager->errCode) ) return pPager->errCode;
never executed: return pPager->errCode;
(pPager->errCode)Description
TRUEnever evaluated
FALSEevaluated 98489 times by 149 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
0-98489
6370-
6371 /* Provide the ability to easily simulate an I/O error during testing */-
6372 if( sqlite3FaultSim(400) ) return SQLITE_IOERR;
never executed: return 10;
sqlite3FaultSim(400)Description
TRUEnever evaluated
FALSEevaluated 98489 times by 149 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
0-98489
6373-
6374 PAGERTRACE(("DATABASE SYNC: File=%s zMaster=%s nSize=%d\n", -
6375 pPager->zFilename, zMaster, pPager->dbSize));-
6376-
6377 /* If no database changes have been made, return early. */-
6378 if( pPager->eState<PAGER_WRITER_CACHEMOD ) return SQLITE_OK;
executed 700 times by 2 tests: return 0;
Executed by:
  • Self test (438)
  • Self test (47)
pPager->eState<3Description
TRUEevaluated 700 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 97789 times by 149 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
700-97789
6379-
6380 assert( MEMDB==0 || pPager->tempFile );-
6381 assert( isOpen(pPager->fd) || pPager->tempFile );-
6382 if( 0==pagerFlushOnCommit(pPager, 1) ){
0==pagerFlushO...mit(pPager, 1)Description
TRUEevaluated 3799 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 93990 times by 149 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
3799-93990
6383 /* If this is an in-memory db, or no pages have been written to, or this-
6384 ** function has already been called, it is mostly a no-op. However, any-
6385 ** backup in progress needs to be restarted. */-
6386 sqlite3BackupRestart(pPager->pBackup);-
6387 }else{
executed 3799 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
3799
6388 PgHdr *pList;-
6389 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 55469 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
FALSEevaluated 38521 times by 127 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
38521-55469
6390 PgHdr *pPageOne = 0;-
6391 pList = sqlite3PcacheDirtyList(pPager->pPCache);-
6392 if( pList==0 ){
pList==0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 55459 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
10-55459
6393 /* Must have at least one page for the WAL commit flag.-
6394 ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */-
6395 rc = sqlite3PagerGet(pPager, 1, &pPageOne, 0);-
6396 pList = pPageOne;-
6397 pList->pDirty = 0;-
6398 }
executed 10 times by 1 test: end of block
Executed by:
  • Self test (438)
10
6399 assert( rc==SQLITE_OK );-
6400 if( ALWAYS(pList) ){
(pList)Description
TRUEevaluated 55469 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
FALSEnever evaluated
0-55469
6401 rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1);-
6402 }
executed 55469 times by 26 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
55469
6403 sqlite3PagerUnref(pPageOne);-
6404 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 55468 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-55468
6405 sqlite3PcacheCleanAll(pPager->pPCache);-
6406 }
executed 55468 times by 26 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
55468
6407 }else{
executed 55469 times by 26 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
55469
6408 /* The bBatch boolean is true if the batch-atomic-write commit method-
6409 ** should be used. No rollback journal is created if batch-atomic-write-
6410 ** is enabled.-
6411 */-
6412#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE-
6413 sqlite3_file *fd = pPager->fd;-
6414 int bBatch = zMaster==0 /* An SQLITE_IOCAP_BATCH_ATOMIC commit */-
6415 && (sqlite3OsDeviceCharacteristics(fd) & SQLITE_IOCAP_BATCH_ATOMIC)-
6416 && !pPager->noSync-
6417 && sqlite3JournalIsInMemory(pPager->jfd);-
6418#else-
6419# define bBatch 0-
6420#endif-
6421-
6422#ifdef SQLITE_ENABLE_ATOMIC_WRITE-
6423 /* The following block updates the change-counter. Exactly how it-
6424 ** does this depends on whether or not the atomic-update optimization-
6425 ** was enabled at compile time, and if this transaction meets the -
6426 ** runtime criteria to use the operation: -
6427 **-
6428 ** * The file-system supports the atomic-write property for-
6429 ** blocks of size page-size, and -
6430 ** * This commit is not part of a multi-file transaction, and-
6431 ** * Exactly one page has been modified and store in the journal file.-
6432 **-
6433 ** If the optimization was not enabled at compile time, then the-
6434 ** pager_incr_changecounter() function is called to update the change-
6435 ** counter in 'indirect-mode'. If the optimization is compiled in but-
6436 ** is not applicable to this transaction, call sqlite3JournalCreate()-
6437 ** to make sure the journal file has actually been created, then call-
6438 ** pager_incr_changecounter() to update the change-counter in indirect-
6439 ** mode. -
6440 **-
6441 ** Otherwise, if the optimization is both enabled and applicable,-
6442 ** then call pager_incr_changecounter() to update the change-counter-
6443 ** in 'direct' mode. In this case the journal file will never be-
6444 ** created for this transaction.-
6445 */-
6446 if( bBatch==0 ){-
6447 PgHdr *pPg;-
6448 assert( isOpen(pPager->jfd) -
6449 || pPager->journalMode==PAGER_JOURNALMODE_OFF -
6450 || pPager->journalMode==PAGER_JOURNALMODE_WAL -
6451 );-
6452 if( !zMaster && isOpen(pPager->jfd) -
6453 && pPager->journalOff==jrnlBufferSize(pPager) -
6454 && pPager->dbSize>=pPager->dbOrigSize-
6455 && (!(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)-
6456 ){-
6457 /* Update the db file change counter via the direct-write method. The -
6458 ** following call will modify the in-memory representation of page 1 -
6459 ** to include the updated change counter and then write page 1 -
6460 ** directly to the database file. Because of the atomic-write -
6461 ** property of the host file-system, this is safe.-
6462 */-
6463 rc = pager_incr_changecounter(pPager, 1);-
6464 }else{-
6465 rc = sqlite3JournalCreate(pPager->jfd);-
6466 if( rc==SQLITE_OK ){-
6467 rc = pager_incr_changecounter(pPager, 0);-
6468 }-
6469 }-
6470 }-
6471#else /* SQLITE_ENABLE_ATOMIC_WRITE */-
6472#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE-
6473 if( zMaster ){-
6474 rc = sqlite3JournalCreate(pPager->jfd);-
6475 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;-
6476 assert( bBatch==0 );-
6477 }-
6478#endif-
6479 rc = pager_incr_changecounter(pPager, 0);-
6480#endif /* !SQLITE_ENABLE_ATOMIC_WRITE */-
6481 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
executed 15 times by 1 test: goto commit_phase_one_exit;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 38506 times by 127 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
15-38506
6482 -
6483 /* Write the master journal name into the journal file. If a master -
6484 ** journal file name has already been written to the journal file, -
6485 ** or if zMaster is NULL (no master journal), then this call is a no-op.-
6486 */-
6487 rc = writeMasterJournal(pPager, zMaster);-
6488 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
never executed: goto commit_phase_one_exit;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 38506 times by 127 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • ...
0-38506
6489 -
6490 /* Sync the journal file and write all dirty pages to the database.-
6491 ** If the atomic-update optimization is being used, this sync will not -
6492 ** create the journal file or perform any real IO.-
6493 **-
6494 ** Because the change-counter page was just modified, unless the-
6495 ** atomic-update optimization is used it is almost certain that the-
6496 ** journal requires a sync here. However, in locking_mode=exclusive-
6497 ** on a system under memory pressure it is just possible that this is -
6498 ** not the case. In this case it is likely enough that the redundant-
6499 ** xSync() call will be changed to a no-op by the OS anyhow. -
6500 */-
6501 rc = syncJournal(pPager, 0);-
6502 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
executed 63 times by 1 test: goto commit_phase_one_exit;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 63 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 38442 times by 126 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (354)
  • ...
63-38442
6503-
6504 pList = sqlite3PcacheDirtyList(pPager->pPCache);-
6505#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE-
6506 if( bBatch ){-
6507 rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0);-
6508 if( rc==SQLITE_OK ){-
6509 rc = pager_write_pagelist(pPager, pList);-
6510 if( rc==SQLITE_OK ){-
6511 rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0);-
6512 }-
6513 if( rc!=SQLITE_OK ){-
6514 sqlite3OsFileControlHint(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0);-
6515 }-
6516 }-
6517-
6518 if( (rc&0xFF)==SQLITE_IOERR && rc!=SQLITE_IOERR_NOMEM ){-
6519 rc = sqlite3JournalCreate(pPager->jfd);-
6520 if( rc!=SQLITE_OK ){-
6521 sqlite3OsClose(pPager->jfd);-
6522 goto commit_phase_one_exit;-
6523 }-
6524 bBatch = 0;-
6525 }else{-
6526 sqlite3OsClose(pPager->jfd);-
6527 }-
6528 }-
6529#endif /* SQLITE_ENABLE_BATCH_ATOMIC_WRITE */-
6530-
6531 if( bBatch==0 ){
0==0Description
TRUEevaluated 38442 times by 126 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (354)
  • ...
FALSEnever evaluated
0-38442
6532 rc = pager_write_pagelist(pPager, pList);-
6533 }
executed 38359 times by 43 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
38359
6534 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 139 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 38220 times by 43 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
139-38220
6535 assert( rc!=SQLITE_IOERR_BLOCKED );-
6536 goto commit_phase_one_exit;
executed 139 times by 1 test: goto commit_phase_one_exit;
Executed by:
  • Self test (438)
139
6537 }-
6538 sqlite3PcacheCleanAll(pPager->pPCache);-
6539-
6540 /* If the file on disk is smaller than the database image, use -
6541 ** pager_truncate to grow the file here. This can happen if the database-
6542 ** image was extended as part of the current transaction and then the-
6543 ** last page in the db image moved to the free-list. In this case the-
6544 ** last page is never written out to disk, leaving the database file-
6545 ** undersized. Fix this now if it is the case. */-
6546 if( pPager->dbSize>pPager->dbFileSize ){
pPager->dbSize...er->dbFileSizeDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 38214 times by 43 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
6-38214
6547 Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));-
6548 assert( pPager->eState==PAGER_WRITER_DBMOD );-
6549 rc = pager_truncate(pPager, nNew);-
6550 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
never executed: goto commit_phase_one_exit;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
0-6
6551 }
executed 6 times by 1 test: end of block
Executed by:
  • Self test (438)
6
6552 -
6553 /* Finally, sync the database file. */-
6554 if( !noSync ){
!noSyncDescription
TRUEevaluated 38212 times by 43 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • ...
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
8-38212
6555 rc = sqlite3PagerSync(pPager, zMaster);-
6556 }
executed 38199 times by 34 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • Self test (44)
  • ...
38199
6557 IOTRACE(("DBSYNC %p\n", pPager))-
6558 }
executed 38207 times by 34 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • Self test (44)
  • ...
38207
6559 }-
6560-
6561commit_phase_one_exit:
code before this statement executed 97475 times by 56 tests: commit_phase_one_exit:
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (41)
  • ...
97475
6562 if( rc==SQLITE_OK && !pagerUseWal(pPager) ){
rc==0Description
TRUEevaluated 97450 times by 56 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (41)
  • ...
FALSEevaluated 242 times by 1 test
Evaluated by:
  • Self test (438)
!((pPager)->pWal!=0)Description
TRUEevaluated 41982 times by 34 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • Self test (44)
  • ...
FALSEevaluated 55468 times by 26 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (81)
  • Self test (83)
  • Self test (86)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • ...
242-97450
6563 pPager->eState = PAGER_WRITER_FINISHED;-
6564 }
executed 41982 times by 34 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (42)
  • Self test (437)
  • Self test (438)
  • Self test (44)
  • ...
41982
6565 return rc;
executed 97692 times by 56 tests: return rc;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (4)
  • Self test (40)
  • Self test (41)
  • ...
97692
6566}-
6567-
6568-
6569/*-
6570** When this function is called, the database file has been completely-
6571** updated to reflect the changes made by the current transaction and-
6572** synced to disk. The journal file still exists in the file-system -
6573** though, and if a failure occurs at this point it will eventually-
6574** be used as a hot-journal and the current transaction rolled back.-
6575**-
6576** This function finalizes the journal file, either by deleting, -
6577** truncating or partially zeroing it, so that it cannot be used -
6578** for hot-journal rollback. Once this is done the transaction is-
6579** irrevocably committed.-
6580**-
6581** If an error occurs, an IO error code is returned and the pager-
6582** moves into the error state. Otherwise, SQLITE_OK is returned.-
6583*/-
6584int sqlite3PagerCommitPhaseTwo(Pager *pPager){-
6585 int rc = SQLITE_OK; /* Return code */-
6586-
6587 /* This routine should not be called if a prior error has occurred.-
6588 ** But if (due to a coding error elsewhere in the system) it does get-
6589 ** called, just return the same error code without doing anything. */-
6590 if( NEVER(pPager->errCode) ) return pPager->errCode;
never executed: return pPager->errCode;
(pPager->errCode)Description
TRUEnever evaluated
FALSEevaluated 98148 times by 54 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
0-98148
6591-
6592 assert( pPager->eState==PAGER_WRITER_LOCKED-
6593 || pPager->eState==PAGER_WRITER_FINISHED-
6594 || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD)-
6595 );-
6596 assert( assert_pager_state(pPager) );-
6597-
6598 /* An optimization. If the database was not actually modified during-
6599 ** this transaction, the pager is running in exclusive-mode and is-
6600 ** using persistent journals, then this function is a no-op.-
6601 **-
6602 ** The start of the journal file currently contains a single journal -
6603 ** header with the nRec field set to 0. If such a journal is used as-
6604 ** a hot-journal during hot-journal rollback, 0 changes will be made-
6605 ** to the database file. So there is no need to zero the journal -
6606 ** header. Since the pager is in exclusive mode, there is no need-
6607 ** to drop any locks either.-
6608 */-
6609 if( pPager->eState==PAGER_WRITER_LOCKED
pPager->eState==2Description
TRUEevaluated 700 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
FALSEevaluated 97448 times by 54 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
700-97448
6610 && pPager->exclusiveMode
pPager->exclusiveModeDescription
TRUEevaluated 146 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 554 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (47)
146-554
6611 && pPager->journalMode==PAGER_JOURNALMODE_PERSIST
pPager->journalMode==1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 145 times by 1 test
Evaluated by:
  • Self test (438)
1-145
6612 ){-
6613 assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff );-
6614 pPager->eState = PAGER_READER;-
6615 return SQLITE_OK;
executed 1 time by 1 test: return 0;
Executed by:
  • Self test (438)
1
6616 }-
6617-
6618 PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));-
6619 pPager->iDataVersion++;-
6620 rc = pager_end_transaction(pPager, pPager->setMaster, 1);-
6621 return pager_error(pPager, rc);
executed 98147 times by 54 tests: return pager_error(pPager, rc);
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (15)
  • Self test (19)
  • Self test (2)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (38)
  • Self test (39)
  • Self test (40)
  • Self test (41)
  • Self test (42)
  • ...
98147
6622}-
6623-
6624/*-
6625** If a write transaction is open, then all changes made within the -
6626** transaction are reverted and the current write-transaction is closed.-
6627** The pager falls back to PAGER_READER state if successful, or PAGER_ERROR-
6628** state if an error occurs.-
6629**-
6630** If the pager is already in PAGER_ERROR state when this function is called,-
6631** it returns Pager.errCode immediately. No work is performed in this case.-
6632**-
6633** Otherwise, in rollback mode, this function performs two functions:-
6634**-
6635** 1) It rolls back the journal file, restoring all database file and -
6636** in-memory cache pages to the state they were in when the transaction-
6637** was opened, and-
6638**-
6639** 2) It finalizes the journal file, so that it is not used for hot-
6640** rollback at any point in the future.-
6641**-
6642** Finalization of the journal file (task 2) is only performed if the -
6643** rollback is successful.-
6644**-
6645** In WAL mode, all cache-entries containing data modified within the-
6646** current transaction are either expelled from the cache or reverted to-
6647** their pre-transaction state by re-reading data from the database or-
6648** WAL files. The WAL transaction is then closed.-
6649*/-
6650int sqlite3PagerRollback(Pager *pPager){-
6651 int rc = SQLITE_OK; /* Return code */-
6652 PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager)));-
6653-
6654 /* PagerRollback() is a no-op if called in READER or OPEN state. If-
6655 ** the pager is already in the ERROR state, the rollback is not -
6656 ** attempted here. Instead, the error code is returned to the caller.-
6657 */-
6658 assert( assert_pager_state(pPager) );-
6659 if( pPager->eState==PAGER_ERROR ) return pPager->errCode;
executed 38 times by 1 test: return pPager->errCode;
Executed by:
  • Self test (438)
pPager->eState==6Description
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 65423 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (6)
  • Self test (64)
  • Self test (79)
  • Self test (8)
  • Self test (88)
38-65423
6660 if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
never executed: return 0;
pPager->eState<=1Description
TRUEnever evaluated
FALSEevaluated 65423 times by 20 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (6)
  • Self test (64)
  • Self test (79)
  • Self test (8)
  • Self test (88)
0-65423
6661-
6662 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 101 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 65322 times by 18 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (6)
  • Self test (64)
  • Self test (8)
101-65322
6663 int rc2;-
6664 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);-
6665 rc2 = pager_end_transaction(pPager, pPager->setMaster, 0);-
6666 if( rc==SQLITE_OK ) rc = rc2;
executed 100 times by 3 tests: rc = rc2;
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
rc==0Description
TRUEevaluated 100 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-100
6667 }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
executed 101 times by 3 tests: end of block
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
!((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 62292 times by 7 tests
Evaluated by:
  • Self test (101)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (64)
FALSEevaluated 3030 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
pPager->eState==2Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3014 times by 12 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
  • Self test (8)
16-62292
6668 int eState = pPager->eState;-
6669 rc = pager_end_transaction(pPager, 0, 0);-
6670 if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
!pPager->memDbDescription
TRUEevaluated 62204 times by 7 tests
Evaluated by:
  • Self test (101)
  • Self test (27)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (64)
FALSEevaluated 104 times by 1 test
Evaluated by:
  • Self test (438)
eState>2Description
TRUEevaluated 60132 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 2072 times by 3 tests
Evaluated by:
  • Self test (27)
  • Self test (438)
  • Self test (47)
104-62204
6671 /* This can happen using journal_mode=off. Move the pager to the error -
6672 ** state to indicate that the contents of the cache may not be trusted.-
6673 ** Any active readers will get SQLITE_ABORT.-
6674 */-
6675 pPager->errCode = SQLITE_ABORT;-
6676 pPager->eState = PAGER_ERROR;-
6677 setGetterMethod(pPager);-
6678 return rc;
executed 60132 times by 5 tests: return rc;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
60132
6679 }-
6680 }else{
executed 2176 times by 3 tests: end of block
Executed by:
  • Self test (27)
  • Self test (438)
  • Self test (47)
2176
6681 rc = pager_playback(pPager, 0);-
6682 }
executed 3010 times by 8 tests: end of block
Executed by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (39)
  • Self test (438)
  • Self test (55)
  • Self test (6)
3010
6683-
6684 assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK );-
6685 assert( rc==SQLITE_OK || rc==SQLITE_FULL || rc==SQLITE_CORRUPT-
6686 || rc==SQLITE_NOMEM || (rc&0xFF)==SQLITE_IOERR -
6687 || rc==SQLITE_CANTOPEN-
6688 );-
6689-
6690 /* If an error occurs during a ROLLBACK, we can no longer trust the pager-
6691 ** cache. So call pager_error() on the way out to make any error persistent.-
6692 */-
6693 return pager_error(pPager, rc);
executed 5287 times by 12 tests: return pager_error(pPager, rc);
Executed by:
  • Self test (10)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • Self test (27)
  • Self test (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (6)
  • Self test (79)
  • Self test (88)
5287
6694}-
6695-
6696/*-
6697** Return TRUE if the database file is opened read-only. Return FALSE-
6698** if the database is (in theory) writable.-
6699*/-
6700u8 sqlite3PagerIsreadonly(Pager *pPager){-
6701 return pPager->readOnly;
executed 95667 times by 438 tests: return pPager->readOnly;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
95667
6702}-
6703-
6704#ifdef SQLITE_DEBUG-
6705/*-
6706** Return the sum of the reference counts for all pages held by pPager.-
6707*/-
6708int sqlite3PagerRefcount(Pager *pPager){-
6709 return sqlite3PcacheRefCount(pPager->pPCache);-
6710}-
6711#endif-
6712-
6713/*-
6714** Return the approximate number of bytes of memory currently-
6715** used by the pager and its associated cache.-
6716*/-
6717int sqlite3PagerMemUsed(Pager *pPager){-
6718 int perPageSize = pPager->pageSize + pPager->nExtra + sizeof(PgHdr)-
6719 + 5*sizeof(void*);-
6720 return perPageSize*sqlite3PcachePagecount(pPager->pPCache)
executed 19 times by 1 test: return perPageSize*sqlite3PcachePagecount(pPager->pPCache) + sqlite3MallocSize(pPager) + pPager->pageSize;
Executed by:
  • Self test (438)
19
6721 + sqlite3MallocSize(pPager)
executed 19 times by 1 test: return perPageSize*sqlite3PcachePagecount(pPager->pPCache) + sqlite3MallocSize(pPager) + pPager->pageSize;
Executed by:
  • Self test (438)
19
6722 + pPager->pageSize;
executed 19 times by 1 test: return perPageSize*sqlite3PcachePagecount(pPager->pPCache) + sqlite3MallocSize(pPager) + pPager->pageSize;
Executed by:
  • Self test (438)
19
6723}-
6724-
6725/*-
6726** Return the number of references to the specified page.-
6727*/-
6728int sqlite3PagerPageRefcount(DbPage *pPage){-
6729 return sqlite3PcachePageRefcount(pPage);
executed 1260601 times by 383 tests: return sqlite3PcachePageRefcount(pPage);
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • Self test (127)
  • ...
1260601
6730}-
6731-
6732#ifdef SQLITE_TEST-
6733/*-
6734** This routine is used for testing and analysis only.-
6735*/-
6736int *sqlite3PagerStats(Pager *pPager){-
6737 static int a[11];-
6738 a[0] = sqlite3PcacheRefCount(pPager->pPCache);-
6739 a[1] = sqlite3PcachePagecount(pPager->pPCache);-
6740 a[2] = sqlite3PcacheGetCachesize(pPager->pPCache);-
6741 a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize;
pPager->eState==0Description
TRUEevaluated 45 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
7-45
6742 a[4] = pPager->eState;-
6743 a[5] = pPager->errCode;-
6744 a[6] = pPager->aStat[PAGER_STAT_HIT];-
6745 a[7] = pPager->aStat[PAGER_STAT_MISS];-
6746 a[8] = 0; /* Used to be pPager->nOvfl */-
6747 a[9] = pPager->nRead;-
6748 a[10] = pPager->aStat[PAGER_STAT_WRITE];-
6749 return a;
executed 52 times by 1 test: return a;
Executed by:
  • Self test (438)
52
6750}-
6751#endif-
6752-
6753/*-
6754** Parameter eStat must be one of SQLITE_DBSTATUS_CACHE_HIT, _MISS, _WRITE,-
6755** or _WRITE+1. The SQLITE_DBSTATUS_CACHE_WRITE+1 case is a translation-
6756** of SQLITE_DBSTATUS_CACHE_SPILL. The _SPILL case is not contiguous because-
6757** it was added later.-
6758**-
6759** Before returning, *pnVal is incremented by the-
6760** current cache hit or miss count, according to the value of eStat. If the -
6761** reset parameter is non-zero, the cache hit or miss count is zeroed before -
6762** returning.-
6763*/-
6764void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, int *pnVal){-
6765-
6766 assert( eStat==SQLITE_DBSTATUS_CACHE_HIT-
6767 || eStat==SQLITE_DBSTATUS_CACHE_MISS-
6768 || eStat==SQLITE_DBSTATUS_CACHE_WRITE-
6769 || eStat==SQLITE_DBSTATUS_CACHE_WRITE+1-
6770 );-
6771-
6772 assert( SQLITE_DBSTATUS_CACHE_HIT+1==SQLITE_DBSTATUS_CACHE_MISS );-
6773 assert( SQLITE_DBSTATUS_CACHE_HIT+2==SQLITE_DBSTATUS_CACHE_WRITE );-
6774 assert( PAGER_STAT_HIT==0 && PAGER_STAT_MISS==1-
6775 && PAGER_STAT_WRITE==2 && PAGER_STAT_SPILL==3 );-
6776-
6777 eStat -= SQLITE_DBSTATUS_CACHE_HIT;-
6778 *pnVal += pPager->aStat[eStat];-
6779 if( reset ){
resetDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 19 times by 1 test
Evaluated by:
  • Self test (438)
14-19
6780 pPager->aStat[eStat] = 0;-
6781 }
executed 14 times by 1 test: end of block
Executed by:
  • Self test (438)
14
6782}
executed 33 times by 1 test: end of block
Executed by:
  • Self test (438)
33
6783-
6784/*-
6785** Return true if this is an in-memory or temp-file backed pager.-
6786*/-
6787int sqlite3PagerIsMemdb(Pager *pPager){-
6788 return pPager->tempFile;
executed 39125 times by 126 tests: return pPager->tempFile;
Executed by:
  • Self test
  • Self test (10)
  • Self test (104)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (353)
  • Self test (354)
  • Self test (355)
  • ...
39125
6789}-
6790-
6791/*-
6792** Check that there are at least nSavepoint savepoints open. If there are-
6793** currently less than nSavepoints open, then open one or more savepoints-
6794** to make up the difference. If the number of savepoints is already-
6795** equal to nSavepoint, then this function is a no-op.-
6796**-
6797** If a memory allocation fails, SQLITE_NOMEM is returned. If an error -
6798** occurs while opening the sub-journal file, then an IO error code is-
6799** returned. Otherwise, SQLITE_OK.-
6800*/-
6801static SQLITE_NOINLINE int pagerOpenSavepoint(Pager *pPager, int nSavepoint){-
6802 int rc = SQLITE_OK; /* Return code */-
6803 int nCurrent = pPager->nSavepoint; /* Current number of savepoints */-
6804 int ii; /* Iterator variable */-
6805 PagerSavepoint *aNew; /* New Pager.aSavepoint array */-
6806-
6807 assert( pPager->eState>=PAGER_WRITER_LOCKED );-
6808 assert( assert_pager_state(pPager) );-
6809 assert( nSavepoint>nCurrent && pPager->useJournal );-
6810-
6811 /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM-
6812 ** if the allocation fails. Otherwise, zero the new portion in case a -
6813 ** malloc failure occurs while populating it in the for(...) loop below.-
6814 */-
6815 aNew = (PagerSavepoint *)sqlite3Realloc(-
6816 pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint-
6817 );-
6818 if( !aNew ){
!aNewDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 37405 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
1-37405
6819 return SQLITE_NOMEM_BKPT;
executed 1 time by 1 test: return 7;
Executed by:
  • Self test (438)
1
6820 }-
6821 memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint));-
6822 pPager->aSavepoint = aNew;-
6823-
6824 /* Populate the PagerSavepoint structures just allocated. */-
6825 for(ii=nCurrent; ii<nSavepoint; ii++){
ii<nSavepointDescription
TRUEevaluated 37406 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 37404 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
37404-37406
6826 aNew[ii].nOrig = pPager->dbSize;-
6827 if( isOpen(pPager->jfd) && pPager->journalOff>0 ){
((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 32842 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 4564 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
pPager->journalOff>0Description
TRUEevaluated 32841 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-32842
6828 aNew[ii].iOffset = pPager->journalOff;-
6829 }else{
executed 32841 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
32841
6830 aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager);-
6831 }
executed 4565 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
4565
6832 aNew[ii].iSubRec = pPager->nSubRec;-
6833 aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize);-
6834 if( !aNew[ii].pInSavepoint ){
!aNew[ii].pInSavepointDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 37405 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
1-37405
6835 return SQLITE_NOMEM_BKPT;
executed 1 time by 1 test: return 7;
Executed by:
  • Self test (438)
1
6836 }-
6837 if( pagerUseWal(pPager) ){
((pPager)->pWal!=0)Description
TRUEevaluated 4268 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 33137 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
4268-33137
6838 sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData);-
6839 }
executed 4268 times by 1 test: end of block
Executed by:
  • Self test (438)
4268
6840 pPager->nSavepoint = ii+1;-
6841 }
executed 37405 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
37405
6842 assert( pPager->nSavepoint==nSavepoint );-
6843 assertTruncateConstraint(pPager);-
6844 return rc;
executed 37404 times by 14 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
37404
6845}-
6846int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){-
6847 assert( pPager->eState>=PAGER_WRITER_LOCKED );-
6848 assert( assert_pager_state(pPager) );-
6849-
6850 if( nSavepoint>pPager->nSavepoint && pPager->useJournal ){
nSavepoint>pPager->nSavepointDescription
TRUEevaluated 37612 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 705881 times by 404 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
pPager->useJournalDescription
TRUEevaluated 37406 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 206 times by 1 test
Evaluated by:
  • Self test (438)
206-705881
6851 return pagerOpenSavepoint(pPager, nSavepoint);
executed 37406 times by 14 tests: return pagerOpenSavepoint(pPager, nSavepoint);
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
37406
6852 }else{-
6853 return SQLITE_OK;
executed 706087 times by 404 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
706087
6854 }-
6855}-
6856-
6857-
6858/*-
6859** This function is called to rollback or release (commit) a savepoint.-
6860** The savepoint to release or rollback need not be the most recently -
6861** created savepoint.-
6862**-
6863** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE.-
6864** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with-
6865** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes-
6866** that have occurred since the specified savepoint was created.-
6867**-
6868** The savepoint to rollback or release is identified by parameter -
6869** iSavepoint. A value of 0 means to operate on the outermost savepoint-
6870** (the first created). A value of (Pager.nSavepoint-1) means operate-
6871** on the most recently created savepoint. If iSavepoint is greater than-
6872** (Pager.nSavepoint-1), then this function is a no-op.-
6873**-
6874** If a negative value is passed to this function, then the current-
6875** transaction is rolled back. This is different to calling -
6876** sqlite3PagerRollback() because this function does not terminate-
6877** the transaction or unlock the database, it just restores the -
6878** contents of the database to its original state. -
6879**-
6880** In any case, all savepoints with an index greater than iSavepoint -
6881** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE),-
6882** then savepoint iSavepoint is also destroyed.-
6883**-
6884** This function may return SQLITE_NOMEM if a memory allocation fails,-
6885** or an IO error code if an IO error occurs while rolling back a -
6886** savepoint. If no errors occur, SQLITE_OK is returned.-
6887*/ -
6888int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){-
6889 int rc = pPager->errCode;-
6890 -
6891#ifdef SQLITE_ENABLE_ZIPVFS-
6892 if( op==SAVEPOINT_RELEASE ) rc = SQLITE_OK;-
6893#endif-
6894-
6895 assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );-
6896 assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK );-
6897-
6898 if( rc==SQLITE_OK && iSavepoint<pPager->nSavepoint ){
rc==0Description
TRUEevaluated 4812 times by 16 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (79)
  • Self test (8)
  • Self test (88)
FALSEnever evaluated
iSavepoint<pPager->nSavepointDescription
TRUEevaluated 4773 times by 16 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (79)
  • Self test (8)
  • Self test (88)
FALSEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
0-4812
6899 int ii; /* Iterator variable */-
6900 int nNew; /* Number of remaining savepoints after this op. */-
6901-
6902 /* Figure out how many savepoints will still be active after this-
6903 ** operation. Store this value in nNew. Then free resources associated -
6904 ** with any savepoints that are destroyed by this operation.-
6905 */-
6906 nNew = iSavepoint + (( op==SAVEPOINT_RELEASE ) ? 0 : 1);
( op==1 )Description
TRUEevaluated 3446 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 1327 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
1327-3446
6907 for(ii=nNew; ii<pPager->nSavepoint; ii++){
ii<pPager->nSavepointDescription
TRUEevaluated 31481 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 4773 times by 16 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (79)
  • Self test (8)
  • Self test (88)
4773-31481
6908 sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);-
6909 }
executed 31481 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
31481
6910 pPager->nSavepoint = nNew;-
6911-
6912 /* If this is a release of the outermost savepoint, truncate -
6913 ** the sub-journal to zero bytes in size. */-
6914 if( op==SAVEPOINT_RELEASE ){
op==1Description
TRUEevaluated 3446 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 1327 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
1327-3446
6915 if( nNew==0 && isOpen(pPager->sjfd) ){
nNew==0Description
TRUEevaluated 3366 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEevaluated 80 times by 1 test
Evaluated by:
  • Self test (438)
((pPager->sjfd)->pMethods!=0)Description
TRUEevaluated 3101 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 265 times by 14 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
80-3366
6916 /* Only truncate if it is an in-memory sub-journal. */-
6917 if( sqlite3JournalIsInMemory(pPager->sjfd) ){
sqlite3Journal...(pPager->sjfd)Description
TRUEevaluated 3096 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
5-3096
6918 rc = sqlite3OsTruncate(pPager->sjfd, 0);-
6919 assert( rc==SQLITE_OK );-
6920 }
executed 3096 times by 1 test: end of block
Executed by:
  • Self test (438)
3096
6921 pPager->nSubRec = 0;-
6922 }
executed 3101 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
3101
6923 }
executed 3446 times by 14 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
3446
6924 /* Else this is a rollback operation, playback the specified savepoint.-
6925 ** If this is a temp-file, it is possible that the journal file has-
6926 ** not yet been opened. In this case there have been no changes to-
6927 ** the database file, so the playback operation can be skipped.-
6928 */-
6929 else if( pagerUseWal(pPager) || isOpen(pPager->jfd) ){
((pPager)->pWal!=0)Description
TRUEevaluated 215 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 1112 times by 1 test
Evaluated by:
  • Self test (438)
((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 1098 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
14-1112
6930 PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1];
(nNew==0)Description
TRUEevaluated 142 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
FALSEevaluated 1171 times by 1 test
Evaluated by:
  • Self test (438)
142-1171
6931 rc = pagerPlaybackSavepoint(pPager, pSavepoint);-
6932 assert(rc!=SQLITE_DONE);-
6933 }
executed 1313 times by 3 tests: end of block
Executed by:
  • Self test (438)
  • Self test (79)
  • Self test (88)
1313
6934 -
6935#ifdef SQLITE_ENABLE_ZIPVFS-
6936 /* If the cache has been modified but the savepoint cannot be rolled -
6937 ** back journal_mode=off, put the pager in the error state. This way,-
6938 ** if the VFS used by this pager includes ZipVFS, the entire transaction-
6939 ** can be rolled back at the ZipVFS level. */-
6940 else if( -
6941 pPager->journalMode==PAGER_JOURNALMODE_OFF -
6942 && pPager->eState>=PAGER_WRITER_CACHEMOD-
6943 ){-
6944 pPager->errCode = SQLITE_ABORT;-
6945 pPager->eState = PAGER_ERROR;-
6946 setGetterMethod(pPager);-
6947 }-
6948#endif-
6949 }
executed 4773 times by 16 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (79)
  • Self test (8)
  • Self test (88)
4773
6950-
6951 return rc;
executed 4812 times by 16 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (79)
  • Self test (8)
  • Self test (88)
4812
6952}-
6953-
6954/*-
6955** Return the full pathname of the database file.-
6956**-
6957** Except, if the pager is in-memory only, then return an empty string if-
6958** nullIfMemDb is true. This routine is called with nullIfMemDb==1 when-
6959** used to report the filename to the user, for compatibility with legacy-
6960** behavior. But when the Btree needs to know the filename for matching to-
6961** shared cache, it uses nullIfMemDb==0 so that in-memory databases can-
6962** participate in shared-cache.-
6963*/-
6964const char *sqlite3PagerFilename(Pager *pPager, int nullIfMemDb){-
6965 return (nullIfMemDb && pPager->memDb) ? "" : pPager->zFilename;
executed 346960 times by 434 tests: return (nullIfMemDb && pPager->memDb) ? "" : pPager->zFilename;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
nullIfMemDbDescription
TRUEevaluated 346616 times by 434 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
FALSEevaluated 344 times by 1 test
Evaluated by:
  • Self test (438)
pPager->memDbDescription
TRUEevaluated 1921 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 344695 times by 434 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
344-346960
6966}-
6967-
6968/*-
6969** Return the VFS structure for the pager.-
6970*/-
6971sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){-
6972 return pPager->pVfs;
executed 249 times by 1 test: return pPager->pVfs;
Executed by:
  • Self test (438)
249
6973}-
6974-
6975/*-
6976** Return the file handle for the database file associated-
6977** with the pager. This might return NULL if the file has-
6978** not yet been opened.-
6979*/-
6980sqlite3_file *sqlite3PagerFile(Pager *pPager){-
6981 return pPager->fd;
executed 140439 times by 438 tests: return pPager->fd;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
140439
6982}-
6983-
6984#ifdef SQLITE_ENABLE_SETLK_TIMEOUT-
6985/*-
6986** Reset the lock timeout for pager.-
6987*/-
6988void sqlite3PagerResetLockTimeout(Pager *pPager){-
6989 int x = 0;-
6990 sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_LOCK_TIMEOUT, &x);-
6991}-
6992#endif-
6993-
6994/*-
6995** Return the file handle for the journal file (if it exists).-
6996** This will be either the rollback journal or the WAL file.-
6997*/-
6998sqlite3_file *sqlite3PagerJrnlFile(Pager *pPager){-
6999#if SQLITE_OMIT_WAL-
7000 return pPager->jfd;-
7001#else-
7002 return pPager->pWal ? sqlite3WalFile(pPager->pWal) : pPager->jfd;
never executed: return pPager->pWal ? sqlite3WalFile(pPager->pWal) : pPager->jfd;
pPager->pWalDescription
TRUEnever evaluated
FALSEnever evaluated
0
7003#endif-
7004}-
7005-
7006/*-
7007** Return the full pathname of the journal file.-
7008*/-
7009const char *sqlite3PagerJournalname(Pager *pPager){-
7010 return pPager->zJournal;
executed 138 times by 3 tests: return pPager->zJournal;
Executed by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
138
7011}-
7012-
7013#ifdef SQLITE_HAS_CODEC-
7014/*-
7015** Set or retrieve the codec for this pager-
7016*/-
7017void sqlite3PagerSetCodec(-
7018 Pager *pPager,-
7019 void *(*xCodec)(void*,void*,Pgno,int),-
7020 void (*xCodecSizeChng)(void*,int,int),-
7021 void (*xCodecFree)(void*),-
7022 void *pCodec-
7023){-
7024 if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);-
7025 pPager->xCodec = pPager->memDb ? 0 : xCodec;-
7026 pPager->xCodecSizeChng = xCodecSizeChng;-
7027 pPager->xCodecFree = xCodecFree;-
7028 pPager->pCodec = pCodec;-
7029 setGetterMethod(pPager);-
7030 pagerReportSize(pPager);-
7031}-
7032void *sqlite3PagerGetCodec(Pager *pPager){-
7033 return pPager->pCodec;-
7034}-
7035-
7036/*-
7037** This function is called by the wal module when writing page content-
7038** into the log file.-
7039**-
7040** This function returns a pointer to a buffer containing the encrypted-
7041** page content. If a malloc fails, this function may return NULL.-
7042*/-
7043void *sqlite3PagerCodec(PgHdr *pPg){-
7044 void *aData = 0;-
7045 CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);-
7046 return aData;-
7047}-
7048-
7049/*-
7050** Return the current pager state-
7051*/-
7052int sqlite3PagerState(Pager *pPager){-
7053 return pPager->eState;-
7054}-
7055#endif /* SQLITE_HAS_CODEC */-
7056-
7057#ifndef SQLITE_OMIT_AUTOVACUUM-
7058/*-
7059** Move the page pPg to location pgno in the file.-
7060**-
7061** There must be no references to the page previously located at-
7062** pgno (which we call pPgOld) though that page is allowed to be-
7063** in cache. If the page previously located at pgno is not already-
7064** in the rollback journal, it is not put there by by this routine.-
7065**-
7066** References to the page pPg remain valid. Updating any-
7067** meta-data associated with pPg (i.e. data stored in the nExtra bytes-
7068** allocated along with the page) is the responsibility of the caller.-
7069**-
7070** A transaction must be active when this routine is called. It used to be-
7071** required that a statement transaction was not active, but this restriction-
7072** has been removed (CREATE INDEX needs to move a page when a statement-
7073** transaction is active).-
7074**-
7075** If the fourth argument, isCommit, is non-zero, then this page is being-
7076** moved as part of a database reorganization just before the transaction -
7077** is being committed. In this case, it is guaranteed that the database page -
7078** pPg refers to will not be written to again within this transaction.-
7079**-
7080** This function may return SQLITE_NOMEM or an IO error code if an error-
7081** occurs. Otherwise, it returns SQLITE_OK.-
7082*/-
7083int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){-
7084 PgHdr *pPgOld; /* The page being overwritten. */-
7085 Pgno needSyncPgno = 0; /* Old value of pPg->pgno, if sync is required */-
7086 int rc; /* Return code */-
7087 Pgno origPgno; /* The original page number */-
7088-
7089 assert( pPg->nRef>0 );-
7090 assert( pPager->eState==PAGER_WRITER_CACHEMOD-
7091 || pPager->eState==PAGER_WRITER_DBMOD-
7092 );-
7093 assert( assert_pager_state(pPager) );-
7094-
7095 /* In order to be able to rollback, an in-memory database must journal-
7096 ** the page we are moving from.-
7097 */-
7098 assert( pPager->tempFile || !MEMDB );-
7099 if( pPager->tempFile ){
pPager->tempFileDescription
TRUEevaluated 4266 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4061 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
4061-4266
7100 rc = sqlite3PagerWrite(pPg);-
7101 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 4266 times by 1 test
Evaluated by:
  • Self test (438)
0-4266
7102 }
executed 4266 times by 1 test: end of block
Executed by:
  • Self test (438)
4266
7103-
7104 /* If the page being moved is dirty and has not been saved by the latest-
7105 ** savepoint, then save the current contents of the page into the -
7106 ** sub-journal now. This is required to handle the following scenario:-
7107 **-
7108 ** BEGIN;-
7109 ** <journal page X, then modify it in memory>-
7110 ** SAVEPOINT one;-
7111 ** <Move page X to location Y>-
7112 ** ROLLBACK TO one;-
7113 **-
7114 ** If page X were not written to the sub-journal here, it would not-
7115 ** be possible to restore its contents when the "ROLLBACK TO one"-
7116 ** statement were is processed.-
7117 **-
7118 ** subjournalPage() may need to allocate space to store pPg->pgno into-
7119 ** one or more savepoint bitvecs. This is the reason this function-
7120 ** may return SQLITE_NOMEM.-
7121 */-
7122 if( (pPg->flags & PGHDR_DIRTY)!=0
(pPg->flags & 0x002)!=0Description
TRUEevaluated 5635 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 2692 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
2692-5635
7123 && SQLITE_OK!=(rc = subjournalPageIfRequired(pPg))
0!=(rc = subjo...Required(pPg))Description
TRUEnever evaluated
FALSEevaluated 5635 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-5635
7124 ){-
7125 return rc;
never executed: return rc;
0
7126 }-
7127-
7128 PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n", -
7129 PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno));-
7130 IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno))-
7131-
7132 /* If the journal needs to be sync()ed before page pPg->pgno can-
7133 ** be written to, store pPg->pgno in local variable needSyncPgno.-
7134 **-
7135 ** If the isCommit flag is set, there is no need to remember that-
7136 ** the journal needs to be sync()ed before database page pPg->pgno -
7137 ** can be written to. The caller has already promised not to write to it.-
7138 */-
7139 if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
(pPg->flags&0x008)Description
TRUEevaluated 2160 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 6167 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
!isCommitDescription
TRUEevaluated 154 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2006 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
154-6167
7140 needSyncPgno = pPg->pgno;-
7141 assert( pPager->journalMode==PAGER_JOURNALMODE_OFF ||-
7142 pageInJournal(pPager, pPg) || pPg->pgno>pPager->dbOrigSize );-
7143 assert( pPg->flags&PGHDR_DIRTY );-
7144 }
executed 154 times by 1 test: end of block
Executed by:
  • Self test (438)
154
7145-
7146 /* If the cache contains a page with page-number pgno, remove it-
7147 ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for -
7148 ** page pgno before the 'move' operation, it needs to be retained -
7149 ** for the page moved there.-
7150 */-
7151 pPg->flags &= ~PGHDR_NEED_SYNC;-
7152 pPgOld = sqlite3PagerLookup(pPager, pgno);-
7153 assert( !pPgOld || pPgOld->nRef==1 );-
7154 if( pPgOld ){
pPgOldDescription
TRUEevaluated 8324 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
3-8324
7155 pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);-
7156 if( pPager->tempFile ){
pPager->tempFileDescription
TRUEevaluated 4264 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4060 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
4060-4264
7157 /* Do not discard pages from an in-memory database since we might-
7158 ** need to rollback later. Just move the page out of the way. */-
7159 sqlite3PcacheMove(pPgOld, pPager->dbSize+1);-
7160 }else{
executed 4264 times by 1 test: end of block
Executed by:
  • Self test (438)
4264
7161 sqlite3PcacheDrop(pPgOld);-
7162 }
executed 4060 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
4060
7163 }-
7164-
7165 origPgno = pPg->pgno;-
7166 sqlite3PcacheMove(pPg, pgno);-
7167 sqlite3PcacheMakeDirty(pPg);-
7168-
7169 /* For an in-memory database, make sure the original page continues-
7170 ** to exist, in case the transaction needs to roll back. Use pPgOld-
7171 ** as the original page since it has already been allocated.-
7172 */-
7173 if( pPager->tempFile && pPgOld ){
pPager->tempFileDescription
TRUEevaluated 4266 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4061 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
pPgOldDescription
TRUEevaluated 4264 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-4266
7174 sqlite3PcacheMove(pPgOld, origPgno);-
7175 sqlite3PagerUnrefNotNull(pPgOld);-
7176 }
executed 4264 times by 1 test: end of block
Executed by:
  • Self test (438)
4264
7177-
7178 if( needSyncPgno ){
needSyncPgnoDescription
TRUEevaluated 154 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8173 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
154-8173
7179 /* If needSyncPgno is non-zero, then the journal file needs to be -
7180 ** sync()ed before any data is written to database file page needSyncPgno.-
7181 ** Currently, no such page exists in the page-cache and the -
7182 ** "is journaled" bitvec flag has been set. This needs to be remedied by-
7183 ** loading the page into the pager-cache and setting the PGHDR_NEED_SYNC-
7184 ** flag.-
7185 **-
7186 ** If the attempt to load the page into the page-cache fails, (due-
7187 ** to a malloc() or IO failure), clear the bit in the pInJournal[]-
7188 ** array. Otherwise, if the page is loaded and written again in-
7189 ** this transaction, it may be written to the database file before-
7190 ** it is synced into the journal file. This way, it may end up in-
7191 ** the journal file twice, but that is not a problem.-
7192 */-
7193 PgHdr *pPgHdr;-
7194 rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr, 0);-
7195 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 152 times by 1 test
Evaluated by:
  • Self test (438)
2-152
7196 if( needSyncPgno<=pPager->dbOrigSize ){
needSyncPgno<=...er->dbOrigSizeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-2
7197 assert( pPager->pTmpSpace!=0 );-
7198 sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace);-
7199 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
7200 return rc;
executed 2 times by 1 test: return rc;
Executed by:
  • Self test (438)
2
7201 }-
7202 pPgHdr->flags |= PGHDR_NEED_SYNC;-
7203 sqlite3PcacheMakeDirty(pPgHdr);-
7204 sqlite3PagerUnrefNotNull(pPgHdr);-
7205 }
executed 152 times by 1 test: end of block
Executed by:
  • Self test (438)
152
7206-
7207 return SQLITE_OK;
executed 8325 times by 4 tests: return 0;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
8325
7208}-
7209#endif-
7210-
7211/*-
7212** The page handle passed as the first argument refers to a dirty page -
7213** with a page number other than iNew. This function changes the page's -
7214** page number to iNew and sets the value of the PgHdr.flags field to -
7215** the value passed as the third parameter.-
7216*/-
7217void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){-
7218 assert( pPg->pgno!=iNew );-
7219 pPg->flags = flags;-
7220 sqlite3PcacheMove(pPg, iNew);-
7221}
executed 334331 times by 151 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (302)
  • Self test (303)
  • Self test (304)
  • Self test (305)
  • Self test (306)
  • Self test (307)
  • Self test (308)
  • Self test (309)
  • Self test (310)
  • Self test (311)
  • Self test (312)
  • Self test (313)
  • Self test (314)
  • Self test (315)
  • Self test (316)
  • Self test (317)
  • Self test (318)
  • ...
334331
7222-
7223/*-
7224** Return a pointer to the data for the specified page.-
7225*/-
7226void *sqlite3PagerGetData(DbPage *pPg){-
7227 assert( pPg->nRef>0 || pPg->pPager->memDb );-
7228 return pPg->pData;
executed 9040845 times by 435 tests: return pPg->pData;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
9040845
7229}-
7230-
7231/*-
7232** Return a pointer to the Pager.nExtra bytes of "extra" space -
7233** allocated along with the specified page.-
7234*/-
7235void *sqlite3PagerGetExtra(DbPage *pPg){-
7236 return pPg->pExtra;
executed 24420226 times by 435 tests: return pPg->pExtra;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
24420226
7237}-
7238-
7239/*-
7240** Get/set the locking-mode for this pager. Parameter eMode must be one-
7241** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or -
7242** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then-
7243** the locking-mode is set to the value specified.-
7244**-
7245** The returned value is either PAGER_LOCKINGMODE_NORMAL or-
7246** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated)-
7247** locking-mode.-
7248*/-
7249int sqlite3PagerLockingMode(Pager *pPager, int eMode){-
7250 assert( eMode==PAGER_LOCKINGMODE_QUERY-
7251 || eMode==PAGER_LOCKINGMODE_NORMAL-
7252 || eMode==PAGER_LOCKINGMODE_EXCLUSIVE );-
7253 assert( PAGER_LOCKINGMODE_QUERY<0 );-
7254 assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 );-
7255 assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) );-
7256 if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){
eMode>=0Description
TRUEevaluated 1725 times by 12 tests
Evaluated by:
  • Self test (27)
  • Self test (34)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
!pPager->tempFileDescription
TRUEevaluated 822 times by 11 tests
Evaluated by:
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
FALSEevaluated 903 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
!sqlite3WalHea...(pPager->pWal)Description
TRUEevaluated 818 times by 11 tests
Evaluated by:
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-1725
7257 pPager->exclusiveMode = (u8)eMode;-
7258 }
executed 818 times by 11 tests: end of block
Executed by:
  • Self test (27)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
818
7259 return (int)pPager->exclusiveMode;
executed 1755 times by 12 tests: return (int)pPager->exclusiveMode;
Executed by:
  • Self test (27)
  • Self test (34)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (77)
  • Self test (78)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
1755
7260}-
7261-
7262/*-
7263** Set the journal-mode for this pager. Parameter eMode must be one of:-
7264**-
7265** PAGER_JOURNALMODE_DELETE-
7266** PAGER_JOURNALMODE_TRUNCATE-
7267** PAGER_JOURNALMODE_PERSIST-
7268** PAGER_JOURNALMODE_OFF-
7269** PAGER_JOURNALMODE_MEMORY-
7270** PAGER_JOURNALMODE_WAL-
7271**-
7272** The journalmode is set to the value specified if the change is allowed.-
7273** The change may be disallowed for the following reasons:-
7274**-
7275** * An in-memory database can only have its journal_mode set to _OFF-
7276** or _MEMORY.-
7277**-
7278** * Temporary databases cannot have _WAL journalmode.-
7279**-
7280** The returned indicate the current (possibly updated) journal-mode.-
7281*/-
7282int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){-
7283 u8 eOld = pPager->journalMode; /* Prior journalmode */-
7284-
7285 /* The eMode parameter is always valid */-
7286 assert( eMode==PAGER_JOURNALMODE_DELETE-
7287 || eMode==PAGER_JOURNALMODE_TRUNCATE-
7288 || eMode==PAGER_JOURNALMODE_PERSIST-
7289 || eMode==PAGER_JOURNALMODE_OFF -
7290 || eMode==PAGER_JOURNALMODE_WAL -
7291 || eMode==PAGER_JOURNALMODE_MEMORY );-
7292-
7293 /* This routine is only called from the OP_JournalMode opcode, and-
7294 ** the logic there will never allow a temporary file to be changed-
7295 ** to WAL mode.-
7296 */-
7297 assert( pPager->tempFile==0 || eMode!=PAGER_JOURNALMODE_WAL );-
7298-
7299 /* Do allow the journalmode of an in-memory database to be set to-
7300 ** anything other than MEMORY or OFF-
7301 */-
7302 if( MEMDB ){
pPager->memDbDescription
TRUEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5340 times by 10 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
49-5340
7303 assert( eOld==PAGER_JOURNALMODE_MEMORY || eOld==PAGER_JOURNALMODE_OFF );-
7304 if( eMode!=PAGER_JOURNALMODE_MEMORY && eMode!=PAGER_JOURNALMODE_OFF ){
eMode!=4Description
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
eMode!=2Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
9-28
7305 eMode = eOld;-
7306 }
executed 12 times by 1 test: end of block
Executed by:
  • Self test (438)
12
7307 }
executed 49 times by 1 test: end of block
Executed by:
  • Self test (438)
49
7308-
7309 if( eMode!=eOld ){
eMode!=eOldDescription
TRUEevaluated 815 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
FALSEevaluated 4574 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
815-4574
7310-
7311 /* Change the journal mode. */-
7312 assert( pPager->eState!=PAGER_ERROR );-
7313 pPager->journalMode = (u8)eMode;-
7314-
7315 /* When transistioning from TRUNCATE or PERSIST to any other journal-
7316 ** mode except WAL, unless the pager is in locking_mode=exclusive mode,-
7317 ** delete the journal file.-
7318 */-
7319 assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );-
7320 assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 );-
7321 assert( (PAGER_JOURNALMODE_DELETE & 5)==0 );-
7322 assert( (PAGER_JOURNALMODE_MEMORY & 5)==4 );-
7323 assert( (PAGER_JOURNALMODE_OFF & 5)==0 );-
7324 assert( (PAGER_JOURNALMODE_WAL & 5)==5 );-
7325-
7326 assert( isOpen(pPager->fd) || pPager->exclusiveMode );-
7327 if( !pPager->exclusiveMode && (eOld & 5)==1 && (eMode & 1)==0 ){
!pPager->exclusiveModeDescription
TRUEevaluated 771 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
FALSEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
(eOld & 5)==1Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 729 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
(eMode & 1)==0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
17-771
7328-
7329 /* In this case we would like to delete the journal file. If it is-
7330 ** not possible, then that is not a problem. Deleting the journal file-
7331 ** here is an optimization only.-
7332 **-
7333 ** Before deleting the journal file, obtain a RESERVED lock on the-
7334 ** database file. This ensures that the journal file is not deleted-
7335 ** while it is in use by some other client.-
7336 */-
7337 sqlite3OsClose(pPager->jfd);-
7338 if( pPager->eLock>=RESERVED_LOCK ){
pPager->eLock>=2Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
4-21
7339 sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);-
7340 }else{
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
7341 int rc = SQLITE_OK;-
7342 int state = pPager->eState;-
7343 assert( state==PAGER_OPEN || state==PAGER_READER );-
7344 if( state==PAGER_OPEN ){
state==0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
3-18
7345 rc = sqlite3PagerSharedLock(pPager);-
7346 }
executed 18 times by 1 test: end of block
Executed by:
  • Self test (438)
18
7347 if( pPager->eState==PAGER_READER ){
pPager->eState==1Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-20
7348 assert( rc==SQLITE_OK );-
7349 rc = pagerLockDb(pPager, RESERVED_LOCK);-
7350 }
executed 20 times by 1 test: end of block
Executed by:
  • Self test (438)
20
7351 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-16
7352 sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);-
7353 }
executed 16 times by 1 test: end of block
Executed by:
  • Self test (438)
16
7354 if( rc==SQLITE_OK && state==PAGER_READER ){
rc==0Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
state==1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
1-16
7355 pagerUnlockDb(pPager, SHARED_LOCK);-
7356 }else if( state==PAGER_OPEN ){
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
state==0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
1-18
7357 pager_unlock(pPager);-
7358 }
executed 18 times by 1 test: end of block
Executed by:
  • Self test (438)
18
7359 assert( state==pPager->eState );-
7360 }
executed 21 times by 1 test: end of block
Executed by:
  • Self test (438)
21
7361 }else if( eMode==PAGER_JOURNALMODE_OFF ){
eMode==2Description
TRUEevaluated 53 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 737 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
53-737
7362 sqlite3OsClose(pPager->jfd);-
7363 }
executed 53 times by 1 test: end of block
Executed by:
  • Self test (438)
53
7364 }
executed 815 times by 6 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
815
7365-
7366 /* Return the new journal mode */-
7367 return (int)pPager->journalMode;
executed 5389 times by 10 tests: return (int)pPager->journalMode;
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
5389
7368}-
7369-
7370/*-
7371** Return the current journal mode.-
7372*/-
7373int sqlite3PagerGetJournalMode(Pager *pPager){-
7374 return (int)pPager->journalMode;
executed 101970 times by 154 tests: return (int)pPager->journalMode;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • Self test (13)
  • Self test (14)
  • Self test (15)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (2)
  • Self test (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (31)
  • Self test (32)
  • ...
101970
7375}-
7376-
7377/*-
7378** Return TRUE if the pager is in a state where it is OK to change the-
7379** journalmode. Journalmode changes can only happen when the database-
7380** is unmodified.-
7381*/-
7382int sqlite3PagerOkToChangeJournalMode(Pager *pPager){-
7383 assert( assert_pager_state(pPager) );-
7384 if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0;
executed 22 times by 1 test: return 0;
Executed by:
  • Self test (438)
pPager->eState>=3Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5342 times by 10 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
22-5342
7385 if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0;
never executed: return 0;
((pPager->jfd)->pMethods!=0)Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5327 times by 10 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
pPager->journalOff>0Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
0-5327
7386 return 1;
executed 5342 times by 10 tests: return 1;
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (3)
  • Self test (438)
  • Self test (58)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
5342
7387}-
7388-
7389/*-
7390** Get/set the size-limit used for persistent journal files.-
7391**-
7392** Setting the size limit to -1 means no limit is enforced.-
7393** An attempt to set a limit smaller than -1 is a no-op.-
7394*/-
7395i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){-
7396 if( iLimit>=-1 ){
iLimit>=-1Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-10
7397 pPager->journalSizeLimit = iLimit;-
7398 sqlite3WalLimit(pPager->pWal, iLimit);-
7399 }
executed 10 times by 1 test: end of block
Executed by:
  • Self test (438)
10
7400 return pPager->journalSizeLimit;
executed 15 times by 1 test: return pPager->journalSizeLimit;
Executed by:
  • Self test (438)
15
7401}-
7402-
7403/*-
7404** Return a pointer to the pPager->pBackup variable. The backup module-
7405** in backup.c maintains the content of this variable. This module-
7406** uses it opaquely as an argument to sqlite3BackupRestart() and-
7407** sqlite3BackupUpdate() only.-
7408*/-
7409sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){-
7410 return &pPager->pBackup;
executed 14 times by 1 test: return &pPager->pBackup;
Executed by:
  • Self test (438)
14
7411}-
7412-
7413#ifndef SQLITE_OMIT_VACUUM-
7414/*-
7415** Unless this is an in-memory or temporary database, clear the pager cache.-
7416*/-
7417void sqlite3PagerClearCache(Pager *pPager){-
7418 assert( MEMDB==0 || pPager->tempFile );-
7419 if( pPager->tempFile==0 ) pager_reset(pPager);
executed 368 times by 1 test: pager_reset(pPager);
Executed by:
  • Self test (438)
pPager->tempFile==0Description
TRUEevaluated 368 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-368
7420}
executed 368 times by 1 test: end of block
Executed by:
  • Self test (438)
368
7421#endif-
7422-
7423-
7424#ifndef SQLITE_OMIT_WAL-
7425/*-
7426** This function is called when the user invokes "PRAGMA wal_checkpoint",-
7427** "PRAGMA wal_blocking_checkpoint" or calls the sqlite3_wal_checkpoint()-
7428** or wal_blocking_checkpoint() API functions.-
7429**-
7430** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.-
7431*/-
7432int sqlite3PagerCheckpoint(-
7433 Pager *pPager, /* Checkpoint on this pager */-
7434 sqlite3 *db, /* Db handle used to check for interrupts */-
7435 int eMode, /* Type of checkpoint */-
7436 int *pnLog, /* OUT: Final number of frames in log */-
7437 int *pnCkpt /* OUT: Final number of checkpointed frames */-
7438){-
7439 int rc = SQLITE_OK;-
7440 if( pPager->pWal ){
pPager->pWalDescription
TRUEevaluated 6517 times by 10 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (438)
  • Self test (72)
  • Self test (73)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
FALSEevaluated 77 times by 1 test
Evaluated by:
  • Self test (438)
77-6517
7441 rc = sqlite3WalCheckpoint(pPager->pWal, db, eMode,-
7442 (eMode==SQLITE_CHECKPOINT_PASSIVE ? 0 : pPager->xBusyHandler),-
7443 pPager->pBusyHandlerArg,-
7444 pPager->walSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,-
7445 pnLog, pnCkpt-
7446 );-
7447 sqlite3PagerResetLockTimeout(pPager);-
7448 }
executed 6517 times by 10 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (438)
  • Self test (72)
  • Self test (73)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
6517
7449 return rc;
executed 6594 times by 10 tests: return rc;
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (438)
  • Self test (72)
  • Self test (73)
  • Self test (84)
  • Self test (85)
  • Self test (89)
  • Self test (90)
6594
7450}-
7451-
7452int sqlite3PagerWalCallback(Pager *pPager){-
7453 return sqlite3WalCallback(pPager->pWal);
executed 469592 times by 434 tests: return sqlite3WalCallback(pPager->pWal);
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • ...
469592
7454}-
7455-
7456/*-
7457** Return true if the underlying VFS for the given pager supports the-
7458** primitives necessary for write-ahead logging.-
7459*/-
7460int sqlite3PagerWalSupported(Pager *pPager){-
7461 const sqlite3_io_methods *pMethods = pPager->fd->pMethods;-
7462 if( pPager->noLock ) return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • Self test (438)
pPager->noLockDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6191 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
2-6191
7463 return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap);
executed 6191 times by 49 tests: return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap);
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
pPager->exclusiveModeDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6171 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
pMethods->iVersion>=2Description
TRUEevaluated 6162 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
pMethods->xShmMapDescription
TRUEevaluated 6160 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-6191
7464}-
7465-
7466/*-
7467** Attempt to take an exclusive lock on the database file. If a PENDING lock-
7468** is obtained instead, immediately release it.-
7469*/-
7470static int pagerExclusiveLock(Pager *pPager){-
7471 int rc; /* Return code */-
7472-
7473 assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK );-
7474 rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);-
7475 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
2-32
7476 /* If the attempt to grab the exclusive lock failed, release the -
7477 ** pending lock that may have been obtained instead. */-
7478 pagerUnlockDb(pPager, SHARED_LOCK);-
7479 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
7480-
7481 return rc;
executed 34 times by 1 test: return rc;
Executed by:
  • Self test (438)
34
7482}-
7483-
7484/*-
7485** Call sqlite3WalOpen() to open the WAL handle. If the pager is in -
7486** exclusive-locking mode when this function is called, take an EXCLUSIVE-
7487** lock on the database file and use heap-memory to store the wal-index-
7488** in. Otherwise, use the normal shared-memory.-
7489*/-
7490static int pagerOpenWal(Pager *pPager){-
7491 int rc = SQLITE_OK;-
7492-
7493 assert( pPager->pWal==0 && pPager->tempFile==0 );-
7494 assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK );-
7495-
7496 /* If the pager is already in exclusive-mode, the WAL module will use -
7497 ** heap-memory for the wal-index instead of the VFS shared-memory -
7498 ** implementation. Take the exclusive lock now, before opening the WAL-
7499 ** file, to make sure this is safe.-
7500 */-
7501 if( pPager->exclusiveMode ){
pPager->exclusiveModeDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1380 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
14-1380
7502 rc = pagerExclusiveLock(pPager);-
7503 }
executed 14 times by 1 test: end of block
Executed by:
  • Self test (438)
14
7504-
7505 /* Open the connection to the log file. If this operation fails, -
7506 ** (e.g. due to malloc() failure), return an error code.-
7507 */-
7508 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1392 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-1392
7509 rc = sqlite3WalOpen(pPager->pVfs,-
7510 pPager->fd, pPager->zWal, pPager->exclusiveMode,-
7511 pPager->journalSizeLimit, &pPager->pWal-
7512 );-
7513 }
executed 1392 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
1392
7514 pagerFixMaplimit(pPager);-
7515-
7516 return rc;
executed 1394 times by 49 tests: return rc;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
1394
7517}-
7518-
7519-
7520/*-
7521** The caller must be holding a SHARED lock on the database file to call-
7522** this function.-
7523**-
7524** If the pager passed as the first argument is open on a real database-
7525** file (not a temp file or an in-memory database), and the WAL file-
7526** is not already open, make an attempt to open it now. If successful,-
7527** return SQLITE_OK. If an error occurs or the VFS used by the pager does -
7528** not support the xShmXXX() methods, return an error code. *pbOpen is-
7529** not modified in either case.-
7530**-
7531** If the pager is open on a temp-file (or in-memory database), or if-
7532** the WAL file is already open, set *pbOpen to 1 and return SQLITE_OK-
7533** without doing anything.-
7534*/-
7535int sqlite3PagerOpenWal(-
7536 Pager *pPager, /* Pager object */-
7537 int *pbOpen /* OUT: Set to true if call is a no-op */-
7538){-
7539 int rc = SQLITE_OK; /* Return code */-
7540-
7541 assert( assert_pager_state(pPager) );-
7542 assert( pPager->eState==PAGER_OPEN || pbOpen );-
7543 assert( pPager->eState==PAGER_READER || !pbOpen );-
7544 assert( pbOpen==0 || *pbOpen==0 );-
7545 assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) );-
7546-
7547 if( !pPager->tempFile && !pPager->pWal ){
!pPager->tempFileDescription
TRUEevaluated 59684 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
!pPager->pWalDescription
TRUEevaluated 1403 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 58281 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
12-59684
7548 if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN;
executed 9 times by 1 test: return 14;
Executed by:
  • Self test (438)
!sqlite3PagerW...ported(pPager)Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1394 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
9-1394
7549-
7550 /* Close any rollback journal previously open */-
7551 sqlite3OsClose(pPager->jfd);-
7552-
7553 rc = pagerOpenWal(pPager);-
7554 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1390 times by 49 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-1390
7555 pPager->journalMode = PAGER_JOURNALMODE_WAL;-
7556 pPager->eState = PAGER_OPEN;-
7557 }
executed 1390 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
1390
7558 }else{
executed 1394 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
1394
7559 *pbOpen = 1;-
7560 }
executed 58293 times by 49 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
58293
7561-
7562 return rc;
executed 59687 times by 49 tests: return rc;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (28)
  • Self test (29)
  • Self test (37)
  • Self test (41)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (62)
  • Self test (63)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (72)
  • Self test (73)
  • Self test (74)
  • ...
59687
7563}-
7564-
7565/*-
7566** This function is called to close the connection to the log file prior-
7567** to switching from WAL to rollback mode.-
7568**-
7569** Before closing the log file, this function attempts to take an -
7570** EXCLUSIVE lock on the database file. If this cannot be obtained, an-
7571** error (SQLITE_BUSY) is returned and the log connection is not closed.-
7572** If successful, the EXCLUSIVE lock is not released before returning.-
7573*/-
7574int sqlite3PagerCloseWal(Pager *pPager, sqlite3 *db){-
7575 int rc = SQLITE_OK;-
7576-
7577 assert( pPager->journalMode==PAGER_JOURNALMODE_WAL );-
7578-
7579 /* If the log file is not already open, but does exist in the file-system,-
7580 ** it may need to be checkpointed before the connection can switch to-
7581 ** rollback mode. Open it now so this can happen.-
7582 */-
7583 if( !pPager->pWal ){
!pPager->pWalDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
3-20
7584 int logexists = 0;-
7585 rc = pagerLockDb(pPager, SHARED_LOCK);-
7586 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-3
7587 rc = sqlite3OsAccess(-
7588 pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &logexists-
7589 );-
7590 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
7591 if( rc==SQLITE_OK && logexists ){
rc==0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
logexistsDescription
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
0-3
7592 rc = pagerOpenWal(pPager);-
7593 }
never executed: end of block
0
7594 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
7595 -
7596 /* Checkpoint and close the log. Because an EXCLUSIVE lock is held on-
7597 ** the database file, the log and log-summary files will be deleted.-
7598 */-
7599 if( rc==SQLITE_OK && pPager->pWal ){
rc==0Description
TRUEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
pPager->pWalDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
0-23
7600 rc = pagerExclusiveLock(pPager);-
7601 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-20
7602 rc = sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags,-
7603 pPager->pageSize, (u8*)pPager->pTmpSpace);-
7604 pPager->pWal = 0;-
7605 pagerFixMaplimit(pPager);-
7606 if( rc && !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK);
never executed: pagerUnlockDb(pPager, 1);
rcDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
!pPager->exclusiveModeDescription
TRUEnever evaluated
FALSEnever evaluated
0-20
7607 }
executed 20 times by 1 test: end of block
Executed by:
  • Self test (438)
20
7608 }
executed 20 times by 1 test: end of block
Executed by:
  • Self test (438)
20
7609 return rc;
executed 23 times by 1 test: return rc;
Executed by:
  • Self test (438)
23
7610}-
7611-
7612#ifdef SQLITE_ENABLE_SNAPSHOT-
7613/*-
7614** If this is a WAL database, obtain a snapshot handle for the snapshot-
7615** currently open. Otherwise, return an error.-
7616*/-
7617int sqlite3PagerSnapshotGet(Pager *pPager, sqlite3_snapshot **ppSnapshot){-
7618 int rc = SQLITE_ERROR;-
7619 if( pPager->pWal ){-
7620 rc = sqlite3WalSnapshotGet(pPager->pWal, ppSnapshot);-
7621 }-
7622 return rc;-
7623}-
7624-
7625/*-
7626** If this is a WAL database, store a pointer to pSnapshot. Next time a-
7627** read transaction is opened, attempt to read from the snapshot it -
7628** identifies. If this is not a WAL database, return an error.-
7629*/-
7630int sqlite3PagerSnapshotOpen(Pager *pPager, sqlite3_snapshot *pSnapshot){-
7631 int rc = SQLITE_OK;-
7632 if( pPager->pWal ){-
7633 sqlite3WalSnapshotOpen(pPager->pWal, pSnapshot);-
7634 }else{-
7635 rc = SQLITE_ERROR;-
7636 }-
7637 return rc;-
7638}-
7639-
7640/*-
7641** If this is a WAL database, call sqlite3WalSnapshotRecover(). If this -
7642** is not a WAL database, return an error.-
7643*/-
7644int sqlite3PagerSnapshotRecover(Pager *pPager){-
7645 int rc;-
7646 if( pPager->pWal ){-
7647 rc = sqlite3WalSnapshotRecover(pPager->pWal);-
7648 }else{-
7649 rc = SQLITE_ERROR;-
7650 }-
7651 return rc;-
7652}-
7653-
7654/*-
7655** The caller currently has a read transaction open on the database.-
7656** If this is not a WAL database, SQLITE_ERROR is returned. Otherwise,-
7657** this function takes a SHARED lock on the CHECKPOINTER slot and then-
7658** checks if the snapshot passed as the second argument is still -
7659** available. If so, SQLITE_OK is returned.-
7660**-
7661** If the snapshot is not available, SQLITE_ERROR is returned. Or, if-
7662** the CHECKPOINTER lock cannot be obtained, SQLITE_BUSY. If any error-
7663** occurs (any value other than SQLITE_OK is returned), the CHECKPOINTER-
7664** lock is released before returning.-
7665*/-
7666int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pSnapshot){-
7667 int rc;-
7668 if( pPager->pWal ){-
7669 rc = sqlite3WalSnapshotCheck(pPager->pWal, pSnapshot);-
7670 }else{-
7671 rc = SQLITE_ERROR;-
7672 }-
7673 return rc;-
7674}-
7675-
7676/*-
7677** Release a lock obtained by an earlier successful call to-
7678** sqlite3PagerSnapshotCheck().-
7679*/-
7680void sqlite3PagerSnapshotUnlock(Pager *pPager){-
7681 assert( pPager->pWal );-
7682 return sqlite3WalSnapshotUnlock(pPager->pWal);-
7683}-
7684-
7685#endif /* SQLITE_ENABLE_SNAPSHOT */-
7686#endif /* !SQLITE_OMIT_WAL */-
7687-
7688#ifdef SQLITE_ENABLE_ZIPVFS-
7689/*-
7690** A read-lock must be held on the pager when this function is called. If-
7691** the pager is in WAL mode and the WAL file currently contains one or more-
7692** frames, return the size in bytes of the page images stored within the-
7693** WAL frames. Otherwise, if this is not a WAL database or the WAL file-
7694** is empty, return 0.-
7695*/-
7696int sqlite3PagerWalFramesize(Pager *pPager){-
7697 assert( pPager->eState>=PAGER_READER );-
7698 return sqlite3WalFramesize(pPager->pWal);-
7699}-
7700#endif-
7701-
7702#endif /* SQLITE_OMIT_DISKIO */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2