OpenCoverage

btree.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/sqlite/src/src/btree.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2** 2004 April 6-
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 file implements an external (disk-based) database using BTrees.-
13** See the header comment on "btreeInt.h" for additional information.-
14** Including a description of file format and an overview of operation.-
15*/-
16#include "btreeInt.h"-
17-
18/*-
19** The header string that appears at the beginning of every-
20** SQLite database.-
21*/-
22static const char zMagicHeader[] = SQLITE_FILE_HEADER;-
23-
24/*-
25** Set this global variable to 1 to enable tracing using the TRACE-
26** macro.-
27*/-
28#if 0-
29int sqlite3BtreeTrace=1; /* True to enable tracing */-
30# define TRACE(X) if(sqlite3BtreeTrace){printf X;fflush(stdout);}-
31#else-
32# define TRACE(X)-
33#endif-
34-
35/*-
36** Extract a 2-byte big-endian integer from an array of unsigned bytes.-
37** But if the value is zero, make it 65536.-
38**-
39** This routine is used to extract the "offset to cell content area" value-
40** from the header of a btree page. If the page size is 65536 and the page-
41** is empty, the offset should be 65536, but the 2-byte value stores zero.-
42** This routine makes the necessary adjustment to 65536.-
43*/-
44#define get2byteNotZero(X) (((((int)get2byte(X))-1)&0xffff)+1)-
45-
46/*-
47** Values passed as the 5th argument to allocateBtreePage()-
48*/-
49#define BTALLOC_ANY 0 /* Allocate any page */-
50#define BTALLOC_EXACT 1 /* Allocate exact page if possible */-
51#define BTALLOC_LE 2 /* Allocate any page <= the parameter */-
52-
53/*-
54** Macro IfNotOmitAV(x) returns (x) if SQLITE_OMIT_AUTOVACUUM is not -
55** defined, or 0 if it is. For example:-
56**-
57** bIncrVacuum = IfNotOmitAV(pBtShared->incrVacuum);-
58*/-
59#ifndef SQLITE_OMIT_AUTOVACUUM-
60#define IfNotOmitAV(expr) (expr)-
61#else-
62#define IfNotOmitAV(expr) 0-
63#endif-
64-
65#ifndef SQLITE_OMIT_SHARED_CACHE-
66/*-
67** A list of BtShared objects that are eligible for participation-
68** in shared cache. This variable has file scope during normal builds,-
69** but the test harness needs to access it so we make it global for -
70** test builds.-
71**-
72** Access to this variable is protected by SQLITE_MUTEX_STATIC_MASTER.-
73*/-
74#ifdef SQLITE_TEST-
75BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;-
76#else-
77static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;-
78#endif-
79#endif /* SQLITE_OMIT_SHARED_CACHE */-
80-
81#ifndef SQLITE_OMIT_SHARED_CACHE-
82/*-
83** Enable or disable the shared pager and schema features.-
84**-
85** This routine has no effect on existing database connections.-
86** The shared cache setting effects only future calls to-
87** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2().-
88*/-
89int sqlite3_enable_shared_cache(int enable){-
90 sqlite3GlobalConfig.sharedCacheEnabled = enable;-
91 return SQLITE_OK;
executed 114 times by 1 test: return 0;
Executed by:
  • Self test (438)
114
92}-
93#endif-
94-
95-
96-
97#ifdef SQLITE_OMIT_SHARED_CACHE-
98 /*-
99 ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(),-
100 ** and clearAllSharedCacheTableLocks()-
101 ** manipulate entries in the BtShared.pLock linked list used to store-
102 ** shared-cache table level locks. If the library is compiled with the-
103 ** shared-cache feature disabled, then there is only ever one user-
104 ** of each BtShared structure and so this locking is not necessary. -
105 ** So define the lock related functions as no-ops.-
106 */-
107 #define querySharedCacheTableLock(a,b,c) SQLITE_OK-
108 #define setSharedCacheTableLock(a,b,c) SQLITE_OK-
109 #define clearAllSharedCacheTableLocks(a)-
110 #define downgradeAllSharedCacheTableLocks(a)-
111 #define hasSharedCacheTableLock(a,b,c,d) 1-
112 #define hasReadConflicts(a, b) 0-
113#endif-
114-
115/*-
116** Implementation of the SQLITE_CORRUPT_PAGE() macro. Takes a single-
117** (MemPage*) as an argument. The (MemPage*) must not be NULL.-
118**-
119** If SQLITE_DEBUG is not defined, then this macro is equivalent to-
120** SQLITE_CORRUPT_BKPT. Or, if SQLITE_DEBUG is set, then the log message-
121** normally produced as a side-effect of SQLITE_CORRUPT_BKPT is augmented-
122** with the page number and filename associated with the (MemPage*).-
123*/-
124#ifdef SQLITE_DEBUG-
125int corruptPageError(int lineno, MemPage *p){-
126 char *zMsg;-
127 sqlite3BeginBenignMalloc();-
128 zMsg = sqlite3_mprintf("database corruption page %d of %s",-
129 (int)p->pgno, sqlite3PagerFilename(p->pBt->pPager, 0)-
130 );-
131 sqlite3EndBenignMalloc();-
132 if( zMsg ){-
133 sqlite3ReportError(SQLITE_CORRUPT, lineno, zMsg);-
134 }-
135 sqlite3_free(zMsg);-
136 return SQLITE_CORRUPT_BKPT;-
137}-
138# define SQLITE_CORRUPT_PAGE(pMemPage) corruptPageError(__LINE__, pMemPage)-
139#else-
140# define SQLITE_CORRUPT_PAGE(pMemPage) SQLITE_CORRUPT_PGNO(pMemPage->pgno)-
141#endif-
142-
143#ifndef SQLITE_OMIT_SHARED_CACHE-
144-
145#ifdef SQLITE_DEBUG-
146/*-
147**** This function is only used as part of an assert() statement. ***-
148**-
149** Check to see if pBtree holds the required locks to read or write to the -
150** table with root page iRoot. Return 1 if it does and 0 if not.-
151**-
152** For example, when writing to a table with root-page iRoot via -
153** Btree connection pBtree:-
154**-
155** assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) );-
156**-
157** When writing to an index that resides in a sharable database, the -
158** caller should have first obtained a lock specifying the root page of-
159** the corresponding table. This makes things a bit more complicated,-
160** as this module treats each table as a separate structure. To determine-
161** the table corresponding to the index being written, this-
162** function has to search through the database schema.-
163**-
164** Instead of a lock on the table/index rooted at page iRoot, the caller may-
165** hold a write-lock on the schema table (root page 1). This is also-
166** acceptable.-
167*/-
168static int hasSharedCacheTableLock(-
169 Btree *pBtree, /* Handle that must hold lock */-
170 Pgno iRoot, /* Root page of b-tree */-
171 int isIndex, /* True if iRoot is the root of an index b-tree */-
172 int eLockType /* Required lock type (READ_LOCK or WRITE_LOCK) */-
173){-
174 Schema *pSchema = (Schema *)pBtree->pBt->pSchema;-
175 Pgno iTab = 0;-
176 BtLock *pLock;-
177-
178 /* If this database is not shareable, or if the client is reading-
179 ** and has the read-uncommitted flag set, then no lock is required. -
180 ** Return true immediately.-
181 */-
182 if( (pBtree->sharable==0)-
183 || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommit))-
184 ){-
185 return 1;-
186 }-
187-
188 /* If the client is reading or writing an index and the schema is-
189 ** not loaded, then it is too difficult to actually check to see if-
190 ** the correct locks are held. So do not bother - just return true.-
191 ** This case does not come up very often anyhow.-
192 */-
193 if( isIndex && (!pSchema || (pSchema->schemaFlags&DB_SchemaLoaded)==0) ){-
194 return 1;-
195 }-
196-
197 /* Figure out the root-page that the lock should be held on. For table-
198 ** b-trees, this is just the root page of the b-tree being read or-
199 ** written. For index b-trees, it is the root page of the associated-
200 ** table. */-
201 if( isIndex ){-
202 HashElem *p;-
203 for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){-
204 Index *pIdx = (Index *)sqliteHashData(p);-
205 if( pIdx->tnum==(int)iRoot ){-
206 if( iTab ){-
207 /* Two or more indexes share the same root page. There must-
208 ** be imposter tables. So just return true. The assert is not-
209 ** useful in that case. */-
210 return 1;-
211 }-
212 iTab = pIdx->pTable->tnum;-
213 }-
214 }-
215 }else{-
216 iTab = iRoot;-
217 }-
218-
219 /* Search for the required lock. Either a write-lock on root-page iTab, a -
220 ** write-lock on the schema table, or (if the client is reading) a-
221 ** read-lock on iTab will suffice. Return 1 if any of these are found. */-
222 for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){-
223 if( pLock->pBtree==pBtree -
224 && (pLock->iTable==iTab || (pLock->eLock==WRITE_LOCK && pLock->iTable==1))-
225 && pLock->eLock>=eLockType -
226 ){-
227 return 1;-
228 }-
229 }-
230-
231 /* Failed to find the required lock. */-
232 return 0;-
233}-
234#endif /* SQLITE_DEBUG */-
235-
236#ifdef SQLITE_DEBUG-
237/*-
238**** This function may be used as part of assert() statements only. ****-
239**-
240** Return true if it would be illegal for pBtree to write into the-
241** table or index rooted at iRoot because other shared connections are-
242** simultaneously reading that same table or index.-
243**-
244** It is illegal for pBtree to write if some other Btree object that-
245** shares the same BtShared object is currently reading or writing-
246** the iRoot table. Except, if the other Btree object has the-
247** read-uncommitted flag set, then it is OK for the other object to-
248** have a read cursor.-
249**-
250** For example, before writing to any part of the table or index-
251** rooted at page iRoot, one should call:-
252**-
253** assert( !hasReadConflicts(pBtree, iRoot) );-
254*/-
255static int hasReadConflicts(Btree *pBtree, Pgno iRoot){-
256 BtCursor *p;-
257 for(p=pBtree->pBt->pCursor; p; p=p->pNext){-
258 if( p->pgnoRoot==iRoot -
259 && p->pBtree!=pBtree-
260 && 0==(p->pBtree->db->flags & SQLITE_ReadUncommit)-
261 ){-
262 return 1;-
263 }-
264 }-
265 return 0;-
266}-
267#endif /* #ifdef SQLITE_DEBUG */-
268-
269/*-
270** Query to see if Btree handle p may obtain a lock of type eLock -
271** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return-
272** SQLITE_OK if the lock may be obtained (by calling-
273** setSharedCacheTableLock()), or SQLITE_LOCKED if not.-
274*/-
275static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){-
276 BtShared *pBt = p->pBt;-
277 BtLock *pIter;-
278-
279 assert( sqlite3BtreeHoldsMutex(p) );-
280 assert( eLock==READ_LOCK || eLock==WRITE_LOCK );-
281 assert( p->db!=0 );-
282 assert( !(p->db->flags&SQLITE_ReadUncommit)||eLock==WRITE_LOCK||iTab==1 );-
283 -
284 /* If requesting a write-lock, then the Btree must have an open write-
285 ** transaction on this file. And, obviously, for this to be so there -
286 ** must be an open write transaction on the file itself.-
287 */-
288 assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );-
289 assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE );-
290 -
291 /* This routine is a no-op if the shared-cache is not enabled */-
292 if( !p->sharable ){
!p->sharableDescription
TRUEevaluated 895956 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 7439 times by 1 test
Evaluated by:
  • Self test (438)
7439-895956
293 return SQLITE_OK;
executed 895956 times by 436 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)
  • ...
895956
294 }-
295-
296 /* If some other connection is holding an exclusive lock, the-
297 ** requested lock may not be obtained.-
298 */-
299 if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){
pBt->pWriter!=pDescription
TRUEevaluated 5667 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1772 times by 1 test
Evaluated by:
  • Self test (438)
(pBt->btsFlags & 0x0040)!=0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5661 times by 1 test
Evaluated by:
  • Self test (438)
6-5667
300 sqlite3ConnectionBlocked(p->db, pBt->pWriter->db);-
301 return SQLITE_LOCKED_SHAREDCACHE;
executed 6 times by 1 test: return (6 | (1<<8));
Executed by:
  • Self test (438)
6
302 }-
303-
304 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
pIterDescription
TRUEevaluated 6163 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7378 times by 1 test
Evaluated by:
  • Self test (438)
6163-7378
305 /* The condition (pIter->eLock!=eLock) in the following if(...) -
306 ** statement is a simplification of:-
307 **-
308 ** (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK)-
309 **-
310 ** since we know that if eLock==WRITE_LOCK, then no other connection-
311 ** may hold a WRITE_LOCK on any table in this file (since there can-
312 ** only be a single writer).-
313 */-
314 assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK );-
315 assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK);-
316 if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){
pIter->pBtree!=pDescription
TRUEevaluated 1877 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4286 times by 1 test
Evaluated by:
  • Self test (438)
pIter->iTable==iTabDescription
TRUEevaluated 742 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1135 times by 1 test
Evaluated by:
  • Self test (438)
pIter->eLock!=eLockDescription
TRUEevaluated 55 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 687 times by 1 test
Evaluated by:
  • Self test (438)
55-4286
317 sqlite3ConnectionBlocked(p->db, pIter->pBtree->db);-
318 if( eLock==WRITE_LOCK ){
eLock==2Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 37 times by 1 test
Evaluated by:
  • Self test (438)
18-37
319 assert( p==pBt->pWriter );-
320 pBt->btsFlags |= BTS_PENDING;-
321 }
executed 18 times by 1 test: end of block
Executed by:
  • Self test (438)
18
322 return SQLITE_LOCKED_SHAREDCACHE;
executed 55 times by 1 test: return (6 | (1<<8));
Executed by:
  • Self test (438)
55
323 }-
324 }
executed 6108 times by 1 test: end of block
Executed by:
  • Self test (438)
6108
325 return SQLITE_OK;
executed 7378 times by 1 test: return 0;
Executed by:
  • Self test (438)
7378
326}-
327#endif /* !SQLITE_OMIT_SHARED_CACHE */-
328-
329#ifndef SQLITE_OMIT_SHARED_CACHE-
330/*-
331** Add a lock on the table with root-page iTable to the shared-btree used-
332** by Btree handle p. Parameter eLock must be either READ_LOCK or -
333** WRITE_LOCK.-
334**-
335** This function assumes the following:-
336**-
337** (a) The specified Btree object p is connected to a sharable-
338** database (one with the BtShared.sharable flag set), and-
339**-
340** (b) No other Btree objects hold a lock that conflicts-
341** with the requested lock (i.e. querySharedCacheTableLock() has-
342** already been called and returned SQLITE_OK).-
343**-
344** SQLITE_OK is returned if the lock is added successfully. SQLITE_NOMEM -
345** is returned if a malloc attempt fails.-
346*/-
347static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){-
348 BtShared *pBt = p->pBt;-
349 BtLock *pLock = 0;-
350 BtLock *pIter;-
351-
352 assert( sqlite3BtreeHoldsMutex(p) );-
353 assert( eLock==READ_LOCK || eLock==WRITE_LOCK );-
354 assert( p->db!=0 );-
355-
356 /* A connection with the read-uncommitted flag set will never try to-
357 ** obtain a read-lock using this function. The only read-lock obtained-
358 ** by a connection in read-uncommitted mode is on the sqlite_master -
359 ** table, and that lock is obtained in BtreeBeginTrans(). */-
360 assert( 0==(p->db->flags&SQLITE_ReadUncommit) || eLock==WRITE_LOCK );-
361-
362 /* This function should only be called on a sharable b-tree after it -
363 ** has been determined that no other b-tree holds a conflicting lock. */-
364 assert( p->sharable );-
365 assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) );-
366-
367 /* First search the list for an existing lock on this table. */-
368 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
pIterDescription
TRUEevaluated 2383 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 713 times by 1 test
Evaluated by:
  • Self test (438)
713-2383
369 if( pIter->iTable==iTable && pIter->pBtree==p ){
pIter->iTable==iTableDescription
TRUEevaluated 1104 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1279 times by 1 test
Evaluated by:
  • Self test (438)
pIter->pBtree==pDescription
TRUEevaluated 1073 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 31 times by 1 test
Evaluated by:
  • Self test (438)
31-1279
370 pLock = pIter;-
371 break;
executed 1073 times by 1 test: break;
Executed by:
  • Self test (438)
1073
372 }-
373 }
executed 1310 times by 1 test: end of block
Executed by:
  • Self test (438)
1310
374-
375 /* If the above search did not find a BtLock struct associating Btree p-
376 ** with table iTable, allocate one and link it into the list.-
377 */-
378 if( !pLock ){
!pLockDescription
TRUEevaluated 713 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1073 times by 1 test
Evaluated by:
  • Self test (438)
713-1073
379 pLock = (BtLock *)sqlite3MallocZero(sizeof(BtLock));-
380 if( !pLock ){
!pLockDescription
TRUEnever evaluated
FALSEevaluated 713 times by 1 test
Evaluated by:
  • Self test (438)
0-713
381 return SQLITE_NOMEM_BKPT;
never executed: return 7;
0
382 }-
383 pLock->iTable = iTable;-
384 pLock->pBtree = p;-
385 pLock->pNext = pBt->pLock;-
386 pBt->pLock = pLock;-
387 }
executed 713 times by 1 test: end of block
Executed by:
  • Self test (438)
713
388-
389 /* Set the BtLock.eLock variable to the maximum of the current lock-
390 ** and the requested lock. This means if a write-lock was already held-
391 ** and a read-lock requested, we don't incorrectly downgrade the lock.-
392 */-
393 assert( WRITE_LOCK>READ_LOCK );-
394 if( eLock>pLock->eLock ){
eLock>pLock->eLockDescription
TRUEevaluated 926 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 860 times by 1 test
Evaluated by:
  • Self test (438)
860-926
395 pLock->eLock = eLock;-
396 }
executed 926 times by 1 test: end of block
Executed by:
  • Self test (438)
926
397-
398 return SQLITE_OK;
executed 1786 times by 1 test: return 0;
Executed by:
  • Self test (438)
1786
399}-
400#endif /* !SQLITE_OMIT_SHARED_CACHE */-
401-
402#ifndef SQLITE_OMIT_SHARED_CACHE-
403/*-
404** Release all the table locks (locks obtained via calls to-
405** the setSharedCacheTableLock() procedure) held by Btree object p.-
406**-
407** This function assumes that Btree p has an open read or write -
408** transaction. If it does not, then the BTS_PENDING flag-
409** may be incorrectly cleared.-
410*/-
411static void clearAllSharedCacheTableLocks(Btree *p){-
412 BtShared *pBt = p->pBt;-
413 BtLock **ppIter = &pBt->pLock;-
414-
415 assert( sqlite3BtreeHoldsMutex(p) );-
416 assert( p->sharable || 0==*ppIter );-
417 assert( p->inTrans>0 );-
418-
419 while( *ppIter ){
*ppIterDescription
TRUEevaluated 2515 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 260919 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)
  • ...
2515-260919
420 BtLock *pLock = *ppIter;-
421 assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree );-
422 assert( pLock->pBtree->inTrans>=pLock->eLock );-
423 if( pLock->pBtree==p ){
pLock->pBtree==pDescription
TRUEevaluated 1900 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 615 times by 1 test
Evaluated by:
  • Self test (438)
615-1900
424 *ppIter = pLock->pNext;-
425 assert( pLock->iTable!=1 || pLock==&p->lock );-
426 if( pLock->iTable!=1 ){
pLock->iTable!=1Description
TRUEevaluated 713 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1187 times by 1 test
Evaluated by:
  • Self test (438)
713-1187
427 sqlite3_free(pLock);-
428 }
executed 713 times by 1 test: end of block
Executed by:
  • Self test (438)
713
429 }else{
executed 1900 times by 1 test: end of block
Executed by:
  • Self test (438)
1900
430 ppIter = &pLock->pNext;-
431 }
executed 615 times by 1 test: end of block
Executed by:
  • Self test (438)
615
432 }-
433-
434 assert( (pBt->btsFlags & BTS_PENDING)==0 || pBt->pWriter );-
435 if( pBt->pWriter==p ){
pBt->pWriter==pDescription
TRUEevaluated 162461 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 98458 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)
  • ...
98458-162461
436 pBt->pWriter = 0;-
437 pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING);-
438 }else if( pBt->nTransaction==2 ){
executed 162461 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)
  • ...
pBt->nTransaction==2Description
TRUEevaluated 70 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 98388 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)
  • ...
70-162461
439 /* This function is called when Btree p is concluding its -
440 ** transaction. If there currently exists a writer, and p is not-
441 ** that writer, then the number of locks held by connections other-
442 ** than the writer must be about to drop to zero. In this case-
443 ** set the BTS_PENDING flag to 0.-
444 **-
445 ** If there is not currently a writer, then BTS_PENDING must-
446 ** be zero already. So this next line is harmless in that case.-
447 */-
448 pBt->btsFlags &= ~BTS_PENDING;-
449 }
executed 70 times by 1 test: end of block
Executed by:
  • Self test (438)
70
450}
executed 260919 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)
  • ...
260919
451-
452/*-
453** This function changes all write-locks held by Btree p into read-locks.-
454*/-
455static void downgradeAllSharedCacheTableLocks(Btree *p){-
456 BtShared *pBt = p->pBt;-
457 if( pBt->pWriter==p ){
pBt->pWriter==pDescription
TRUEevaluated 1106 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 144045 times by 1 test
Evaluated by:
  • Self test (438)
1106-144045
458 BtLock *pLock;-
459 pBt->pWriter = 0;-
460 pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING);-
461 for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){
pLockDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1106 times by 1 test
Evaluated by:
  • Self test (438)
2-1106
462 assert( pLock->eLock==READ_LOCK || pLock->pBtree==p );-
463 pLock->eLock = READ_LOCK;-
464 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
465 }
executed 1106 times by 1 test: end of block
Executed by:
  • Self test (438)
1106
466}
executed 145151 times by 1 test: end of block
Executed by:
  • Self test (438)
145151
467-
468#endif /* SQLITE_OMIT_SHARED_CACHE */-
469-
470static void releasePage(MemPage *pPage); /* Forward reference */-
471static void releasePageOne(MemPage *pPage); /* Forward reference */-
472static void releasePageNotNull(MemPage *pPage); /* Forward reference */-
473-
474/*-
475***** This routine is used inside of assert() only ****-
476**-
477** Verify that the cursor holds the mutex on its BtShared-
478*/-
479#ifdef SQLITE_DEBUG-
480static int cursorHoldsMutex(BtCursor *p){-
481 return sqlite3_mutex_held(p->pBt->mutex);-
482}-
483-
484/* Verify that the cursor and the BtShared agree about what is the current-
485** database connetion. This is important in shared-cache mode. If the database -
486** connection pointers get out-of-sync, it is possible for routines like-
487** btreeInitPage() to reference an stale connection pointer that references a-
488** a connection that has already closed. This routine is used inside assert()-
489** statements only and for the purpose of double-checking that the btree code-
490** does keep the database connection pointers up-to-date.-
491*/-
492static int cursorOwnsBtShared(BtCursor *p){-
493 assert( cursorHoldsMutex(p) );-
494 return (p->pBtree->db==p->pBt->db);-
495}-
496#endif-
497-
498/*-
499** Invalidate the overflow cache of the cursor passed as the first argument.-
500** on the shared btree structure pBt.-
501*/-
502#define invalidateOverflowCache(pCur) (pCur->curFlags &= ~BTCF_ValidOvfl)-
503-
504/*-
505** Invalidate the overflow page-list cache for all cursors opened-
506** on the shared btree structure pBt.-
507*/-
508static void invalidateAllOverflowCache(BtShared *pBt){-
509 BtCursor *p;-
510 assert( sqlite3_mutex_held(pBt->mutex) );-
511 for(p=pBt->pCursor; p; p=p->pNext){
pDescription
TRUEevaluated 448 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15011 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
448-15011
512 invalidateOverflowCache(p);-
513 }
executed 448 times by 1 test: end of block
Executed by:
  • Self test (438)
448
514}
executed 15011 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
15011
515-
516#ifndef SQLITE_OMIT_INCRBLOB-
517/*-
518** This function is called before modifying the contents of a table-
519** to invalidate any incrblob cursors that are open on the-
520** row or one of the rows being modified.-
521**-
522** If argument isClearTable is true, then the entire contents of the-
523** table is about to be deleted. In this case invalidate all incrblob-
524** cursors open on any row within the table with root-page pgnoRoot.-
525**-
526** Otherwise, if argument isClearTable is false, then the row with-
527** rowid iRow is being replaced or deleted. In this case invalidate-
528** only those incrblob cursors open on that specific row.-
529*/-
530static void invalidateIncrblobCursors(-
531 Btree *pBtree, /* The database file to check */-
532 Pgno pgnoRoot, /* The table that might be changing */-
533 i64 iRow, /* The rowid that might be changing */-
534 int isClearTable /* True if all rows are being deleted */-
535){-
536 BtCursor *p;-
537 if( pBtree->hasIncrblobCur==0 ) return;
executed 7100521 times by 391 tests: return;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
pBtree->hasIncrblobCur==0Description
TRUEevaluated 7100521 times by 391 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 225 times by 1 test
Evaluated by:
  • Self test (438)
225-7100521
538 assert( sqlite3BtreeHoldsMutex(pBtree) );-
539 pBtree->hasIncrblobCur = 0;-
540 for(p=pBtree->pBt->pCursor; p; p=p->pNext){
pDescription
TRUEevaluated 12324 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 225 times by 1 test
Evaluated by:
  • Self test (438)
225-12324
541 if( (p->curFlags & BTCF_Incrblob)!=0 ){
(p->curFlags & 0x10)!=0Description
TRUEevaluated 11981 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 343 times by 1 test
Evaluated by:
  • Self test (438)
343-11981
542 pBtree->hasIncrblobCur = 1;-
543 if( p->pgnoRoot==pgnoRoot && (isClearTable || p->info.nKey==iRow) ){
p->pgnoRoot==pgnoRootDescription
TRUEevaluated 11971 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
isClearTableDescription
TRUEevaluated 72 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11899 times by 1 test
Evaluated by:
  • Self test (438)
p->info.nKey==iRowDescription
TRUEevaluated 45 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11854 times by 1 test
Evaluated by:
  • Self test (438)
10-11971
544 p->eState = CURSOR_INVALID;-
545 }
executed 117 times by 1 test: end of block
Executed by:
  • Self test (438)
117
546 }
executed 11981 times by 1 test: end of block
Executed by:
  • Self test (438)
11981
547 }
executed 12324 times by 1 test: end of block
Executed by:
  • Self test (438)
12324
548}
executed 225 times by 1 test: end of block
Executed by:
  • Self test (438)
225
549-
550#else-
551 /* Stub function when INCRBLOB is omitted */-
552 #define invalidateIncrblobCursors(w,x,y,z)-
553#endif /* SQLITE_OMIT_INCRBLOB */-
554-
555/*-
556** Set bit pgno of the BtShared.pHasContent bitvec. This is called -
557** when a page that previously contained data becomes a free-list leaf -
558** page.-
559**-
560** The BtShared.pHasContent bitvec exists to work around an obscure-
561** bug caused by the interaction of two useful IO optimizations surrounding-
562** free-list leaf pages:-
563**-
564** 1) When all data is deleted from a page and the page becomes-
565** a free-list leaf page, the page is not written to the database-
566** (as free-list leaf pages contain no meaningful data). Sometimes-
567** such a page is not even journalled (as it will not be modified,-
568** why bother journalling it?).-
569**-
570** 2) When a free-list leaf page is reused, its content is not read-
571** from the database or written to the journal file (why should it-
572** be, if it is not at all meaningful?).-
573**-
574** By themselves, these optimizations work fine and provide a handy-
575** performance boost to bulk delete or insert operations. However, if-
576** a page is moved to the free-list and then reused within the same-
577** transaction, a problem comes up. If the page is not journalled when-
578** it is moved to the free-list and it is also not journalled when it-
579** is extracted from the free-list and reused, then the original data-
580** may be lost. In the event of a rollback, it may not be possible-
581** to restore the database to its original configuration.-
582**-
583** The solution is the BtShared.pHasContent bitvec. Whenever a page is -
584** moved to become a free-list leaf page, the corresponding bit is-
585** set in the bitvec. Whenever a leaf page is extracted from the free-list,-
586** optimization 2 above is omitted if the corresponding bit is already-
587** set in BtShared.pHasContent. The contents of the bitvec are cleared-
588** at the end of every transaction.-
589*/-
590static int btreeSetHasContent(BtShared *pBt, Pgno pgno){-
591 int rc = SQLITE_OK;-
592 if( !pBt->pHasContent ){
!pBt->pHasContentDescription
TRUEevaluated 3112 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 264587 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)
3112-264587
593 assert( pgno<=pBt->nPage );-
594 pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage);-
595 if( !pBt->pHasContent ){
!pBt->pHasContentDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3111 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)
1-3111
596 rc = SQLITE_NOMEM_BKPT;-
597 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
598 }
executed 3112 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)
3112
599 if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){
rc==0Description
TRUEevaluated 267698 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 1 time by 1 test
Evaluated by:
  • Self test (438)
pgno<=sqlite3B...->pHasContent)Description
TRUEevaluated 241569 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 26129 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
1-267698
600 rc = sqlite3BitvecSet(pBt->pHasContent, pgno);-
601 }
executed 241569 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)
241569
602 return rc;
executed 267699 times by 15 tests: return rc;
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)
267699
603}-
604-
605/*-
606** Query the BtShared.pHasContent vector.-
607**-
608** This function is called when a free-list leaf page is removed from the-
609** free-list for reuse. It returns false if it is safe to retrieve the-
610** page from the pager layer with the 'no-content' flag set. True otherwise.-
611*/-
612static int btreeGetHasContent(BtShared *pBt, Pgno pgno){-
613 Bitvec *p = pBt->pHasContent;-
614 return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno)));
executed 148719 times by 11 tests: return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno)));
Executed 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)
pDescription
TRUEevaluated 119937 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 28782 times by 1 test
Evaluated by:
  • Self test (438)
pgno>sqlite3BitvecSize(p)Description
TRUEevaluated 25284 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 94653 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)
sqlite3BitvecTest(p, pgno)Description
TRUEevaluated 92949 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 1704 times by 1 test
Evaluated by:
  • Self test (438)
1704-148719
615}-
616-
617/*-
618** Clear (destroy) the BtShared.pHasContent bitvec. This should be-
619** invoked at the conclusion of each write-transaction.-
620*/-
621static void btreeClearHasContent(BtShared *pBt){-
622 sqlite3BitvecDestroy(pBt->pHasContent);-
623 pBt->pHasContent = 0;-
624}
executed 163567 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)
  • ...
163567
625-
626/*-
627** Release all of the apPage[] pages for a cursor.-
628*/-
629static void btreeReleaseAllCursorPages(BtCursor *pCur){-
630 int i;-
631 if( pCur->iPage>=0 ){
pCur->iPage>=0Description
TRUEevaluated 2150169 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 5508367 times by 42 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • 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 (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)
  • ...
2150169-5508367
632 for(i=0; i<pCur->iPage; i++){
i<pCur->iPageDescription
TRUEevaluated 2465930 times by 108 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 (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (353)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • Self test (357)
  • Self test (358)
  • Self test (359)
  • Self test (360)
  • Self test (361)
  • Self test (362)
  • ...
FALSEevaluated 2150169 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)
  • ...
2150169-2465930
633 releasePageNotNull(pCur->apPage[i]);-
634 }
executed 2465930 times by 108 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 (16)
  • Self test (17)
  • Self test (18)
  • Self test (19)
  • Self test (21)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (353)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • Self test (357)
  • Self test (358)
  • Self test (359)
  • Self test (360)
  • Self test (361)
  • Self test (362)
  • ...
2465930
635 releasePageNotNull(pCur->pPage);-
636 pCur->iPage = -1;-
637 }
executed 2150169 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)
  • ...
2150169
638}
executed 7658536 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)
  • ...
7658536
639-
640/*-
641** The cursor passed as the only argument must point to a valid entry-
642** when this function is called (i.e. have eState==CURSOR_VALID). This-
643** function saves the current cursor key in variables pCur->nKey and-
644** pCur->pKey. SQLITE_OK is returned if successful or an SQLite error -
645** code otherwise.-
646**-
647** If the cursor is open on an intkey table, then the integer key-
648** (the rowid) is stored in pCur->nKey and pCur->pKey is left set to-
649** NULL. If the cursor is open on a non-intkey table, then pCur->pKey is -
650** set to point to a malloced buffer pCur->nKey bytes in size containing -
651** the key.-
652*/-
653static int saveCursorKey(BtCursor *pCur){-
654 int rc = SQLITE_OK;-
655 assert( CURSOR_VALID==pCur->eState );-
656 assert( 0==pCur->pKey );-
657 assert( cursorHoldsMutex(pCur) );-
658-
659 if( pCur->curIntKey ){
pCur->curIntKeyDescription
TRUEevaluated 176149 times by 17 tests
Evaluated by:
  • Self test (100)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • 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 1717 times by 1 test
Evaluated by:
  • Self test (438)
1717-176149
660 /* Only the rowid is required for a table btree */-
661 pCur->nKey = sqlite3BtreeIntegerKey(pCur);-
662 }else{
executed 176149 times by 17 tests: end of block
Executed by:
  • Self test (100)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • 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)
176149
663 /* For an index btree, save the complete key content */-
664 void *pKey;-
665 pCur->nKey = sqlite3BtreePayloadSize(pCur);-
666 pKey = sqlite3Malloc( pCur->nKey );-
667 if( pKey ){
pKeyDescription
TRUEevaluated 1717 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1717
668 rc = sqlite3BtreePayload(pCur, 0, (int)pCur->nKey, pKey);-
669 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1717 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1717
670 pCur->pKey = pKey;-
671 }else{
executed 1717 times by 1 test: end of block
Executed by:
  • Self test (438)
1717
672 sqlite3_free(pKey);-
673 }
never executed: end of block
0
674 }else{-
675 rc = SQLITE_NOMEM_BKPT;-
676 }
never executed: end of block
0
677 }-
678 assert( !pCur->curIntKey || !pCur->pKey );-
679 return rc;
executed 177866 times by 17 tests: return rc;
Executed by:
  • Self test (100)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • 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)
177866
680}-
681-
682/*-
683** Save the current cursor position in the variables BtCursor.nKey -
684** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK.-
685**-
686** The caller must ensure that the cursor is valid (has eState==CURSOR_VALID)-
687** prior to calling this routine. -
688*/-
689static int saveCursorPosition(BtCursor *pCur){-
690 int rc;-
691-
692 assert( CURSOR_VALID==pCur->eState || CURSOR_SKIPNEXT==pCur->eState );-
693 assert( 0==pCur->pKey );-
694 assert( cursorHoldsMutex(pCur) );-
695-
696 if( pCur->eState==CURSOR_SKIPNEXT ){
pCur->eState==2Description
TRUEevaluated 15237 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 26005 times by 13 tests
Evaluated by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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)
15237-26005
697 pCur->eState = CURSOR_VALID;-
698 }else{
executed 15237 times by 1 test: end of block
Executed by:
  • Self test (438)
15237
699 pCur->skipNext = 0;-
700 }
executed 26005 times by 13 tests: end of block
Executed by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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)
26005
701-
702 rc = saveCursorKey(pCur);-
703 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 41242 times by 13 tests
Evaluated by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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)
FALSEnever evaluated
0-41242
704 btreeReleaseAllCursorPages(pCur);-
705 pCur->eState = CURSOR_REQUIRESEEK;-
706 }
executed 41242 times by 13 tests: end of block
Executed by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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)
41242
707-
708 pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl|BTCF_AtLast);-
709 return rc;
executed 41242 times by 13 tests: return rc;
Executed by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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)
41242
710}-
711-
712/* Forward reference */-
713static int SQLITE_NOINLINE saveCursorsOnList(BtCursor*,Pgno,BtCursor*);-
714-
715/*-
716** Save the positions of all cursors (except pExcept) that are open on-
717** the table with root-page iRoot. "Saving the cursor position" means that-
718** the location in the btree is remembered in such a way that it can be-
719** moved back to the same spot after the btree has been modified. This-
720** routine is called just before cursor pExcept is used to modify the-
721** table, for example in BtreeDelete() or BtreeInsert().-
722**-
723** If there are two or more cursors on the same btree, then all such -
724** cursors should have their BTCF_Multiple flag set. The btreeCursor()-
725** routine enforces that rule. This routine only needs to be called in-
726** the uncommon case when pExpect has the BTCF_Multiple flag set.-
727**-
728** If pExpect!=NULL and if no other cursors are found on the same root-page,-
729** then the BTCF_Multiple flag on pExpect is cleared, to avoid another-
730** pointless call to this routine.-
731**-
732** Implementation note: This routine merely checks to see if any cursors-
733** need to be saved. It calls out to saveCursorsOnList() in the (unusual)-
734** event that cursors are in need to being saved.-
735*/-
736static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){-
737 BtCursor *p;-
738 assert( sqlite3_mutex_held(pBt->mutex) );-
739 assert( pExcept==0 || pExcept->pBt==pBt );-
740 for(p=pBt->pCursor; p; p=p->pNext){
pDescription
TRUEevaluated 1517187 times by 18 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (64)
  • 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 160273 times by 71 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)
  • ...
160273-1517187
741 if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) ) break;
executed 802570 times by 15 tests: break;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
p!=pExceptDescription
TRUEevaluated 924161 times by 18 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (64)
  • 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 593026 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
0==iRootDescription
TRUEevaluated 334 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 923827 times by 18 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (64)
  • 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)
p->pgnoRoot==iRootDescription
TRUEevaluated 802236 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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 121591 times by 6 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
334-924161
742 }
executed 714617 times by 18 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (64)
  • 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)
714617
743 if( p ) return saveCursorsOnList(p, iRoot, pExcept);
executed 802570 times by 15 tests: return saveCursorsOnList(p, iRoot, pExcept);
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
pDescription
TRUEevaluated 802570 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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 160273 times by 71 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)
  • ...
160273-802570
744 if( pExcept ) pExcept->curFlags &= ~BTCF_Multiple;
executed 604 times by 1 test: pExcept->curFlags &= ~0x20;
Executed by:
  • Self test (438)
pExceptDescription
TRUEevaluated 604 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 159669 times by 71 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)
  • ...
604-159669
745 return SQLITE_OK;
executed 160273 times by 71 tests: return 0;
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)
  • ...
160273
746}-
747-
748/* This helper routine to saveAllCursors does the actual work of saving-
749** the cursors if and when a cursor is found that actually requires saving.-
750** The common case is that no cursors need to be saved, so this routine is-
751** broken out from its caller to avoid unnecessary stack pointer movement.-
752*/-
753static int SQLITE_NOINLINE saveCursorsOnList(-
754 BtCursor *p, /* The first cursor that needs saving */-
755 Pgno iRoot, /* Only save cursor with this iRoot. Save all if zero */-
756 BtCursor *pExcept /* Do not save this cursor */-
757){-
758 do{-
759 if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) ){
p!=pExceptDescription
TRUEevaluated 7358596 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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 136491 times by 1 test
Evaluated by:
  • Self test (438)
0==iRootDescription
TRUEevaluated 536 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7358060 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
p->pgnoRoot==iRootDescription
TRUEevaluated 5605600 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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 1752460 times by 1 test
Evaluated by:
  • Self test (438)
536-7358596
760 if( p->eState==CURSOR_VALID || p->eState==CURSOR_SKIPNEXT ){
p->eState==0Description
TRUEevaluated 25799 times by 13 tests
Evaluated by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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 5580337 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
p->eState==2Description
TRUEevaluated 15237 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5565100 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
15237-5580337
761 int rc = saveCursorPosition(p);-
762 if( SQLITE_OK!=rc ){
0!=rcDescription
TRUEnever evaluated
FALSEevaluated 41036 times by 13 tests
Evaluated by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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)
0-41036
763 return rc;
never executed: return rc;
0
764 }-
765 }else{
executed 41036 times by 13 tests: end of block
Executed by:
  • Self test (100)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • 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)
41036
766 testcase( p->iPage>=0 );-
767 btreeReleaseAllCursorPages(p);-
768 }
executed 5565100 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
5565100
769 }-
770 p = p->pNext;-
771 }while( p );
executed 7495087 times by 15 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
pDescription
TRUEevaluated 6692517 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 802570 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
802570-7495087
772 return SQLITE_OK;
executed 802570 times by 15 tests: return 0;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
802570
773}-
774-
775/*-
776** Clear the current cursor position.-
777*/-
778void sqlite3BtreeClearCursor(BtCursor *pCur){-
779 assert( cursorHoldsMutex(pCur) );-
780 sqlite3_free(pCur->pKey);-
781 pCur->pKey = 0;-
782 pCur->eState = CURSOR_INVALID;-
783}
executed 42078 times by 1 test: end of block
Executed by:
  • Self test (438)
42078
784-
785/*-
786** In this version of BtreeMoveto, pKey is a packed index record-
787** such as is generated by the OP_MakeRecord opcode. Unpack the-
788** record and then call BtreeMovetoUnpacked() to do the work.-
789*/-
790static int btreeMoveto(-
791 BtCursor *pCur, /* Cursor open on the btree to be searched */-
792 const void *pKey, /* Packed key if the btree is an index */-
793 i64 nKey, /* Integer key for tables. Size of pKey for indices */-
794 int bias, /* Bias search to the high end */-
795 int *pRes /* Write search results here */-
796){-
797 int rc; /* Status code */-
798 UnpackedRecord *pIdxKey; /* Unpacked index key */-
799-
800 if( pKey ){
pKeyDescription
TRUEevaluated 49445 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 137562 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
49445-137562
801 assert( nKey==(i64)(int)nKey );-
802 pIdxKey = sqlite3VdbeAllocUnpackedRecord(pCur->pKeyInfo);-
803 if( pIdxKey==0 ) return SQLITE_NOMEM_BKPT;
never executed: return 7;
pIdxKey==0Description
TRUEnever evaluated
FALSEevaluated 49445 times by 1 test
Evaluated by:
  • Self test (438)
0-49445
804 sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey);-
805 if( pIdxKey->nField==0 ){
pIdxKey->nField==0Description
TRUEnever evaluated
FALSEevaluated 49445 times by 1 test
Evaluated by:
  • Self test (438)
0-49445
806 rc = SQLITE_CORRUPT_BKPT;-
807 goto moveto_done;
never executed: goto moveto_done;
0
808 }-
809 }else{
executed 49445 times by 1 test: end of block
Executed by:
  • Self test (438)
49445
810 pIdxKey = 0;-
811 }
executed 137562 times by 5 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
137562
812 rc = sqlite3BtreeMovetoUnpacked(pCur, pIdxKey, nKey, bias, pRes);-
813moveto_done:
code before this statement executed 187007 times by 5 tests: moveto_done:
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
187007
814 if( pIdxKey ){
pIdxKeyDescription
TRUEevaluated 49445 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 137562 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
49445-137562
815 sqlite3DbFree(pCur->pKeyInfo->db, pIdxKey);-
816 }
executed 49445 times by 1 test: end of block
Executed by:
  • Self test (438)
49445
817 return rc;
executed 187007 times by 5 tests: return rc;
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
187007
818}-
819-
820/*-
821** Restore the cursor to the position it was in (or as close to as possible)-
822** when saveCursorPosition() was called. Note that this call deletes the -
823** saved position info stored by saveCursorPosition(), so there can be-
824** at most one effective restoreCursorPosition() call after each -
825** saveCursorPosition().-
826*/-
827static int btreeRestoreCursorPosition(BtCursor *pCur){-
828 int rc;-
829 int skipNext;-
830 assert( cursorOwnsBtShared(pCur) );-
831 assert( pCur->eState>=CURSOR_REQUIRESEEK );-
832 if( pCur->eState==CURSOR_FAULT ){
pCur->eState==4Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 137954 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
4-137954
833 return pCur->skipNext;
executed 4 times by 1 test: return pCur->skipNext;
Executed by:
  • Self test (438)
4
834 }-
835 pCur->eState = CURSOR_INVALID;-
836 rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &skipNext);-
837 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 137954 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEnever evaluated
0-137954
838 sqlite3_free(pCur->pKey);-
839 pCur->pKey = 0;-
840 assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID );-
841 pCur->skipNext |= skipNext;-
842 if( pCur->skipNext && pCur->eState==CURSOR_VALID ){
pCur->skipNextDescription
TRUEevaluated 136623 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 1331 times by 1 test
Evaluated by:
  • Self test (438)
pCur->eState==0Description
TRUEevaluated 135827 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 796 times by 3 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
796-136623
843 pCur->eState = CURSOR_SKIPNEXT;-
844 }
executed 135827 times by 5 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
135827
845 }
executed 137954 times by 5 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
137954
846 return rc;
executed 137954 times by 5 tests: return rc;
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
137954
847}-
848-
849#define restoreCursorPosition(p) \-
850 (p->eState>=CURSOR_REQUIRESEEK ? \-
851 btreeRestoreCursorPosition(p) : \-
852 SQLITE_OK)-
853-
854/*-
855** Determine whether or not a cursor has moved from the position where-
856** it was last placed, or has been invalidated for any other reason.-
857** Cursors can move when the row they are pointing at is deleted out-
858** from under them, for example. Cursor might also move if a btree-
859** is rebalanced.-
860**-
861** Calling this routine with a NULL cursor pointer returns false.-
862**-
863** Use the separate sqlite3BtreeCursorRestore() routine to restore a cursor-
864** back to where it ought to be if this routine returns true.-
865*/-
866int sqlite3BtreeCursorHasMoved(BtCursor *pCur){-
867 assert( EIGHT_BYTE_ALIGNMENT(pCur)-
868 || pCur==sqlite3BtreeFakeValidCursor() );-
869 assert( offsetof(BtCursor, eState)==0 );-
870 assert( sizeof(pCur->eState)==1 );-
871 return CURSOR_VALID != *(u8*)pCur;
executed 38716744 times by 434 tests: return 0 != *(u8*)pCur;
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)
  • ...
38716744
872}-
873-
874/*-
875** Return a pointer to a fake BtCursor object that will always answer-
876** false to the sqlite3BtreeCursorHasMoved() routine above. The fake-
877** cursor returned must not be used with any other Btree interface.-
878*/-
879BtCursor *sqlite3BtreeFakeValidCursor(void){-
880 static u8 fakeCursor = CURSOR_VALID;-
881 assert( offsetof(BtCursor, eState)==0 );-
882 return (BtCursor*)&fakeCursor;
executed 58178 times by 1 test: return (BtCursor*)&fakeCursor;
Executed by:
  • Self test (438)
58178
883}-
884-
885/*-
886** This routine restores a cursor back to its original position after it-
887** has been moved by some outside activity (such as a btree rebalance or-
888** a row having been deleted out from under the cursor). -
889**-
890** On success, the *pDifferentRow parameter is false if the cursor is left-
891** pointing at exactly the same row. *pDifferntRow is the row the cursor-
892** was pointing to has been deleted, forcing the cursor to point to some-
893** nearby row.-
894**-
895** This routine should only be called for a cursor that just returned-
896** TRUE from sqlite3BtreeCursorHasMoved().-
897*/-
898int sqlite3BtreeCursorRestore(BtCursor *pCur, int *pDifferentRow){-
899 int rc;-
900-
901 assert( pCur!=0 );-
902 assert( pCur->eState!=CURSOR_VALID );-
903 rc = restoreCursorPosition(pCur);
pCur->eState>=3Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1606 times by 1 test
Evaluated by:
  • Self test (438)
50-1606
904 if( rc ){
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1655 times by 1 test
Evaluated by:
  • Self test (438)
1-1655
905 *pDifferentRow = 1;-
906 return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
1
907 }-
908 if( pCur->eState!=CURSOR_VALID ){
pCur->eState!=0Description
TRUEevaluated 1631 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
24-1631
909 *pDifferentRow = 1;-
910 }else{
executed 1631 times by 1 test: end of block
Executed by:
  • Self test (438)
1631
911 assert( pCur->skipNext==0 );-
912 *pDifferentRow = 0;-
913 }
executed 24 times by 1 test: end of block
Executed by:
  • Self test (438)
24
914 return SQLITE_OK;
executed 1655 times by 1 test: return 0;
Executed by:
  • Self test (438)
1655
915}-
916-
917#ifdef SQLITE_ENABLE_CURSOR_HINTS-
918/*-
919** Provide hints to the cursor. The particular hint given (and the type-
920** and number of the varargs parameters) is determined by the eHintType-
921** parameter. See the definitions of the BTREE_HINT_* macros for details.-
922*/-
923void sqlite3BtreeCursorHint(BtCursor *pCur, int eHintType, ...){-
924 /* Used only by system that substitute their own storage engine */-
925}-
926#endif-
927-
928/*-
929** Provide flag hints to the cursor.-
930*/-
931void sqlite3BtreeCursorHintFlags(BtCursor *pCur, unsigned x){-
932 assert( x==BTREE_SEEK_EQ || x==BTREE_BULKLOAD || x==0 );-
933 pCur->hints = x;-
934}
executed 1856225 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)
  • ...
1856225
935-
936-
937#ifndef SQLITE_OMIT_AUTOVACUUM-
938/*-
939** Given a page number of a regular database page, return the page-
940** number for the pointer-map page that contains the entry for the-
941** input page number.-
942**-
943** Return 0 (not a valid page) for pgno==1 since there is-
944** no pointer map associated with page 1. The integrity_check logic-
945** requires that ptrmapPageno(*,1)!=1.-
946*/-
947static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){-
948 int nPagesPerMapPage;-
949 Pgno iPtrMap, ret;-
950 assert( sqlite3_mutex_held(pBt->mutex) );-
951 if( pgno<2 ) return 0;
executed 15391 times by 14 tests: return 0;
Executed by:
  • Self test (32)
  • Self test (33)
  • 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)
pgno<2Description
TRUEevaluated 15391 times by 14 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • 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)
FALSEevaluated 2199107 times by 15 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • 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)
15391-2199107
952 nPagesPerMapPage = (pBt->usableSize/5)+1;-
953 iPtrMap = (pgno-2)/nPagesPerMapPage;-
954 ret = (iPtrMap*nPagesPerMapPage) + 2; -
955 if( ret==PENDING_BYTE_PAGE(pBt) ){
ret==((Pgno)((...pageSize))+1))Description
TRUEevaluated 98669 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (71)
FALSEevaluated 2100438 times by 14 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • 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 (74)
98669-2100438
956 ret++;-
957 }
executed 98669 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (71)
98669
958 return ret;
executed 2199107 times by 15 tests: return ret;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • 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)
2199107
959}-
960-
961/*-
962** Write an entry into the pointer map.-
963**-
964** This routine updates the pointer map entry for page number 'key'-
965** so that it maps to type 'eType' and parent page number 'pgno'.-
966**-
967** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is-
968** a no-op. If an error occurs, the appropriate error code is written-
969** into *pRC.-
970*/-
971static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){-
972 DbPage *pDbPage; /* The pointer map page */-
973 u8 *pPtrmap; /* The pointer map data */-
974 Pgno iPtrmap; /* The pointer map page number */-
975 int offset; /* Offset in pointer map page */-
976 int rc; /* Return code from subfunctions */-
977-
978 if( *pRC ) return;
executed 5 times by 1 test: return;
Executed by:
  • Self test (438)
*pRCDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 243598 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
5-243598
979-
980 assert( sqlite3_mutex_held(pBt->mutex) );-
981 /* The master-journal page number must never be used as a pointer map page */-
982 assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) );-
983-
984 assert( pBt->autoVacuum );-
985 if( key==0 ){
key==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 243597 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
1-243597
986 *pRC = SQLITE_CORRUPT_BKPT;-
987 return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
1
988 }-
989 iPtrmap = PTRMAP_PAGENO(pBt, key);-
990 rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage, 0);-
991 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 243589 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
8-243589
992 *pRC = rc;-
993 return;
executed 8 times by 1 test: return;
Executed by:
  • Self test (438)
8
994 }-
995 offset = PTRMAP_PTROFFSET(iPtrmap, key);-
996 if( offset<0 ){
offset<0Description
TRUEnever evaluated
FALSEevaluated 243589 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-243589
997 *pRC = SQLITE_CORRUPT_BKPT;-
998 goto ptrmap_exit;
never executed: goto ptrmap_exit;
0
999 }-
1000 assert( offset <= (int)pBt->usableSize-5 );-
1001 pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);-
1002-
1003 if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){
eType!=pPtrmap[offset]Description
TRUEevaluated 108050 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 135539 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
sqlite3Get4byt...et+1])!=parentDescription
TRUEevaluated 126480 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 9059 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
9059-135539
1004 TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent));-
1005 *pRC= rc = sqlite3PagerWrite(pDbPage);-
1006 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 234500 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
30-234500
1007 pPtrmap[offset] = eType;-
1008 put4byte(&pPtrmap[offset+1], parent);-
1009 }
executed 234500 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
234500
1010 }
executed 234530 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
234530
1011-
1012ptrmap_exit:
code before this statement executed 243589 times by 4 tests: ptrmap_exit:
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
243589
1013 sqlite3PagerUnref(pDbPage);-
1014}
executed 243589 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
243589
1015-
1016/*-
1017** Read an entry from the pointer map.-
1018**-
1019** This routine retrieves the pointer map entry for page 'key', writing-
1020** the type and parent page number to *pEType and *pPgno respectively.-
1021** An error code is returned if something goes wrong, otherwise SQLITE_OK.-
1022*/-
1023static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){-
1024 DbPage *pDbPage; /* The pointer map page */-
1025 int iPtrmap; /* Pointer map page index */-
1026 u8 *pPtrmap; /* Pointer map page data */-
1027 int offset; /* Offset of entry in pointer map */-
1028 int rc;-
1029-
1030 assert( sqlite3_mutex_held(pBt->mutex) );-
1031-
1032 iPtrmap = PTRMAP_PAGENO(pBt, key);-
1033 rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage, 0);-
1034 if( rc!=0 ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 298203 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-298203
1035 return rc;
never executed: return rc;
0
1036 }-
1037 pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);-
1038-
1039 offset = PTRMAP_PTROFFSET(iPtrmap, key);-
1040 if( offset<0 ){
offset<0Description
TRUEnever evaluated
FALSEevaluated 298203 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-298203
1041 sqlite3PagerUnref(pDbPage);-
1042 return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(1042);
0
1043 }-
1044 assert( offset <= (int)pBt->usableSize-5 );-
1045 assert( pEType!=0 );-
1046 *pEType = pPtrmap[offset];-
1047 if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]);
executed 290806 times by 4 tests: *pPgno = sqlite3Get4byte(&pPtrmap[offset+1]);
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
pPgnoDescription
TRUEevaluated 290806 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 7397 times by 1 test
Evaluated by:
  • Self test (438)
7397-290806
1048-
1049 sqlite3PagerUnref(pDbPage);-
1050 if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_PGNO(iPtrmap);
executed 28 times by 1 test: return sqlite3CorruptError(1050);
Executed by:
  • Self test (438)
*pEType<1Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 298189 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
*pEType>5Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 298175 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
14-298189
1051 return SQLITE_OK;
executed 298175 times by 4 tests: return 0;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
298175
1052}-
1053-
1054#else /* if defined SQLITE_OMIT_AUTOVACUUM */-
1055 #define ptrmapPut(w,x,y,z,rc)-
1056 #define ptrmapGet(w,x,y,z) SQLITE_OK-
1057 #define ptrmapPutOvflPtr(x, y, rc)-
1058#endif-
1059-
1060/*-
1061** Given a btree page and a cell index (0 means the first cell on-
1062** the page, 1 means the second cell, and so forth) return a pointer-
1063** to the cell content.-
1064**-
1065** findCellPastPtr() does the same except it skips past the initial-
1066** 4-byte child pointer found on interior pages, if there is one.-
1067**-
1068** This routine works only for pages that do not contain overflow cells.-
1069*/-
1070#define findCell(P,I) \-
1071 ((P)->aData + ((P)->maskPage & get2byteAligned(&(P)->aCellIdx[2*(I)])))-
1072#define findCellPastPtr(P,I) \-
1073 ((P)->aDataOfst + ((P)->maskPage & get2byteAligned(&(P)->aCellIdx[2*(I)])))-
1074-
1075-
1076/*-
1077** This is common tail processing for btreeParseCellPtr() and-
1078** btreeParseCellPtrIndex() for the case when the cell does not fit entirely-
1079** on a single B-tree page. Make necessary adjustments to the CellInfo-
1080** structure.-
1081*/-
1082static SQLITE_NOINLINE void btreeParseCellAdjustSizeForOverflow(-
1083 MemPage *pPage, /* Page containing the cell */-
1084 u8 *pCell, /* Pointer to the cell text. */-
1085 CellInfo *pInfo /* Fill in this structure */-
1086){-
1087 /* If the payload will not fit completely on the local page, we have-
1088 ** to decide how much to store locally and how much to spill onto-
1089 ** overflow pages. The strategy is to minimize the amount of unused-
1090 ** space on overflow pages while keeping the amount of local storage-
1091 ** in between minLocal and maxLocal.-
1092 **-
1093 ** Warning: changing the way overflow payload is distributed in any-
1094 ** way will result in an incompatible file format.-
1095 */-
1096 int minLocal; /* Minimum amount of payload held locally */-
1097 int maxLocal; /* Maximum amount of payload held locally */-
1098 int surplus; /* Overflow payload available for local storage */-
1099-
1100 minLocal = pPage->minLocal;-
1101 maxLocal = pPage->maxLocal;-
1102 surplus = minLocal + (pInfo->nPayload - minLocal)%(pPage->pBt->usableSize-4);-
1103 testcase( surplus==maxLocal );-
1104 testcase( surplus==maxLocal+1 );-
1105 if( surplus <= maxLocal ){
surplus <= maxLocalDescription
TRUEevaluated 234484 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (34)
  • Self test (438)
  • Self test (65)
  • Self test (75)
  • Self test (76)
FALSEevaluated 1988974 times by 363 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
234484-1988974
1106 pInfo->nLocal = (u16)surplus;-
1107 }else{
executed 234484 times by 6 tests: end of block
Executed by:
  • Self test (101)
  • Self test (34)
  • Self test (438)
  • Self test (65)
  • Self test (75)
  • Self test (76)
234484
1108 pInfo->nLocal = (u16)minLocal;-
1109 }
executed 1988974 times by 363 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
1988974
1110 pInfo->nSize = (u16)(&pInfo->pPayload[pInfo->nLocal] - pCell) + 4;-
1111}
executed 2223458 times by 366 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
2223458
1112-
1113/*-
1114** The following routines are implementations of the MemPage.xParseCell()-
1115** method.-
1116**-
1117** Parse a cell content block and fill in the CellInfo structure.-
1118**-
1119** btreeParseCellPtr() => table btree leaf nodes-
1120** btreeParseCellNoPayload() => table btree internal nodes-
1121** btreeParseCellPtrIndex() => index btree nodes-
1122**-
1123** There is also a wrapper function btreeParseCell() that works for-
1124** all MemPage types and that references the cell by index rather than-
1125** by pointer.-
1126*/-
1127static void btreeParseCellPtrNoPayload(-
1128 MemPage *pPage, /* Page containing the cell */-
1129 u8 *pCell, /* Pointer to the cell text. */-
1130 CellInfo *pInfo /* Fill in this structure */-
1131){-
1132 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1133 assert( pPage->leaf==0 );-
1134 assert( pPage->childPtrSize==4 );-
1135#ifndef SQLITE_DEBUG-
1136 UNUSED_PARAMETER(pPage);-
1137#endif-
1138 pInfo->nSize = 4 + getVarint(&pCell[4], (u64*)&pInfo->nKey);-
1139 pInfo->nPayload = 0;-
1140 pInfo->nLocal = 0;-
1141 pInfo->pPayload = 0;-
1142 return;
executed 1045684 times by 11 tests: return;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
1045684
1143}-
1144static void btreeParseCellPtr(-
1145 MemPage *pPage, /* Page containing the cell */-
1146 u8 *pCell, /* Pointer to the cell text. */-
1147 CellInfo *pInfo /* Fill in this structure */-
1148){-
1149 u8 *pIter; /* For scanning through pCell */-
1150 u32 nPayload; /* Number of bytes of cell payload */-
1151 u64 iKey; /* Extracted Key value */-
1152-
1153 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1154 assert( pPage->leaf==0 || pPage->leaf==1 );-
1155 assert( pPage->intKeyLeaf );-
1156 assert( pPage->childPtrSize==0 );-
1157 pIter = pCell;-
1158-
1159 /* The next block of code is equivalent to:-
1160 **-
1161 ** pIter += getVarint32(pIter, nPayload);-
1162 **-
1163 ** The code is inlined to avoid a function call.-
1164 */-
1165 nPayload = *pIter;-
1166 if( nPayload>=0x80 ){
nPayload>=0x80Description
TRUEevaluated 6147891 times by 371 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 21728801 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)
  • ...
6147891-21728801
1167 u8 *pEnd = &pIter[8];-
1168 nPayload &= 0x7f;-
1169 do{-
1170 nPayload = (nPayload<<7) | (*++pIter & 0x7f);-
1171 }while( (*pIter)>=0x80 && pIter<pEnd );
executed 6149960 times by 371 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
(*pIter)>=0x80Description
TRUEevaluated 2069 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6147891 times by 371 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
pIter<pEndDescription
TRUEevaluated 2069 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-6149960
1172 }
executed 6147891 times by 371 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
6147891
1173 pIter++;-
1174-
1175 /* The next block of code is equivalent to:-
1176 **-
1177 ** pIter += getVarint(pIter, (u64*)&pInfo->nKey);-
1178 **-
1179 ** The code is inlined to avoid a function call.-
1180 */-
1181 iKey = *pIter;-
1182 if( iKey>=0x80 ){
iKey>=0x80Description
TRUEevaluated 20725710 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (74)
FALSEevaluated 7150982 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)
  • ...
7150982-20725710
1183 u8 *pEnd = &pIter[7];-
1184 iKey &= 0x7f;-
1185 while(1){-
1186 iKey = (iKey<<7) | (*++pIter & 0x7f);-
1187 if( (*pIter)<0x80 ) break;
executed 20690487 times by 8 tests: break;
Executed by:
  • Self test
  • Self test (101)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (74)
(*pIter)<0x80Description
TRUEevaluated 20690487 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (74)
FALSEevaluated 8785356 times by 1 test
Evaluated by:
  • Self test (438)
8785356-20690487
1188 if( pIter>=pEnd ){
pIter>=pEndDescription
TRUEevaluated 35223 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8750133 times by 1 test
Evaluated by:
  • Self test (438)
35223-8750133
1189 iKey = (iKey<<8) | *++pIter;-
1190 break;
executed 35223 times by 1 test: break;
Executed by:
  • Self test (438)
35223
1191 }-
1192 }
executed 8750133 times by 1 test: end of block
Executed by:
  • Self test (438)
8750133
1193 }
executed 20725710 times by 8 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (74)
20725710
1194 pIter++;-
1195-
1196 pInfo->nKey = *(i64*)&iKey;-
1197 pInfo->nPayload = nPayload;-
1198 pInfo->pPayload = pIter;-
1199 testcase( nPayload==pPage->maxLocal );-
1200 testcase( nPayload==pPage->maxLocal+1 );-
1201 if( nPayload<=pPage->maxLocal ){
nPayload<=pPage->maxLocalDescription
TRUEevaluated 27198955 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 677737 times by 12 tests
Evaluated by:
  • Self test (101)
  • Self test (2)
  • Self test (3)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (65)
  • Self test (75)
  • Self test (76)
677737-27198955
1202 /* This is the (easy) common case where the entire payload fits-
1203 ** on the local page. No overflow is required.-
1204 */-
1205 pInfo->nSize = nPayload + (u16)(pIter - pCell);-
1206 if( pInfo->nSize<4 ) pInfo->nSize = 4;
executed 82184 times by 1 test: pInfo->nSize = 4;
Executed by:
  • Self test (438)
pInfo->nSize<4Description
TRUEevaluated 82184 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 27116771 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)
  • ...
82184-27116771
1207 pInfo->nLocal = (u16)nPayload;-
1208 }else{
executed 27198955 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)
  • ...
27198955
1209 btreeParseCellAdjustSizeForOverflow(pPage, pCell, pInfo);-
1210 }
executed 677737 times by 12 tests: end of block
Executed by:
  • Self test (101)
  • Self test (2)
  • Self test (3)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (65)
  • Self test (75)
  • Self test (76)
677737
1211}-
1212static void btreeParseCellPtrIndex(-
1213 MemPage *pPage, /* Page containing the cell */-
1214 u8 *pCell, /* Pointer to the cell text. */-
1215 CellInfo *pInfo /* Fill in this structure */-
1216){-
1217 u8 *pIter; /* For scanning through pCell */-
1218 u32 nPayload; /* Number of bytes of cell payload */-
1219-
1220 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1221 assert( pPage->leaf==0 || pPage->leaf==1 );-
1222 assert( pPage->intKeyLeaf==0 );-
1223 pIter = pCell + pPage->childPtrSize;-
1224 nPayload = *pIter;-
1225 if( nPayload>=0x80 ){
nPayload>=0x80Description
TRUEevaluated 1656399 times by 364 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
FALSEevaluated 3905391 times by 7 tests
Evaluated by:
  • Self test
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (57)
  • Self test (58)
1656399-3905391
1226 u8 *pEnd = &pIter[8];-
1227 nPayload &= 0x7f;-
1228 do{-
1229 nPayload = (nPayload<<7) | (*++pIter & 0x7f);-
1230 }while( *(pIter)>=0x80 && pIter<pEnd );
executed 1656970 times by 364 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
*(pIter)>=0x80Description
TRUEevaluated 571 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1656399 times by 364 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
pIter<pEndDescription
TRUEevaluated 571 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-1656970
1231 }
executed 1656399 times by 364 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
1656399
1232 pIter++;-
1233 pInfo->nKey = nPayload;-
1234 pInfo->nPayload = nPayload;-
1235 pInfo->pPayload = pIter;-
1236 testcase( nPayload==pPage->maxLocal );-
1237 testcase( nPayload==pPage->maxLocal+1 );-
1238 if( nPayload<=pPage->maxLocal ){
nPayload<=pPage->maxLocalDescription
TRUEevaluated 4016069 times by 12 tests
Evaluated by:
  • Self test
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
FALSEevaluated 1545721 times by 360 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
1545721-4016069
1239 /* This is the (easy) common case where the entire payload fits-
1240 ** on the local page. No overflow is required.-
1241 */-
1242 pInfo->nSize = nPayload + (u16)(pIter - pCell);-
1243 if( pInfo->nSize<4 ) pInfo->nSize = 4;
executed 1330 times by 1 test: pInfo->nSize = 4;
Executed by:
  • Self test (438)
pInfo->nSize<4Description
TRUEevaluated 1330 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4014739 times by 12 tests
Evaluated by:
  • Self test
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
1330-4014739
1244 pInfo->nLocal = (u16)nPayload;-
1245 }else{
executed 4016069 times by 12 tests: end of block
Executed by:
  • Self test
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
4016069
1246 btreeParseCellAdjustSizeForOverflow(pPage, pCell, pInfo);-
1247 }
executed 1545721 times by 360 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
1545721
1248}-
1249static void btreeParseCell(-
1250 MemPage *pPage, /* Page containing the cell */-
1251 int iCell, /* The cell index. First cell is 0 */-
1252 CellInfo *pInfo /* Fill in this structure */-
1253){-
1254 pPage->xParseCell(pPage, findCell(pPage, iCell), pInfo);-
1255}
executed 25531974 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)
  • ...
25531974
1256-
1257/*-
1258** The following routines are implementations of the MemPage.xCellSize-
1259** method.-
1260**-
1261** Compute the total number of bytes that a Cell needs in the cell-
1262** data area of the btree-page. The return number includes the cell-
1263** data header and the local payload, but not any overflow page or-
1264** the space used by the cell pointer.-
1265**-
1266** cellSizePtrNoPayload() => table internal nodes-
1267** cellSizePtr() => all index nodes & table leaf nodes-
1268*/-
1269static u16 cellSizePtr(MemPage *pPage, u8 *pCell){-
1270 u8 *pIter = pCell + pPage->childPtrSize; /* For looping over bytes of pCell */-
1271 u8 *pEnd; /* End mark for a varint */-
1272 u32 nSize; /* Size value to return */-
1273-
1274#ifdef SQLITE_DEBUG-
1275 /* The value returned by this function should always be the same as-
1276 ** the (CellInfo.nSize) value found by doing a full parse of the-
1277 ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of-
1278 ** this function verifies that this invariant is not violated. */-
1279 CellInfo debuginfo;-
1280 pPage->xParseCell(pPage, pCell, &debuginfo);-
1281#endif-
1282-
1283 nSize = *pIter;-
1284 if( nSize>=0x80 ){
nSize>=0x80Description
TRUEevaluated 2437989 times by 332 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • ...
FALSEevaluated 6690991 times by 9 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
2437989-6690991
1285 pEnd = &pIter[8];-
1286 nSize &= 0x7f;-
1287 do{-
1288 nSize = (nSize<<7) | (*++pIter & 0x7f);-
1289 }while( *(pIter)>=0x80 && pIter<pEnd );
executed 2438917 times by 332 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • ...
*(pIter)>=0x80Description
TRUEevaluated 928 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2437989 times by 332 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • ...
pIter<pEndDescription
TRUEevaluated 928 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-2438917
1290 }
executed 2437989 times by 332 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • ...
2437989
1291 pIter++;-
1292 if( pPage->intKey ){
pPage->intKeyDescription
TRUEevaluated 3577329 times by 26 tests
Evaluated 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 (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
FALSEevaluated 5551651 times by 324 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
3577329-5551651
1293 /* pIter now points at the 64-bit integer key value, a variable length -
1294 ** integer. The following block moves pIter to point at the first byte-
1295 ** past the end of the key value. */-
1296 pEnd = &pIter[9];-
1297 while( (*pIter++)&0x80 && pIter<pEnd );
executed 4429462 times by 6 tests: ;
Executed by:
  • Self test
  • Self test (101)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
(*pIter++)&0x80Description
TRUEevaluated 4429659 times by 6 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEevaluated 3577132 times by 26 tests
Evaluated 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 (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
pIter<pEndDescription
TRUEevaluated 4429462 times by 6 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEevaluated 197 times by 1 test
Evaluated by:
  • Self test (438)
197-4429659
1298 }
executed 3577329 times by 26 tests: end of block
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 (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • ...
3577329
1299 testcase( nSize==pPage->maxLocal );-
1300 testcase( nSize==pPage->maxLocal+1 );-
1301 if( nSize<=pPage->maxLocal ){
nSize<=pPage->maxLocalDescription
TRUEevaluated 8883528 times by 25 tests
Evaluated 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 (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEevaluated 245452 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
245452-8883528
1302 nSize += (u32)(pIter - pCell);-
1303 if( nSize<4 ) nSize = 4;
executed 894 times by 1 test: nSize = 4;
Executed by:
  • Self test (438)
nSize<4Description
TRUEevaluated 894 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8882634 times by 25 tests
Evaluated 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 (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
894-8882634
1304 }else{
executed 8883528 times by 25 tests: end of block
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 (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
8883528
1305 int minLocal = pPage->minLocal;-
1306 nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4);-
1307 testcase( nSize==pPage->maxLocal );-
1308 testcase( nSize==pPage->maxLocal+1 );-
1309 if( nSize>pPage->maxLocal ){
nSize>pPage->maxLocalDescription
TRUEevaluated 180983 times by 324 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
FALSEevaluated 64469 times by 2 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
64469-180983
1310 nSize = minLocal;-
1311 }
executed 180983 times by 324 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
180983
1312 nSize += 4 + (u16)(pIter - pCell);-
1313 }
executed 245452 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
245452
1314 assert( nSize==debuginfo.nSize || CORRUPT_DB );-
1315 return (u16)nSize;
executed 9128980 times by 339 tests: return (u16)nSize;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
9128980
1316}-
1317static u16 cellSizePtrNoPayload(MemPage *pPage, u8 *pCell){-
1318 u8 *pIter = pCell + 4; /* For looping over bytes of pCell */-
1319 u8 *pEnd; /* End mark for a varint */-
1320-
1321#ifdef SQLITE_DEBUG-
1322 /* The value returned by this function should always be the same as-
1323 ** the (CellInfo.nSize) value found by doing a full parse of the-
1324 ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of-
1325 ** this function verifies that this invariant is not violated. */-
1326 CellInfo debuginfo;-
1327 pPage->xParseCell(pPage, pCell, &debuginfo);-
1328#else-
1329 UNUSED_PARAMETER(pPage);-
1330#endif-
1331-
1332 assert( pPage->childPtrSize==4 );-
1333 pEnd = pIter + 9;-
1334 while( (*pIter++)&0x80 && pIter<pEnd );
executed 2538054 times by 4 tests: ;
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
  • Self test (74)
(*pIter++)&0x80Description
TRUEevaluated 2538083 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
  • Self test (74)
FALSEevaluated 2375987 times by 9 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
pIter<pEndDescription
TRUEevaluated 2538054 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
  • Self test (74)
FALSEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
29-2538083
1335 assert( debuginfo.nSize==(u16)(pIter - pCell) || CORRUPT_DB );-
1336 return (u16)(pIter - pCell);
executed 2376016 times by 9 tests: return (u16)(pIter - pCell);
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
2376016
1337}-
1338-
1339-
1340#ifdef SQLITE_DEBUG-
1341/* This variation on cellSizePtr() is used inside of assert() statements-
1342** only. */-
1343static u16 cellSize(MemPage *pPage, int iCell){-
1344 return pPage->xCellSize(pPage, findCell(pPage, iCell));-
1345}-
1346#endif-
1347-
1348#ifndef SQLITE_OMIT_AUTOVACUUM-
1349/*-
1350** If the cell pCell, part of page pPage contains a pointer-
1351** to an overflow page, insert an entry into the pointer-map-
1352** for the overflow page.-
1353*/-
1354static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){-
1355 CellInfo info;-
1356 if( *pRC ) return;
executed 4 times by 1 test: return;
Executed by:
  • Self test (438)
*pRCDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 795784 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
4-795784
1357 assert( pCell!=0 );-
1358 pPage->xParseCell(pPage, pCell, &info);-
1359 if( info.nLocal<info.nPayload ){
info.nLocal<info.nPayloadDescription
TRUEevaluated 34050 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 761734 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
34050-761734
1360 Pgno ovfl = get4byte(&pCell[info.nSize-4]);-
1361 ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC);-
1362 }
executed 34050 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
34050
1363}
executed 795784 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
795784
1364#endif-
1365-
1366-
1367/*-
1368** Defragment the page given. This routine reorganizes cells within the-
1369** page so that there are no free-blocks on the free-block list.-
1370**-
1371** Parameter nMaxFrag is the maximum amount of fragmented space that may be-
1372** present in the page after this routine returns.-
1373**-
1374** EVIDENCE-OF: R-44582-60138 SQLite may from time to time reorganize a-
1375** b-tree page so that there are no freeblocks or fragment bytes, all-
1376** unused bytes are contained in the unallocated space region, and all-
1377** cells are packed tightly at the end of the page.-
1378*/-
1379static int defragmentPage(MemPage *pPage, int nMaxFrag){-
1380 int i; /* Loop counter */-
1381 int pc; /* Address of the i-th cell */-
1382 int hdr; /* Offset to the page header */-
1383 int size; /* Size of a cell */-
1384 int usableSize; /* Number of usable bytes on a page */-
1385 int cellOffset; /* Offset to the cell pointer array */-
1386 int cbrk; /* Offset to the cell content area */-
1387 int nCell; /* Number of cells on the page */-
1388 unsigned char *data; /* The page data */-
1389 unsigned char *temp; /* Temp area for cell content */-
1390 unsigned char *src; /* Source of content */-
1391 int iCellFirst; /* First allowable cell index */-
1392 int iCellLast; /* Last possible cell index */-
1393-
1394 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
1395 assert( pPage->pBt!=0 );-
1396 assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );-
1397 assert( pPage->nOverflow==0 );-
1398 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1399 temp = 0;-
1400 src = data = pPage->aData;-
1401 hdr = pPage->hdrOffset;-
1402 cellOffset = pPage->cellOffset;-
1403 nCell = pPage->nCell;-
1404 assert( nCell==get2byte(&data[hdr+3]) );-
1405 iCellFirst = cellOffset + 2*nCell;-
1406 usableSize = pPage->pBt->usableSize;-
1407-
1408 /* This block handles pages with two or fewer free blocks and nMaxFrag-
1409 ** or fewer fragmented bytes. In this case it is faster to move the-
1410 ** two (or one) blocks of cells using memmove() and add the required-
1411 ** offsets to each pointer in the cell-pointer array than it is to -
1412 ** reconstruct the entire page. */-
1413 if( (int)data[hdr+7]<=nMaxFrag ){
(int)data[hdr+7]<=nMaxFragDescription
TRUEevaluated 26211 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 2533 times by 1 test
Evaluated by:
  • Self test (438)
2533-26211
1414 int iFree = get2byte(&data[hdr+1]);-
1415 if( iFree ){
iFreeDescription
TRUEevaluated 26210 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-26210
1416 int iFree2 = get2byte(&data[iFree]);-
1417-
1418 /* pageFindSlot() has already verified that free blocks are sorted-
1419 ** in order of offset within the page, and that no block extends-
1420 ** past the end of the page. Provided the two free slots do not -
1421 ** overlap, this guarantees that the memmove() calls below will not-
1422 ** overwrite the usableSize byte buffer, even if the database page-
1423 ** is corrupt. */-
1424 assert( iFree2==0 || iFree2>iFree );-
1425 assert( iFree+get2byte(&data[iFree+2]) <= usableSize );-
1426 assert( iFree2==0 || iFree2+get2byte(&data[iFree2+2]) <= usableSize );-
1427-
1428 if( 0==iFree2 || (data[iFree2]==0 && data[iFree2+1]==0) ){
0==iFree2Description
TRUEevaluated 24334 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 1876 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
data[iFree2]==0Description
TRUEevaluated 1681 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 195 times by 1 test
Evaluated by:
  • Self test (438)
data[iFree2+1]==0Description
TRUEevaluated 1680 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-24334
1429 u8 *pEnd = &data[cellOffset + nCell*2];-
1430 u8 *pAddr;-
1431 int sz2 = 0;-
1432 int sz = get2byte(&data[iFree+2]);-
1433 int top = get2byte(&data[hdr+5]);-
1434 if( top>=iFree ){
top>=iFreeDescription
TRUEnever evaluated
FALSEevaluated 26014 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
0-26014
1435 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1435);
0
1436 }-
1437 if( iFree2 ){
iFree2Description
TRUEevaluated 1680 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 24334 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
1680-24334
1438 assert( iFree+sz<=iFree2 ); /* Verified by pageFindSlot() */-
1439 sz2 = get2byte(&data[iFree2+2]);-
1440 assert( iFree+sz+sz2+iFree2-(iFree+sz) <= usableSize );-
1441 memmove(&data[iFree+sz+sz2], &data[iFree+sz], iFree2-(iFree+sz));-
1442 sz += sz2;-
1443 }
executed 1680 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
1680
1444 cbrk = top+sz;-
1445 assert( cbrk+(iFree-top) <= usableSize );-
1446 memmove(&data[cbrk], &data[top], iFree-top);-
1447 for(pAddr=&data[cellOffset]; pAddr<pEnd; pAddr+=2){
pAddr<pEndDescription
TRUEevaluated 507323 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 26014 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
26014-507323
1448 pc = get2byte(pAddr);-
1449 if( pc<iFree ){ put2byte(pAddr, pc+sz); }
executed 280058 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
pc<iFreeDescription
TRUEevaluated 280058 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 227265 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
227265-280058
1450 else if( pc<iFree2 ){ put2byte(pAddr, pc+sz2); }
executed 14302 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
pc<iFree2Description
TRUEevaluated 14302 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 212963 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
14302-212963
1451 }
executed 507323 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
507323
1452 goto defragment_out;
executed 26014 times by 3 tests: goto defragment_out;
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
26014
1453 }-
1454 }
executed 196 times by 1 test: end of block
Executed by:
  • Self test (438)
196
1455 }
executed 197 times by 1 test: end of block
Executed by:
  • Self test (438)
197
1456-
1457 cbrk = usableSize;-
1458 iCellLast = usableSize - 4;-
1459 for(i=0; i<nCell; i++){
i<nCellDescription
TRUEevaluated 171575 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2730 times by 1 test
Evaluated by:
  • Self test (438)
2730-171575
1460 u8 *pAddr; /* The i-th cell pointer */-
1461 pAddr = &data[cellOffset + i*2];-
1462 pc = get2byte(pAddr);-
1463 testcase( pc==iCellFirst );-
1464 testcase( pc==iCellLast );-
1465 /* These conditions have already been verified in btreeInitPage()-
1466 ** if PRAGMA cell_size_check=ON.-
1467 */-
1468 if( pc<iCellFirst || pc>iCellLast ){
pc<iCellFirstDescription
TRUEnever evaluated
FALSEevaluated 171575 times by 1 test
Evaluated by:
  • Self test (438)
pc>iCellLastDescription
TRUEnever evaluated
FALSEevaluated 171575 times by 1 test
Evaluated by:
  • Self test (438)
0-171575
1469 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1469);
0
1470 }-
1471 assert( pc>=iCellFirst && pc<=iCellLast );-
1472 size = pPage->xCellSize(pPage, &src[pc]);-
1473 cbrk -= size;-
1474 if( cbrk<iCellFirst || pc+size>usableSize ){
cbrk<iCellFirstDescription
TRUEnever evaluated
FALSEevaluated 171575 times by 1 test
Evaluated by:
  • Self test (438)
pc+size>usableSizeDescription
TRUEnever evaluated
FALSEevaluated 171575 times by 1 test
Evaluated by:
  • Self test (438)
0-171575
1475 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1475);
0
1476 }-
1477 assert( cbrk+size<=usableSize && cbrk>=iCellFirst );-
1478 testcase( cbrk+size==usableSize );-
1479 testcase( pc+size==usableSize );-
1480 put2byte(pAddr, cbrk);-
1481 if( temp==0 ){
temp==0Description
TRUEevaluated 8557 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 163018 times by 1 test
Evaluated by:
  • Self test (438)
8557-163018
1482 int x;-
1483 if( cbrk==pc ) continue;
executed 6636 times by 1 test: continue;
Executed by:
  • Self test (438)
cbrk==pcDescription
TRUEevaluated 6636 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1921 times by 1 test
Evaluated by:
  • Self test (438)
1921-6636
1484 temp = sqlite3PagerTempSpace(pPage->pBt->pPager);-
1485 x = get2byte(&data[hdr+5]);-
1486 memcpy(&temp[x], &data[x], (cbrk+size) - x);-
1487 src = temp;-
1488 }
executed 1921 times by 1 test: end of block
Executed by:
  • Self test (438)
1921
1489 memcpy(&data[cbrk], &src[pc], size);-
1490 }
executed 164939 times by 1 test: end of block
Executed by:
  • Self test (438)
164939
1491 data[hdr+7] = 0;-
1492-
1493 defragment_out:
code before this statement executed 2730 times by 1 test: defragment_out:
Executed by:
  • Self test (438)
2730
1494 if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){
data[hdr+7]+cb...!=pPage->nFreeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 28743 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
1-28743
1495 return SQLITE_CORRUPT_PAGE(pPage);
executed 1 time by 1 test: return sqlite3CorruptError(1495);
Executed by:
  • Self test (438)
1
1496 }-
1497 assert( cbrk>=iCellFirst );-
1498 put2byte(&data[hdr+5], cbrk);-
1499 data[hdr+1] = 0;-
1500 data[hdr+2] = 0;-
1501 memset(&data[iCellFirst], 0, cbrk-iCellFirst);-
1502 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
1503 return SQLITE_OK;
executed 28743 times by 3 tests: return 0;
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
28743
1504}-
1505-
1506/*-
1507** Search the free-list on page pPg for space to store a cell nByte bytes in-
1508** size. If one can be found, return a pointer to the space and remove it-
1509** from the free-list.-
1510**-
1511** If no suitable space can be found on the free-list, return NULL.-
1512**-
1513** This function may detect corruption within pPg. If corruption is-
1514** detected then *pRc is set to SQLITE_CORRUPT and NULL is returned.-
1515**-
1516** Slots on the free list that are between 1 and 3 bytes larger than nByte-
1517** will be ignored if adding the extra space to the fragmentation count-
1518** causes the fragmentation count to exceed 60.-
1519*/-
1520static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){-
1521 const int hdr = pPg->hdrOffset;-
1522 u8 * const aData = pPg->aData;-
1523 int iAddr = hdr + 1;-
1524 int pc = get2byte(&aData[iAddr]);-
1525 int x;-
1526 int usableSize = pPg->pBt->usableSize;-
1527 int size; /* Size of the free slot */-
1528-
1529 assert( pc>0 );-
1530 while( pc<=usableSize-4 ){
pc<=usableSize-4Description
TRUEevaluated 3835600 times by 355 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEnever evaluated
0-3835600
1531 /* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each-
1532 ** freeblock form a big-endian integer which is the size of the freeblock-
1533 ** in bytes, including the 4-byte header. */-
1534 size = get2byte(&aData[pc+2]);-
1535 if( (x = size - nByte)>=0 ){
(x = size - nByte)>=0Description
TRUEevaluated 3537663 times by 354 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 297937 times by 20 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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)
297937-3537663
1536 testcase( x==4 );-
1537 testcase( x==3 );-
1538 if( size+pc > usableSize ){
size+pc > usableSizeDescription
TRUEnever evaluated
FALSEevaluated 3537663 times by 354 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
0-3537663
1539 *pRc = SQLITE_CORRUPT_PAGE(pPg);-
1540 return 0;
never executed: return 0;
0
1541 }else if( x<4 ){
x<4Description
TRUEevaluated 1076151 times by 334 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • ...
FALSEevaluated 2461512 times by 337 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • ...
1076151-2461512
1542 /* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total-
1543 ** number of bytes in fragments may not exceed 60. */-
1544 if( aData[hdr+7]>57 ) return 0;
executed 51 times by 1 test: return 0;
Executed by:
  • Self test (438)
aData[hdr+7]>57Description
TRUEevaluated 51 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1076100 times by 334 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • ...
51-1076100
1545-
1546 /* Remove the slot from the free-list. Update the number of-
1547 ** fragmented bytes within the page. */-
1548 memcpy(&aData[iAddr], &aData[pc], 2);-
1549 aData[hdr+7] += (u8)x;-
1550 }else{
executed 1076100 times by 334 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • ...
1076100
1551 /* The slot remains on the free-list. Reduce its size to account-
1552 ** for the portion used by the new allocation. */-
1553 put2byte(&aData[pc+2], x);-
1554 }
executed 2461512 times by 337 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • ...
2461512
1555 return &aData[pc + x];
executed 3537612 times by 354 tests: return &aData[pc + x];
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
3537612
1556 }-
1557 iAddr = pc;-
1558 pc = get2byte(&aData[pc]);-
1559 if( pc<iAddr+size ) break;
executed 164660 times by 20 tests: break;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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)
pc<iAddr+sizeDescription
TRUEevaluated 164660 times by 20 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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 133277 times by 6 tests
Evaluated by:
  • Self test
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
133277-164660
1560 }
executed 133277 times by 6 tests: end of block
Executed by:
  • Self test
  • Self test (438)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
133277
1561 if( pc ){
pcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 164659 times by 20 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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)
1-164659
1562 *pRc = SQLITE_CORRUPT_PAGE(pPg);-
1563 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
1564-
1565 return 0;
executed 164660 times by 20 tests: return 0;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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)
164660
1566}-
1567-
1568/*-
1569** Allocate nByte bytes of space from within the B-Tree page passed-
1570** as the first argument. Write into *pIdx the index into pPage->aData[]-
1571** of the first byte of allocated space. Return either SQLITE_OK or-
1572** an error code (usually SQLITE_CORRUPT).-
1573**-
1574** The caller guarantees that there is sufficient space to make the-
1575** allocation. This routine might need to defragment in order to bring-
1576** all the space together, however. This routine will avoid using-
1577** the first two bytes past the cell pointer area since presumably this-
1578** allocation is being made in order to insert a new cell, so we will-
1579** also end up needing a new cell pointer.-
1580*/-
1581static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){-
1582 const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */-
1583 u8 * const data = pPage->aData; /* Local cache of pPage->aData */-
1584 int top; /* First byte of cell content area */-
1585 int rc = SQLITE_OK; /* Integer return code */-
1586 int gap; /* First byte of gap between cell pointers and cell content */-
1587 -
1588 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
1589 assert( pPage->pBt );-
1590 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1591 assert( nByte>=0 ); /* Minimum cell size is 4 */-
1592 assert( pPage->nFree>=nByte );-
1593 assert( pPage->nOverflow==0 );-
1594 assert( nByte < (int)(pPage->pBt->usableSize-8) );-
1595-
1596 assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );-
1597 gap = pPage->cellOffset + 2*pPage->nCell;-
1598 assert( gap<=65536 );-
1599 /* EVIDENCE-OF: R-29356-02391 If the database uses a 65536-byte page size-
1600 ** and the reserved space is zero (the usual value for reserved space)-
1601 ** then the cell content offset of an empty page wants to be 65536.-
1602 ** However, that integer is too large to be stored in a 2-byte unsigned-
1603 ** integer, so a value of 0 is used in its place. */-
1604 top = get2byte(&data[hdr+5]);-
1605 assert( top<=(int)pPage->pBt->usableSize ); /* Prevent by getAndInitPage() */-
1606 if( gap>top ){
gap>topDescription
TRUEevaluated 613 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8529244 times by 388 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
613-8529244
1607 if( top==0 && pPage->pBt->usableSize==65536 ){
top==0Description
TRUEevaluated 613 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
pPage->pBt->usableSize==65536Description
TRUEevaluated 613 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-613
1608 top = 65536;-
1609 }else{
executed 613 times by 1 test: end of block
Executed by:
  • Self test (438)
613
1610 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1610);
0
1611 }-
1612 }-
1613-
1614 /* If there is enough space between gap and top for one more cell pointer-
1615 ** array entry offset, and if the freelist is not empty, then search the-
1616 ** freelist looking for a free slot big enough to satisfy the request.-
1617 */-
1618 testcase( gap+2==top );-
1619 testcase( gap+1==top );-
1620 testcase( gap==top );-
1621 if( (data[hdr+2] || data[hdr+1]) && gap+2<=top ){
data[hdr+2]Description
TRUEevaluated 1424964 times by 352 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 7104893 times by 385 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 (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)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
data[hdr+1]Description
TRUEevaluated 1188 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7103705 times by 385 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 (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)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
gap+2<=topDescription
TRUEevaluated 1425421 times by 352 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 731 times by 1 test
Evaluated by:
  • Self test (438)
731-7104893
1622 u8 *pSpace = pageFindSlot(pPage, nByte, &rc);-
1623 if( pSpace ){
pSpaceDescription
TRUEevaluated 1377911 times by 351 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 47510 times by 20 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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)
47510-1377911
1624 assert( pSpace>=data && (pSpace - data)<65536 );-
1625 *pIdx = (int)(pSpace - data);-
1626 return SQLITE_OK;
executed 1377911 times by 351 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
1377911
1627 }else if( rc ){
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 47509 times by 20 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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)
1-47509
1628 return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
1
1629 }-
1630 }
executed 47509 times by 20 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • 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)
47509
1631-
1632 /* The request could not be fulfilled using a freelist slot. Check-
1633 ** to see if defragmentation is necessary.-
1634 */-
1635 testcase( gap+2+nByte==top );-
1636 if( gap+2+nByte>top ){
gap+2+nByte>topDescription
TRUEevaluated 27708 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 7124237 times by 385 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 (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)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
27708-7124237
1637 assert( pPage->nCell>0 || CORRUPT_DB );-
1638 rc = defragmentPage(pPage, MIN(4, pPage->nFree - (2+nByte)));-
1639 if( rc ) return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 27707 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
1-27707
1640 top = get2byteNotZero(&data[hdr+5]);-
1641 assert( gap+2+nByte<=top );-
1642 }
executed 27707 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
27707
1643-
1644-
1645 /* Allocate memory from the gap in between the cell pointer array-
1646 ** and the cell content area. The btreeInitPage() call has already-
1647 ** validated the freelist. Given that the freelist is valid, there-
1648 ** is no way that the allocation can extend off the end of the page.-
1649 ** The assert() below verifies the previous sentence.-
1650 */-
1651 top -= nByte;-
1652 put2byte(&data[hdr+5], top);-
1653 assert( top+nByte <= (int)pPage->pBt->usableSize );-
1654 *pIdx = top;-
1655 return SQLITE_OK;
executed 7151944 times by 385 tests: return 0;
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 (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)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
7151944
1656}-
1657-
1658/*-
1659** Return a section of the pPage->aData to the freelist.-
1660** The first byte of the new free block is pPage->aData[iStart]-
1661** and the size of the block is iSize bytes.-
1662**-
1663** Adjacent freeblocks are coalesced.-
1664**-
1665** Note that even though the freeblock list was checked by btreeInitPage(),-
1666** that routine will not detect overlap between cells or freeblocks. Nor-
1667** does it detect cells or freeblocks that encrouch into the reserved bytes-
1668** at the end of the page. So do additional corruption checks inside this-
1669** routine and return SQLITE_CORRUPT if any problems are found.-
1670*/-
1671static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){-
1672 u16 iPtr; /* Address of ptr to next freeblock */-
1673 u16 iFreeBlk; /* Address of the next freeblock */-
1674 u8 hdr; /* Page header size. 0 or 100 */-
1675 u8 nFrag = 0; /* Reduction in fragmentation */-
1676 u16 iOrigSize = iSize; /* Original value of iSize */-
1677 u16 x; /* Offset to cell content area */-
1678 u32 iEnd = iStart + iSize; /* First byte past the iStart buffer */-
1679 unsigned char *data = pPage->aData; /* Page content */-
1680-
1681 assert( pPage->pBt!=0 );-
1682 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
1683 assert( CORRUPT_DB || iStart>=pPage->hdrOffset+6+pPage->childPtrSize );-
1684 assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize );-
1685 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1686 assert( iSize>=4 ); /* Minimum cell size is 4 */-
1687 assert( iStart<=pPage->pBt->usableSize-4 );-
1688-
1689 /* The list of freeblocks must be in ascending order. Find the -
1690 ** spot on the list where iStart should be inserted.-
1691 */-
1692 hdr = pPage->hdrOffset;-
1693 iPtr = hdr + 1;-
1694 if( data[iPtr+1]==0 && data[iPtr]==0 ){
data[iPtr+1]==0Description
TRUEevaluated 2670733 times by 364 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
FALSEevaluated 1918126 times by 333 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • ...
data[iPtr]==0Description
TRUEevaluated 2668083 times by 364 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
FALSEevaluated 2650 times by 1 test
Evaluated by:
  • Self test (438)
2650-2670733
1695 iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */-
1696 }else{
executed 2668083 times by 364 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2668083
1697 while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){
(iFreeBlk = ((...])[1]))<iStartDescription
TRUEevaluated 2761655 times by 326 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
FALSEevaluated 1552911 times by 315 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • ...
1552911-2761655
1698 if( iFreeBlk<iPtr+4 ){
iFreeBlk<iPtr+4Description
TRUEevaluated 367865 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
FALSEevaluated 2393790 times by 326 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
367865-2393790
1699 if( iFreeBlk==0 ) break;
executed 367865 times by 325 tests: break;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
iFreeBlk==0Description
TRUEevaluated 367865 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
FALSEnever evaluated
0-367865
1700 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1700);
0
1701 }-
1702 iPtr = iFreeBlk;-
1703 }
executed 2393790 times by 326 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
2393790
1704 if( iFreeBlk>pPage->pBt->usableSize-4 ){
iFreeBlk>pPage...->usableSize-4Description
TRUEnever evaluated
FALSEevaluated 1920776 times by 333 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • ...
0-1920776
1705 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1705);
0
1706 }-
1707 assert( iFreeBlk>iPtr || iFreeBlk==0 );-
1708 -
1709 /* At this point:-
1710 ** iFreeBlk: First freeblock after iStart, or zero if none-
1711 ** iPtr: The address of a pointer to iFreeBlk-
1712 **-
1713 ** Check to see if iFreeBlk should be coalesced onto the end of iStart.-
1714 */-
1715 if( iFreeBlk && iEnd+3>=iFreeBlk ){
iFreeBlkDescription
TRUEevaluated 1552911 times by 315 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • ...
FALSEevaluated 367865 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
iEnd+3>=iFreeBlkDescription
TRUEevaluated 905117 times by 286 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • Self test (173)
  • Self test (174)
  • Self test (175)
  • Self test (176)
  • Self test (177)
  • Self test (178)
  • Self test (179)
  • Self test (18)
  • Self test (180)
  • Self test (181)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • ...
FALSEevaluated 647794 times by 312 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • ...
367865-1552911
1716 nFrag = iFreeBlk - iEnd;-
1717 if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1717);
iEnd>iFreeBlkDescription
TRUEnever evaluated
FALSEevaluated 905117 times by 286 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • Self test (173)
  • Self test (174)
  • Self test (175)
  • Self test (176)
  • Self test (177)
  • Self test (178)
  • Self test (179)
  • Self test (18)
  • Self test (180)
  • Self test (181)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • ...
0-905117
1718 iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]);-
1719 if( iEnd > pPage->pBt->usableSize ){
iEnd > pPage->pBt->usableSizeDescription
TRUEnever evaluated
FALSEevaluated 905117 times by 286 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • Self test (173)
  • Self test (174)
  • Self test (175)
  • Self test (176)
  • Self test (177)
  • Self test (178)
  • Self test (179)
  • Self test (18)
  • Self test (180)
  • Self test (181)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • ...
0-905117
1720 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1720);
0
1721 }-
1722 iSize = iEnd - iStart;-
1723 iFreeBlk = get2byte(&data[iFreeBlk]);-
1724 }
executed 905117 times by 286 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • Self test (173)
  • Self test (174)
  • Self test (175)
  • Self test (176)
  • Self test (177)
  • Self test (178)
  • Self test (179)
  • Self test (18)
  • Self test (180)
  • Self test (181)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • ...
905117
1725 -
1726 /* If iPtr is another freeblock (that is, if iPtr is not the freelist-
1727 ** pointer in the page header) then check to see if iStart should be-
1728 ** coalesced onto the end of iPtr.-
1729 */-
1730 if( iPtr>hdr+1 ){
iPtr>hdr+1Description
TRUEevaluated 992089 times by 326 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
FALSEevaluated 928687 times by 315 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • ...
928687-992089
1731 int iPtrEnd = iPtr + get2byte(&data[iPtr+2]);-
1732 if( iPtrEnd+3>=iStart ){
iPtrEnd+3>=iStartDescription
TRUEevaluated 395365 times by 322 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • ...
FALSEevaluated 596724 times by 324 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • ...
395365-596724
1733 if( iPtrEnd>iStart ) return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1733);
iPtrEnd>iStartDescription
TRUEnever evaluated
FALSEevaluated 395365 times by 322 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • ...
0-395365
1734 nFrag += iStart - iPtrEnd;-
1735 iSize = iEnd - iPtr;-
1736 iStart = iPtr;-
1737 }
executed 395365 times by 322 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • ...
395365
1738 }
executed 992089 times by 326 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
992089
1739 if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1739);
nFrag>data[hdr+7]Description
TRUEnever evaluated
FALSEevaluated 1920776 times by 333 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • ...
0-1920776
1740 data[hdr+7] -= nFrag;-
1741 }
executed 1920776 times by 333 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • ...
1920776
1742 x = get2byte(&data[hdr+5]);-
1743 if( iStart<=x ){
iStart<=xDescription
TRUEevaluated 2035555 times by 348 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (12)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • ...
FALSEevaluated 2553304 times by 357 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2035555-2553304
1744 /* The new freeblock is at the beginning of the cell content area,-
1745 ** so just extend the cell content area rather than create another-
1746 ** freelist entry */-
1747 if( iStart<x || iPtr!=hdr+1 ) return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1747);
iStart<xDescription
TRUEnever evaluated
FALSEevaluated 2035555 times by 348 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (12)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • ...
iPtr!=hdr+1Description
TRUEnever evaluated
FALSEevaluated 2035555 times by 348 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (12)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • ...
0-2035555
1748 put2byte(&data[hdr+1], iFreeBlk);-
1749 put2byte(&data[hdr+5], iEnd);-
1750 }else{
executed 2035555 times by 348 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (104)
  • Self test (12)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • ...
2035555
1751 /* Insert the new freeblock into the freelist */-
1752 put2byte(&data[iPtr], iStart);-
1753 }
executed 2553304 times by 357 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2553304
1754 if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){
pPage->pBt->btsFlags & 0x000cDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4588858 times by 367 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
1-4588858
1755 /* Overwrite deleted information with zeros when the secure_delete-
1756 ** option is enabled */-
1757 memset(&data[iStart], 0, iSize);-
1758 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
1759 put2byte(&data[iStart], iFreeBlk);-
1760 put2byte(&data[iStart+2], iSize);-
1761 pPage->nFree += iOrigSize;-
1762 return SQLITE_OK;
executed 4588859 times by 367 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
4588859
1763}-
1764-
1765/*-
1766** Decode the flags byte (the first byte of the header) for a page-
1767** and initialize fields of the MemPage structure accordingly.-
1768**-
1769** Only the following combinations are supported. Anything different-
1770** indicates a corrupt database files:-
1771**-
1772** PTF_ZERODATA-
1773** PTF_ZERODATA | PTF_LEAF-
1774** PTF_LEAFDATA | PTF_INTKEY-
1775** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF-
1776*/-
1777static int decodeFlags(MemPage *pPage, int flagByte){-
1778 BtShared *pBt; /* A copy of pPage->pBt */-
1779-
1780 assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );-
1781 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1782 pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 );-
1783 flagByte &= ~PTF_LEAF;-
1784 pPage->childPtrSize = 4-4*pPage->leaf;-
1785 pPage->xCellSize = cellSizePtr;-
1786 pBt = pPage->pBt;-
1787 if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
flagByte==(0x04 | 0x01)Description
TRUEevaluated 3511427 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 2380545 times by 391 tests
Evaluated by:
  • Self test
  • 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)
  • ...
2380545-3511427
1788 /* EVIDENCE-OF: R-07291-35328 A value of 5 (0x05) means the page is an-
1789 ** interior table b-tree page. */-
1790 assert( (PTF_LEAFDATA|PTF_INTKEY)==5 );-
1791 /* EVIDENCE-OF: R-26900-09176 A value of 13 (0x0d) means the page is a-
1792 ** leaf table b-tree page. */-
1793 assert( (PTF_LEAFDATA|PTF_INTKEY|PTF_LEAF)==13 );-
1794 pPage->intKey = 1;-
1795 if( pPage->leaf ){
pPage->leafDescription
TRUEevaluated 3455885 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 55542 times by 365 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
55542-3455885
1796 pPage->intKeyLeaf = 1;-
1797 pPage->xParseCell = btreeParseCellPtr;-
1798 }else{
executed 3455885 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)
  • ...
3455885
1799 pPage->intKeyLeaf = 0;-
1800 pPage->xCellSize = cellSizePtrNoPayload;-
1801 pPage->xParseCell = btreeParseCellPtrNoPayload;-
1802 }
executed 55542 times by 365 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
55542
1803 pPage->maxLocal = pBt->maxLeaf;-
1804 pPage->minLocal = pBt->minLeaf;-
1805 }else if( flagByte==PTF_ZERODATA ){
executed 3511427 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)
  • ...
flagByte==0x02Description
TRUEevaluated 2380522 times by 391 tests
Evaluated by:
  • Self test
  • 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)
  • ...
FALSEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
23-3511427
1806 /* EVIDENCE-OF: R-43316-37308 A value of 2 (0x02) means the page is an-
1807 ** interior index b-tree page. */-
1808 assert( (PTF_ZERODATA)==2 );-
1809 /* EVIDENCE-OF: R-59615-42828 A value of 10 (0x0a) means the page is a-
1810 ** leaf index b-tree page. */-
1811 assert( (PTF_ZERODATA|PTF_LEAF)==10 );-
1812 pPage->intKey = 0;-
1813 pPage->intKeyLeaf = 0;-
1814 pPage->xParseCell = btreeParseCellPtrIndex;-
1815 pPage->maxLocal = pBt->maxLocal;-
1816 pPage->minLocal = pBt->minLocal;-
1817 }else{
executed 2380522 times by 391 tests: end of block
Executed by:
  • Self test
  • 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)
  • ...
2380522
1818 /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is-
1819 ** an error. */-
1820 return SQLITE_CORRUPT_PAGE(pPage);
executed 23 times by 1 test: return sqlite3CorruptError(1820);
Executed by:
  • Self test (438)
23
1821 }-
1822 pPage->max1bytePayload = pBt->max1bytePayload;-
1823 return SQLITE_OK;
executed 5891949 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)
  • ...
5891949
1824}-
1825-
1826/*-
1827** Initialize the auxiliary information for a disk block.-
1828**-
1829** Return SQLITE_OK on success. If we see that the page does-
1830** not contain a well-formed database page, then return -
1831** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not-
1832** guarantee that the page is well-formed. It only shows that-
1833** we failed to detect any corruption.-
1834*/-
1835static int btreeInitPage(MemPage *pPage){-
1836 int pc; /* Address of a freeblock within pPage->aData[] */-
1837 u8 hdr; /* Offset to beginning of page header */-
1838 u8 *data; /* Equal to pPage->aData */-
1839 BtShared *pBt; /* The main btree structure */-
1840 int usableSize; /* Amount of usable space on each page */-
1841 u16 cellOffset; /* Offset from start of page to first cell pointer */-
1842 int nFree; /* Number of unused bytes on the page */-
1843 int top; /* First byte of the cell content area */-
1844 int iCellFirst; /* First allowable cell or freeblock offset */-
1845 int iCellLast; /* Last possible cell or freeblock offset */-
1846-
1847 assert( pPage->pBt!=0 );-
1848 assert( pPage->pBt->db!=0 );-
1849 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
1850 assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) );-
1851 assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) );-
1852 assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) );-
1853 assert( pPage->isInit==0 );-
1854-
1855 pBt = pPage->pBt;-
1856 hdr = pPage->hdrOffset;-
1857 data = pPage->aData;-
1858 /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating-
1859 ** the b-tree page type. */-
1860 if( decodeFlags(pPage, data[hdr]) ){
decodeFlags(pPage, data[hdr])Description
TRUEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5092751 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)
  • ...
23-5092751
1861 return SQLITE_CORRUPT_PAGE(pPage);
executed 23 times by 1 test: return sqlite3CorruptError(1861);
Executed by:
  • Self test (438)
23
1862 }-
1863 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );-
1864 pPage->maskPage = (u16)(pBt->pageSize - 1);-
1865 pPage->nOverflow = 0;-
1866 usableSize = pBt->usableSize;-
1867 pPage->cellOffset = cellOffset = hdr + 8 + pPage->childPtrSize;-
1868 pPage->aDataEnd = &data[usableSize];-
1869 pPage->aCellIdx = &data[cellOffset];-
1870 pPage->aDataOfst = &data[pPage->childPtrSize];-
1871 /* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates-
1872 ** the start of the cell content area. A zero value for this integer is-
1873 ** interpreted as 65536. */-
1874 top = get2byteNotZero(&data[hdr+5]);-
1875 /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the-
1876 ** number of cells on the page. */-
1877 pPage->nCell = get2byte(&data[hdr+3]);-
1878 if( pPage->nCell>MX_CELL(pBt) ){
pPage->nCell>(...pageSize-8)/6)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5092747 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)
  • ...
4-5092747
1879 /* To many cells for a single page. The page must be corrupt */-
1880 return SQLITE_CORRUPT_PAGE(pPage);
executed 4 times by 1 test: return sqlite3CorruptError(1880);
Executed by:
  • Self test (438)
4
1881 }-
1882 testcase( pPage->nCell==MX_CELL(pBt) );-
1883 /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only-
1884 ** possible for a root page of a table that contains no rows) then the-
1885 ** offset to the cell content area will equal the page size minus the-
1886 ** bytes of reserved space. */-
1887 assert( pPage->nCell>0 || top==usableSize || CORRUPT_DB );-
1888-
1889 /* A malformed database page might cause us to read past the end-
1890 ** of page when parsing a cell. -
1891 **-
1892 ** The following block of code checks early to see if a cell extends-
1893 ** past the end of a page boundary and causes SQLITE_CORRUPT to be -
1894 ** returned if it does.-
1895 */-
1896 iCellFirst = cellOffset + 2*pPage->nCell;-
1897 iCellLast = usableSize - 4;-
1898 if( pBt->db->flags & SQLITE_CellSizeCk ){
pBt->db->flags & 0x00200000Description
TRUEnever evaluated
FALSEevaluated 5092747 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)
  • ...
0-5092747
1899 int i; /* Index into the cell pointer array */-
1900 int sz; /* Size of a cell */-
1901-
1902 if( !pPage->leaf ) iCellLast--;
never executed: iCellLast--;
!pPage->leafDescription
TRUEnever evaluated
FALSEnever evaluated
0
1903 for(i=0; i<pPage->nCell; i++){
i<pPage->nCellDescription
TRUEnever evaluated
FALSEnever evaluated
0
1904 pc = get2byteAligned(&data[cellOffset+i*2]);-
1905 testcase( pc==iCellFirst );-
1906 testcase( pc==iCellLast );-
1907 if( pc<iCellFirst || pc>iCellLast ){
pc<iCellFirstDescription
TRUEnever evaluated
FALSEnever evaluated
pc>iCellLastDescription
TRUEnever evaluated
FALSEnever evaluated
0
1908 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1908);
0
1909 }-
1910 sz = pPage->xCellSize(pPage, &data[pc]);-
1911 testcase( pc+sz==usableSize );-
1912 if( pc+sz>usableSize ){
pc+sz>usableSizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
1913 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1913);
0
1914 }-
1915 }
never executed: end of block
0
1916 if( !pPage->leaf ) iCellLast++;
never executed: iCellLast++;
!pPage->leafDescription
TRUEnever evaluated
FALSEnever evaluated
0
1917 }
never executed: end of block
0
1918-
1919 /* Compute the total free space on the page-
1920 ** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the-
1921 ** start of the first freeblock on the page, or is zero if there are no-
1922 ** freeblocks. */-
1923 pc = get2byte(&data[hdr+1]);-
1924 nFree = data[hdr+7] + top; /* Init nFree to non-freeblock free space */-
1925 if( pc>0 ){
pc>0Description
TRUEevaluated 524028 times by 370 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • ...
FALSEevaluated 4568719 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)
  • ...
524028-4568719
1926 u32 next, size;-
1927 if( pc<iCellFirst ){
pc<iCellFirstDescription
TRUEnever evaluated
FALSEevaluated 524028 times by 370 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • ...
0-524028
1928 /* EVIDENCE-OF: R-55530-52930 In a well-formed b-tree page, there will-
1929 ** always be at least one cell before the first freeblock.-
1930 */-
1931 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1931);
0
1932 }-
1933 while( 1 ){-
1934 if( pc>iCellLast ){
pc>iCellLastDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 685379 times by 370 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • ...
2-685379
1935 /* Freeblock off the end of the page */-
1936 return SQLITE_CORRUPT_PAGE(pPage);
executed 2 times by 1 test: return sqlite3CorruptError(1936);
Executed by:
  • Self test (438)
2
1937 }-
1938 next = get2byte(&data[pc]);-
1939 size = get2byte(&data[pc+2]);-
1940 nFree = nFree + size;-
1941 if( next<=pc+size+3 ) break;
executed 524026 times by 370 tests: break;
Executed by:
  • Self test
  • Self test (10)
  • 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)
  • ...
next<=pc+size+3Description
TRUEevaluated 524026 times by 370 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • ...
FALSEevaluated 161353 times by 15 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 (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
161353-524026
1942 pc = next;-
1943 }
executed 161353 times by 15 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 (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
161353
1944 if( next>0 ){
next>0Description
TRUEnever evaluated
FALSEevaluated 524026 times by 370 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • ...
0-524026
1945 /* Freeblock not in ascending order */-
1946 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1946);
0
1947 }-
1948 if( pc+size>(unsigned int)usableSize ){
pc+size>(unsig...int)usableSizeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 524025 times by 370 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • ...
1-524025
1949 /* Last freeblock extends past page end */-
1950 return SQLITE_CORRUPT_PAGE(pPage);
executed 1 time by 1 test: return sqlite3CorruptError(1950);
Executed by:
  • Self test (438)
1
1951 }-
1952 }
executed 524025 times by 370 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • 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)
  • ...
524025
1953-
1954 /* At this point, nFree contains the sum of the offset to the start-
1955 ** of the cell-content area plus the number of free bytes within-
1956 ** the cell-content area. If this is greater than the usable-size-
1957 ** of the page, then the page must be corrupted. This check also-
1958 ** serves to verify that the offset to the start of the cell-content-
1959 ** area, according to the page header, lies within the page.-
1960 */-
1961 if( nFree>usableSize ){
nFree>usableSizeDescription
TRUEnever evaluated
FALSEevaluated 5092744 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)
  • ...
0-5092744
1962 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(1962);
0
1963 }-
1964 pPage->nFree = (u16)(nFree - iCellFirst);-
1965 pPage->isInit = 1;-
1966 return SQLITE_OK;
executed 5092744 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)
  • ...
5092744
1967}-
1968-
1969/*-
1970** Set up a raw page so that it looks like a database page holding-
1971** no entries.-
1972*/-
1973static void zeroPage(MemPage *pPage, int flags){-
1974 unsigned char *data = pPage->aData;-
1975 BtShared *pBt = pPage->pBt;-
1976 u8 hdr = pPage->hdrOffset;-
1977 u16 first;-
1978-
1979 assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno );-
1980 assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );-
1981 assert( sqlite3PagerGetData(pPage->pDbPage) == data );-
1982 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
1983 assert( sqlite3_mutex_held(pBt->mutex) );-
1984 if( pBt->btsFlags & BTS_FAST_SECURE ){
pBt->btsFlags & 0x000cDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 799197 times by 304 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 (16)
  • 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)
  • ...
1-799197
1985 memset(&data[hdr], 0, pBt->usableSize - hdr);-
1986 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
1987 data[hdr] = (char)flags;-
1988 first = hdr + ((flags&PTF_LEAF)==0 ? 12 : 8);
(flags&0x08)==0Description
TRUEevaluated 29515 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEevaluated 769683 times by 304 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 (16)
  • 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)
  • ...
29515-769683
1989 memset(&data[hdr+1], 0, 4);-
1990 data[hdr+7] = 0;-
1991 put2byte(&data[hdr+5], pBt->usableSize);-
1992 pPage->nFree = (u16)(pBt->usableSize - first);-
1993 decodeFlags(pPage, flags);-
1994 pPage->cellOffset = first;-
1995 pPage->aDataEnd = &data[pBt->usableSize];-
1996 pPage->aCellIdx = &data[first];-
1997 pPage->aDataOfst = &data[pPage->childPtrSize];-
1998 pPage->nOverflow = 0;-
1999 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );-
2000 pPage->maskPage = (u16)(pBt->pageSize - 1);-
2001 pPage->nCell = 0;-
2002 pPage->isInit = 1;-
2003}
executed 799198 times by 304 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 (16)
  • 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)
  • ...
799198
2004-
2005-
2006/*-
2007** Convert a DbPage obtained from the pager into a MemPage used by-
2008** the btree layer.-
2009*/-
2010static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){-
2011 MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);-
2012 if( pgno!=pPage->pgno ){
pgno!=pPage->pgnoDescription
TRUEevaluated 5879174 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 1002975 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)
  • ...
1002975-5879174
2013 pPage->aData = sqlite3PagerGetData(pDbPage);-
2014 pPage->pDbPage = pDbPage;-
2015 pPage->pBt = pBt;-
2016 pPage->pgno = pgno;-
2017 pPage->hdrOffset = pgno==1 ? 100 : 0;
pgno==1Description
TRUEevaluated 83783 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 5795391 times by 429 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)
  • ...
83783-5795391
2018 }
executed 5879174 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)
  • ...
5879174
2019 assert( pPage->aData==sqlite3PagerGetData(pDbPage) );-
2020 return pPage;
executed 6882149 times by 435 tests: return pPage;
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)
  • ...
6882149
2021}-
2022-
2023/*-
2024** Get a page from the pager. Initialize the MemPage.pBt and-
2025** MemPage.aData elements if needed. See also: btreeGetUnusedPage().-
2026**-
2027** If the PAGER_GET_NOCONTENT flag is set, it means that we do not care-
2028** about the content of the page at this time. So do not go to the disk-
2029** to fetch the content. Just fill in the content with zeros for now.-
2030** If in the future we call sqlite3PagerWrite() on this page, that-
2031** means we have started to be concerned about content and the disk-
2032** read should occur at that point.-
2033*/-
2034static int btreeGetPage(-
2035 BtShared *pBt, /* The btree */-
2036 Pgno pgno, /* Number of the page to fetch */-
2037 MemPage **ppPage, /* Return the page in this parameter */-
2038 int flags /* PAGER_GET_NOCONTENT or PAGER_GET_READONLY */-
2039){-
2040 int rc;-
2041 DbPage *pDbPage;-
2042-
2043 assert( flags==0 || flags==PAGER_GET_NOCONTENT || flags==PAGER_GET_READONLY );-
2044 assert( sqlite3_mutex_held(pBt->mutex) );-
2045 rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, flags);-
2046 if( rc ) return rc;
executed 60449 times by 6 tests: return rc;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (39)
  • Self test (438)
  • Self test (64)
rcDescription
TRUEevaluated 60449 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (39)
  • Self test (438)
  • Self test (64)
FALSEevaluated 2819720 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)
  • ...
60449-2819720
2047 *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt);-
2048 return SQLITE_OK;
executed 2819720 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)
  • ...
2819720
2049}-
2050-
2051/*-
2052** Retrieve a page from the pager cache. If the requested page is not-
2053** already in the pager cache return NULL. Initialize the MemPage.pBt and-
2054** MemPage.aData elements if needed.-
2055*/-
2056static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){-
2057 DbPage *pDbPage;-
2058 assert( sqlite3_mutex_held(pBt->mutex) );-
2059 pDbPage = sqlite3PagerLookup(pBt->pPager, pgno);-
2060 if( pDbPage ){
pDbPageDescription
TRUEevaluated 32558 times by 343 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
FALSEevaluated 14880 times by 10 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
14880-32558
2061 return btreePageFromDbPage(pDbPage, pgno, pBt);
executed 32558 times by 343 tests: return btreePageFromDbPage(pDbPage, pgno, pBt);
Executed by:
  • 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)
  • Self test (132)
  • ...
32558
2062 }-
2063 return 0;
executed 14880 times by 10 tests: return 0;
Executed by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
14880
2064}-
2065-
2066/*-
2067** Return the size of the database file in pages. If there is any kind of-
2068** error, return ((unsigned int)-1).-
2069*/-
2070static Pgno btreePagecount(BtShared *pBt){-
2071 return pBt->nPage;
executed 18804242 times by 435 tests: return pBt->nPage;
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)
  • ...
18804242
2072}-
2073u32 sqlite3BtreeLastPage(Btree *p){-
2074 assert( sqlite3BtreeHoldsMutex(p) );-
2075 assert( ((p->pBt->nPage)&0x80000000)==0 );-
2076 return btreePagecount(p->pBt);
executed 1705 times by 3 tests: return btreePagecount(p->pBt);
Executed by:
  • Self test (34)
  • Self test (39)
  • Self test (438)
1705
2077}-
2078-
2079/*-
2080** Get a page from the pager and initialize it.-
2081**-
2082** If pCur!=0 then the page is being fetched as part of a moveToChild()-
2083** call. Do additional sanity checking on the page in this case.-
2084** And if the fetch fails, this routine must decrement pCur->iPage.-
2085**-
2086** The page is fetched as read-write unless pCur is not NULL and is-
2087** a read-only cursor.-
2088**-
2089** If an error occurs, then *ppPage is undefined. It-
2090** may remain unchanged, or it may be set to an invalid value.-
2091*/-
2092static int getAndInitPage(-
2093 BtShared *pBt, /* The database file */-
2094 Pgno pgno, /* Number of the page to get */-
2095 MemPage **ppPage, /* Write the page pointer here */-
2096 BtCursor *pCur, /* Cursor to receive the page, or NULL */-
2097 int bReadOnly /* True for a read-only page */-
2098){-
2099 int rc;-
2100 DbPage *pDbPage;-
2101 assert( sqlite3_mutex_held(pBt->mutex) );-
2102 assert( pCur==0 || ppPage==&pCur->pPage );-
2103 assert( pCur==0 || bReadOnly==pCur->curPagerFlags );-
2104 assert( pCur==0 || pCur->iPage>0 );-
2105-
2106 if( pgno>btreePagecount(pBt) ){
pgno>btreePagecount(pBt)Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 17406695 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)
  • ...
20-17406695
2107 rc = SQLITE_CORRUPT_BKPT;-
2108 goto getAndInitPage_error;
executed 20 times by 1 test: goto getAndInitPage_error;
Executed by:
  • Self test (438)
20
2109 }-
2110 rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, bReadOnly);-
2111 if( rc ){
rcDescription
TRUEevaluated 27 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 17406668 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)
  • ...
27-17406668
2112 goto getAndInitPage_error;
executed 27 times by 1 test: goto getAndInitPage_error;
Executed by:
  • Self test (438)
27
2113 }-
2114 *ppPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);-
2115 if( (*ppPage)->isInit==0 ){
(*ppPage)->isInit==0Description
TRUEevaluated 4029871 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 13376797 times by 410 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)
  • ...
4029871-13376797
2116 btreePageFromDbPage(pDbPage, pgno, pBt);-
2117 rc = btreeInitPage(*ppPage);-
2118 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4029860 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)
  • ...
11-4029860
2119 releasePage(*ppPage);-
2120 goto getAndInitPage_error;
executed 11 times by 1 test: goto getAndInitPage_error;
Executed by:
  • Self test (438)
11
2121 }-
2122 }
executed 4029860 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)
  • ...
4029860
2123 assert( (*ppPage)->pgno==pgno );-
2124 assert( (*ppPage)->aData==sqlite3PagerGetData(pDbPage) );-
2125-
2126 /* If obtaining a child page for a cursor, we must verify that the page is-
2127 ** compatible with the root page. */-
2128 if( pCur && ((*ppPage)->nCell<1 || (*ppPage)->intKey!=pCur->curIntKey) ){
pCurDescription
TRUEevaluated 13167130 times by 365 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 4239527 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)
  • ...
(*ppPage)->nCell<1Description
TRUEevaluated 131 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13166999 times by 365 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
(*ppPage)->int...Cur->curIntKeyDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13166997 times by 365 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
2-13167130
2129 rc = SQLITE_CORRUPT_PGNO(pgno);-
2130 releasePage(*ppPage);-
2131 goto getAndInitPage_error;
executed 133 times by 1 test: goto getAndInitPage_error;
Executed by:
  • Self test (438)
133
2132 }-
2133 return SQLITE_OK;
executed 17406524 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)
  • ...
17406524
2134-
2135getAndInitPage_error:-
2136 if( pCur ){
pCurDescription
TRUEevaluated 158 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 33 times by 1 test
Evaluated by:
  • Self test (438)
33-158
2137 pCur->iPage--;-
2138 pCur->pPage = pCur->apPage[pCur->iPage];-
2139 }
executed 158 times by 1 test: end of block
Executed by:
  • Self test (438)
158
2140 testcase( pgno==0 );-
2141 assert( pgno!=0 || rc==SQLITE_CORRUPT );-
2142 return rc;
executed 191 times by 1 test: return rc;
Executed by:
  • Self test (438)
191
2143}-
2144-
2145/*-
2146** Release a MemPage. This should be called once for each prior-
2147** call to btreeGetPage.-
2148**-
2149** Page1 is a special case and must be released using releasePageOne().-
2150*/-
2151static void releasePageNotNull(MemPage *pPage){-
2152 assert( pPage->aData );-
2153 assert( pPage->pBt );-
2154 assert( pPage->pDbPage!=0 );-
2155 assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );-
2156 assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );-
2157 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
2158 sqlite3PagerUnrefNotNull(pPage->pDbPage);-
2159}
executed 20147942 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)
  • ...
20147942
2160static void releasePage(MemPage *pPage){-
2161 if( pPage ) releasePageNotNull(pPage);
executed 5972903 times by 377 tests: releasePageNotNull(pPage);
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 (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)
  • ...
pPageDescription
TRUEevaluated 5972903 times by 377 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 3965742 times by 375 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)
  • ...
3965742-5972903
2162}
executed 9938645 times by 386 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 (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)
  • ...
9938645
2163static void releasePageOne(MemPage *pPage){-
2164 assert( pPage!=0 );-
2165 assert( pPage->aData );-
2166 assert( pPage->pBt );-
2167 assert( pPage->pDbPage!=0 );-
2168 assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );-
2169 assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );-
2170 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
2171 sqlite3PagerUnrefPageOne(pPage->pDbPage);-
2172}
executed 266682 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)
  • ...
266682
2173-
2174/*-
2175** Get an unused page.-
2176**-
2177** This works just like btreeGetPage() with the addition:-
2178**-
2179** * If the page is already in use for some other purpose, immediately-
2180** release it and return an SQLITE_CURRUPT error.-
2181** * Make sure the isInit flag is clear-
2182*/-
2183static int btreeGetUnusedPage(-
2184 BtShared *pBt, /* The btree */-
2185 Pgno pgno, /* Number of the page to fetch */-
2186 MemPage **ppPage, /* Return the page in this parameter */-
2187 int flags /* PAGER_GET_NOCONTENT or PAGER_GET_READONLY */-
2188){-
2189 int rc = btreeGetPage(pBt, pgno, ppPage, flags);-
2190 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1147558 times by 375 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 7 times by 2 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
7-1147558
2191 if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){
sqlite3PagerPa...e)->pDbPage)>1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1147554 times by 375 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)
  • ...
4-1147554
2192 releasePage(*ppPage);-
2193 *ppPage = 0;-
2194 return SQLITE_CORRUPT_BKPT;
executed 4 times by 1 test: return sqlite3CorruptError(2194);
Executed by:
  • Self test (438)
4
2195 }-
2196 (*ppPage)->isInit = 0;-
2197 }else{
executed 1147554 times by 375 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 (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)
  • ...
1147554
2198 *ppPage = 0;-
2199 }
executed 7 times by 2 tests: end of block
Executed by:
  • Self test (39)
  • Self test (438)
7
2200 return rc;
executed 1147561 times by 376 tests: return rc;
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 (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)
  • ...
1147561
2201}-
2202-
2203-
2204/*-
2205** During a rollback, when the pager reloads information into the cache-
2206** so that the cache is restored to its original state at the start of-
2207** the transaction, for each page restored this routine is called.-
2208**-
2209** This routine needs to reset the extra data section at the end of the-
2210** page to agree with the restored data.-
2211*/-
2212static void pageReinit(DbPage *pData){-
2213 MemPage *pPage;-
2214 pPage = (MemPage *)sqlite3PagerGetExtra(pData);-
2215 assert( sqlite3PagerPageRefcount(pData)>0 );-
2216 if( pPage->isInit ){
pPage->isInitDescription
TRUEevaluated 14345 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 18424 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)
14345-18424
2217 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
2218 pPage->isInit = 0;-
2219 if( sqlite3PagerPageRefcount(pData)>1 ){
sqlite3PagerPa...count(pData)>1Description
TRUEevaluated 1627 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 12718 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)
1627-12718
2220 /* pPage might not be a btree page; it might be an overflow page-
2221 ** or ptrmap page or a free page. In those cases, the following-
2222 ** call to btreeInitPage() will likely return SQLITE_CORRUPT.-
2223 ** But no harm is done by this. And it is very important that-
2224 ** btreeInitPage() be called on every btree page so we make-
2225 ** the call for every page that comes in for re-initing. */-
2226 btreeInitPage(pPage);-
2227 }
executed 1627 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)
1627
2228 }
executed 14345 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)
14345
2229}
executed 32769 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)
32769
2230-
2231/*-
2232** Invoke the busy handler for a btree.-
2233*/-
2234static int btreeInvokeBusyHandler(void *pArg){-
2235 BtShared *pBt = (BtShared*)pArg;-
2236 assert( pBt->db );-
2237 assert( sqlite3_mutex_held(pBt->db->mutex) );-
2238 return sqlite3InvokeBusyHandler(&pBt->db->busyHandler,
executed 3586 times by 12 tests: return sqlite3InvokeBusyHandler(&pBt->db->busyHandler, sqlite3PagerFile(pBt->pPager));
Executed by:
  • Self test (30)
  • Self test (31)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (55)
  • Self test (59)
  • Self test (61)
3586
2239 sqlite3PagerFile(pBt->pPager));
executed 3586 times by 12 tests: return sqlite3InvokeBusyHandler(&pBt->db->busyHandler, sqlite3PagerFile(pBt->pPager));
Executed by:
  • Self test (30)
  • Self test (31)
  • Self test (35)
  • Self test (36)
  • Self test (38)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (55)
  • Self test (59)
  • Self test (61)
3586
2240}-
2241-
2242/*-
2243** Open a database file.-
2244** -
2245** zFilename is the name of the database file. If zFilename is NULL-
2246** then an ephemeral database is created. The ephemeral database might-
2247** be exclusively in memory, or it might use a disk-based memory cache.-
2248** Either way, the ephemeral database will be automatically deleted -
2249** when sqlite3BtreeClose() is called.-
2250**-
2251** If zFilename is ":memory:" then an in-memory database is created-
2252** that is automatically destroyed when it is closed.-
2253**-
2254** The "flags" parameter is a bitmask that might contain bits like-
2255** BTREE_OMIT_JOURNAL and/or BTREE_MEMORY.-
2256**-
2257** If the database is already opened in the same database connection-
2258** and we are in shared cache mode, then the open will fail with an-
2259** SQLITE_CONSTRAINT error. We cannot allow two or more BtShared-
2260** objects in the same database connection since doing so will lead-
2261** to problems with locking.-
2262*/-
2263int sqlite3BtreeOpen(-
2264 sqlite3_vfs *pVfs, /* VFS to use for this b-tree */-
2265 const char *zFilename, /* Name of the file containing the BTree database */-
2266 sqlite3 *db, /* Associated database handle */-
2267 Btree **ppBtree, /* Pointer to new Btree object written here */-
2268 int flags, /* Options */-
2269 int vfsFlags /* Flags passed through to sqlite3_vfs.xOpen() */-
2270){-
2271 BtShared *pBt = 0; /* Shared part of btree structure */-
2272 Btree *p; /* Handle to return */-
2273 sqlite3_mutex *mutexOpen = 0; /* Prevents a race condition. Ticket #3537 */-
2274 int rc = SQLITE_OK; /* Result code from this function */-
2275 u8 nReserve; /* Byte of unused space on each page */-
2276 unsigned char zDbHeader[100]; /* Database header content */-
2277-
2278 /* True if opening an ephemeral, temporary database */-
2279 const int isTempDb = zFilename==0 || zFilename[0]==0;
zFilename==0Description
TRUEevaluated 62501 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)
FALSEevaluated 34083 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)
  • ...
zFilename[0]==0Description
TRUEevaluated 896 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 33187 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)
  • ...
896-62501
2280-
2281 /* Set the variable isMemdb to true for an in-memory database, or -
2282 ** false for a file-based database.-
2283 */-
2284#ifdef SQLITE_OMIT_MEMORYDB-
2285 const int isMemdb = 0;-
2286#else-
2287 const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
never executed: __result = (((const unsigned char *) (const char *) ( zFilename ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( ":memory:" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
zFilenameDescription
TRUEevaluated 34083 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 62501 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)
__extension__ ..." )))); }) ==0Description
TRUEevaluated 207 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 33876 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)
  • ...
__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-62501
2288 || (isTempDb && sqlite3TempInMemory(db))
isTempDbDescription
TRUEevaluated 63397 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 32980 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)
  • ...
sqlite3TempInMemory(db)Description
TRUEevaluated 78 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 63319 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)
78-63397
2289 || (vfsFlags & SQLITE_OPEN_MEMORY)!=0;
(vfsFlags & 0x00000080)!=0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96281 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)
  • ...
18-96281
2290#endif-
2291-
2292 assert( db!=0 );-
2293 assert( pVfs!=0 );-
2294 assert( sqlite3_mutex_held(db->mutex) );-
2295 assert( (flags&0xff)==flags ); /* flags fit in 8 bits */-
2296-
2297 /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */-
2298 assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 );-
2299-
2300 /* A BTREE_SINGLE database is always a temporary and/or ephemeral */-
2301 assert( (flags & BTREE_SINGLE)==0 || isTempDb );-
2302-
2303 if( isMemdb ){
isMemdbDescription
TRUEevaluated 303 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96281 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)
  • ...
303-96281
2304 flags |= BTREE_MEMORY;-
2305 }
executed 303 times by 1 test: end of block
Executed by:
  • Self test (438)
303
2306 if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){
(vfsFlags & 0x00000100)!=0Description
TRUEevaluated 34083 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 62501 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)
isMemdbDescription
TRUEevaluated 225 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 33858 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)
  • ...
isTempDbDescription
TRUEevaluated 895 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 32963 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)
  • ...
225-62501
2307 vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;-
2308 }
executed 1120 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
1120
2309 p = sqlite3MallocZero(sizeof(Btree));-
2310 if( !p ){
!pDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96570 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-96570
2311 return SQLITE_NOMEM_BKPT;
executed 14 times by 1 test: return 7;
Executed by:
  • Self test (438)
14
2312 }-
2313 p->inTrans = TRANS_NONE;-
2314 p->db = db;-
2315#ifndef SQLITE_OMIT_SHARED_CACHE-
2316 p->lock.pBtree = p;-
2317 p->lock.iTable = 1;-
2318#endif-
2319-
2320#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)-
2321 /*-
2322 ** If this Btree is a candidate for shared cache, try to find an-
2323 ** existing BtShared object that we can share with-
2324 */-
2325 if( isTempDb==0 && (isMemdb==0 || (vfsFlags&SQLITE_OPEN_URI)!=0) ){
isTempDb==0Description
TRUEevaluated 33179 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 63391 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)
isMemdb==0Description
TRUEevaluated 32955 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 224 times by 1 test
Evaluated by:
  • Self test (438)
(vfsFlags&0x00000040)!=0Description
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 203 times by 1 test
Evaluated by:
  • Self test (438)
21-63391
2326 if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
vfsFlags & 0x00020000Description
TRUEevaluated 401 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32575 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)
  • ...
401-32575
2327 int nFilename = sqlite3Strlen30(zFilename)+1;-
2328 int nFullPathname = pVfs->mxPathname+1;-
2329 char *zFullPathname = sqlite3Malloc(MAX(nFullPathname,nFilename));-
2330 MUTEX_LOGIC( sqlite3_mutex *mutexShared; )-
2331-
2332 p->sharable = 1;-
2333 if( !zFullPathname ){
!zFullPathnameDescription
TRUEnever evaluated
FALSEevaluated 401 times by 1 test
Evaluated by:
  • Self test (438)
0-401
2334 sqlite3_free(p);-
2335 return SQLITE_NOMEM_BKPT;
never executed: return 7;
0
2336 }-
2337 if( isMemdb ){
isMemdbDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 381 times by 1 test
Evaluated by:
  • Self test (438)
20-381
2338 memcpy(zFullPathname, zFilename, nFilename);-
2339 }else{
executed 20 times by 1 test: end of block
Executed by:
  • Self test (438)
20
2340 rc = sqlite3OsFullPathname(pVfs, zFilename,-
2341 nFullPathname, zFullPathname);-
2342 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 381 times by 1 test
Evaluated by:
  • Self test (438)
0-381
2343 sqlite3_free(zFullPathname);-
2344 sqlite3_free(p);-
2345 return rc;
never executed: return rc;
0
2346 }-
2347 }
executed 381 times by 1 test: end of block
Executed by:
  • Self test (438)
381
2348#if SQLITE_THREADSAFE-
2349 mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN);-
2350 sqlite3_mutex_enter(mutexOpen);-
2351 mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);-
2352 sqlite3_mutex_enter(mutexShared);-
2353#endif-
2354 for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){
pBtDescription
TRUEevaluated 344 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 153 times by 1 test
Evaluated by:
  • Self test (438)
153-344
2355 assert( pBt->nRef>0 );-
2356 if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager, 0))
never executed: __result = (((const unsigned char *) (const char *) ( zFullPathname ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( sqlite3PagerFilename(pBt->pPager, 0) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
0== __extensio...r, 0) )))); })Description
TRUEevaluated 249 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95 times 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-249
2357 && sqlite3PagerVfs(pBt->pPager)==pVfs ){
sqlite3PagerVf...>pPager)==pVfsDescription
TRUEevaluated 248 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-248
2358 int iDb;-
2359 for(iDb=db->nDb-1; iDb>=0; iDb--){
iDb>=0Description
TRUEevaluated 514 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 245 times by 1 test
Evaluated by:
  • Self test (438)
245-514
2360 Btree *pExisting = db->aDb[iDb].pBt;-
2361 if( pExisting && pExisting->pBt==pBt ){
pExistingDescription
TRUEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 465 times by 1 test
Evaluated by:
  • Self test (438)
pExisting->pBt==pBtDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 46 times by 1 test
Evaluated by:
  • Self test (438)
3-465
2362 sqlite3_mutex_leave(mutexShared);-
2363 sqlite3_mutex_leave(mutexOpen);-
2364 sqlite3_free(zFullPathname);-
2365 sqlite3_free(p);-
2366 return SQLITE_CONSTRAINT;
executed 3 times by 1 test: return 19;
Executed by:
  • Self test (438)
3
2367 }-
2368 }
executed 511 times by 1 test: end of block
Executed by:
  • Self test (438)
511
2369 p->pBt = pBt;-
2370 pBt->nRef++;-
2371 break;
executed 245 times by 1 test: break;
Executed by:
  • Self test (438)
245
2372 }-
2373 }
executed 96 times by 1 test: end of block
Executed by:
  • Self test (438)
96
2374 sqlite3_mutex_leave(mutexShared);-
2375 sqlite3_free(zFullPathname);-
2376 }
executed 398 times by 1 test: end of block
Executed by:
  • Self test (438)
398
2377#ifdef SQLITE_DEBUG-
2378 else{-
2379 /* In debug mode, we mark all persistent databases as sharable-
2380 ** even when they are not. This exercises the locking code and-
2381 ** gives more opportunity for asserts(sqlite3_mutex_held())-
2382 ** statements to find locking problems.-
2383 */-
2384 p->sharable = 1;-
2385 }-
2386#endif-
2387 }
executed 32973 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)
  • ...
32973
2388#endif-
2389 if( pBt==0 ){
pBt==0Description
TRUEevaluated 96322 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 245 times by 1 test
Evaluated by:
  • Self test (438)
245-96322
2390 /*-
2391 ** The following asserts make sure that structures used by the btree are-
2392 ** the right size. This is to guard against size changes that result-
2393 ** when compiling on a different architecture.-
2394 */-
2395 assert( sizeof(i64)==8 );-
2396 assert( sizeof(u64)==8 );-
2397 assert( sizeof(u32)==4 );-
2398 assert( sizeof(u16)==2 );-
2399 assert( sizeof(Pgno)==4 );-
2400 -
2401 pBt = sqlite3MallocZero( sizeof(*pBt) );-
2402 if( pBt==0 ){
pBt==0Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96308 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-96308
2403 rc = SQLITE_NOMEM_BKPT;-
2404 goto btree_open_out;
executed 14 times by 1 test: goto btree_open_out;
Executed by:
  • Self test (438)
14
2405 }-
2406 rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename,-
2407 sizeof(MemPage), flags, vfsFlags, pageReinit);-
2408 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 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)
  • ...
FALSEevaluated 648 times by 1 test
Evaluated by:
  • Self test (438)
648-95660
2409 sqlite3PagerSetMmapLimit(pBt->pPager, db->szMmap);-
2410 rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader);-
2411 }
executed 95660 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)
  • ...
95660
2412 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 665 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95643 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)
  • ...
665-95643
2413 goto btree_open_out;
executed 665 times by 1 test: goto btree_open_out;
Executed by:
  • Self test (438)
665
2414 }-
2415 pBt->openFlags = (u8)flags;-
2416 pBt->db = db;-
2417 sqlite3PagerSetBusyHandler(pBt->pPager, btreeInvokeBusyHandler, pBt);-
2418 p->pBt = pBt;-
2419 -
2420 pBt->pCursor = 0;-
2421 pBt->pPage1 = 0;-
2422 if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY;
executed 9579 times by 1 test: pBt->btsFlags |= 0x0001;
Executed by:
  • Self test (438)
sqlite3PagerIs...y(pBt->pPager)Description
TRUEevaluated 9579 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 86064 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)
  • ...
9579-86064
2423#if defined(SQLITE_SECURE_DELETE)-
2424 pBt->btsFlags |= BTS_SECURE_DELETE;-
2425#elif defined(SQLITE_FAST_SECURE_DELETE)-
2426 pBt->btsFlags |= BTS_OVERWRITE;-
2427#endif-
2428 /* EVIDENCE-OF: R-51873-39618 The page size for a database file is-
2429 ** determined by the 2-byte integer located at an offset of 16 bytes from-
2430 ** the beginning of the database file. */-
2431 pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);-
2432 if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
pBt->pageSize<512Description
TRUEevaluated 69823 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)
  • ...
FALSEevaluated 25820 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)
  • ...
pBt->pageSize>65536Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25814 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)
  • ...
6-69823
2433 || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
((pBt->pageSiz...->pageSize)!=0Description
TRUEnever evaluated
FALSEevaluated 25814 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)
  • ...
0-25814
2434 pBt->pageSize = 0;-
2435#ifndef SQLITE_OMIT_AUTOVACUUM-
2436 /* If the magic name ":memory:" will create an in-memory database, then-
2437 ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if-
2438 ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if-
2439 ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a-
2440 ** regular file-name. In this case the auto-vacuum applies as per normal.-
2441 */-
2442 if( zFilename && !isMemdb ){
zFilenameDescription
TRUEevaluated 7364 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 62465 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)
!isMemdbDescription
TRUEevaluated 7146 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 218 times by 1 test
Evaluated by:
  • Self test (438)
218-62465
2443 pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0);
dead code: 1
-
2444 pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
0==2Description
TRUEnever evaluated
FALSEevaluated 7146 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)
  • ...
0-7146
2445 }
executed 7146 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)
  • ...
7146
2446#endif-
2447 nReserve = 0;-
2448 }else{
executed 69829 times by 65 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)
  • ...
69829
2449 /* EVIDENCE-OF: R-37497-42412 The size of the reserved region is-
2450 ** determined by the one-byte unsigned integer found at an offset of 20-
2451 ** into the database file header. */-
2452 nReserve = zDbHeader[20];-
2453 pBt->btsFlags |= BTS_PAGESIZE_FIXED;-
2454#ifndef SQLITE_OMIT_AUTOVACUUM-
2455 pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
sqlite3Get4byt...der[36 + 4*4])Description
TRUEevaluated 992 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
FALSEevaluated 24822 times by 386 tests
Evaluated by:
  • 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)
  • Self test (122)
  • ...
992-24822
2456 pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
sqlite3Get4byt...der[36 + 7*4])Description
TRUEevaluated 142 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25672 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)
  • ...
142-25672
2457#endif-
2458 }
executed 25814 times by 387 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)
  • ...
25814
2459 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);-
2460 if( rc ) goto btree_open_out;
never executed: goto btree_open_out;
rcDescription
TRUEnever evaluated
FALSEevaluated 95643 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)
  • ...
0-95643
2461 pBt->usableSize = pBt->pageSize - nReserve;-
2462 assert( (pBt->pageSize & 7)==0 ); /* 8-byte alignment of pageSize */-
2463 -
2464#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)-
2465 /* Add the new BtShared object to the linked list sharable BtShareds.-
2466 */-
2467 pBt->nRef = 1;-
2468 if( p->sharable ){
p->sharableDescription
TRUEevaluated 153 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95490 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)
  • ...
153-95490
2469 MUTEX_LOGIC( sqlite3_mutex *mutexShared; )-
2470 MUTEX_LOGIC( mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);)-
2471 if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){
sqlite3Config.bCoreMutexDescription
TRUEevaluated 152 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-152
2472 pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST);-
2473 if( pBt->mutex==0 ){
pBt->mutex==0Description
TRUEnever evaluated
FALSEevaluated 152 times by 1 test
Evaluated by:
  • Self test (438)
0-152
2474 rc = SQLITE_NOMEM_BKPT;-
2475 goto btree_open_out;
never executed: goto btree_open_out;
0
2476 }-
2477 }
executed 152 times by 1 test: end of block
Executed by:
  • Self test (438)
152
2478 sqlite3_mutex_enter(mutexShared);-
2479 pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList);-
2480 GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt;-
2481 sqlite3_mutex_leave(mutexShared);-
2482 }
executed 153 times by 1 test: end of block
Executed by:
  • Self test (438)
153
2483#endif-
2484 }
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
2485-
2486#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)-
2487 /* If the new Btree uses a sharable pBtShared, then link the new-
2488 ** Btree into the list of all sharable Btrees for the same connection.-
2489 ** The list is kept in ascending order by pBt address.-
2490 */-
2491 if( p->sharable ){
p->sharableDescription
TRUEevaluated 398 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95490 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)
  • ...
398-95490
2492 int i;-
2493 Btree *pSib;-
2494 for(i=0; i<db->nDb; i++){
i<db->nDbDescription
TRUEevaluated 768 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 346 times by 1 test
Evaluated by:
  • Self test (438)
346-768
2495 if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){
(pSib = db->aDb[i].pBt)!=0Description
TRUEevaluated 67 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 701 times by 1 test
Evaluated by:
  • Self test (438)
pSib->sharableDescription
TRUEevaluated 52 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test (438)
15-701
2496 while( pSib->pPrev ){ pSib = pSib->pPrev; }
executed 21 times by 1 test: end of block
Executed by:
  • Self test (438)
pSib->pPrevDescription
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 52 times by 1 test
Evaluated by:
  • Self test (438)
21-52
2497 if( (uptr)p->pBt<(uptr)pSib->pBt ){
(uptr)p->pBt<(uptr)pSib->pBtDescription
TRUEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
22-30
2498 p->pNext = pSib;-
2499 p->pPrev = 0;-
2500 pSib->pPrev = p;-
2501 }else{
executed 22 times by 1 test: end of block
Executed by:
  • Self test (438)
22
2502 while( pSib->pNext && (uptr)pSib->pNext->pBt<(uptr)p->pBt ){
pSib->pNextDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
(uptr)pSib->pN...t<(uptr)p->pBtDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
11-24
2503 pSib = pSib->pNext;-
2504 }
executed 11 times by 1 test: end of block
Executed by:
  • Self test (438)
11
2505 p->pNext = pSib->pNext;-
2506 p->pPrev = pSib;-
2507 if( p->pNext ){
p->pNextDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
13-17
2508 p->pNext->pPrev = p;-
2509 }
executed 13 times by 1 test: end of block
Executed by:
  • Self test (438)
13
2510 pSib->pNext = p;-
2511 }
executed 30 times by 1 test: end of block
Executed by:
  • Self test (438)
30
2512 break;
executed 52 times by 1 test: break;
Executed by:
  • Self test (438)
52
2513 }-
2514 }
executed 716 times by 1 test: end of block
Executed by:
  • Self test (438)
716
2515 }
executed 398 times by 1 test: end of block
Executed by:
  • Self test (438)
398
2516#endif-
2517 *ppBtree = p;-
2518-
2519btree_open_out:
code before this statement executed 95888 times by 438 tests: btree_open_out:
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)
  • ...
95888
2520 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 679 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95888 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)
  • ...
679-95888
2521 if( pBt && pBt->pPager ){
pBtDescription
TRUEevaluated 665 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
pBt->pPagerDescription
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 648 times by 1 test
Evaluated by:
  • Self test (438)
14-665
2522 sqlite3PagerClose(pBt->pPager, 0);-
2523 }
executed 17 times by 1 test: end of block
Executed by:
  • Self test (438)
17
2524 sqlite3_free(pBt);-
2525 sqlite3_free(p);-
2526 *ppBtree = 0;-
2527 }else{
executed 679 times by 1 test: end of block
Executed by:
  • Self test (438)
679
2528 sqlite3_file *pFile;-
2529-
2530 /* If the B-Tree was successfully opened, set the pager-cache size to the-
2531 ** default value. Except, when opening on an existing shared pager-cache,-
2532 ** do not change the pager-cache size.-
2533 */-
2534 if( sqlite3BtreeSchema(p, 0, 0)==0 ){
sqlite3BtreeSchema(p, 0, 0)==0Description
TRUEevaluated 95643 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 245 times by 1 test
Evaluated by:
  • Self test (438)
245-95643
2535 sqlite3PagerSetCachesize(p->pBt->pPager, SQLITE_DEFAULT_CACHE_SIZE);-
2536 }
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
2537-
2538 pFile = sqlite3PagerFile(pBt->pPager);-
2539 if( pFile->pMethods ){
pFile->pMethodsDescription
TRUEevaluated 32303 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 63585 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)
32303-63585
2540 sqlite3OsFileControlHint(pFile, SQLITE_FCNTL_PDB, (void*)&pBt->db);-
2541 }
executed 32303 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)
  • ...
32303
2542 }
executed 95888 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)
  • ...
95888
2543 if( mutexOpen ){
mutexOpenDescription
TRUEevaluated 397 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 96170 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)
  • ...
397-96170
2544 assert( sqlite3_mutex_held(mutexOpen) );-
2545 sqlite3_mutex_leave(mutexOpen);-
2546 }
executed 397 times by 1 test: end of block
Executed by:
  • Self test (438)
397
2547 assert( rc!=SQLITE_OK || sqlite3BtreeConnectionCount(*ppBtree)>0 );-
2548 return rc;
executed 96567 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)
  • ...
96567
2549}-
2550-
2551/*-
2552** Decrement the BtShared.nRef counter. When it reaches zero,-
2553** remove the BtShared structure from the sharing list. Return-
2554** true if the BtShared.nRef counter reaches zero and return-
2555** false if it is still positive.-
2556*/-
2557static int removeFromSharingList(BtShared *pBt){-
2558#ifndef SQLITE_OMIT_SHARED_CACHE-
2559 MUTEX_LOGIC( sqlite3_mutex *pMaster; )-
2560 BtShared *pList;-
2561 int removed = 0;-
2562-
2563 assert( sqlite3_mutex_notheld(pBt->mutex) );-
2564 MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )-
2565 sqlite3_mutex_enter(pMaster);-
2566 pBt->nRef--;-
2567 if( pBt->nRef<=0 ){
pBt->nRef<=0Description
TRUEevaluated 153 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 245 times by 1 test
Evaluated by:
  • Self test (438)
153-245
2568 if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){
sqlite3SharedCacheList==pBtDescription
TRUEevaluated 118 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
35-118
2569 GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext;-
2570 }else{
executed 118 times by 1 test: end of block
Executed by:
  • Self test (438)
118
2571 pList = GLOBAL(BtShared*,sqlite3SharedCacheList);-
2572 while( ALWAYS(pList) && pList->pNext!=pBt ){
(pList)Description
TRUEevaluated 54 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
pList->pNext!=pBtDescription
TRUEevaluated 19 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
0-54
2573 pList=pList->pNext;-
2574 }
executed 19 times by 1 test: end of block
Executed by:
  • Self test (438)
19
2575 if( ALWAYS(pList) ){
(pList)Description
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-35
2576 pList->pNext = pBt->pNext;-
2577 }
executed 35 times by 1 test: end of block
Executed by:
  • Self test (438)
35
2578 }
executed 35 times by 1 test: end of block
Executed by:
  • Self test (438)
35
2579 if( SQLITE_THREADSAFE ){-
2580 sqlite3_mutex_free(pBt->mutex);-
2581 }
executed 153 times by 1 test: end of block
Executed by:
  • Self test (438)
153
2582 removed = 1;-
2583 }
executed 153 times by 1 test: end of block
Executed by:
  • Self test (438)
153
2584 sqlite3_mutex_leave(pMaster);-
2585 return removed;
executed 398 times by 1 test: return removed;
Executed by:
  • Self test (438)
398
2586#else-
2587 return 1;-
2588#endif-
2589}-
2590-
2591/*-
2592** Make sure pBt->pTmpSpace points to an allocation of -
2593** MX_CELL_SIZE(pBt) bytes with a 4-byte prefix for a left-child-
2594** pointer.-
2595*/-
2596static void allocateTempSpace(BtShared *pBt){-
2597 if( !pBt->pTmpSpace ){
!pBt->pTmpSpaceDescription
TRUEevaluated 66373 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 1261747 times by 391 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)
  • ...
66373-1261747
2598 pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize );-
2599-
2600 /* One of the uses of pBt->pTmpSpace is to format cells before-
2601 ** inserting them into a leaf page (function fillInCell()). If-
2602 ** a cell is less than 4 bytes in size, it is rounded up to 4 bytes-
2603 ** by the various routines that manipulate binary cells. Which-
2604 ** can mean that fillInCell() only initializes the first 2 or 3-
2605 ** bytes of pTmpSpace, but that the first 4 bytes are copied from-
2606 ** it into a database page. This is not actually a problem, but it-
2607 ** does cause a valgrind error when the 1 or 2 bytes of unitialized -
2608 ** data is passed to system call write(). So to avoid this error,-
2609 ** zero the first 4 bytes of temp space here.-
2610 **-
2611 ** Also: Provide four bytes of initialized space before the-
2612 ** beginning of pTmpSpace as an area available to prepend the-
2613 ** left-child pointer to the beginning of a cell.-
2614 */-
2615 if( pBt->pTmpSpace ){
pBt->pTmpSpaceDescription
TRUEevaluated 66365 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 8 times by 1 test
Evaluated by:
  • Self test (438)
8-66365
2616 memset(pBt->pTmpSpace, 0, 8);-
2617 pBt->pTmpSpace += 4;-
2618 }
executed 66365 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)
  • ...
66365
2619 }
executed 66373 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)
  • ...
66373
2620}
executed 1328120 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)
  • ...
1328120
2621-
2622/*-
2623** Free the pBt->pTmpSpace allocation-
2624*/-
2625static void freeTempSpace(BtShared *pBt){-
2626 if( pBt->pTmpSpace ){
pBt->pTmpSpaceDescription
TRUEevaluated 65991 times by 34 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • 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)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (50)
  • Self test (52)
  • Self test (62)
  • ...
FALSEevaluated 30934 times by 45 tests
Evaluated by:
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (25)
  • Self test (27)
  • Self test (30)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (35)
  • Self test (36)
  • Self test (37)
  • Self test (41)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (51)
  • Self test (53)
  • Self test (59)
  • Self test (60)
  • Self test (61)
  • Self test (65)
  • Self test (66)
  • ...
30934-65991
2627 pBt->pTmpSpace -= 4;-
2628 sqlite3PageFree(pBt->pTmpSpace);-
2629 pBt->pTmpSpace = 0;-
2630 }
executed 65991 times by 34 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • 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)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (50)
  • Self test (52)
  • Self test (62)
  • ...
65991
2631}
executed 96925 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)
  • ...
96925
2632-
2633/*-
2634** Close an open database and invalidate all cursors.-
2635*/-
2636int sqlite3BtreeClose(Btree *p){-
2637 BtShared *pBt = p->pBt;-
2638 BtCursor *pCur;-
2639-
2640 /* Close all cursors opened via this handle. */-
2641 assert( sqlite3_mutex_held(p->db->mutex) );-
2642 sqlite3BtreeEnter(p);-
2643 pCur = pBt->pCursor;-
2644 while( pCur ){
pCurDescription
TRUEevaluated 62546 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 95513 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)
  • ...
62546-95513
2645 BtCursor *pTmp = pCur;-
2646 pCur = pCur->pNext;-
2647 if( pTmp->pBtree==p ){
pTmp->pBtree==pDescription
TRUEevaluated 62541 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-62541
2648 sqlite3BtreeCloseCursor(pTmp);-
2649 }
executed 62541 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
62541
2650 }
executed 62546 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
62546
2651-
2652 /* Rollback any active transaction and free the handle structure.-
2653 ** The call to sqlite3BtreeRollback() drops any table-locks held by-
2654 ** this handle.-
2655 */-
2656 sqlite3BtreeRollback(p, SQLITE_OK, 0);-
2657 sqlite3BtreeLeave(p);-
2658-
2659 /* If there are still other outstanding references to the shared-btree-
2660 ** structure, return now. The remainder of this procedure cleans -
2661 ** up the shared-btree.-
2662 */-
2663 assert( p->wantToLock==0 && p->locked==0 );-
2664 if( !p->sharable || removeFromSharingList(pBt) ){
!p->sharableDescription
TRUEevaluated 95115 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 398 times by 1 test
Evaluated by:
  • Self test (438)
removeFromSharingList(pBt)Description
TRUEevaluated 153 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 245 times by 1 test
Evaluated by:
  • Self test (438)
153-95115
2665 /* The pBt is no longer on the sharing list, so we can access-
2666 ** it without having to hold the mutex.-
2667 **-
2668 ** Clean out and delete the BtShared object.-
2669 */-
2670 assert( !pBt->pCursor );-
2671 sqlite3PagerClose(pBt->pPager, p->db);-
2672 if( pBt->xFreeSchema && pBt->pSchema ){
pBt->xFreeSchemaDescription
TRUEevaluated 32799 times by 66 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 62469 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)
pBt->pSchemaDescription
TRUEevaluated 32791 times by 66 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 8 times by 1 test
Evaluated by:
  • Self test (438)
8-62469
2673 pBt->xFreeSchema(pBt->pSchema);-
2674 }
executed 32791 times by 66 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)
  • ...
32791
2675 sqlite3DbFree(0, pBt->pSchema);-
2676 freeTempSpace(pBt);-
2677 sqlite3_free(pBt);-
2678 }
executed 95268 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)
  • ...
95268
2679-
2680#ifndef SQLITE_OMIT_SHARED_CACHE-
2681 assert( p->wantToLock==0 );-
2682 assert( p->locked==0 );-
2683 if( p->pPrev ) p->pPrev->pNext = p->pNext;
executed 30 times by 1 test: p->pPrev->pNext = p->pNext;
Executed by:
  • Self test (438)
p->pPrevDescription
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95483 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-95483
2684 if( p->pNext ) p->pNext->pPrev = p->pPrev;
executed 31 times by 1 test: p->pNext->pPrev = p->pPrev;
Executed by:
  • Self test (438)
p->pNextDescription
TRUEevaluated 31 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95482 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)
  • ...
31-95482
2685#endif-
2686-
2687 sqlite3_free(p);-
2688 return SQLITE_OK;
executed 95513 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)
  • ...
95513
2689}-
2690-
2691/*-
2692** Change the "soft" limit on the number of pages in the cache.-
2693** Unused and unmodified pages will be recycled when the number of-
2694** pages in the cache exceeds this soft limit. But the size of the-
2695** cache is allowed to grow larger than this limit if it contains-
2696** dirty pages or pages still in active use.-
2697*/-
2698int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){-
2699 BtShared *pBt = p->pBt;-
2700 assert( sqlite3_mutex_held(p->db->mutex) );-
2701 sqlite3BtreeEnter(p);-
2702 sqlite3PagerSetCachesize(pBt->pPager, mxPage);-
2703 sqlite3BtreeLeave(p);-
2704 return SQLITE_OK;
executed 20881 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)
  • ...
20881
2705}-
2706-
2707/*-
2708** Change the "spill" limit on the number of pages in the cache.-
2709** If the number of pages exceeds this limit during a write transaction,-
2710** the pager might attempt to "spill" pages to the journal early in-
2711** order to free up memory.-
2712**-
2713** The value returned is the current spill size. If zero is passed-
2714** as an argument, no changes are made to the spill size setting, so-
2715** using mxPage of 0 is a way to query the current spill size.-
2716*/-
2717int sqlite3BtreeSetSpillSize(Btree *p, int mxPage){-
2718 BtShared *pBt = p->pBt;-
2719 int res;-
2720 assert( sqlite3_mutex_held(p->db->mutex) );-
2721 sqlite3BtreeEnter(p);-
2722 res = sqlite3PagerSetSpillsize(pBt->pPager, mxPage);-
2723 sqlite3BtreeLeave(p);-
2724 return res;
executed 1752 times by 2 tests: return res;
Executed by:
  • Self test (34)
  • Self test (438)
1752
2725}-
2726-
2727#if SQLITE_MAX_MMAP_SIZE>0-
2728/*-
2729** Change the limit on the amount of the database file that may be-
2730** memory mapped.-
2731*/-
2732int sqlite3BtreeSetMmapLimit(Btree *p, sqlite3_int64 szMmap){-
2733 BtShared *pBt = p->pBt;-
2734 assert( sqlite3_mutex_held(p->db->mutex) );-
2735 sqlite3BtreeEnter(p);-
2736 sqlite3PagerSetMmapLimit(pBt->pPager, szMmap);-
2737 sqlite3BtreeLeave(p);-
2738 return SQLITE_OK;
executed 268 times by 3 tests: return 0;
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
268
2739}-
2740#endif /* SQLITE_MAX_MMAP_SIZE>0 */-
2741-
2742/*-
2743** Change the way data is synced to disk in order to increase or decrease-
2744** how well the database resists damage due to OS crashes and power-
2745** failures. Level 1 is the same as asynchronous (no syncs() occur and-
2746** there is a high probability of damage) Level 2 is the default. There-
2747** is a very low but non-zero probability of damage. Level 3 reduces the-
2748** probability of damage to near zero but with a write performance reduction.-
2749*/-
2750#ifndef SQLITE_OMIT_PAGER_PRAGMAS-
2751int sqlite3BtreeSetPagerFlags(-
2752 Btree *p, /* The btree to set the safety level on */-
2753 unsigned pgFlags /* Various PAGER_* flags */-
2754){-
2755 BtShared *pBt = p->pBt;-
2756 assert( sqlite3_mutex_held(p->db->mutex) );-
2757 sqlite3BtreeEnter(p);-
2758 sqlite3PagerSetFlags(pBt->pPager, pgFlags);-
2759 sqlite3BtreeLeave(p);-
2760 return SQLITE_OK;
executed 4138 times by 22 tests: return 0;
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)
4138
2761}-
2762#endif-
2763-
2764/*-
2765** Change the default pages size and the number of reserved bytes per page.-
2766** Or, if the page size has already been fixed, return SQLITE_READONLY -
2767** without changing anything.-
2768**-
2769** The page size must be a power of 2 between 512 and 65536. If the page-
2770** size supplied does not meet this constraint then the page size is not-
2771** changed.-
2772**-
2773** Page sizes are constrained to be a power of two so that the region-
2774** of the database file used for locking (beginning at PENDING_BYTE,-
2775** the first byte past the 1GB boundary, 0x40000000) needs to occur-
2776** at the beginning of a page.-
2777**-
2778** If parameter nReserve is less than zero, then the number of reserved-
2779** bytes per page is left unchanged.-
2780**-
2781** If the iFix!=0 then the BTS_PAGESIZE_FIXED flag is set so that the page size-
2782** and autovacuum mode can no longer be changed.-
2783*/-
2784int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){-
2785 int rc = SQLITE_OK;-
2786 BtShared *pBt = p->pBt;-
2787 assert( nReserve>=-1 && nReserve<=255 );-
2788 sqlite3BtreeEnter(p);-
2789#if SQLITE_HAS_CODEC-
2790 if( nReserve>pBt->optimalReserve ) pBt->optimalReserve = (u8)nReserve;-
2791#endif-
2792 if( pBt->btsFlags & BTS_PAGESIZE_FIXED ){
pBt->btsFlags & 0x0002Description
TRUEevaluated 1440 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 4682 times by 15 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • 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)
1440-4682
2793 sqlite3BtreeLeave(p);-
2794 return SQLITE_READONLY;
executed 1440 times by 2 tests: return 8;
Executed by:
  • Self test (34)
  • Self test (438)
1440
2795 }-
2796 if( nReserve<0 ){
nReserve<0Description
TRUEevaluated 2823 times by 15 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • 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)
FALSEevaluated 1859 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
1859-2823
2797 nReserve = pBt->pageSize - pBt->usableSize;-
2798 }
executed 2823 times by 15 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • 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)
2823
2799 assert( nReserve>=0 && nReserve<=255 );-
2800 if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
pageSize>=512Description
TRUEevaluated 1632 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
FALSEevaluated 3050 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)
pageSize<=65536Description
TRUEevaluated 1631 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-3050
2801 ((pageSize-1)&pageSize)==0 ){
((pageSize-1)&pageSize)==0Description
TRUEevaluated 1630 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-1630
2802 assert( (pageSize & 7)==0 );-
2803 assert( !pBt->pCursor );-
2804 pBt->pageSize = (u32)pageSize;-
2805 freeTempSpace(pBt);-
2806 }
executed 1630 times by 4 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
1630
2807 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);-
2808 pBt->usableSize = pBt->pageSize - (u16)nReserve;-
2809 if( iFix ) pBt->btsFlags |= BTS_PAGESIZE_FIXED;
executed 130 times by 2 tests: pBt->btsFlags |= 0x0002;
Executed by:
  • Self test (34)
  • Self test (438)
iFixDescription
TRUEevaluated 130 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 4552 times by 15 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • 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)
130-4552
2810 sqlite3BtreeLeave(p);-
2811 return rc;
executed 4682 times by 15 tests: return rc;
Executed by:
  • Self test (32)
  • Self test (33)
  • 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)
4682
2812}-
2813-
2814/*-
2815** Return the currently defined page size-
2816*/-
2817int sqlite3BtreeGetPageSize(Btree *p){-
2818 return p->pBt->pageSize;
executed 227412 times by 11 tests: return p->pBt->pageSize;
Executed by:
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
227412
2819}-
2820-
2821/*-
2822** This function is similar to sqlite3BtreeGetReserve(), except that it-
2823** may only be called if it is guaranteed that the b-tree mutex is already-
2824** held.-
2825**-
2826** This is useful in one special case in the backup API code where it is-
2827** known that the shared b-tree mutex is held, but the mutex on the -
2828** database handle that owns *p is not. In this case if sqlite3BtreeEnter()-
2829** were to be called, it might collide with some other operation on the-
2830** database handle that owns *p, causing undefined behavior.-
2831*/-
2832int sqlite3BtreeGetReserveNoMutex(Btree *p){-
2833 int n;-
2834 assert( sqlite3_mutex_held(p->pBt->mutex) );-
2835 n = p->pBt->pageSize - p->pBt->usableSize;-
2836 return n;
executed 4687 times by 2 tests: return n;
Executed by:
  • Self test (34)
  • Self test (438)
4687
2837}-
2838-
2839/*-
2840** Return the number of bytes of space at the end of every page that-
2841** are intentually left unused. This is the "reserved" space that is-
2842** sometimes used by extensions.-
2843**-
2844** If SQLITE_HAS_MUTEX is defined then the number returned is the-
2845** greater of the current reserved space and the maximum requested-
2846** reserve space.-
2847*/-
2848int sqlite3BtreeGetOptimalReserve(Btree *p){-
2849 int n;-
2850 sqlite3BtreeEnter(p);-
2851 n = sqlite3BtreeGetReserveNoMutex(p);-
2852#ifdef SQLITE_HAS_CODEC-
2853 if( n<p->pBt->optimalReserve ) n = p->pBt->optimalReserve;-
2854#endif-
2855 sqlite3BtreeLeave(p);-
2856 return n;
executed 868 times by 2 tests: return n;
Executed by:
  • Self test (34)
  • Self test (438)
868
2857}-
2858-
2859-
2860/*-
2861** Set the maximum page count for a database if mxPage is positive.-
2862** No changes are made if mxPage is 0 or negative.-
2863** Regardless of the value of mxPage, return the maximum page count.-
2864*/-
2865int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){-
2866 int n;-
2867 sqlite3BtreeEnter(p);-
2868 n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage);-
2869 sqlite3BtreeLeave(p);-
2870 return n;
executed 12 times by 2 tests: return n;
Executed by:
  • Self test (39)
  • Self test (438)
12
2871}-
2872-
2873/*-
2874** Change the values for the BTS_SECURE_DELETE and BTS_OVERWRITE flags:-
2875**-
2876** newFlag==0 Both BTS_SECURE_DELETE and BTS_OVERWRITE are cleared-
2877** newFlag==1 BTS_SECURE_DELETE set and BTS_OVERWRITE is cleared-
2878** newFlag==2 BTS_SECURE_DELETE cleared and BTS_OVERWRITE is set-
2879** newFlag==(-1) No changes-
2880**-
2881** This routine acts as a query if newFlag is less than zero-
2882**-
2883** With BTS_OVERWRITE set, deleted content is overwritten by zeros, but-
2884** freelist leaf pages are not written back to the database. Thus in-page-
2885** deleted content is cleared, but freelist deleted content is not.-
2886**-
2887** With BTS_SECURE_DELETE, operation is like BTS_OVERWRITE with the addition-
2888** that freelist leaf pages are written back into the database, increasing-
2889** the amount of disk I/O.-
2890*/-
2891int sqlite3BtreeSecureDelete(Btree *p, int newFlag){-
2892 int b;-
2893 if( p==0 ) return 0;
executed 6 times by 1 test: return 0;
Executed by:
  • Self test (438)
p==0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3288 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)
6-3288
2894 sqlite3BtreeEnter(p);-
2895 assert( BTS_OVERWRITE==BTS_SECURE_DELETE*2 );-
2896 assert( BTS_FAST_SECURE==(BTS_OVERWRITE|BTS_SECURE_DELETE) );-
2897 if( newFlag>=0 ){
newFlag>=0Description
TRUEevaluated 1649 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 1639 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)
1639-1649
2898 p->pBt->btsFlags &= ~BTS_FAST_SECURE;-
2899 p->pBt->btsFlags |= BTS_SECURE_DELETE*newFlag;-
2900 }
executed 1649 times by 12 tests: end of block
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)
1649
2901 b = (p->pBt->btsFlags & BTS_FAST_SECURE)/BTS_SECURE_DELETE;-
2902 sqlite3BtreeLeave(p);-
2903 return b;
executed 3288 times by 12 tests: return b;
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)
3288
2904}-
2905-
2906/*-
2907** Change the 'auto-vacuum' property of the database. If the 'autoVacuum'-
2908** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it-
2909** is disabled. The default value for the auto-vacuum property is -
2910** determined by the SQLITE_DEFAULT_AUTOVACUUM macro.-
2911*/-
2912int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){-
2913#ifdef SQLITE_OMIT_AUTOVACUUM-
2914 return SQLITE_READONLY;-
2915#else-
2916 BtShared *pBt = p->pBt;-
2917 int rc = SQLITE_OK;-
2918 u8 av = (u8)autoVacuum;-
2919-
2920 sqlite3BtreeEnter(p);-
2921 if( (pBt->btsFlags & BTS_PAGESIZE_FIXED)!=0 && (av ?1:0)!=pBt->autoVacuum ){
avDescription
TRUEevaluated 35 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
(pBt->btsFlags & 0x0002)!=0Description
TRUEevaluated 53 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1549 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
(av ?1:0)!=pBt->autoVacuumDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
14-1549
2922 rc = SQLITE_READONLY;-
2923 }else{
executed 14 times by 1 test: end of block
Executed by:
  • Self test (438)
14
2924 pBt->autoVacuum = av ?1:0;
avDescription
TRUEevaluated 155 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 1433 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (34)
  • Self test (438)
155-1433
2925 pBt->incrVacuum = av==2 ?1:0;
av==2Description
TRUEevaluated 77 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1511 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
77-1511
2926 }
executed 1588 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
1588
2927 sqlite3BtreeLeave(p);-
2928 return rc;
executed 1602 times by 5 tests: return rc;
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
1602
2929#endif-
2930}-
2931-
2932/*-
2933** Return the value of the 'auto-vacuum' property. If auto-vacuum is -
2934** enabled 1 is returned. Otherwise 0.-
2935*/-
2936int sqlite3BtreeGetAutoVacuum(Btree *p){-
2937#ifdef SQLITE_OMIT_AUTOVACUUM-
2938 return BTREE_AUTOVACUUM_NONE;-
2939#else-
2940 int rc;-
2941 sqlite3BtreeEnter(p);-
2942 rc = (-
2943 (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE:
(!p->pBt->autoVacuum)Description
TRUEevaluated 980 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 62 times by 1 test
Evaluated by:
  • Self test (438)
62-980
2944 (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL:
(!p->pBt->incrVacuum)Description
TRUEevaluated 37 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
25-37
2945 BTREE_AUTOVACUUM_INCR-
2946 );-
2947 sqlite3BtreeLeave(p);-
2948 return rc;
executed 1042 times by 2 tests: return rc;
Executed by:
  • Self test (34)
  • Self test (438)
1042
2949#endif-
2950}-
2951-
2952/*-
2953** If the user has not set the safety-level for this database connection-
2954** using "PRAGMA synchronous", and if the safety-level is not already-
2955** set to the value passed to this function as the second parameter,-
2956** set it so.-
2957*/-
2958#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS \-
2959 && !defined(SQLITE_OMIT_WAL)-
2960static void setDefaultSyncFlag(BtShared *pBt, u8 safety_level){-
2961 sqlite3 *db;-
2962 Db *pDb;-
2963 if( (db=pBt->db)!=0 && (pDb=db->aDb)!=0 ){-
2964 while( pDb->pBt==0 || pDb->pBt->pBt!=pBt ){ pDb++; }-
2965 if( pDb->bSyncSet==0 -
2966 && pDb->safety_level!=safety_level -
2967 && pDb!=&db->aDb[1] -
2968 ){-
2969 pDb->safety_level = safety_level;-
2970 sqlite3PagerSetFlags(pBt->pPager,-
2971 pDb->safety_level | (db->flags & PAGER_FLAGS_MASK));-
2972 }-
2973 }-
2974}-
2975#else-
2976# define setDefaultSyncFlag(pBt,safety_level)-
2977#endif-
2978-
2979/* Forward declaration */-
2980static int newDatabase(BtShared*);-
2981-
2982-
2983/*-
2984** Get a reference to pPage1 of the database file. This will-
2985** also acquire a readlock on that file.-
2986**-
2987** SQLITE_OK is returned on success. If the file is not a-
2988** well-formed database file, then SQLITE_CORRUPT is returned.-
2989** SQLITE_BUSY is returned if the database is locked. SQLITE_NOMEM-
2990** is returned if we run out of memory. -
2991*/-
2992static int lockBtree(BtShared *pBt){-
2993 int rc; /* Result code from subfunctions */-
2994 MemPage *pPage1; /* Page 1 of the database file */-
2995 int nPage; /* Number of pages in the database */-
2996 int nPageFile = 0; /* Number of pages in the database file */-
2997 int nPageHeader; /* Number of pages in the database according to hdr */-
2998-
2999 assert( sqlite3_mutex_held(pBt->mutex) );-
3000 assert( pBt->pPage1==0 );-
3001 rc = sqlite3PagerSharedLock(pBt->pPager);-
3002 if( rc!=SQLITE_OK ) return rc;
executed 291 times by 8 tests: return rc;
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)
rc!=0Description
TRUEevaluated 291 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 262032 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)
  • ...
291-262032
3003 rc = btreeGetPage(pBt, 1, &pPage1, 0);-
3004 if( rc!=SQLITE_OK ) return rc;
executed 24 times by 1 test: return rc;
Executed by:
  • Self test (438)
rc!=0Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 262008 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)
  • ...
24-262008
3005-
3006 /* Do some checking to help insure the file we opened really is-
3007 ** a valid database file. -
3008 */-
3009 nPage = nPageHeader = get4byte(28+(u8*)pPage1->aData);-
3010 sqlite3PagerPagecount(pBt->pPager, &nPageFile);-
3011 if( nPage==0 || memcmp(24+(u8*)pPage1->aData, 92+(u8*)pPage1->aData,4)!=0 ){
nPage==0Description
TRUEevaluated 74205 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)
  • ...
FALSEevaluated 187803 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)
  • ...
memcmp(24+(u8*...1->aData,4)!=0Description
TRUEevaluated 127 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187676 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)
  • ...
127-187803
3012 nPage = nPageFile;-
3013 }
executed 74332 times by 31 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 (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)
  • ...
74332
3014 if( (pBt->db->flags & SQLITE_ResetDatabase)!=0 ){
(pBt->db->flag...0x02000000)!=0Description
TRUEevaluated 19 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 261989 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)
  • ...
19-261989
3015 nPage = 0;-
3016 }
executed 19 times by 1 test: end of block
Executed by:
  • Self test (438)
19
3017 if( nPage>0 ){
nPage>0Description
TRUEevaluated 187815 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 74193 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)
  • ...
74193-187815
3018 u32 pageSize;-
3019 u32 usableSize;-
3020 u8 *page1 = pPage1->aData;-
3021 rc = SQLITE_NOTADB;-
3022 /* EVIDENCE-OF: R-43737-39999 Every valid SQLite database file begins-
3023 ** with the following 16 bytes (in hex): 53 51 4c 69 74 65 20 66 6f 72 6d-
3024 ** 61 74 20 33 00. */-
3025 if( memcmp(page1, zMagicHeader, 16)!=0 ){
memcmp(page1, ...Header, 16)!=0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187797 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)
  • ...
18-187797
3026 goto page1_init_failed;
executed 18 times by 1 test: goto page1_init_failed;
Executed by:
  • Self test (438)
18
3027 }-
3028-
3029#ifdef SQLITE_OMIT_WAL-
3030 if( page1[18]>1 ){-
3031 pBt->btsFlags |= BTS_READ_ONLY;-
3032 }-
3033 if( page1[19]>1 ){-
3034 goto page1_init_failed;-
3035 }-
3036#else-
3037 if( page1[18]>2 ){
page1[18]>2Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187793 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)
  • ...
4-187793
3038 pBt->btsFlags |= BTS_READ_ONLY;-
3039 }
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
3040 if( page1[19]>2 ){
page1[19]>2Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187796 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)
  • ...
1-187796
3041 goto page1_init_failed;
executed 1 time by 1 test: goto page1_init_failed;
Executed by:
  • Self test (438)
1
3042 }-
3043-
3044 /* If the write version is set to 2, this database should be accessed-
3045 ** in WAL mode. If the log is not already open, open it now. Then -
3046 ** return SQLITE_OK and return without populating BtShared.pPage1.-
3047 ** The caller detects this and calls this function again. This is-
3048 ** required as the version of page 1 currently in the page1 buffer-
3049 ** may not be the latest version - there may be a newer one in the log-
3050 ** file.-
3051 */-
3052 if( page1[19]==2 && (pBt->btsFlags & BTS_NO_WAL)==0 ){
page1[19]==2Description
TRUEevaluated 59013 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 128783 times by 387 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • Self test (125)
  • ...
(pBt->btsFlags & 0x0020)==0Description
TRUEevaluated 58990 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 23 times by 1 test
Evaluated by:
  • Self test (438)
23-128783
3053 int isOpen = 0;-
3054 rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen);-
3055 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 58985 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-58985
3056 goto page1_init_failed;
executed 5 times by 1 test: goto page1_init_failed;
Executed by:
  • Self test (438)
5
3057 }else{-
3058 setDefaultSyncFlag(pBt, SQLITE_DEFAULT_WAL_SYNCHRONOUS+1);-
3059 if( isOpen==0 ){
isOpen==0Description
TRUEevaluated 692 times by 25 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (75)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (85)
  • Self test (86)
  • Self test (90)
  • 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 58293 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)
  • ...
692-58293
3060 releasePageOne(pPage1);-
3061 return SQLITE_OK;
executed 692 times by 25 tests: return 0;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (29)
  • Self test (41)
  • Self test (438)
  • Self test (75)
  • Self test (79)
  • Self test (80)
  • Self test (81)
  • Self test (82)
  • Self test (83)
  • Self test (85)
  • Self test (86)
  • Self test (90)
  • 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)
692
3062 }-
3063 }
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
3064 rc = SQLITE_NOTADB;-
3065 }else{
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
3066 setDefaultSyncFlag(pBt, SQLITE_DEFAULT_SYNCHRONOUS+1);-
3067 }
executed 128806 times by 387 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • 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)
  • Self test (125)
  • ...
128806
3068#endif-
3069-
3070 /* EVIDENCE-OF: R-15465-20813 The maximum and minimum embedded payload-
3071 ** fractions and the leaf payload fraction values must be 64, 32, and 32.-
3072 **-
3073 ** The original design allowed these amounts to vary, but as of-
3074 ** version 3.6.0, we require them to be fixed.-
3075 */-
3076 if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
memcmp(&page1[...040\040",3)!=0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187096 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)
  • ...
3-187096
3077 goto page1_init_failed;
executed 3 times by 1 test: goto page1_init_failed;
Executed by:
  • Self test (438)
3
3078 }-
3079 /* EVIDENCE-OF: R-51873-39618 The page size for a database file is-
3080 ** determined by the 2-byte integer located at an offset of 16 bytes from-
3081 ** the beginning of the database file. */-
3082 pageSize = (page1[16]<<8) | (page1[17]<<16);-
3083 /* EVIDENCE-OF: R-25008-21688 The size of a page is a power of two-
3084 ** between 512 and 65536 inclusive. */-
3085 if( ((pageSize-1)&pageSize)!=0
((pageSize-1)&pageSize)!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187094 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)
  • ...
2-187094
3086 || pageSize>SQLITE_MAX_PAGE_SIZE
pageSize>65536Description
TRUEnever evaluated
FALSEevaluated 187094 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)
  • ...
0-187094
3087 || pageSize<=256
pageSize<=256Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187093 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)
  • ...
1-187093
3088 ){-
3089 goto page1_init_failed;
executed 3 times by 1 test: goto page1_init_failed;
Executed by:
  • Self test (438)
3
3090 }-
3091 assert( (pageSize & 7)==0 );-
3092 /* EVIDENCE-OF: R-59310-51205 The "reserved space" size in the 1-byte-
3093 ** integer at offset 20 is the number of bytes of space at the end of-
3094 ** each page to reserve for extensions. -
3095 **-
3096 ** EVIDENCE-OF: R-37497-42412 The size of the reserved region is-
3097 ** determined by the one-byte unsigned integer found at an offset of 20-
3098 ** into the database file header. */-
3099 usableSize = pageSize - page1[20];-
3100 if( (u32)pageSize!=pBt->pageSize ){
(u32)pageSize!=pBt->pageSizeDescription
TRUEevaluated 27 times by 7 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
FALSEevaluated 187066 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)
  • ...
27-187066
3101 /* After reading the first page of the database assuming a page size-
3102 ** of BtShared.pageSize, we have discovered that the page-size is-
3103 ** actually pageSize. Unlock the database, leave pBt->pPage1 at-
3104 ** zero and return SQLITE_OK. The caller will call this function-
3105 ** again with the correct page-size.-
3106 */-
3107 releasePageOne(pPage1);-
3108 pBt->usableSize = usableSize;-
3109 pBt->pageSize = pageSize;-
3110 freeTempSpace(pBt);-
3111 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize,-
3112 pageSize-usableSize);-
3113 return rc;
executed 27 times by 7 tests: return rc;
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
27
3114 }-
3115 if( (pBt->db->flags & SQLITE_WriteSchema)==0 && nPage>nPageFile ){
(pBt->db->flag...0x00000001)==0Description
TRUEevaluated 183961 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 3105 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
nPage>nPageFileDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 183958 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)
  • ...
3-183961
3116 rc = SQLITE_CORRUPT_BKPT;-
3117 goto page1_init_failed;
executed 3 times by 1 test: goto page1_init_failed;
Executed by:
  • Self test (438)
3
3118 }-
3119 /* EVIDENCE-OF: R-28312-64704 However, the usable size is not allowed to-
3120 ** be less than 480. In other words, if the page size is 512, then the-
3121 ** reserved space size cannot exceed 32. */-
3122 if( usableSize<480 ){
usableSize<480Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 187062 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)
  • ...
1-187062
3123 goto page1_init_failed;
executed 1 time by 1 test: goto page1_init_failed;
Executed by:
  • Self test (438)
1
3124 }-
3125 pBt->pageSize = pageSize;-
3126 pBt->usableSize = usableSize;-
3127#ifndef SQLITE_OMIT_AUTOVACUUM-
3128 pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0);
sqlite3Get4byt...ge1[36 + 4*4])Description
TRUEevaluated 9113 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 177949 times by 431 tests
Evaluated by:
  • 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)
  • Self test (122)
  • ...
9113-177949
3129 pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0);
sqlite3Get4byt...ge1[36 + 7*4])Description
TRUEevaluated 5324 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 181738 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)
  • ...
5324-181738
3130#endif-
3131 }
executed 187062 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)
  • ...
187062
3132-
3133 /* maxLocal is the maximum amount of payload to store locally for-
3134 ** a cell. Make sure it is small enough so that at least minFanout-
3135 ** cells can will fit on one page. We assume a 10-byte page header.-
3136 ** Besides the payload, the cell must store:-
3137 ** 2-byte pointer to the cell-
3138 ** 4-byte child pointer-
3139 ** 9-byte nKey value-
3140 ** 4-byte nData value-
3141 ** 4-byte overflow page pointer-
3142 ** So a cell consists of a 2-byte pointer, a header which is as much as-
3143 ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow-
3144 ** page pointer.-
3145 */-
3146 pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23);-
3147 pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23);-
3148 pBt->maxLeaf = (u16)(pBt->usableSize - 35);-
3149 pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23);-
3150 if( pBt->maxLocal>127 ){
pBt->maxLocal>127Description
TRUEevaluated 256770 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 4485 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
4485-256770
3151 pBt->max1bytePayload = 127;-
3152 }else{
executed 256770 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)
  • ...
256770
3153 pBt->max1bytePayload = (u8)pBt->maxLocal;-
3154 }
executed 4485 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
4485
3155 assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) );-
3156 pBt->pPage1 = pPage1;-
3157 pBt->nPage = nPage;-
3158 return SQLITE_OK;
executed 261255 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)
  • ...
261255
3159-
3160page1_init_failed:-
3161 releasePageOne(pPage1);-
3162 pBt->pPage1 = 0;-
3163 return rc;
executed 34 times by 1 test: return rc;
Executed by:
  • Self test (438)
34
3164}-
3165-
3166#ifndef NDEBUG-
3167/*-
3168** Return the number of cursors open on pBt. This is for use-
3169** in assert() expressions, so it is only compiled if NDEBUG is not-
3170** defined.-
3171**-
3172** Only write cursors are counted if wrOnly is true. If wrOnly is-
3173** false then all cursors are counted.-
3174**-
3175** For the purposes of this routine, a cursor is any cursor that-
3176** is capable of reading or writing to the database. Cursors that-
3177** have been tripped into the CURSOR_FAULT state are not counted.-
3178*/-
3179static int countValidCursors(BtShared *pBt, int wrOnly){-
3180 BtCursor *pCur;-
3181 int r = 0;-
3182 for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){-
3183 if( (wrOnly==0 || (pCur->curFlags & BTCF_WriteFlag)!=0)-
3184 && pCur->eState!=CURSOR_FAULT ) r++; -
3185 }-
3186 return r;-
3187}-
3188#endif-
3189-
3190/*-
3191** If there are no outstanding cursors and we are not in the middle-
3192** of a transaction but there is a read lock on the database, then-
3193** this routine unrefs the first page of the database file which -
3194** has the effect of releasing the read lock.-
3195**-
3196** If there is a transaction in progress, this routine is a no-op.-
3197*/-
3198static void unlockBtreeIfUnused(BtShared *pBt){-
3199 assert( sqlite3_mutex_held(pBt->mutex) );-
3200 assert( countValidCursors(pBt,0)==0 || pBt->inTransaction>TRANS_NONE );-
3201 if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){
pBt->inTransaction==0Description
TRUEevaluated 337527 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 1914837 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)
  • ...
pBt->pPage1!=0Description
TRUEevaluated 260882 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 76645 times by 66 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)
  • ...
76645-1914837
3202 MemPage *pPage1 = pBt->pPage1;-
3203 assert( pPage1->aData );-
3204 assert( sqlite3PagerRefcount(pBt->pPager)==1 );-
3205 pBt->pPage1 = 0;-
3206 releasePageOne(pPage1);-
3207 }
executed 260882 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)
  • ...
260882
3208}
executed 2252364 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)
  • ...
2252364
3209-
3210/*-
3211** If pBt points to an empty file then convert that empty file-
3212** into a new empty database by initializing the first page of-
3213** the database.-
3214*/-
3215static int newDatabase(BtShared *pBt){-
3216 MemPage *pP1;-
3217 unsigned char *data;-
3218 int rc;-
3219-
3220 assert( sqlite3_mutex_held(pBt->mutex) );-
3221 if( pBt->nPage>0 ){
pBt->nPage>0Description
TRUEevaluated 103890 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 64746 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 (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
64746-103890
3222 return SQLITE_OK;
executed 103890 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)
  • ...
103890
3223 }-
3224 pP1 = pBt->pPage1;-
3225 assert( pP1!=0 );-
3226 data = pP1->aData;-
3227 rc = sqlite3PagerWrite(pP1->pDbPage);-
3228 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 64746 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 (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
0-64746
3229 memcpy(data, zMagicHeader, sizeof(zMagicHeader));-
3230 assert( sizeof(zMagicHeader)==16 );-
3231 data[16] = (u8)((pBt->pageSize>>8)&0xff);-
3232 data[17] = (u8)((pBt->pageSize>>16)&0xff);-
3233 data[18] = 1;-
3234 data[19] = 1;-
3235 assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize);-
3236 data[20] = (u8)(pBt->pageSize - pBt->usableSize);-
3237 data[21] = 64;-
3238 data[22] = 32;-
3239 data[23] = 32;-
3240 memset(&data[24], 0, 100-24);-
3241 zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA );-
3242 pBt->btsFlags |= BTS_PAGESIZE_FIXED;-
3243#ifndef SQLITE_OMIT_AUTOVACUUM-
3244 assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 );-
3245 assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 );-
3246 put4byte(&data[36 + 4*4], pBt->autoVacuum);-
3247 put4byte(&data[36 + 7*4], pBt->incrVacuum);-
3248#endif-
3249 pBt->nPage = 1;-
3250 data[31] = 1;-
3251 return SQLITE_OK;
executed 64746 times by 11 tests: return 0;
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (64)
64746
3252}-
3253-
3254/*-
3255** Initialize the first page of the database file (creating a database-
3256** consisting of a single page and no schema objects). Return SQLITE_OK-
3257** if successful, or an SQLite error code otherwise.-
3258*/-
3259int sqlite3BtreeNewDb(Btree *p){-
3260 int rc;-
3261 sqlite3BtreeEnter(p);-
3262 p->pBt->nPage = 0;-
3263 rc = newDatabase(p->pBt);-
3264 sqlite3BtreeLeave(p);-
3265 return rc;
executed 4 times by 1 test: return rc;
Executed by:
  • Self test (438)
4
3266}-
3267-
3268/*-
3269** Attempt to start a new transaction. A write-transaction-
3270** is started if the second argument is nonzero, otherwise a read--
3271** transaction. If the second argument is 2 or more and exclusive-
3272** transaction is started, meaning that no other process is allowed-
3273** to access the database. A preexisting transaction may not be-
3274** upgraded to exclusive by calling this routine a second time - the-
3275** exclusivity flag only works for a new transaction.-
3276**-
3277** A write-transaction must be started before attempting any -
3278** changes to the database. None of the following routines -
3279** will work unless a transaction is started first:-
3280**-
3281** sqlite3BtreeCreateTable()-
3282** sqlite3BtreeCreateIndex()-
3283** sqlite3BtreeClearTable()-
3284** sqlite3BtreeDropTable()-
3285** sqlite3BtreeInsert()-
3286** sqlite3BtreeDelete()-
3287** sqlite3BtreeUpdateMeta()-
3288**-
3289** If an initial attempt to acquire the lock fails because of lock contention-
3290** and the database was previously unlocked, then invoke the busy handler-
3291** if there is one. But if there was previously a read-lock, do not-
3292** invoke the busy handler - just return SQLITE_BUSY. SQLITE_BUSY is -
3293** returned when there is already a read-lock in order to avoid a deadlock.-
3294**-
3295** Suppose there are two processes A and B. A has a read lock and B has-
3296** a reserved lock. B tries to promote to exclusive but is blocked because-
3297** of A's read lock. A tries to promote to reserved but is blocked by B.-
3298** One or the other of the two processes must give way or there can be-
3299** no progress. By returning SQLITE_BUSY and not invoking the busy callback-
3300** when A already has a read lock, we encourage A to give up and let B-
3301** proceed.-
3302*/-
3303int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVersion){-
3304 BtShared *pBt = p->pBt;-
3305 int rc = SQLITE_OK;-
3306-
3307 sqlite3BtreeEnter(p);-
3308 btreeIntegrity(p);-
3309-
3310 /* If the btree is already in a write-transaction, or it-
3311 ** is already in a read-transaction and a read-transaction-
3312 ** is requested, this is a no-op.-
3313 */-
3314 if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
p->inTrans==2Description
TRUEevaluated 606850 times by 34 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • ...
FALSEevaluated 429969 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)
  • ...
p->inTrans==1Description
TRUEevaluated 168218 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 261751 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)
  • ...
!wrflagDescription
TRUEevaluated 167225 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 993 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (30)
  • Self test (438)
993-606850
3315 goto trans_begun;
executed 774075 times by 435 tests: goto trans_begun;
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)
  • ...
774075
3316 }-
3317 assert( pBt->inTransaction==TRANS_WRITE || IfNotOmitAV(pBt->bDoTruncate)==0 );-
3318-
3319 if( (p->db->flags & SQLITE_ResetDatabase)
(p->db->flags & 0x02000000)Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 262720 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)
  • ...
24-262720
3320 && sqlite3PagerIsreadonly(pBt->pPager)==0
sqlite3PagerIs...Bt->pPager)==0Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-24
3321 ){-
3322 pBt->btsFlags &= ~BTS_READ_ONLY;-
3323 }
executed 24 times by 1 test: end of block
Executed by:
  • Self test (438)
24
3324-
3325 /* Write transactions are not possible on a read-only database */-
3326 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){
(pBt->btsFlags & 0x0001)!=0Description
TRUEevaluated 25681 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 237063 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)
  • ...
wrflagDescription
TRUEevaluated 19 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 25662 times by 1 test
Evaluated by:
  • Self test (438)
19-237063
3327 rc = SQLITE_READONLY;-
3328 goto trans_begun;
executed 19 times by 1 test: goto trans_begun;
Executed by:
  • Self test (438)
19
3329 }-
3330-
3331#ifndef SQLITE_OMIT_SHARED_CACHE-
3332 {-
3333 sqlite3 *pBlock = 0;-
3334 /* If another database handle has already opened a write transaction -
3335 ** on this shared-btree structure and a second write transaction is-
3336 ** requested, return SQLITE_LOCKED.-
3337 */-
3338 if( (wrflag && pBt->inTransaction==TRANS_WRITE)
wrflagDescription
TRUEevaluated 164098 times by 407 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 98627 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)
  • ...
pBt->inTransaction==2Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 164091 times by 407 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)
  • ...
7-164098
3339 || (pBt->btsFlags & BTS_PENDING)!=0
(pBt->btsFlags & 0x0080)!=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 262717 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)
  • ...
1-262717
3340 ){-
3341 pBlock = pBt->pWriter->db;-
3342 }else if( wrflag>1 ){
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
wrflag>1Description
TRUEevaluated 1517 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (34)
  • Self test (438)
FALSEevaluated 261200 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)
  • ...
8-261200
3343 BtLock *pIter;-
3344 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
pIterDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1515 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (34)
  • Self test (438)
5-1515
3345 if( pIter->pBtree!=p ){
pIter->pBtree!=pDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
2-3
3346 pBlock = pIter->pBtree->db;-
3347 break;
executed 2 times by 1 test: break;
Executed by:
  • Self test (438)
2
3348 }-
3349 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
3350 }
executed 1517 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (34)
  • Self test (438)
1517
3351 if( pBlock ){
pBlockDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 262715 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)
  • ...
10-262715
3352 sqlite3ConnectionBlocked(p->db, pBlock);-
3353 rc = SQLITE_LOCKED_SHAREDCACHE;-
3354 goto trans_begun;
executed 10 times by 1 test: goto trans_begun;
Executed by:
  • Self test (438)
10
3355 }-
3356 }-
3357#endif-
3358-
3359 /* Any read-only or read-write transaction implies a read-lock on -
3360 ** page 1. So if some other shared-cache client already has a write-lock -
3361 ** on page 1, the transaction cannot be opened. */-
3362 rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);-
3363 if( SQLITE_OK!=rc ) goto trans_begun;
executed 5 times by 1 test: goto trans_begun;
Executed by:
  • Self test (438)
0!=rcDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 262710 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)
  • ...
5-262710
3364-
3365 pBt->btsFlags &= ~BTS_INITIALLY_EMPTY;-
3366 if( pBt->nPage==0 ) pBt->btsFlags |= BTS_INITIALLY_EMPTY;
executed 89742 times by 436 tests: pBt->btsFlags |= 0x0010;
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)
  • ...
pBt->nPage==0Description
TRUEevaluated 89742 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 172968 times by 429 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)
  • ...
89742-172968
3367 do {-
3368 /* Call lockBtree() until either pBt->pPage1 is populated or-
3369 ** lockBtree() returns something other than SQLITE_OK. lockBtree()-
3370 ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after-
3371 ** reading page 1 it discovers that the page-size of the database -
3372 ** file is not pBt->pageSize. In this case lockBtree() will update-
3373 ** pBt->pageSize to the page-size of the file on disk.-
3374 */-
3375 while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) );
executed 261974 times by 435 tests: ;
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)
  • ...
pBt->pPage1==0Description
TRUEevaluated 262323 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 262405 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==(rc = lockBtree(pBt))Description
TRUEevaluated 261974 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 349 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)
349-262405
3376-
3377 if( rc==SQLITE_OK && wrflag ){
rc==0Description
TRUEevaluated 262405 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 349 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)
wrflagDescription
TRUEevaluated 164058 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)
  • ...
FALSEevaluated 98347 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)
  • ...
349-262405
3378 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 ){
(pBt->btsFlags & 0x0001)!=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
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)
  • ...
1-164057
3379 rc = SQLITE_READONLY;-
3380 }else{
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
3381 rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db));-
3382 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 136 times by 4 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (438)
  • Self test (52)
136-163921
3383 rc = newDatabase(pBt);-
3384 }else if( rc==SQLITE_BUSY_SNAPSHOT && pBt->inTransaction==TRANS_NONE ){
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)
  • ...
rc==(5 | (2<<8))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 128 times by 4 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (438)
  • Self test (52)
pBt->inTransaction==0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
2-163921
3385 /* if there was no transaction opened when this function was-
3386 ** called and SQLITE_BUSY_SNAPSHOT is returned, change the error-
3387 ** code to SQLITE_BUSY. */-
3388 rc = SQLITE_BUSY;-
3389 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
3390 }
executed 164057 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)
  • ...
164057
3391 }-
3392 -
3393 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 486 times by 9 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (59)
  • Self test (61)
FALSEevaluated 262268 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)
  • ...
486-262268
3394 unlockBtreeIfUnused(pBt);-
3395 }
executed 486 times by 9 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 (52)
  • Self test (59)
  • Self test (61)
486
3396 }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE &&
executed 262754 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&0xFF)==5Description
TRUEevaluated 172 times by 9 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (59)
  • Self test (61)
FALSEevaluated 262582 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)
  • ...
pBt->inTransaction==0Description
TRUEevaluated 158 times by 9 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (59)
  • Self test (61)
FALSEevaluated 14 times by 2 tests
Evaluated by:
  • Self test (30)
  • Self test (438)
14-262754
3397 btreeInvokeBusyHandler(pBt) );
btreeInvokeBusyHandler(pBt)Description
TRUEevaluated 44 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 114 times by 9 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (59)
  • Self test (61)
44-114
3398 sqlite3PagerResetLockTimeout(pBt->pPager);-
3399-
3400 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 262268 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 442 times by 9 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (59)
  • Self test (61)
442-262268
3401 if( p->inTrans==TRANS_NONE ){
p->inTrans==0Description
TRUEevaluated 261292 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 976 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
976-261292
3402 pBt->nTransaction++;-
3403#ifndef SQLITE_OMIT_SHARED_CACHE-
3404 if( p->sharable ){
p->sharableDescription
TRUEevaluated 1187 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 260105 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)
  • ...
1187-260105
3405 assert( p->lock.pBtree==p && p->lock.iTable==1 );-
3406 p->lock.eLock = READ_LOCK;-
3407 p->lock.pNext = pBt->pLock;-
3408 pBt->pLock = &p->lock;-
3409 }
executed 1187 times by 1 test: end of block
Executed by:
  • Self test (438)
1187
3410#endif-
3411 }
executed 261292 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)
  • ...
261292
3412 p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ);
wrflagDescription
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 98347 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)
  • ...
98347-163921
3413 if( p->inTrans>pBt->inTransaction ){
p->inTrans>pBt->inTransactionDescription
TRUEevaluated 262171 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 97 times by 1 test
Evaluated by:
  • Self test (438)
97-262171
3414 pBt->inTransaction = p->inTrans;-
3415 }
executed 262171 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)
  • ...
262171
3416 if( wrflag ){
wrflagDescription
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 98347 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)
  • ...
98347-163921
3417 MemPage *pPage1 = pBt->pPage1;-
3418#ifndef SQLITE_OMIT_SHARED_CACHE-
3419 assert( !pBt->pWriter );-
3420 pBt->pWriter = p;-
3421 pBt->btsFlags &= ~BTS_EXCLUSIVE;-
3422 if( wrflag>1 ) pBt->btsFlags |= BTS_EXCLUSIVE;
executed 1504 times by 5 tests: pBt->btsFlags |= 0x0040;
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (34)
  • Self test (438)
wrflag>1Description
TRUEevaluated 1504 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (34)
  • Self test (438)
FALSEevaluated 162417 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)
  • ...
1504-162417
3423#endif-
3424-
3425 /* If the db-size header field is incorrect (as it may be if an old-
3426 ** client has been writing the database file), update it now. Doing-
3427 ** this sooner rather than later means the database size can safely -
3428 ** re-read the database size from page 1 if a savepoint or transaction-
3429 ** rollback occurs within the transaction.-
3430 */-
3431 if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){
pBt->nPage!=sq...e1->aData[28])Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 163916 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)
  • ...
5-163916
3432 rc = sqlite3PagerWrite(pPage1->pDbPage);-
3433 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-5
3434 put4byte(&pPage1->aData[28], pBt->nPage);-
3435 }
executed 5 times by 1 test: end of block
Executed by:
  • Self test (438)
5
3436 }
executed 5 times by 1 test: end of block
Executed by:
  • Self test (438)
5
3437 }
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
3438 }
executed 262268 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)
  • ...
262268
3439-
3440trans_begun:
code before this statement executed 262710 times by 436 tests: trans_begun:
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)
  • ...
262710
3441 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1036343 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 476 times by 9 tests
Evaluated by:
  • Self test (30)
  • Self test (35)
  • Self test (36)
  • Self test (438)
  • Self test (50)
  • Self test (51)
  • Self test (52)
  • Self test (59)
  • Self test (61)
476-1036343
3442 if( pSchemaVersion ){
pSchemaVersionDescription
TRUEevaluated 951622 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 84721 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)
  • ...
84721-951622
3443 *pSchemaVersion = get4byte(&pBt->pPage1->aData[40]);-
3444 }
executed 951622 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)
  • ...
951622
3445 if( wrflag ){
wrflagDescription
TRUEevaluated 740071 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 296272 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)
  • ...
296272-740071
3446 /* This call makes sure that the pager has the correct number of-
3447 ** open savepoints. If the second parameter is greater than 0 and-
3448 ** the sub-journal is not already open, then it will be opened here.-
3449 */-
3450 rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint);-
3451 }
executed 740071 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)
  • ...
740071
3452 }
executed 1036343 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)
  • ...
1036343
3453-
3454 btreeIntegrity(p);-
3455 sqlite3BtreeLeave(p);-
3456 return rc;
executed 1036819 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)
  • ...
1036819
3457}-
3458-
3459#ifndef SQLITE_OMIT_AUTOVACUUM-
3460-
3461/*-
3462** Set the pointer-map entries for all children of page pPage. Also, if-
3463** pPage contains cells that point to overflow pages, set the pointer-
3464** map entries for the overflow pages as well.-
3465*/-
3466static int setChildPtrmaps(MemPage *pPage){-
3467 int i; /* Counter variable */-
3468 int nCell; /* Number of cells in page pPage */-
3469 int rc; /* Return code */-
3470 BtShared *pBt = pPage->pBt;-
3471 Pgno pgno = pPage->pgno;-
3472-
3473 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
3474 rc = pPage->isInit ? SQLITE_OK : btreeInitPage(pPage);
pPage->isInitDescription
TRUEevaluated 1589 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 4530 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
1589-4530
3475 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 6118 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
1-6118
3476 nCell = pPage->nCell;-
3477-
3478 for(i=0; i<nCell; i++){
i<nCellDescription
TRUEevaluated 62474 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 6118 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
6118-62474
3479 u8 *pCell = findCell(pPage, i);-
3480-
3481 ptrmapPutOvflPtr(pPage, pCell, &rc);-
3482-
3483 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 11120 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 51354 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
11120-51354
3484 Pgno childPgno = get4byte(pCell);-
3485 ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);-
3486 }
executed 11120 times by 1 test: end of block
Executed by:
  • Self test (438)
11120
3487 }
executed 62474 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
62474
3488-
3489 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 209 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5909 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
209-5909
3490 Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);-
3491 ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);-
3492 }
executed 209 times by 1 test: end of block
Executed by:
  • Self test (438)
209
3493-
3494 return rc;
executed 6118 times by 4 tests: return rc;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
6118
3495}-
3496-
3497/*-
3498** Somewhere on pPage is a pointer to page iFrom. Modify this pointer so-
3499** that it points to iTo. Parameter eType describes the type of pointer to-
3500** be modified, as follows:-
3501**-
3502** PTRMAP_BTREE: pPage is a btree-page. The pointer points at a child -
3503** page of pPage.-
3504**-
3505** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow-
3506** page pointed to by one of the cells on pPage.-
3507**-
3508** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next-
3509** overflow page in the list.-
3510*/-
3511static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){-
3512 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
3513 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
3514 if( eType==PTRMAP_OVERFLOW2 ){
eType==4Description
TRUEevaluated 1256 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6698 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
1256-6698
3515 /* The pointer is always the first 4 bytes of the page in this case. */-
3516 if( get4byte(pPage->aData)!=iFrom ){
sqlite3Get4byt...>aData)!=iFromDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1255 times by 1 test
Evaluated by:
  • Self test (438)
1-1255
3517 return SQLITE_CORRUPT_PAGE(pPage);
executed 1 time by 1 test: return sqlite3CorruptError(3517);
Executed by:
  • Self test (438)
1
3518 }-
3519 put4byte(pPage->aData, iTo);-
3520 }else{
executed 1255 times by 1 test: end of block
Executed by:
  • Self test (438)
1255
3521 int i;-
3522 int nCell;-
3523 int rc;-
3524-
3525 rc = pPage->isInit ? SQLITE_OK : btreeInitPage(pPage);
pPage->isInitDescription
TRUEevaluated 3412 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 3286 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
3286-3412
3526 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 6698 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-6698
3527 nCell = pPage->nCell;-
3528-
3529 for(i=0; i<nCell; i++){
i<nCellDescription
TRUEevaluated 183314 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 711 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
711-183314
3530 u8 *pCell = findCell(pPage, i);-
3531 if( eType==PTRMAP_OVERFLOW1 ){
eType==3Description
TRUEevaluated 5028 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 178286 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
5028-178286
3532 CellInfo info;-
3533 pPage->xParseCell(pPage, pCell, &info);-
3534 if( info.nLocal<info.nPayload ){
info.nLocal<info.nPayloadDescription
TRUEevaluated 5024 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-5024
3535 if( pCell+info.nSize > pPage->aData+pPage->pBt->usableSize ){
pCell+info.nSi...Bt->usableSizeDescription
TRUEnever evaluated
FALSEevaluated 5024 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-5024
3536 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(3536);
0
3537 }-
3538 if( iFrom==get4byte(pCell+info.nSize-4) ){
iFrom==sqlite3...+info.nSize-4)Description
TRUEevaluated 1322 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 3702 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1322-3702
3539 put4byte(pCell+info.nSize-4, iTo);-
3540 break;
executed 1322 times by 3 tests: break;
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1322
3541 }-
3542 }
executed 3702 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
3702
3543 }else{
executed 3706 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
3706
3544 if( get4byte(pCell)==iFrom ){
sqlite3Get4byte(pCell)==iFromDescription
TRUEevaluated 4665 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 173621 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
4665-173621
3545 put4byte(pCell, iTo);-
3546 break;
executed 4665 times by 4 tests: break;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
4665
3547 }-
3548 }
executed 173621 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
173621
3549 }-
3550 -
3551 if( i==nCell ){
i==nCellDescription
TRUEevaluated 711 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 5987 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
711-5987
3552 if( eType!=PTRMAP_BTREE ||
eType!=5Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 710 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1-710
3553 get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){
sqlite3Get4byt...set+8])!=iFromDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 709 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1-709
3554 return SQLITE_CORRUPT_PAGE(pPage);
executed 2 times by 1 test: return sqlite3CorruptError(3554);
Executed by:
  • Self test (438)
2
3555 }-
3556 put4byte(&pPage->aData[pPage->hdrOffset+8], iTo);-
3557 }
executed 709 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
709
3558 }
executed 6696 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
6696
3559 return SQLITE_OK;
executed 7951 times by 4 tests: return 0;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
7951
3560}-
3561-
3562-
3563/*-
3564** Move the open database page pDbPage to location iFreePage in the -
3565** database. The pDbPage reference remains valid.-
3566**-
3567** The isCommit flag indicates that there is no need to remember that-
3568** the journal needs to be sync()ed before database page pDbPage->pgno -
3569** can be written to. The caller has already promised not to write to that-
3570** page.-
3571*/-
3572static int relocatePage(-
3573 BtShared *pBt, /* Btree */-
3574 MemPage *pDbPage, /* Open page to move */-
3575 u8 eType, /* Pointer map 'type' entry for pDbPage */-
3576 Pgno iPtrPage, /* Pointer map 'page-no' entry for pDbPage */-
3577 Pgno iFreePage, /* The location to move pDbPage to */-
3578 int isCommit /* isCommit flag passed to sqlite3PagerMovepage */-
3579){-
3580 MemPage *pPtrPage; /* The page that contains a pointer to pDbPage */-
3581 Pgno iDbPage = pDbPage->pgno;-
3582 Pager *pPager = pBt->pPager;-
3583 int rc;-
3584-
3585 assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 || -
3586 eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE );-
3587 assert( sqlite3_mutex_held(pBt->mutex) );-
3588 assert( pDbPage->pBt==pBt );-
3589-
3590 /* Move page iDbPage from its current location to page number iFreePage */-
3591 TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n", -
3592 iDbPage, iFreePage, iPtrPage, eType));-
3593 rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit);-
3594 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8325 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
2-8325
3595 return rc;
executed 2 times by 1 test: return rc;
Executed by:
  • Self test (438)
2
3596 }-
3597 pDbPage->pgno = iFreePage;-
3598-
3599 /* If pDbPage was a btree-page, then it may have child pages and/or cells-
3600 ** that point to overflow pages. The pointer map entries for all these-
3601 ** pages need to be changed.-
3602 **-
3603 ** If pDbPage is an overflow page, then the first 4 bytes may store a-
3604 ** pointer to a subsequent overflow page. If this is the case, then-
3605 ** the pointer map needs to be updated for the subsequent overflow page.-
3606 */-
3607 if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){
eType==5Description
TRUEevaluated 5376 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 2949 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
eType==1Description
TRUEevaluated 370 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2579 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
370-5376
3608 rc = setChildPtrmaps(pDbPage);-
3609 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5744 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
2-5744
3610 return rc;
executed 2 times by 1 test: return rc;
Executed by:
  • Self test (438)
2
3611 }-
3612 }else{
executed 5744 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
5744
3613 Pgno nextOvfl = get4byte(pDbPage->aData);-
3614 if( nextOvfl!=0 ){
nextOvfl!=0Description
TRUEevaluated 1263 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1316 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1263-1316
3615 ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc);-
3616 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 1263 times by 1 test
Evaluated by:
  • Self test (438)
0-1263
3617 return rc;
never executed: return rc;
0
3618 }-
3619 }
executed 1263 times by 1 test: end of block
Executed by:
  • Self test (438)
1263
3620 }
executed 2579 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
2579
3621-
3622 /* Fix the database pointer on page iPtrPage that pointed at iDbPage so-
3623 ** that it points at iFreePage. Also fix the pointer map entry for-
3624 ** iPtrPage.-
3625 */-
3626 if( eType!=PTRMAP_ROOTPAGE ){
eType!=1Description
TRUEevaluated 7954 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 369 times by 1 test
Evaluated by:
  • Self test (438)
369-7954
3627 rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0);-
3628 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 7954 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-7954
3629 return rc;
never executed: return rc;
0
3630 }-
3631 rc = sqlite3PagerWrite(pPtrPage->pDbPage);-
3632 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 7954 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-7954
3633 releasePage(pPtrPage);-
3634 return rc;
never executed: return rc;
0
3635 }-
3636 rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType);-
3637 releasePage(pPtrPage);-
3638 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 7951 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-7951
3639 ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc);-
3640 }
executed 7951 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
7951
3641 }
executed 7954 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
7954
3642 return rc;
executed 8323 times by 4 tests: return rc;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
8323
3643}-
3644-
3645/* Forward declaration required by incrVacuumStep(). */-
3646static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);-
3647-
3648/*-
3649** Perform a single step of an incremental-vacuum. If successful, return-
3650** SQLITE_OK. If there is no work to do (and therefore no point in -
3651** calling this function again), return SQLITE_DONE. Or, if an error -
3652** occurs, return some other error code.-
3653**-
3654** More specifically, this function attempts to re-organize the database so -
3655** that the last page of the file currently in use is no longer in use.-
3656**-
3657** Parameter nFin is the number of pages that this database would contain-
3658** were this function called until it returns SQLITE_DONE.-
3659**-
3660** If the bCommit parameter is non-zero, this function assumes that the -
3661** caller will keep calling incrVacuumStep() until it returns SQLITE_DONE -
3662** or an error. bCommit is passed true for an auto-vacuum-on-commit -
3663** operation, or false for an incremental vacuum.-
3664*/-
3665static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bCommit){-
3666 Pgno nFreeList; /* Number of pages still on the free-list */-
3667 int rc;-
3668-
3669 assert( sqlite3_mutex_held(pBt->mutex) );-
3670 assert( iLastPg>nFin );-
3671-
3672 if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){
!(ptrmapPageno...))==(iLastPg))Description
TRUEevaluated 20022 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 41 times by 1 test
Evaluated by:
  • Self test (438)
iLastPg!=((Pgn...pageSize))+1))Description
TRUEevaluated 20000 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 22 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
22-20022
3673 u8 eType;-
3674 Pgno iPtrPage;-
3675-
3676 nFreeList = get4byte(&pBt->pPage1->aData[36]);-
3677 if( nFreeList==0 ){
nFreeList==0Description
TRUEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 19971 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
29-19971
3678 return SQLITE_DONE;
executed 29 times by 1 test: return 101;
Executed by:
  • Self test (438)
29
3679 }-
3680-
3681 rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage);-
3682 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 19971 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-19971
3683 return rc;
never executed: return rc;
0
3684 }-
3685 if( eType==PTRMAP_ROOTPAGE ){
eType==1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 19970 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1-19970
3686 return SQLITE_CORRUPT_BKPT;
executed 1 time by 1 test: return sqlite3CorruptError(3686);
Executed by:
  • Self test (438)
1
3687 }-
3688-
3689 if( eType==PTRMAP_FREEPAGE ){
eType==2Description
TRUEevaluated 12117 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 7853 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
7853-12117
3690 if( bCommit==0 ){
bCommit==0Description
TRUEevaluated 6857 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5260 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
5260-6857
3691 /* Remove the page from the files free-list. This is not required-
3692 ** if bCommit is non-zero. In that case, the free-list will be-
3693 ** truncated to zero after this function returns, so it doesn't -
3694 ** matter if it still contains some garbage entries.-
3695 */-
3696 Pgno iFreePg;-
3697 MemPage *pFreePg;-
3698 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, BTALLOC_EXACT);-
3699 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 6857 times by 1 test
Evaluated by:
  • Self test (438)
0-6857
3700 return rc;
never executed: return rc;
0
3701 }-
3702 assert( iFreePg==iLastPg );-
3703 releasePage(pFreePg);-
3704 }
executed 6857 times by 1 test: end of block
Executed by:
  • Self test (438)
6857
3705 } else {
executed 12117 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
12117
3706 Pgno iFreePg; /* Index of free page to move pLastPg to */-
3707 MemPage *pLastPg;-
3708 u8 eMode = BTALLOC_ANY; /* Mode parameter for allocateBtreePage() */-
3709 Pgno iNear = 0; /* nearby parameter for allocateBtreePage() */-
3710-
3711 rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);-
3712 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 7853 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-7853
3713 return rc;
never executed: return rc;
0
3714 }-
3715-
3716 /* If bCommit is zero, this loop runs exactly once and page pLastPg-
3717 ** is swapped with the first free page pulled off the free list.-
3718 **-
3719 ** On the other hand, if bCommit is greater than zero, then keep-
3720 ** looping until a free-page located within the first nFin pages-
3721 ** of the file is found.-
3722 */-
3723 if( bCommit==0 ){
bCommit==0Description
TRUEevaluated 927 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6926 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
927-6926
3724 eMode = BTALLOC_LE;-
3725 iNear = nFin;-
3726 }
executed 927 times by 1 test: end of block
Executed by:
  • Self test (438)
927
3727 do {-
3728 MemPage *pFreePg;-
3729 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iNear, eMode);-
3730 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 9648 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-9648
3731 releasePage(pLastPg);-
3732 return rc;
never executed: return rc;
0
3733 }-
3734 releasePage(pFreePg);-
3735 }while( bCommit && iFreePg>nFin );
executed 9648 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
bCommitDescription
TRUEevaluated 8721 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 927 times by 1 test
Evaluated by:
  • Self test (438)
iFreePg>nFinDescription
TRUEevaluated 1795 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 6926 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
927-9648
3736 assert( iFreePg<iLastPg );-
3737 -
3738 rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, bCommit);-
3739 releasePage(pLastPg);-
3740 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7849 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
4-7849
3741 return rc;
executed 4 times by 1 test: return rc;
Executed by:
  • Self test (438)
4
3742 }-
3743 }
executed 7849 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
7849
3744 }-
3745-
3746 if( bCommit==0 ){
bCommit==0Description
TRUEevaluated 7780 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12249 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
7780-12249
3747 do {-
3748 iLastPg--;-
3749 }while( iLastPg==PENDING_BYTE_PAGE(pBt) || PTRMAP_ISPAGE(pBt, iLastPg) );
executed 7873 times by 1 test: end of block
Executed by:
  • Self test (438)
iLastPg==((Pgn...pageSize))+1))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7865 times by 1 test
Evaluated by:
  • Self test (438)
(ptrmapPageno(...))==(iLastPg))Description
TRUEevaluated 85 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7780 times by 1 test
Evaluated by:
  • Self test (438)
8-7873
3750 pBt->bDoTruncate = 1;-
3751 pBt->nPage = iLastPg;-
3752 }
executed 7780 times by 1 test: end of block
Executed by:
  • Self test (438)
7780
3753 return SQLITE_OK;
executed 20029 times by 3 tests: return 0;
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
20029
3754}-
3755-
3756/*-
3757** The database opened by the first argument is an auto-vacuum database-
3758** nOrig pages in size containing nFree free pages. Return the expected -
3759** size of the database in pages following an auto-vacuum operation.-
3760*/-
3761static Pgno finalDbSize(BtShared *pBt, Pgno nOrig, Pgno nFree){-
3762 int nEntry; /* Number of entries on one ptrmap page */-
3763 Pgno nPtrmap; /* Number of PtrMap pages to be freed */-
3764 Pgno nFin; /* Return value */-
3765-
3766 nEntry = pBt->usableSize/5;-
3767 nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;-
3768 nFin = nOrig - nFree - nPtrmap;-
3769 if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
nOrig>((Pgno)(...pageSize))+1))Description
TRUEevaluated 6731 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 2646 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
nFin<((Pgno)((...pageSize))+1))Description
TRUEevaluated 4474 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 2257 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
2257-6731
3770 nFin--;-
3771 }
executed 4474 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
4474
3772 while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
(ptrmapPageno(...Fin))==(nFin))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 9383 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
nFin==((Pgno)(...pageSize))+1))Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 9377 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
2-9383
3773 nFin--;-
3774 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
3775-
3776 return nFin;
executed 9377 times by 4 tests: return nFin;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
9377
3777}-
3778-
3779/*-
3780** A write-transaction must be opened before calling this function.-
3781** It performs a single unit of work towards an incremental vacuum.-
3782**-
3783** If the incremental vacuum is finished after this function has run,-
3784** SQLITE_DONE is returned. If it is not finished, but no error occurred,-
3785** SQLITE_OK is returned. Otherwise an SQLite error code. -
3786*/-
3787int sqlite3BtreeIncrVacuum(Btree *p){-
3788 int rc;-
3789 BtShared *pBt = p->pBt;-
3790-
3791 sqlite3BtreeEnter(p);-
3792 assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );-
3793 if( !pBt->autoVacuum ){
!pBt->autoVacuumDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7883 times by 1 test
Evaluated by:
  • Self test (438)
4-7883
3794 rc = SQLITE_DONE;-
3795 }else{
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
3796 Pgno nOrig = btreePagecount(pBt);-
3797 Pgno nFree = get4byte(&pBt->pPage1->aData[36]);-
3798 Pgno nFin = finalDbSize(pBt, nOrig, nFree);-
3799-
3800 if( nOrig<nFin ){
nOrig<nFinDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7880 times by 1 test
Evaluated by:
  • Self test (438)
3-7880
3801 rc = SQLITE_CORRUPT_BKPT;-
3802 }else if( nFree>0 ){
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
nFree>0Description
TRUEevaluated 7785 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95 times by 1 test
Evaluated by:
  • Self test (438)
3-7785
3803 rc = saveAllCursors(pBt, 0, 0);-
3804 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 7785 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-7785
3805 invalidateAllOverflowCache(pBt);-
3806 rc = incrVacuumStep(pBt, nFin, nOrig, 0);-
3807 }
executed 7785 times by 1 test: end of block
Executed by:
  • Self test (438)
7785
3808 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 7780 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-7780
3809 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);-
3810 put4byte(&pBt->pPage1->aData[28], pBt->nPage);-
3811 }
executed 7780 times by 1 test: end of block
Executed by:
  • Self test (438)
7780
3812 }else{
executed 7785 times by 1 test: end of block
Executed by:
  • Self test (438)
7785
3813 rc = SQLITE_DONE;-
3814 }
executed 95 times by 1 test: end of block
Executed by:
  • Self test (438)
95
3815 }-
3816 sqlite3BtreeLeave(p);-
3817 return rc;
executed 7887 times by 1 test: return rc;
Executed by:
  • Self test (438)
7887
3818}-
3819-
3820/*-
3821** This routine is called prior to sqlite3PagerCommit when a transaction-
3822** is committed for an auto-vacuum database.-
3823**-
3824** If SQLITE_OK is returned, then *pnTrunc is set to the number of pages-
3825** the database file should be truncated to during the commit process. -
3826** i.e. the database has been reorganized so that only the first *pnTrunc-
3827** pages are in use.-
3828*/-
3829static int autoVacuumCommit(BtShared *pBt){-
3830 int rc = SQLITE_OK;-
3831 Pager *pPager = pBt->pPager;-
3832 VVA_ONLY( int nRef = sqlite3PagerRefcount(pPager); )-
3833-
3834 assert( sqlite3_mutex_held(pBt->mutex) );-
3835 invalidateAllOverflowCache(pBt);-
3836 assert(pBt->autoVacuum);-
3837 if( !pBt->incrVacuum ){
!pBt->incrVacuumDescription
TRUEevaluated 1496 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 4805 times by 1 test
Evaluated by:
  • Self test (438)
1496-4805
3838 Pgno nFin; /* Number of pages in database after autovacuuming */-
3839 Pgno nFree; /* Number of pages on the freelist initially */-
3840 Pgno iFree; /* The next page to be freed */-
3841 Pgno nOrig; /* Database size before freeing */-
3842-
3843 nOrig = btreePagecount(pBt);-
3844 if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
(ptrmapPageno(...ig))==(nOrig))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1495 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
nOrig==((Pgno)...pageSize))+1))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1494 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
1-1495
3845 /* It is not possible to create a database for which the final page-
3846 ** is either a pointer-map page or the pending-byte page. If one-
3847 ** is encountered, this indicates corruption.-
3848 */-
3849 return SQLITE_CORRUPT_BKPT;
executed 2 times by 1 test: return sqlite3CorruptError(3849);
Executed by:
  • Self test (438)
2
3850 }-
3851-
3852 nFree = get4byte(&pBt->pPage1->aData[36]);-
3853 nFin = finalDbSize(pBt, nOrig, nFree);-
3854 if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(3854);
nFin>nOrigDescription
TRUEnever evaluated
FALSEevaluated 1494 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-1494
3855 if( nFin<nOrig ){
nFin<nOrigDescription
TRUEevaluated 828 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 666 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
666-828
3856 rc = saveAllCursors(pBt, 0, 0);-
3857 }
executed 828 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
828
3858 for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
iFree>nFinDescription
TRUEevaluated 12295 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 1477 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
rc==0Description
TRUEevaluated 12278 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
17-12295
3859 rc = incrVacuumStep(pBt, nFin, iFree, 1);-
3860 }
executed 12278 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
12278
3861 if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
rc==101Description
TRUEevaluated 29 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1465 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
rc==0Description
TRUEevaluated 1465 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEnever evaluated
nFree>0Description
TRUEevaluated 828 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 666 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-1465
3862 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);-
3863 put4byte(&pBt->pPage1->aData[32], 0);-
3864 put4byte(&pBt->pPage1->aData[36], 0);-
3865 put4byte(&pBt->pPage1->aData[28], nFin);-
3866 pBt->bDoTruncate = 1;-
3867 pBt->nPage = nFin;-
3868 }
executed 828 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
828
3869 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 1494 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-1494
3870 sqlite3PagerRollback(pPager);-
3871 }
never executed: end of block
0
3872 }
executed 1494 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
1494
3873-
3874 assert( nRef>=sqlite3PagerRefcount(pPager) );-
3875 return rc;
executed 6299 times by 4 tests: return rc;
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
6299
3876}-
3877-
3878#else /* ifndef SQLITE_OMIT_AUTOVACUUM */-
3879# define setChildPtrmaps(x) SQLITE_OK-
3880#endif-
3881-
3882/*-
3883** This routine does the first phase of a two-phase commit. This routine-
3884** causes a rollback journal to be created (if it does not already exist)-
3885** and populated with enough information so that if a power loss occurs-
3886** the database can be restored to its original state by playing back-
3887** the journal. Then the contents of the journal are flushed out to-
3888** the disk. After the journal is safely on oxide, the changes to the-
3889** database are written into the database file and flushed to oxide.-
3890** At the end of this call, the rollback journal still exists on the-
3891** disk and we are still holding all locks, so the transaction has not-
3892** committed. See sqlite3BtreeCommitPhaseTwo() for the second phase of the-
3893** commit process.-
3894**-
3895** This call is a no-op if no write-transaction is currently active on pBt.-
3896**-
3897** Otherwise, sync the database file for the btree pBt. zMaster points to-
3898** the name of a master journal file that should be written into the-
3899** individual journal file, or is NULL, indicating no master journal file -
3900** (single database transaction).-
3901**-
3902** When this is called, the master journal should already have been-
3903** created, populated with this journal pointer and synced to disk.-
3904**-
3905** Once this is routine has returned, the only thing required to commit-
3906** the write-transaction for this database file is to delete the journal.-
3907*/-
3908int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){-
3909 int rc = SQLITE_OK;-
3910 if( p->inTrans==TRANS_WRITE ){
p->inTrans==2Description
TRUEevaluated 98233 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)
  • ...
FALSEevaluated 301505 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)
  • ...
98233-301505
3911 BtShared *pBt = p->pBt;-
3912 sqlite3BtreeEnter(p);-
3913#ifndef SQLITE_OMIT_AUTOVACUUM-
3914 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 6301 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 91932 times by 146 tests
Evaluated by:
  • 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 (34)
  • Self test (353)
  • ...
6301-91932
3915 rc = autoVacuumCommit(pBt);-
3916 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6299 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
2-6299
3917 sqlite3BtreeLeave(p);-
3918 return rc;
executed 2 times by 1 test: return rc;
Executed by:
  • Self test (438)
2
3919 }-
3920 }
executed 6299 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
6299
3921 if( pBt->bDoTruncate ){
pBt->bDoTruncateDescription
TRUEevaluated 5086 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 93145 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)
  • ...
5086-93145
3922 sqlite3PagerTruncateImage(pBt->pPager, pBt->nPage);-
3923 }
executed 5086 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
5086
3924#endif-
3925 rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);-
3926 sqlite3BtreeLeave(p);-
3927 }
executed 98134 times by 56 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 (4)
  • Self test (40)
  • Self test (41)
  • ...
98134
3928 return rc;
executed 399639 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)
  • ...
399639
3929}-
3930-
3931/*-
3932** This function is called from both BtreeCommitPhaseTwo() and BtreeRollback()-
3933** at the conclusion of a transaction.-
3934*/-
3935static void btreeEndTransaction(Btree *p){-
3936 BtShared *pBt = p->pBt;-
3937 sqlite3 *db = p->db;-
3938 assert( sqlite3BtreeHoldsMutex(p) );-
3939-
3940#ifndef SQLITE_OMIT_AUTOVACUUM-
3941 pBt->bDoTruncate = 0;-
3942#endif-
3943 if( p->inTrans>TRANS_NONE && db->nVdbeRead>1 ){
p->inTrans>0Description
TRUEevaluated 406070 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 76354 times by 66 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)
  • ...
db->nVdbeRead>1Description
TRUEevaluated 145151 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 260919 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)
  • ...
76354-406070
3944 /* If there are other active statements that belong to this database-
3945 ** handle, downgrade to a read-only transaction. The other statements-
3946 ** may still be reading from the database. */-
3947 downgradeAllSharedCacheTableLocks(p);-
3948 p->inTrans = TRANS_READ;-
3949 }else{
executed 145151 times by 1 test: end of block
Executed by:
  • Self test (438)
145151
3950 /* If the handle had any kind of transaction open, decrement the -
3951 ** transaction count of the shared btree. If the transaction count -
3952 ** reaches 0, set the shared state to TRANS_NONE. The unlockBtreeIfUnused()-
3953 ** call below will unlock the pager. */-
3954 if( p->inTrans!=TRANS_NONE ){
p->inTrans!=0Description
TRUEevaluated 260919 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 76354 times by 66 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)
  • ...
76354-260919
3955 clearAllSharedCacheTableLocks(p);-
3956 pBt->nTransaction--;-
3957 if( 0==pBt->nTransaction ){
0==pBt->nTransactionDescription
TRUEevaluated 260759 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 160 times by 1 test
Evaluated by:
  • Self test (438)
160-260759
3958 pBt->inTransaction = TRANS_NONE;-
3959 }
executed 260759 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)
  • ...
260759
3960 }
executed 260919 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)
  • ...
260919
3961-
3962 /* Set the current transaction state to TRANS_NONE and unlock the -
3963 ** pager if this call closed the only read or write transaction. */-
3964 p->inTrans = TRANS_NONE;-
3965 unlockBtreeIfUnused(pBt);-
3966 }
executed 337273 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)
  • ...
337273
3967-
3968 btreeIntegrity(p);-
3969}
executed 482424 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)
  • ...
482424
3970-
3971/*-
3972** Commit the transaction currently in progress.-
3973**-
3974** This routine implements the second phase of a 2-phase commit. The-
3975** sqlite3BtreeCommitPhaseOne() routine does the first phase and should-
3976** be invoked prior to calling this routine. The sqlite3BtreeCommitPhaseOne()-
3977** routine did all the work of writing information out to disk and flushing the-
3978** contents so that they are written onto the disk platter. All this-
3979** routine has to do is delete or truncate or zero the header in the-
3980** the rollback journal (which causes the transaction to commit) and-
3981** drop locks.-
3982**-
3983** Normally, if an error occurs while the pager layer is attempting to -
3984** finalize the underlying journal file, this function returns an error and-
3985** the upper layer will attempt a rollback. However, if the second argument-
3986** is non-zero then this b-tree transaction is part of a multi-file -
3987** transaction. In this case, the transaction has already been committed -
3988** (by deleting a master journal file) and the caller will ignore this -
3989** functions return code. So, even if an error occurs in the pager layer,-
3990** reset the b-tree objects internal state to indicate that the write-
3991** transaction has been closed. This is quite safe, as the pager will have-
3992** transitioned to the error state.-
3993**-
3994** This will release the write lock on the database file. If there-
3995** are no active cursors, it also releases the read lock.-
3996*/-
3997int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){-
3998-
3999 if( p->inTrans==TRANS_NONE ) return SQLITE_OK;
executed 62949 times by 425 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)
  • ...
p->inTrans==0Description
TRUEevaluated 62949 times by 425 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 336704 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)
  • ...
62949-336704
4000 sqlite3BtreeEnter(p);-
4001 btreeIntegrity(p);-
4002-
4003 /* If the handle has a write-transaction open, commit the shared-btrees -
4004 ** transaction and set the shared state to TRANS_READ.-
4005 */-
4006 if( p->inTrans==TRANS_WRITE ){
p->inTrans==2Description
TRUEevaluated 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)
  • ...
FALSEevaluated 238556 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)
  • ...
98148-238556
4007 int rc;-
4008 BtShared *pBt = p->pBt;-
4009 assert( pBt->inTransaction==TRANS_WRITE );-
4010 assert( pBt->nTransaction>0 );-
4011 rc = sqlite3PagerCommitPhaseTwo(pBt->pPager);-
4012 if( rc!=SQLITE_OK && bCleanup==0 ){
rc!=0Description
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 98110 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)
  • ...
bCleanup==0Description
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-98110
4013 sqlite3BtreeLeave(p);-
4014 return rc;
executed 38 times by 1 test: return rc;
Executed by:
  • Self test (438)
38
4015 }-
4016 p->iDataVersion--; /* Compensate for pPager->iDataVersion++; */-
4017 pBt->inTransaction = TRANS_READ;-
4018 btreeClearHasContent(pBt);-
4019 }
executed 98110 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)
  • ...
98110
4020-
4021 btreeEndTransaction(p);-
4022 sqlite3BtreeLeave(p);-
4023 return SQLITE_OK;
executed 336666 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)
  • ...
336666
4024}-
4025-
4026/*-
4027** Do both phases of a commit.-
4028*/-
4029int sqlite3BtreeCommit(Btree *p){-
4030 int rc;-
4031 sqlite3BtreeEnter(p);-
4032 rc = sqlite3BtreeCommitPhaseOne(p, 0);-
4033 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 23466 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-23466
4034 rc = sqlite3BtreeCommitPhaseTwo(p, 0);-
4035 }
executed 23466 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)
  • ...
23466
4036 sqlite3BtreeLeave(p);-
4037 return rc;
executed 23466 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)
  • ...
23466
4038}-
4039-
4040/*-
4041** This routine sets the state to CURSOR_FAULT and the error-
4042** code to errCode for every cursor on any BtShared that pBtree-
4043** references. Or if the writeOnly flag is set to 1, then only-
4044** trip write cursors and leave read cursors unchanged.-
4045**-
4046** Every cursor is a candidate to be tripped, including cursors-
4047** that belong to other database connections that happen to be-
4048** sharing the cache with pBtree.-
4049**-
4050** This routine gets called when a rollback occurs. If the writeOnly-
4051** flag is true, then only write-cursors need be tripped - read-only-
4052** cursors save their current positions so that they may continue -
4053** following the rollback. Or, if writeOnly is false, all cursors are -
4054** tripped. In general, writeOnly is false if the transaction being-
4055** rolled back modified the database schema. In this case b-tree root-
4056** pages may be moved or deleted from the database altogether, making-
4057** it unsafe for read cursors to continue.-
4058**-
4059** If the writeOnly flag is true and an error is encountered while -
4060** saving the current position of a read-only cursor, all cursors, -
4061** including all read-cursors are tripped.-
4062**-
4063** SQLITE_OK is returned if successful, or if an error occurs while-
4064** saving a cursor position, an SQLite error code.-
4065*/-
4066int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int writeOnly){-
4067 BtCursor *p;-
4068 int rc = SQLITE_OK;-
4069-
4070 assert( (writeOnly==0 || writeOnly==1) && BTCF_WriteFlag==1 );-
4071 if( pBtree ){
pBtreeDescription
TRUEevaluated 6570 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
FALSEevaluated 146 times by 1 test
Evaluated by:
  • Self test (438)
146-6570
4072 sqlite3BtreeEnter(pBtree);-
4073 for(p=pBtree->pBt->pCursor; p; p=p->pNext){
pDescription
TRUEevaluated 539 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6570 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
539-6570
4074 if( writeOnly && (p->curFlags & BTCF_WriteFlag)==0 ){
writeOnlyDescription
TRUEevaluated 206 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 333 times by 1 test
Evaluated by:
  • Self test (438)
(p->curFlags & 0x01)==0Description
TRUEevaluated 206 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-333
4075 if( p->eState==CURSOR_VALID || p->eState==CURSOR_SKIPNEXT ){
p->eState==0Description
TRUEevaluated 206 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
p->eState==2Description
TRUEnever evaluated
FALSEnever evaluated
0-206
4076 rc = saveCursorPosition(p);-
4077 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 206 times by 1 test
Evaluated by:
  • Self test (438)
0-206
4078 (void)sqlite3BtreeTripAllCursors(pBtree, rc, 0);-
4079 break;
never executed: break;
0
4080 }-
4081 }
executed 206 times by 1 test: end of block
Executed by:
  • Self test (438)
206
4082 }else{
executed 206 times by 1 test: end of block
Executed by:
  • Self test (438)
206
4083 sqlite3BtreeClearCursor(p);-
4084 p->eState = CURSOR_FAULT;-
4085 p->skipNext = errCode;-
4086 }
executed 333 times by 1 test: end of block
Executed by:
  • Self test (438)
333
4087 btreeReleaseAllCursorPages(p);-
4088 }
executed 539 times by 1 test: end of block
Executed by:
  • Self test (438)
539
4089 sqlite3BtreeLeave(pBtree);-
4090 }
executed 6570 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
6570
4091 return rc;
executed 6716 times by 13 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
6716
4092}-
4093-
4094/*-
4095** Rollback the transaction in progress.-
4096**-
4097** If tripCode is not SQLITE_OK then cursors will be invalidated (tripped).-
4098** Only write cursors are tripped if writeOnly is true but all cursors are-
4099** tripped if writeOnly is false. Any attempt to use-
4100** a tripped cursor will result in an error.-
4101**-
4102** This will release the write lock on the database file. If there-
4103** are no active cursors, it also releases the read lock.-
4104*/-
4105int sqlite3BtreeRollback(Btree *p, int tripCode, int writeOnly){-
4106 int rc;-
4107 BtShared *pBt = p->pBt;-
4108 MemPage *pPage1;-
4109-
4110 assert( writeOnly==1 || writeOnly==0 );-
4111 assert( tripCode==SQLITE_ABORT_ROLLBACK || tripCode==SQLITE_OK );-
4112 sqlite3BtreeEnter(p);-
4113 if( tripCode==SQLITE_OK ){
tripCode==0Description
TRUEevaluated 141168 times by 68 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 4594 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
4594-141168
4114 rc = tripCode = saveAllCursors(pBt, 0, 0);-
4115 if( rc ) writeOnly = 0;
never executed: writeOnly = 0;
rcDescription
TRUEnever evaluated
FALSEevaluated 141168 times by 68 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)
  • ...
0-141168
4116 }else{
executed 141168 times by 68 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)
  • ...
141168
4117 rc = SQLITE_OK;-
4118 }
executed 4594 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
4594
4119 if( tripCode ){
tripCodeDescription
TRUEevaluated 4594 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
FALSEevaluated 141168 times by 68 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)
  • ...
4594-141168
4120 int rc2 = sqlite3BtreeTripAllCursors(p, tripCode, writeOnly);-
4121 assert( rc==SQLITE_OK || (writeOnly==0 && rc2==SQLITE_OK) );-
4122 if( rc2!=SQLITE_OK ) rc = rc2;
never executed: rc = rc2;
rc2!=0Description
TRUEnever evaluated
FALSEevaluated 4594 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
0-4594
4123 }
executed 4594 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 (35)
  • Self test (39)
  • Self test (438)
  • Self test (6)
  • Self test (8)
  • Self test (88)
4594
4124 btreeIntegrity(p);-
4125-
4126 if( p->inTrans==TRANS_WRITE ){
p->inTrans==2Description
TRUEevaluated 65461 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)
FALSEevaluated 80301 times by 66 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)
  • ...
65461-80301
4127 int rc2;-
4128-
4129 assert( TRANS_WRITE==pBt->inTransaction );-
4130 rc2 = sqlite3PagerRollback(pBt->pPager);-
4131 if( rc2!=SQLITE_OK ){
rc2!=0Description
TRUEevaluated 279 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 65178 times by 16 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 (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (6)
  • Self test (64)
  • Self test (79)
  • Self test (88)
279-65178
4132 rc = rc2;-
4133 }
executed 279 times by 1 test: end of block
Executed by:
  • Self test (438)
279
4134-
4135 /* The rollback may have destroyed the pPage1->aData value. So-
4136 ** call btreeGetPage() on page 1 again to make-
4137 ** sure pPage1->aData is set correctly. */-
4138 if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){
btreeGetPage(p...&pPage1, 0)==0Description
TRUEevaluated 5047 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)
FALSEevaluated 60410 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
5047-60410
4139 int nPage = get4byte(28+(u8*)pPage1->aData);-
4140 testcase( nPage==0 );-
4141 if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
executed 787 times by 1 test: sqlite3PagerPagecount(pBt->pPager, &nPage);
Executed by:
  • Self test (438)
nPage==0Description
TRUEevaluated 787 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4260 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)
787-4260
4142 testcase( pBt->nPage!=nPage );-
4143 pBt->nPage = nPage;-
4144 releasePageOne(pPage1);-
4145 }
executed 5047 times by 12 tests: end of block
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)
5047
4146 assert( countValidCursors(pBt, 1)==0 );-
4147 pBt->inTransaction = TRANS_READ;-
4148 btreeClearHasContent(pBt);-
4149 }
executed 65457 times by 16 tests: end of block
Executed 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 (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (6)
  • Self test (64)
  • Self test (79)
  • Self test (88)
65457
4150-
4151 btreeEndTransaction(p);-
4152 sqlite3BtreeLeave(p);-
4153 return rc;
executed 145758 times by 73 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (14)
  • Self test (18)
  • Self test (22)
  • 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)
  • ...
145758
4154}-
4155-
4156/*-
4157** Start a statement subtransaction. The subtransaction can be rolled-
4158** back independently of the main transaction. You must start a transaction -
4159** before starting a subtransaction. The subtransaction is ended automatically -
4160** if the main transaction commits or rolls back.-
4161**-
4162** Statement subtransactions are used around individual SQL statements-
4163** that are contained within a BEGIN...COMMIT block. If a constraint-
4164** error occurs within the statement, the effect of that one statement-
4165** can be rolled back without having to rollback the entire transaction.-
4166**-
4167** A statement sub-transaction is implemented as an anonymous savepoint. The-
4168** value passed as the second parameter is the total number of savepoints,-
4169** including the new anonymous savepoint, open on the B-Tree. i.e. if there-
4170** are no active savepoints and no other statement-transactions open,-
4171** iStatement is 1. This anonymous savepoint can be released or rolled back-
4172** using the sqlite3BtreeSavepoint() function.-
4173*/-
4174int sqlite3BtreeBeginStmt(Btree *p, int iStatement){-
4175 int rc;-
4176 BtShared *pBt = p->pBt;-
4177 sqlite3BtreeEnter(p);-
4178 assert( p->inTrans==TRANS_WRITE );-
4179 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );-
4180 assert( iStatement>0 );-
4181 assert( iStatement>p->db->nSavepoint );-
4182 assert( pBt->inTransaction==TRANS_WRITE );-
4183 /* At the pager level, a statement transaction is a savepoint with-
4184 ** an index greater than all savepoints created explicitly using-
4185 ** SQL statements. It is illegal to open, release or rollback any-
4186 ** such savepoints while the statement transaction savepoint is active.-
4187 */-
4188 rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement);-
4189 sqlite3BtreeLeave(p);-
4190 return rc;
executed 3422 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)
3422
4191}-
4192-
4193/*-
4194** The second argument to this function, op, is always SAVEPOINT_ROLLBACK-
4195** or SAVEPOINT_RELEASE. This function either releases or rolls back the-
4196** savepoint identified by parameter iSavepoint, depending on the value -
4197** of op.-
4198**-
4199** Normally, iSavepoint is greater than or equal to zero. However, if op is-
4200** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the -
4201** contents of the entire transaction are rolled back. This is different-
4202** from a normal transaction rollback, as no locks are released and the-
4203** transaction remains open.-
4204*/-
4205int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){-
4206 int rc = SQLITE_OK;-
4207 if( p && p->inTrans==TRANS_WRITE ){
pDescription
TRUEevaluated 8893 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 172 times by 1 test
Evaluated by:
  • Self test (438)
p->inTrans==2Description
TRUEevaluated 4711 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 4182 times by 1 test
Evaluated by:
  • Self test (438)
172-8893
4208 BtShared *pBt = p->pBt;-
4209 assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );-
4210 assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) );-
4211 sqlite3BtreeEnter(p);-
4212 if( op==SAVEPOINT_ROLLBACK ){
op==2Description
TRUEevaluated 1233 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3478 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)
1233-3478
4213 rc = saveAllCursors(pBt, 0, 0);-
4214 }
executed 1233 times by 1 test: end of block
Executed by:
  • Self test (438)
1233
4215 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 4711 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)
FALSEnever evaluated
0-4711
4216 rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint);-
4217 }
executed 4711 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)
4711
4218 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 4711 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)
FALSEnever evaluated
0-4711
4219 if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){
iSavepoint<0Description
TRUEevaluated 41 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4670 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)
(pBt->btsFlags & 0x0010)!=0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
2-4670
4220 pBt->nPage = 0;-
4221 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
4222 rc = newDatabase(pBt);-
4223 pBt->nPage = get4byte(28 + pBt->pPage1->aData);-
4224-
4225 /* The database size was written into the offset 28 of the header-
4226 ** when the transaction started, so we know that the value at offset-
4227 ** 28 is nonzero. */-
4228 assert( pBt->nPage>0 );-
4229 }
executed 4711 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)
4711
4230 sqlite3BtreeLeave(p);-
4231 }
executed 4711 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)
4711
4232 return rc;
executed 9065 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)
9065
4233}-
4234-
4235/*-
4236** Create a new cursor for the BTree whose root is on the page-
4237** iTable. If a read-only cursor is requested, it is assumed that-
4238** the caller already has at least a read-only transaction open-
4239** on the database already. If a write-cursor is requested, then-
4240** the caller is assumed to have an open write transaction.-
4241**-
4242** If the BTREE_WRCSR bit of wrFlag is clear, then the cursor can only-
4243** be used for reading. If the BTREE_WRCSR bit is set, then the cursor-
4244** can be used for reading or for writing if other conditions for writing-
4245** are also met. These are the conditions that must be met in order-
4246** for writing to be allowed:-
4247**-
4248** 1: The cursor must have been opened with wrFlag containing BTREE_WRCSR-
4249**-
4250** 2: Other database connections that share the same pager cache-
4251** but which are not in the READ_UNCOMMITTED state may not have-
4252** cursors open with wrFlag==0 on the same table. Otherwise-
4253** the changes made by this write cursor would be visible to-
4254** the read cursors in the other database connection.-
4255**-
4256** 3: The database must be writable (not on read-only media)-
4257**-
4258** 4: There must be an active transaction.-
4259**-
4260** The BTREE_FORDELETE bit of wrFlag may optionally be set if BTREE_WRCSR-
4261** is set. If FORDELETE is set, that is a hint to the implementation that-
4262** this cursor will only be used to seek to and delete entries of an index-
4263** as part of a larger DELETE statement. The FORDELETE hint is not used by-
4264** this implementation. But in a hypothetical alternative storage engine -
4265** in which index entries are automatically deleted when corresponding table-
4266** rows are deleted, the FORDELETE flag is a hint that all SEEK and DELETE-
4267** operations on this cursor can be no-ops and all READ operations can -
4268** return a null row (2-bytes: 0x01 0x00).-
4269**-
4270** No checking is done to make sure that page iTable really is the-
4271** root page of a b-tree. If it is not, then the cursor acquired-
4272** will not work correctly.-
4273**-
4274** It is assumed that the sqlite3BtreeCursorZero() has been called-
4275** on pCur to initialize the memory space prior to invoking this routine.-
4276*/-
4277static int btreeCursor(-
4278 Btree *p, /* The btree */-
4279 int iTable, /* Root page of table to open */-
4280 int wrFlag, /* 1 to write. 0 read-only */-
4281 struct KeyInfo *pKeyInfo, /* First arg to comparison function */-
4282 BtCursor *pCur /* Space for new cursor */-
4283){-
4284 BtShared *pBt = p->pBt; /* Shared b-tree handle */-
4285 BtCursor *pX; /* Looping over other all cursors */-
4286-
4287 assert( sqlite3BtreeHoldsMutex(p) );-
4288 assert( wrFlag==0 -
4289 || wrFlag==BTREE_WRCSR -
4290 || wrFlag==(BTREE_WRCSR|BTREE_FORDELETE) -
4291 );-
4292-
4293 /* The following assert statements verify that if this is a sharable -
4294 ** b-tree database, the connection is holding the required table locks, -
4295 ** and that no other connection has any open cursor that conflicts with -
4296 ** this lock. */-
4297 assert( hasSharedCacheTableLock(p, iTable, pKeyInfo!=0, (wrFlag?2:1)) );-
4298 assert( wrFlag==0 || !hasReadConflicts(p, iTable) );-
4299-
4300 /* Assert that the caller has opened the required transaction. */-
4301 assert( p->inTrans>TRANS_NONE );-
4302 assert( wrFlag==0 || p->inTrans==TRANS_WRITE );-
4303 assert( pBt->pPage1 && pBt->pPage1->aData );-
4304 assert( wrFlag==0 || (pBt->btsFlags & BTS_READ_ONLY)==0 );-
4305-
4306 if( wrFlag ){
wrFlagDescription
TRUEevaluated 1328120 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 586987 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)
  • ...
586987-1328120
4307 allocateTempSpace(pBt);-
4308 if( pBt->pTmpSpace==0 ) return SQLITE_NOMEM_BKPT;
executed 8 times by 1 test: return 7;
Executed by:
  • Self test (438)
pBt->pTmpSpace==0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1328112 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)
  • ...
8-1328112
4309 }
executed 1328112 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)
  • ...
1328112
4310 if( iTable==1 && btreePagecount(pBt)==0 ){
iTable==1Description
TRUEevaluated 150905 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 1764194 times by 429 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)
  • ...
btreePagecount(pBt)==0Description
TRUEevaluated 10794 times by 30 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 (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)
  • Self test (78)
  • ...
FALSEevaluated 140111 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)
  • ...
10794-1764194
4311 assert( wrFlag==0 );-
4312 iTable = 0;-
4313 }
executed 10794 times by 30 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 (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • 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)
  • Self test (77)
  • Self test (78)
  • ...
10794
4314-
4315 /* Now that no other errors can occur, finish filling in the BtCursor-
4316 ** variables and link the cursor into the BtShared list. */-
4317 pCur->pgnoRoot = (Pgno)iTable;-
4318 pCur->iPage = -1;-
4319 pCur->pKeyInfo = pKeyInfo;-
4320 pCur->pBtree = p;-
4321 pCur->pBt = pBt;-
4322 pCur->curFlags = wrFlag ? BTCF_WriteFlag : 0;
wrFlagDescription
TRUEevaluated 1328112 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 586987 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)
  • ...
586987-1328112
4323 pCur->curPagerFlags = wrFlag ? 0 : PAGER_GET_READONLY;
wrFlagDescription
TRUEevaluated 1328112 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 586987 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)
  • ...
586987-1328112
4324 /* If there are two or more cursors on the same btree, then all such-
4325 ** cursors *must* have the BTCF_Multiple flag set. */-
4326 for(pX=pBt->pCursor; pX; pX=pX->pNext){
pXDescription
TRUEevaluated 138477735 times by 398 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 1915099 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)
  • ...
1915099-138477735
4327 if( pX->pgnoRoot==(Pgno)iTable ){
pX->pgnoRoot==(Pgno)iTableDescription
TRUEevaluated 133537291 times by 32 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • ...
FALSEevaluated 4940444 times by 392 tests
Evaluated by:
  • Self test
  • 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)
  • ...
4940444-133537291
4328 pX->curFlags |= BTCF_Multiple;-
4329 pCur->curFlags |= BTCF_Multiple;-
4330 }
executed 133537291 times by 32 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • ...
133537291
4331 }
executed 138477735 times by 398 tests: end of block
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)
  • ...
138477735
4332 pCur->pNext = pBt->pCursor;-
4333 pBt->pCursor = pCur;-
4334 pCur->eState = CURSOR_INVALID;-
4335 return SQLITE_OK;
executed 1915099 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)
  • ...
1915099
4336}-
4337int sqlite3BtreeCursor(-
4338 Btree *p, /* The btree */-
4339 int iTable, /* Root page of table to open */-
4340 int wrFlag, /* 1 to write. 0 read-only */-
4341 struct KeyInfo *pKeyInfo, /* First arg to xCompare() */-
4342 BtCursor *pCur /* Write new cursor here */-
4343){-
4344 int rc;-
4345 if( iTable<1 ){
iTable<1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1915107 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-1915107
4346 rc = SQLITE_CORRUPT_BKPT;-
4347 }else{
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
4348 sqlite3BtreeEnter(p);-
4349 rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur);-
4350 sqlite3BtreeLeave(p);-
4351 }
executed 1915107 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)
  • ...
1915107
4352 return rc;
executed 1915108 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)
  • ...
1915108
4353}-
4354-
4355/*-
4356** Return the size of a BtCursor object in bytes.-
4357**-
4358** This interfaces is needed so that users of cursors can preallocate-
4359** sufficient storage to hold a cursor. The BtCursor object is opaque-
4360** to users so they cannot do the sizeof() themselves - they must call-
4361** this routine.-
4362*/-
4363int sqlite3BtreeCursorSize(void){-
4364 return ROUND8(sizeof(BtCursor));
executed 1915196 times by 435 tests: return (((sizeof(BtCursor))+7)&~7);
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)
  • ...
1915196
4365}-
4366-
4367/*-
4368** Initialize memory that will be converted into a BtCursor object.-
4369**-
4370** The simple approach here would be to memset() the entire object-
4371** to zero. But it turns out that the apPage[] and aiIdx[] arrays-
4372** do not need to be zeroed and they are large, so we can save a lot-
4373** of run-time by skipping the initialization of those elements.-
4374*/-
4375void sqlite3BtreeCursorZero(BtCursor *p){-
4376 memset(p, 0, offsetof(BtCursor, BTCURSOR_FIRST_UNINIT));-
4377}
executed 1915141 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)
  • ...
1915141
4378-
4379/*-
4380** Close a cursor. The read lock on the database file is released-
4381** when the last cursor is closed.-
4382*/-
4383int sqlite3BtreeCloseCursor(BtCursor *pCur){-
4384 Btree *pBtree = pCur->pBtree;-
4385 if( pBtree ){
pBtreeDescription
TRUEevaluated 1914605 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 3 times by 1 test
Evaluated by:
  • Self test (438)
3-1914605
4386 BtShared *pBt = pCur->pBt;-
4387 sqlite3BtreeEnter(pBtree);-
4388 assert( pBt->pCursor!=0 );-
4389 if( pBt->pCursor==pCur ){
pBt->pCursor==pCurDescription
TRUEevaluated 1291114 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 623491 times by 146 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • 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 (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (32)
  • ...
623491-1291114
4390 pBt->pCursor = pCur->pNext;-
4391 }else{
executed 1291114 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)
  • ...
1291114
4392 BtCursor *pPrev = pBt->pCursor;-
4393 do{-
4394 if( pPrev->pNext==pCur ){
pPrev->pNext==pCurDescription
TRUEevaluated 623491 times by 146 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • 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 (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (32)
  • ...
FALSEevaluated 8547821 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
623491-8547821
4395 pPrev->pNext = pCur->pNext;-
4396 break;
executed 623491 times by 146 tests: break;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • 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 (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (32)
  • ...
623491
4397 }-
4398 pPrev = pPrev->pNext;-
4399 }while( ALWAYS(pPrev) );
executed 8547821 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
(pPrev)Description
TRUEevaluated 8547821 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEnever evaluated
0-8547821
4400 }
executed 623491 times by 146 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • 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 (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (3)
  • Self test (32)
  • ...
623491
4401 btreeReleaseAllCursorPages(pCur);-
4402 unlockBtreeIfUnused(pBt);-
4403 sqlite3_free(pCur->aOverflow);-
4404 sqlite3_free(pCur->pKey);-
4405 sqlite3BtreeLeave(pBtree);-
4406 }
executed 1914605 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)
  • ...
1914605
4407 return SQLITE_OK;
executed 1914608 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)
  • ...
1914608
4408}-
4409-
4410/*-
4411** Make sure the BtCursor* given in the argument has a valid-
4412** BtCursor.info structure. If it is not already valid, call-
4413** btreeParseCell() to fill it in.-
4414**-
4415** BtCursor.info is a cache of the information in the current cell.-
4416** Using this cache reduces the number of calls to btreeParseCell().-
4417*/-
4418#ifndef NDEBUG-
4419 static int cellInfoEqual(CellInfo *a, CellInfo *b){-
4420 if( a->nKey!=b->nKey ) return 0;-
4421 if( a->pPayload!=b->pPayload ) return 0;-
4422 if( a->nPayload!=b->nPayload ) return 0;-
4423 if( a->nLocal!=b->nLocal ) return 0;-
4424 if( a->nSize!=b->nSize ) return 0;-
4425 return 1;-
4426 }-
4427 static void assertCellInfo(BtCursor *pCur){-
4428 CellInfo info;-
4429 memset(&info, 0, sizeof(info));-
4430 btreeParseCell(pCur->pPage, pCur->ix, &info);-
4431 assert( CORRUPT_DB || cellInfoEqual(&info, &pCur->info) );-
4432 }-
4433#else-
4434 #define assertCellInfo(x)-
4435#endif-
4436static SQLITE_NOINLINE void getCellInfo(BtCursor *pCur){-
4437 if( pCur->info.nSize==0 ){
pCur->info.nSize==0Description
TRUEevaluated 25531974 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 7220986 times by 377 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
7220986-25531974
4438 pCur->curFlags |= BTCF_ValidNKey;-
4439 btreeParseCell(pCur->pPage,pCur->ix,&pCur->info);-
4440 }else{
executed 25531974 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)
  • ...
25531974
4441 assertCellInfo(pCur);-
4442 }
executed 7220986 times by 377 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
7220986
4443}-
4444-
4445#ifndef NDEBUG /* The next routine used only within assert() statements */-
4446/*-
4447** Return true if the given BtCursor is valid. A valid cursor is one-
4448** that is currently pointing to a row in a (non-empty) table.-
4449** This is a verification routine is used only within assert() statements.-
4450*/-
4451int sqlite3BtreeCursorIsValid(BtCursor *pCur){-
4452 return pCur && pCur->eState==CURSOR_VALID;-
4453}-
4454#endif /* NDEBUG */-
4455int sqlite3BtreeCursorIsValidNN(BtCursor *pCur){-
4456 assert( pCur!=0 );-
4457 return pCur->eState==CURSOR_VALID;
executed 1269633 times by 4 tests: return pCur->eState==0;
Executed by:
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
1269633
4458}-
4459-
4460/*-
4461** Return the value of the integer key or "rowid" for a table btree.-
4462** This routine is only valid for a cursor that is pointing into a-
4463** ordinary table btree. If the cursor points to an index btree or-
4464** is invalid, the result of this routine is undefined.-
4465*/-
4466i64 sqlite3BtreeIntegerKey(BtCursor *pCur){-
4467 assert( cursorHoldsMutex(pCur) );-
4468 assert( pCur->eState==CURSOR_VALID );-
4469 assert( pCur->curIntKey );-
4470 getCellInfo(pCur);-
4471 return pCur->info.nKey;
executed 7320589 times by 412 tests: return pCur->info.nKey;
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)
  • ...
7320589
4472}-
4473-
4474#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC-
4475/*-
4476** Return the offset into the database file for the start of the-
4477** payload to which the cursor is pointing.-
4478*/-
4479i64 sqlite3BtreeOffset(BtCursor *pCur){-
4480 assert( cursorHoldsMutex(pCur) );-
4481 assert( pCur->eState==CURSOR_VALID );-
4482 getCellInfo(pCur);-
4483 return (i64)pCur->pBt->pageSize*((i64)pCur->pPage->pgno - 1) +-
4484 (i64)(pCur->info.pPayload - pCur->pPage->aData);-
4485}-
4486#endif /* SQLITE_ENABLE_OFFSET_SQL_FUNC */-
4487-
4488/*-
4489** Return the number of bytes of payload for the entry that pCur is-
4490** currently pointing to. For table btrees, this will be the amount-
4491** of data. For index btrees, this will be the size of the key.-
4492**-
4493** The caller must guarantee that the cursor is pointing to a non-NULL-
4494** valid entry. In other words, the calling procedure must guarantee-
4495** that the cursor has Cursor.eState==CURSOR_VALID.-
4496*/-
4497u32 sqlite3BtreePayloadSize(BtCursor *pCur){-
4498 assert( cursorHoldsMutex(pCur) );-
4499 assert( pCur->eState==CURSOR_VALID );-
4500 getCellInfo(pCur);-
4501 return pCur->info.nPayload;
executed 23376473 times by 434 tests: return pCur->info.nPayload;
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)
  • ...
23376473
4502}-
4503-
4504/*-
4505** Given the page number of an overflow page in the database (parameter-
4506** ovfl), this function finds the page number of the next page in the -
4507** linked list of overflow pages. If possible, it uses the auto-vacuum-
4508** pointer-map data instead of reading the content of page ovfl to do so. -
4509**-
4510** If an error occurs an SQLite error code is returned. Otherwise:-
4511**-
4512** The page number of the next overflow page in the linked list is -
4513** written to *pPgnoNext. If page ovfl is the last page in its linked -
4514** list, *pPgnoNext is set to zero. -
4515**-
4516** If ppPage is not NULL, and a reference to the MemPage object corresponding-
4517** to page number pOvfl was obtained, then *ppPage is set to point to that-
4518** reference. It is the responsibility of the caller to call releasePage()-
4519** on *ppPage to free the reference. In no reference was obtained (because-
4520** the pointer-map was used to obtain the value for *pPgnoNext), then-
4521** *ppPage is set to zero.-
4522*/-
4523static int getOverflowPage(-
4524 BtShared *pBt, /* The database file */-
4525 Pgno ovfl, /* Current overflow page number */-
4526 MemPage **ppPage, /* OUT: MemPage handle (may be NULL) */-
4527 Pgno *pPgnoNext /* OUT: Next overflow page number */-
4528){-
4529 Pgno next = 0;-
4530 MemPage *pPage = 0;-
4531 int rc = SQLITE_OK;-
4532-
4533 assert( sqlite3_mutex_held(pBt->mutex) );-
4534 assert(pPgnoNext);-
4535-
4536#ifndef SQLITE_OMIT_AUTOVACUUM-
4537 /* Try to find the next page in the overflow list using the-
4538 ** autovacuum pointer-map pages. Guess that the next page in -
4539 ** the overflow list is page number (ovfl+1). If that guess turns -
4540 ** out to be wrong, fall back to loading the data of page -
4541 ** number ovfl to determine the next page number.-
4542 */-
4543 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 4097 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 65035 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
4097-65035
4544 Pgno pgno;-
4545 Pgno iGuess = ovfl+1;-
4546 u8 eType;-
4547-
4548 while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){
(ptrmapPageno(...s))==(iGuess))Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4105 times by 1 test
Evaluated by:
  • Self test (438)
iGuess==((Pgno...pageSize))+1))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4097 times by 1 test
Evaluated by:
  • Self test (438)
8-4105
4549 iGuess++;-
4550 }
executed 21 times by 1 test: end of block
Executed by:
  • Self test (438)
21
4551-
4552 if( iGuess<=btreePagecount(pBt) ){
iGuess<=btreePagecount(pBt)Description
TRUEevaluated 4084 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-4084
4553 rc = ptrmapGet(pBt, iGuess, &eType, &pgno);-
4554 if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){
rc==0Description
TRUEevaluated 4084 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
eType==4Description
TRUEevaluated 4006 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 78 times by 1 test
Evaluated by:
  • Self test (438)
pgno==ovflDescription
TRUEevaluated 3947 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 59 times by 1 test
Evaluated by:
  • Self test (438)
0-4084
4555 next = iGuess;-
4556 rc = SQLITE_DONE;-
4557 }
executed 3947 times by 1 test: end of block
Executed by:
  • Self test (438)
3947
4558 }
executed 4084 times by 1 test: end of block
Executed by:
  • Self test (438)
4084
4559 }
executed 4097 times by 1 test: end of block
Executed by:
  • Self test (438)
4097
4560#endif-
4561-
4562 assert( next==0 || rc==SQLITE_DONE );-
4563 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 65185 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 3947 times by 1 test
Evaluated by:
  • Self test (438)
3947-65185
4564 rc = btreeGetPage(pBt, ovfl, &pPage, (ppPage==0) ? PAGER_GET_READONLY : 0);-
4565 assert( rc==SQLITE_OK || pPage==0 );-
4566 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 65185 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEnever evaluated
0-65185
4567 next = get4byte(pPage->aData);-
4568 }
executed 65185 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
65185
4569 }
executed 65185 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
65185
4570-
4571 *pPgnoNext = next;-
4572 if( ppPage ){
ppPageDescription
TRUEevaluated 67034 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 2098 times by 1 test
Evaluated by:
  • Self test (438)
2098-67034
4573 *ppPage = pPage;-
4574 }else{
executed 67034 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
67034
4575 releasePage(pPage);-
4576 }
executed 2098 times by 1 test: end of block
Executed by:
  • Self test (438)
2098
4577 return (rc==SQLITE_DONE ? SQLITE_OK : rc);
executed 69132 times by 2 tests: return (rc==101 ? 0 : rc);
Executed by:
  • Self test (34)
  • Self test (438)
rc==101Description
TRUEevaluated 3947 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 65185 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
3947-69132
4578}-
4579-
4580/*-
4581** Copy data from a buffer to a page, or from a page to a buffer.-
4582**-
4583** pPayload is a pointer to data stored on database page pDbPage.-
4584** If argument eOp is false, then nByte bytes of data are copied-
4585** from pPayload to the buffer pointed at by pBuf. If eOp is true,-
4586** then sqlite3PagerWrite() is called on pDbPage and nByte bytes-
4587** of data are copied from the buffer pBuf to pPayload.-
4588**-
4589** SQLITE_OK is returned on success, otherwise an error code.-
4590*/-
4591static int copyPayload(-
4592 void *pPayload, /* Pointer to page data */-
4593 void *pBuf, /* Pointer to buffer */-
4594 int nByte, /* Number of bytes to copy */-
4595 int eOp, /* 0 -> copy from page, 1 -> copy to page */-
4596 DbPage *pDbPage /* Page containing pPayload */-
4597){-
4598 if( eOp ){
eOpDescription
TRUEevaluated 1501 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3582865 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
1501-3582865
4599 /* Copy data from buffer to page (a write operation) */-
4600 int rc = sqlite3PagerWrite(pDbPage);-
4601 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 1501 times by 1 test
Evaluated by:
  • Self test (438)
0-1501
4602 return rc;
never executed: return rc;
0
4603 }-
4604 memcpy(pPayload, pBuf, nByte);-
4605 }else{
executed 1501 times by 1 test: end of block
Executed by:
  • Self test (438)
1501
4606 /* Copy data from page to buffer (a read operation) */-
4607 memcpy(pBuf, pPayload, nByte);-
4608 }
executed 3582865 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
3582865
4609 return SQLITE_OK;
executed 3584366 times by 361 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
3584366
4610}-
4611-
4612/*-
4613** This function is used to read or overwrite payload information-
4614** for the entry that the pCur cursor is pointing to. The eOp-
4615** argument is interpreted as follows:-
4616**-
4617** 0: The operation is a read. Populate the overflow cache.-
4618** 1: The operation is a write. Populate the overflow cache.-
4619**-
4620** A total of "amt" bytes are read or written beginning at "offset".-
4621** Data is read to or from the buffer pBuf.-
4622**-
4623** The content being read or written might appear on the main page-
4624** or be scattered out on multiple overflow pages.-
4625**-
4626** If the current cursor entry uses one or more overflow pages-
4627** this function may allocate space for and lazily populate-
4628** the overflow page-list cache array (BtCursor.aOverflow). -
4629** Subsequent calls use this cache to make seeking to the supplied offset -
4630** more efficient.-
4631**-
4632** Once an overflow page-list cache has been allocated, it must be-
4633** invalidated if some other cursor writes to the same table, or if-
4634** the cursor is moved to a different row. Additionally, in auto-vacuum-
4635** mode, the following events may invalidate an overflow page-list cache.-
4636**-
4637** * An incremental vacuum,-
4638** * A commit in auto_vacuum="full" mode,-
4639** * Creating a table (may require moving an overflow page).-
4640*/-
4641static int accessPayload(-
4642 BtCursor *pCur, /* Cursor pointing to entry to read from */-
4643 u32 offset, /* Begin reading this far into payload */-
4644 u32 amt, /* Read this many bytes */-
4645 unsigned char *pBuf, /* Write the bytes into this buffer */ -
4646 int eOp /* zero to read. non-zero to write. */-
4647){-
4648 unsigned char *aPayload;-
4649 int rc = SQLITE_OK;-
4650 int iIdx = 0;-
4651 MemPage *pPage = pCur->pPage; /* Btree page of current entry */-
4652 BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */-
4653#ifdef SQLITE_DIRECT_OVERFLOW_READ-
4654 unsigned char * const pBufStart = pBuf; /* Start of original out buffer */-
4655#endif-
4656-
4657 assert( pPage );-
4658 assert( eOp==0 || eOp==1 );-
4659 assert( pCur->eState==CURSOR_VALID );-
4660 assert( pCur->ix<pPage->nCell );-
4661 assert( cursorHoldsMutex(pCur) );-
4662-
4663 getCellInfo(pCur);-
4664 aPayload = pCur->info.pPayload;-
4665 assert( offset+amt <= pCur->info.nPayload );-
4666-
4667 assert( aPayload > pPage->aData );-
4668 if( (uptr)(aPayload - pPage->aData) > (pBt->usableSize - pCur->info.nLocal) ){
(uptr)(aPayloa...->info.nLocal)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1772338 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
1-1772338
4669 /* Trying to read or write past the end of the data is an error. The-
4670 ** conditional above is really:-
4671 ** &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize]-
4672 ** but is recast into its current form to avoid integer overflow problems-
4673 */-
4674 return SQLITE_CORRUPT_PAGE(pPage);
executed 1 time by 1 test: return sqlite3CorruptError(4674);
Executed by:
  • Self test (438)
1
4675 }-
4676-
4677 /* Check if data must be read/written to/from the btree page itself. */-
4678 if( offset<pCur->info.nLocal ){
offset<pCur->info.nLocalDescription
TRUEevaluated 1526760 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 245578 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
245578-1526760
4679 int a = amt;-
4680 if( a+offset>pCur->info.nLocal ){
a+offset>pCur->info.nLocalDescription
TRUEevaluated 1524360 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 2400 times by 1 test
Evaluated by:
  • Self test (438)
2400-1524360
4681 a = pCur->info.nLocal - offset;-
4682 }
executed 1524360 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
1524360
4683 rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage);-
4684 offset = 0;-
4685 pBuf += a;-
4686 amt -= a;-
4687 }else{
executed 1526760 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
1526760
4688 offset -= pCur->info.nLocal;-
4689 }
executed 245578 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
245578
4690-
4691-
4692 if( rc==SQLITE_OK && amt>0 ){
rc==0Description
TRUEevaluated 1772338 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEnever evaluated
amt>0Description
TRUEevaluated 1769938 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 2400 times by 1 test
Evaluated by:
  • Self test (438)
0-1772338
4693 const u32 ovflSize = pBt->usableSize - 4; /* Bytes content per ovfl page */-
4694 Pgno nextPage;-
4695-
4696 nextPage = get4byte(&aPayload[pCur->info.nLocal]);-
4697-
4698 /* If the BtCursor.aOverflow[] has not been allocated, allocate it now.-
4699 **-
4700 ** The aOverflow[] array is sized at one entry for each overflow page-
4701 ** in the overflow chain. The page number of the first overflow page is-
4702 ** stored in aOverflow[0], etc. A value of 0 in the aOverflow[] array-
4703 ** means "not yet known" (the cache is lazily populated).-
4704 */-
4705 if( (pCur->curFlags & BTCF_ValidOvfl)==0 ){
(pCur->curFlags & 0x04)==0Description
TRUEevaluated 1430258 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 339680 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
339680-1430258
4706 int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize;-
4707 if( pCur->aOverflow==0
pCur->aOverflow==0Description
TRUEevaluated 12303 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 1417955 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
12303-1417955
4708 || nOvfl*(int)sizeof(Pgno) > sqlite3MallocSize(pCur->aOverflow)
nOvfl*(int)siz...ur->aOverflow)Description
TRUEevaluated 64 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1417891 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
64-1417891
4709 ){-
4710 Pgno *aNew = (Pgno*)sqlite3Realloc(-
4711 pCur->aOverflow, nOvfl*2*sizeof(Pgno)-
4712 );-
4713 if( aNew==0 ){
aNew==0Description
TRUEnever evaluated
FALSEevaluated 12367 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
0-12367
4714 return SQLITE_NOMEM_BKPT;
never executed: return 7;
0
4715 }else{-
4716 pCur->aOverflow = aNew;-
4717 }
executed 12367 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
12367
4718 }-
4719 memset(pCur->aOverflow, 0, nOvfl*sizeof(Pgno));-
4720 pCur->curFlags |= BTCF_ValidOvfl;-
4721 }else{
executed 1430258 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
1430258
4722 /* If the overflow page-list cache has been allocated and the-
4723 ** entry for the first required overflow page is valid, skip-
4724 ** directly to it.-
4725 */-
4726 if( pCur->aOverflow[offset/ovflSize] ){
pCur->aOverflo...fset/ovflSize]Description
TRUEevaluated 339379 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 301 times by 1 test
Evaluated by:
  • Self test (438)
301-339379
4727 iIdx = (offset/ovflSize);-
4728 nextPage = pCur->aOverflow[iIdx];-
4729 offset = (offset%ovflSize);-
4730 }
executed 339379 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
339379
4731 }
executed 339680 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
339680
4732-
4733 assert( rc==SQLITE_OK && amt>0 );-
4734 while( nextPage ){
nextPageDescription
TRUEevaluated 2059914 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
3-2059914
4735 /* If required, populate the overflow page-list cache. */-
4736 assert( pCur->aOverflow[iIdx]==0-
4737 || pCur->aOverflow[iIdx]==nextPage-
4738 || CORRUPT_DB );-
4739 pCur->aOverflow[iIdx] = nextPage;-
4740-
4741 if( offset>=ovflSize ){
offset>=ovflSizeDescription
TRUEevaluated 2307 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2057607 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
2307-2057607
4742 /* The only reason to read this page is to obtain the page-
4743 ** number for the next page in the overflow chain. The page-
4744 ** data is not required. So first try to lookup the overflow-
4745 ** page-list cache, if any, then fall back to the getOverflowPage()-
4746 ** function.-
4747 */-
4748 assert( pCur->curFlags & BTCF_ValidOvfl );-
4749 assert( pCur->pBtree->db==pBt->db );-
4750 if( pCur->aOverflow[iIdx+1] ){
pCur->aOverflow[iIdx+1]Description
TRUEevaluated 209 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2098 times by 1 test
Evaluated by:
  • Self test (438)
209-2098
4751 nextPage = pCur->aOverflow[iIdx+1];-
4752 }else{
executed 209 times by 1 test: end of block
Executed by:
  • Self test (438)
209
4753 rc = getOverflowPage(pBt, nextPage, 0, &nextPage);-
4754 }
executed 2098 times by 1 test: end of block
Executed by:
  • Self test (438)
2098
4755 offset -= ovflSize;-
4756 }else{
executed 2307 times by 1 test: end of block
Executed by:
  • Self test (438)
2307
4757 /* Need to read this page properly. It contains some of the-
4758 ** range of data that is being read (eOp==0) or written (eOp!=0).-
4759 */-
4760#ifdef SQLITE_DIRECT_OVERFLOW_READ-
4761 sqlite3_file *fd; /* File from which to do direct overflow read */-
4762#endif-
4763 int a = amt;-
4764 if( a + offset > ovflSize ){
a + offset > ovflSizeDescription
TRUEevaluated 287673 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (65)
FALSEevaluated 1769934 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
287673-1769934
4765 a = ovflSize - offset;-
4766 }
executed 287673 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (65)
287673
4767-
4768#ifdef SQLITE_DIRECT_OVERFLOW_READ-
4769 /* If all the following are true:-
4770 **-
4771 ** 1) this is a read operation, and -
4772 ** 2) data is required from the start of this overflow page, and-
4773 ** 3) there is no open write-transaction, and-
4774 ** 4) the database is file-backed, and-
4775 ** 5) the page is not in the WAL file-
4776 ** 6) at least 4 bytes have already been read into the output buffer -
4777 **-
4778 ** then data can be read directly from the database file into the-
4779 ** output buffer, bypassing the page-cache altogether. This speeds-
4780 ** up loading large records that span many overflow pages.-
4781 */-
4782 if( eOp==0 /* (1) */-
4783 && offset==0 /* (2) */-
4784 && pBt->inTransaction==TRANS_READ /* (3) */-
4785 && (fd = sqlite3PagerFile(pBt->pPager))->pMethods /* (4) */-
4786 && 0==sqlite3PagerUseWal(pBt->pPager, nextPage) /* (5) */-
4787 && &pBuf[-4]>=pBufStart /* (6) */-
4788 ){-
4789 u8 aSave[4];-
4790 u8 *aWrite = &pBuf[-4];-
4791 assert( aWrite>=pBufStart ); /* due to (6) */-
4792 memcpy(aSave, aWrite, 4);-
4793 rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1));-
4794 nextPage = get4byte(aWrite);-
4795 memcpy(aWrite, aSave, 4);-
4796 }else-
4797#endif-
4798-
4799 {-
4800 DbPage *pDbPage;-
4801 rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage,-
4802 (eOp==0 ? PAGER_GET_READONLY : 0)-
4803 );-
4804 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 2057606 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-2057606
4805 aPayload = sqlite3PagerGetData(pDbPage);-
4806 nextPage = get4byte(aPayload);-
4807 rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage);-
4808 sqlite3PagerUnref(pDbPage);-
4809 offset = 0;-
4810 }
executed 2057606 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
2057606
4811 }-
4812 amt -= a;-
4813 if( amt==0 ) return rc;
executed 1769934 times by 361 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
amt==0Description
TRUEevaluated 1769934 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
FALSEevaluated 287673 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (65)
287673-1769934
4814 pBuf += a;-
4815 }
executed 287673 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (65)
287673
4816 if( rc ) break;
executed 1 time by 1 test: break;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 289979 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (65)
1-289979
4817 iIdx++;-
4818 }
executed 289979 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (65)
289979
4819 }
executed 4 times by 1 test: end of block
Executed by:
  • Self test (438)
4
4820-
4821 if( rc==SQLITE_OK && amt>0 ){
rc==0Description
TRUEevaluated 2403 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
amt>0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2400 times by 1 test
Evaluated by:
  • Self test (438)
1-2403
4822 /* Overflow chain ends prematurely */-
4823 return SQLITE_CORRUPT_PAGE(pPage);
executed 3 times by 1 test: return sqlite3CorruptError(4823);
Executed by:
  • Self test (438)
3
4824 }-
4825 return rc;
executed 2401 times by 1 test: return rc;
Executed by:
  • Self test (438)
2401
4826}-
4827-
4828/*-
4829** Read part of the payload for the row at which that cursor pCur is currently-
4830** pointing. "amt" bytes will be transferred into pBuf[]. The transfer-
4831** begins at "offset".-
4832**-
4833** pCur can be pointing to either a table or an index b-tree.-
4834** If pointing to a table btree, then the content section is read. If-
4835** pCur is pointing to an index b-tree then the key section is read.-
4836**-
4837** For sqlite3BtreePayload(), the caller must ensure that pCur is pointing-
4838** to a valid row in the table. For sqlite3BtreePayloadChecked(), the-
4839** cursor might be invalid or might need to be restored before being read.-
4840**-
4841** Return SQLITE_OK on success or an error code if anything goes-
4842** wrong. An error is returned if "offset+amt" is larger than-
4843** the available payload.-
4844*/-
4845int sqlite3BtreePayload(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){-
4846 assert( cursorHoldsMutex(pCur) );-
4847 assert( pCur->eState==CURSOR_VALID );-
4848 assert( pCur->iPage>=0 && pCur->pPage );-
4849 assert( pCur->ix<pCur->pPage->nCell );-
4850 return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
executed 498446 times by 9 tests: return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
Executed by:
  • Self test (101)
  • Self test (2)
  • Self test (3)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
498446
4851}-
4852-
4853/*-
4854** This variant of sqlite3BtreePayload() works even if the cursor has not-
4855** in the CURSOR_VALID state. It is only used by the sqlite3_blob_read()-
4856** interface.-
4857*/-
4858#ifndef SQLITE_OMIT_INCRBLOB-
4859static SQLITE_NOINLINE int accessPayloadChecked(-
4860 BtCursor *pCur,-
4861 u32 offset,-
4862 u32 amt,-
4863 void *pBuf-
4864){-
4865 int rc;-
4866 if ( pCur->eState==CURSOR_INVALID ){
pCur->eState==1Description
TRUEevaluated 106 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 660 times by 1 test
Evaluated by:
  • Self test (438)
106-660
4867 return SQLITE_ABORT;
executed 106 times by 1 test: return 4;
Executed by:
  • Self test (438)
106
4868 }-
4869 assert( cursorOwnsBtShared(pCur) );-
4870 rc = btreeRestoreCursorPosition(pCur);-
4871 return rc ? rc : accessPayload(pCur, offset, amt, pBuf, 0);
executed 660 times by 1 test: return rc ? rc : accessPayload(pCur, offset, amt, pBuf, 0);
Executed by:
  • Self test (438)
rcDescription
TRUEnever evaluated
FALSEevaluated 660 times by 1 test
Evaluated by:
  • Self test (438)
0-660
4872}-
4873int sqlite3BtreePayloadChecked(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){-
4874 if( pCur->eState==CURSOR_VALID ){
pCur->eState==0Description
TRUEevaluated 350 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 766 times by 1 test
Evaluated by:
  • Self test (438)
350-766
4875 assert( cursorOwnsBtShared(pCur) );-
4876 return accessPayload(pCur, offset, amt, pBuf, 0);
executed 350 times by 1 test: return accessPayload(pCur, offset, amt, pBuf, 0);
Executed by:
  • Self test (438)
350
4877 }else{-
4878 return accessPayloadChecked(pCur, offset, amt, pBuf);
executed 766 times by 1 test: return accessPayloadChecked(pCur, offset, amt, pBuf);
Executed by:
  • Self test (438)
766
4879 }-
4880}-
4881#endif /* SQLITE_OMIT_INCRBLOB */-
4882-
4883/*-
4884** Return a pointer to payload information from the entry that the -
4885** pCur cursor is pointing to. The pointer is to the beginning of-
4886** the key if index btrees (pPage->intKey==0) and is the data for-
4887** table btrees (pPage->intKey==1). The number of bytes of available-
4888** key/data is written into *pAmt. If *pAmt==0, then the value-
4889** returned will not be a valid pointer.-
4890**-
4891** This routine is an optimization. It is common for the entire key-
4892** and data to fit on the local page and for there to be no overflow-
4893** pages. When that is so, this routine can be used to access the-
4894** key and data without making a copy. If the key and/or data spills-
4895** onto overflow pages, then accessPayload() must be used to reassemble-
4896** the key/data and copy it into a preallocated buffer.-
4897**-
4898** The pointer returned by this routine looks directly into the cached-
4899** page of the database. The data might change or move the next time-
4900** any btree routine is called.-
4901*/-
4902static const void *fetchPayload(-
4903 BtCursor *pCur, /* Cursor pointing to entry to read from */-
4904 u32 *pAmt /* Write the number of available bytes here */-
4905){-
4906 int amt;-
4907 assert( pCur!=0 && pCur->iPage>=0 && pCur->pPage);-
4908 assert( pCur->eState==CURSOR_VALID );-
4909 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );-
4910 assert( cursorOwnsBtShared(pCur) );-
4911 assert( pCur->ix<pCur->pPage->nCell );-
4912 assert( pCur->info.nSize>0 );-
4913 assert( pCur->info.pPayload>pCur->pPage->aData || CORRUPT_DB );-
4914 assert( pCur->info.pPayload<pCur->pPage->aDataEnd ||CORRUPT_DB);-
4915 amt = pCur->info.nLocal;-
4916 if( amt>(int)(pCur->pPage->aDataEnd - pCur->info.pPayload) ){
amt>(int)(pCur...info.pPayload)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 23753985 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)
  • ...
2-23753985
4917 /* There is too little space on the page for the expected amount-
4918 ** of local content. Database must be corrupt. */-
4919 assert( CORRUPT_DB );-
4920 amt = MAX(0, (int)(pCur->pPage->aDataEnd - pCur->info.pPayload));
(0)>((int)(pCu...nfo.pPayload))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-2
4921 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
4922 *pAmt = (u32)amt;-
4923 return (void*)pCur->info.pPayload;
executed 23753987 times by 434 tests: return (void*)pCur->info.pPayload;
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)
  • ...
23753987
4924}-
4925-
4926-
4927/*-
4928** For the entry that cursor pCur is point to, return as-
4929** many bytes of the key or data as are available on the local-
4930** b-tree page. Write the number of available bytes into *pAmt.-
4931**-
4932** The pointer returned is ephemeral. The key/data may move-
4933** or be destroyed on the next call to any Btree routine,-
4934** including calls from other threads against the same cache.-
4935** Hence, a mutex on the BtShared should be held prior to calling-
4936** this routine.-
4937**-
4938** These routines is used to get quick access to key and data-
4939** in the common case where no overflow pages are used.-
4940*/-
4941const void *sqlite3BtreePayloadFetch(BtCursor *pCur, u32 *pAmt){-
4942 return fetchPayload(pCur, pAmt);
executed 23753987 times by 434 tests: return fetchPayload(pCur, pAmt);
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)
  • ...
23753987
4943}-
4944-
4945-
4946/*-
4947** Move the cursor down to a new child page. The newPgno argument is the-
4948** page number of the child page to move to.-
4949**-
4950** This function returns SQLITE_CORRUPT if the page-header flags field of-
4951** the new child page does not match the flags field of the parent (i.e.-
4952** if an intkey page appears to be the parent of a non-intkey page, or-
4953** vice-versa).-
4954*/-
4955static int moveToChild(BtCursor *pCur, u32 newPgno){-
4956 BtShared *pBt = pCur->pBt;-
4957-
4958 assert( cursorOwnsBtShared(pCur) );-
4959 assert( pCur->eState==CURSOR_VALID );-
4960 assert( pCur->iPage<BTCURSOR_MAX_DEPTH );-
4961 assert( pCur->iPage>=0 );-
4962 if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
pCur->iPage>=(20 -1)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13167155 times by 365 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
6-13167155
4963 return SQLITE_CORRUPT_BKPT;
executed 6 times by 1 test: return sqlite3CorruptError(4963);
Executed by:
  • Self test (438)
6
4964 }-
4965 pCur->info.nSize = 0;-
4966 pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);-
4967 pCur->aiIdx[pCur->iPage] = pCur->ix;-
4968 pCur->apPage[pCur->iPage] = pCur->pPage;-
4969 pCur->ix = 0;-
4970 pCur->iPage++;-
4971 return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags);
executed 13167155 times by 365 tests: return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags);
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • ...
13167155
4972}-
4973-
4974#ifdef SQLITE_DEBUG-
4975/*-
4976** Page pParent is an internal (non-leaf) tree page. This function -
4977** asserts that page number iChild is the left-child if the iIdx'th-
4978** cell in page pParent. Or, if iIdx is equal to the total number of-
4979** cells in pParent, that page number iChild is the right-child of-
4980** the page.-
4981*/-
4982static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){-
4983 if( CORRUPT_DB ) return; /* The conditions tested below might not be true-
4984 ** in a corrupt database */-
4985 assert( iIdx<=pParent->nCell );-
4986 if( iIdx==pParent->nCell ){-
4987 assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild );-
4988 }else{-
4989 assert( get4byte(findCell(pParent, iIdx))==iChild );-
4990 }-
4991}-
4992#else-
4993# define assertParentIndex(x,y,z) -
4994#endif-
4995-
4996/*-
4997** Move the cursor up to the parent page.-
4998**-
4999** pCur->idx is set to the cell index that contains the pointer-
5000** to the page we are coming from. If we are coming from the-
5001** right-most child page then pCur->idx is set to one more than-
5002** the largest cell index.-
5003*/-
5004static void moveToParent(BtCursor *pCur){-
5005 MemPage *pLeaf;-
5006 assert( cursorOwnsBtShared(pCur) );-
5007 assert( pCur->eState==CURSOR_VALID );-
5008 assert( pCur->iPage>0 );-
5009 assert( pCur->pPage );-
5010 assertParentIndex(-
5011 pCur->apPage[pCur->iPage-1], -
5012 pCur->aiIdx[pCur->iPage-1], -
5013 pCur->pPage->pgno-
5014 );-
5015 testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell );-
5016 pCur->info.nSize = 0;-
5017 pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);-
5018 pCur->ix = pCur->aiIdx[pCur->iPage-1];-
5019 pLeaf = pCur->pPage;-
5020 pCur->pPage = pCur->apPage[--pCur->iPage];-
5021 releasePageNotNull(pLeaf);-
5022}
executed 3598616 times by 356 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
3598616
5023-
5024/*-
5025** Move the cursor to point to the root page of its b-tree structure.-
5026**-
5027** If the table has a virtual root page, then the cursor is moved to point-
5028** to the virtual root page instead of the actual root page. A table has a-
5029** virtual root page when the actual root page contains no cells and a -
5030** single child page. This can only happen with the table rooted at page 1.-
5031**-
5032** If the b-tree structure is empty, the cursor state is set to -
5033** CURSOR_INVALID and this routine returns SQLITE_EMPTY. Otherwise,-
5034** the cursor is set to point to the first cell located on the root-
5035** (or virtual root) page and the cursor state is set to CURSOR_VALID.-
5036**-
5037** If this function returns successfully, it may be assumed that the-
5038** page-header flags indicate that the [virtual] root-page is the expected -
5039** kind of b-tree page (i.e. if when opening the cursor the caller did not-
5040** specify a KeyInfo structure the flags byte is set to 0x05 or 0x0D,-
5041** indicating a table b-tree, or if the caller did specify a KeyInfo -
5042** structure the flags byte is set to 0x02 or 0x0A, indicating an index-
5043** b-tree).-
5044*/-
5045static int moveToRoot(BtCursor *pCur){-
5046 MemPage *pRoot;-
5047 int rc = SQLITE_OK;-
5048-
5049 assert( cursorOwnsBtShared(pCur) );-
5050 assert( CURSOR_INVALID < CURSOR_REQUIRESEEK );-
5051 assert( CURSOR_VALID < CURSOR_REQUIRESEEK );-
5052 assert( CURSOR_FAULT > CURSOR_REQUIRESEEK );-
5053 assert( pCur->eState < CURSOR_REQUIRESEEK || pCur->iPage<0 );-
5054 assert( pCur->pgnoRoot>0 || pCur->iPage<0 );-
5055-
5056 if( pCur->iPage>=0 ){
pCur->iPage>=0Description
TRUEevaluated 7738196 times by 392 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
FALSEevaluated 2161482 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)
  • ...
2161482-7738196
5057 if( pCur->iPage ){
pCur->iPageDescription
TRUEevaluated 2653170 times by 348 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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 (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)
  • ...
FALSEevaluated 5085026 times by 382 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (103)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • ...
2653170-5085026
5058 releasePageNotNull(pCur->pPage);-
5059 while( --pCur->iPage ){
--pCur->iPageDescription
TRUEevaluated 3296893 times by 336 tests
Evaluated by:
  • 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)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • ...
FALSEevaluated 2653170 times by 348 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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 (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)
  • ...
2653170-3296893
5060 releasePageNotNull(pCur->apPage[pCur->iPage]);-
5061 }
executed 3296893 times by 336 tests: end of block
Executed by:
  • 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)
  • Self test (128)
  • Self test (129)
  • Self test (130)
  • ...
3296893
5062 pCur->pPage = pCur->apPage[0];-
5063 goto skip_init;
executed 2653170 times by 348 tests: goto skip_init;
Executed by:
  • Self test (10)
  • Self test (101)
  • 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 (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)
  • ...
2653170
5064 }-
5065 }else if( pCur->pgnoRoot==0 ){
executed 5085026 times by 382 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 (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)
  • Self test (132)
  • Self test (133)
  • ...
pCur->pgnoRoot==0Description
TRUEevaluated 10794 times by 30 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 (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)
  • Self test (78)
  • ...
FALSEevaluated 2150688 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)
  • ...
10794-5085026
5066 pCur->eState = CURSOR_INVALID;-
5067 return SQLITE_EMPTY;
executed 10794 times by 30 tests: return 16;
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 (34)
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • 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)
  • Self test (77)
  • Self test (78)
  • ...
10794
5068 }else{-
5069 assert( pCur->iPage==(-1) );-
5070 if( pCur->eState>=CURSOR_REQUIRESEEK ){
pCur->eState>=3Description
TRUEevaluated 30131 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2120557 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)
  • ...
30131-2120557
5071 if( pCur->eState==CURSOR_FAULT ){
pCur->eState==4Description
TRUEnever evaluated
FALSEevaluated 30131 times by 1 test
Evaluated by:
  • Self test (438)
0-30131
5072 assert( pCur->skipNext!=SQLITE_OK );-
5073 return pCur->skipNext;
never executed: return pCur->skipNext;
0
5074 }-
5075 sqlite3BtreeClearCursor(pCur);-
5076 }
executed 30131 times by 1 test: end of block
Executed by:
  • Self test (438)
30131
5077 rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->pPage,-
5078 0, pCur->curPagerFlags);-
5079 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2150663 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)
  • ...
25-2150663
5080 pCur->eState = CURSOR_INVALID;-
5081 return rc;
executed 25 times by 1 test: return rc;
Executed by:
  • Self test (438)
25
5082 }-
5083 pCur->iPage = 0;-
5084 pCur->curIntKey = pCur->pPage->intKey;-
5085 }
executed 2150663 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)
  • ...
2150663
5086 pRoot = pCur->pPage;-
5087 assert( pRoot->pgno==pCur->pgnoRoot );-
5088-
5089 /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor-
5090 ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is-
5091 ** NULL, the caller expects a table b-tree. If this is not the case,-
5092 ** return an SQLITE_CORRUPT error. -
5093 **-
5094 ** Earlier versions of SQLite assumed that this test could not fail-
5095 ** if the root page was already loaded when this function was called (i.e.-
5096 ** if pCur->iPage>=0). But this is not so if the database is corrupted -
5097 ** in such a way that page pRoot is linked into a second b-tree table -
5098 ** (or the freelist). */-
5099 assert( pRoot->intKey==1 || pRoot->intKey==0 );-
5100 if( pRoot->isInit==0 || (pCur->pKeyInfo==0)!=pRoot->intKey ){
pRoot->isInit==0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7235688 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)
  • ...
(pCur->pKeyInf...=pRoot->intKeyDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7235687 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)
  • ...
1-7235688
5101 return SQLITE_CORRUPT_PAGE(pCur->pPage);
executed 2 times by 1 test: return sqlite3CorruptError(5101);
Executed by:
  • Self test (438)
2
5102 }-
5103-
5104skip_init:
code before this statement executed 7235687 times by 434 tests: skip_init:
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)
  • ...
7235687
5105 pCur->ix = 0;-
5106 pCur->info.nSize = 0;-
5107 pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidNKey|BTCF_ValidOvfl);-
5108-
5109 pRoot = pCur->pPage;-
5110 if( pRoot->nCell>0 ){
pRoot->nCell>0Description
TRUEevaluated 6716790 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 3172067 times by 38 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • ...
3172067-6716790
5111 pCur->eState = CURSOR_VALID;-
5112 }else if( !pRoot->leaf ){
executed 6716790 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)
  • ...
!pRoot->leafDescription
TRUEevaluated 18153 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 3153914 times by 38 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • ...
18153-6716790
5113 Pgno subpage;-
5114 if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(5114);
pRoot->pgno!=1Description
TRUEnever evaluated
FALSEevaluated 18153 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
0-18153
5115 subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]);-
5116 pCur->eState = CURSOR_VALID;-
5117 rc = moveToChild(pCur, subpage);-
5118 }else{
executed 18153 times by 4 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
18153
5119 pCur->eState = CURSOR_INVALID;-
5120 rc = SQLITE_EMPTY;-
5121 }
executed 3153914 times by 38 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • ...
3153914
5122 return rc;
executed 9888857 times by 434 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)
  • ...
9888857
5123}-
5124-
5125/*-
5126** Move the cursor down to the left-most leaf entry beneath the-
5127** entry to which it is currently pointing.-
5128**-
5129** The left-most leaf is the one with the smallest key - the first-
5130** in ascending order.-
5131*/-
5132static int moveToLeftmost(BtCursor *pCur){-
5133 Pgno pgno;-
5134 int rc = SQLITE_OK;-
5135 MemPage *pPage;-
5136-
5137 assert( cursorOwnsBtShared(pCur) );-
5138 assert( pCur->eState==CURSOR_VALID );-
5139 while( rc==SQLITE_OK && !(pPage = pCur->pPage)->leaf ){
rc==0Description
TRUEevaluated 6243383 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 8 times by 1 test
Evaluated by:
  • Self test (438)
!(pPage = pCur->pPage)->leafDescription
TRUEevaluated 2541006 times by 355 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 3702377 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)
  • ...
8-6243383
5140 assert( pCur->ix<pPage->nCell );-
5141 pgno = get4byte(findCell(pPage, pCur->ix));-
5142 rc = moveToChild(pCur, pgno);-
5143 }
executed 2541006 times by 355 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
2541006
5144 return rc;
executed 3702385 times by 434 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)
  • ...
3702385
5145}-
5146-
5147/*-
5148** Move the cursor down to the right-most leaf entry beneath the-
5149** page to which it is currently pointing. Notice the difference-
5150** between moveToLeftmost() and moveToRightmost(). moveToLeftmost()-
5151** finds the left-most entry beneath the *entry* whereas moveToRightmost()-
5152** finds the right-most entry beneath the *page*.-
5153**-
5154** The right-most entry is the one with the largest key - the last-
5155** key in ascending order.-
5156*/-
5157static int moveToRightmost(BtCursor *pCur){-
5158 Pgno pgno;-
5159 int rc = SQLITE_OK;-
5160 MemPage *pPage = 0;-
5161-
5162 assert( cursorOwnsBtShared(pCur) );-
5163 assert( pCur->eState==CURSOR_VALID );-
5164 while( !(pPage = pCur->pPage)->leaf ){
!(pPage = pCur->pPage)->leafDescription
TRUEevaluated 2576438 times by 207 tests
Evaluated 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 (254)
  • Self test (255)
  • Self test (256)
  • Self test (257)
  • Self test (258)
  • Self test (259)
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • ...
FALSEevaluated 1287767 times by 352 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 (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • ...
1287767-2576438
5165 pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);-
5166 pCur->ix = pPage->nCell;-
5167 rc = moveToChild(pCur, pgno);-
5168 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 2576438 times by 207 tests
Evaluated 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 (254)
  • Self test (255)
  • Self test (256)
  • Self test (257)
  • Self test (258)
  • Self test (259)
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • ...
0-2576438
5169 }
executed 2576438 times by 207 tests: end of block
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 (254)
  • Self test (255)
  • Self test (256)
  • Self test (257)
  • Self test (258)
  • Self test (259)
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • ...
2576438
5170 pCur->ix = pPage->nCell-1;-
5171 assert( pCur->info.nSize==0 );-
5172 assert( (pCur->curFlags & BTCF_ValidNKey)==0 );-
5173 return SQLITE_OK;
executed 1287767 times by 352 tests: return 0;
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 (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • ...
1287767
5174}-
5175-
5176/* Move the cursor to the first entry in the table. Return SQLITE_OK-
5177** on success. Set *pRes to 0 if the cursor actually points to something-
5178** or set *pRes to 1 if the table is empty.-
5179*/-
5180int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){-
5181 int rc;-
5182-
5183 assert( cursorOwnsBtShared(pCur) );-
5184 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );-
5185 rc = moveToRoot(pCur);-
5186 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1425079 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 44823 times by 42 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • 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 (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • Self test (48)
  • Self test (53)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • ...
44823-1425079
5187 assert( pCur->pPage->nCell>0 );-
5188 *pRes = 0;-
5189 rc = moveToLeftmost(pCur);-
5190 }else if( rc==SQLITE_EMPTY ){
executed 1425079 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)
  • ...
rc==16Description
TRUEevaluated 44805 times by 42 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • 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 (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • Self test (48)
  • Self test (53)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • ...
FALSEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
18-1425079
5191 assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );-
5192 *pRes = 1;-
5193 rc = SQLITE_OK;-
5194 }
executed 44805 times by 42 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • 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 (43)
  • Self test (438)
  • Self test (45)
  • Self test (47)
  • Self test (48)
  • Self test (53)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • ...
44805
5195 return rc;
executed 1469902 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)
  • ...
1469902
5196}-
5197-
5198/*-
5199** This function is a no-op if cursor pCur does not point to a valid row.-
5200** Otherwise, if pCur is valid, configure it so that the next call to-
5201** sqlite3BtreeNext() is a no-op.-
5202*/-
5203#ifndef SQLITE_OMIT_WINDOWFUNC-
5204void sqlite3BtreeSkipNext(BtCursor *pCur){-
5205 /* We believe that the cursor must always be in the valid state when-
5206 ** this routine is called, but the proof is difficult, so we add an-
5207 ** ALWaYS() test just in case we are wrong. */-
5208 if( ALWAYS(pCur->eState==CURSOR_VALID) ){
(pCur->eState==0)Description
TRUEevaluated 33588 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-33588
5209 pCur->eState = CURSOR_SKIPNEXT;-
5210 pCur->skipNext = 1;-
5211 }
executed 33588 times by 1 test: end of block
Executed by:
  • Self test (438)
33588
5212}
executed 33588 times by 1 test: end of block
Executed by:
  • Self test (438)
33588
5213#endif /* SQLITE_OMIT_WINDOWFUNC */-
5214-
5215/* Move the cursor to the last entry in the table. Return SQLITE_OK-
5216** on success. Set *pRes to 0 if the cursor actually points to something-
5217** or set *pRes to 1 if the table is empty.-
5218*/-
5219int sqlite3BtreeLast(BtCursor *pCur, int *pRes){-
5220 int rc;-
5221 -
5222 assert( cursorOwnsBtShared(pCur) );-
5223 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );-
5224-
5225 /* If the cursor already points to the last entry, this is a no-op. */-
5226 if( CURSOR_VALID==pCur->eState && (pCur->curFlags & BTCF_AtLast)!=0 ){
0==pCur->eStateDescription
TRUEevaluated 3065196 times by 7 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
FALSEevaluated 2223526 times by 64 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)
  • ...
(pCur->curFlags & 0x08)!=0Description
TRUEevaluated 2951445 times by 7 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
FALSEevaluated 113751 times by 1 test
Evaluated by:
  • Self test (438)
113751-3065196
5227#ifdef SQLITE_DEBUG-
5228 /* This block serves to assert() that the cursor really does point -
5229 ** to the last entry in the b-tree. */-
5230 int ii;-
5231 for(ii=0; ii<pCur->iPage; ii++){-
5232 assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );-
5233 }-
5234 assert( pCur->ix==pCur->pPage->nCell-1 );-
5235 assert( pCur->pPage->leaf );-
5236#endif-
5237 return SQLITE_OK;
executed 2951445 times by 7 tests: return 0;
Executed by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
2951445
5238 }-
5239-
5240 rc = moveToRoot(pCur);-
5241 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1275737 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
FALSEevaluated 1061540 times by 37 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • ...
1061540-1275737
5242 assert( pCur->eState==CURSOR_VALID );-
5243 *pRes = 0;-
5244 rc = moveToRightmost(pCur);-
5245 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1275737 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
FALSEnever evaluated
0-1275737
5246 pCur->curFlags |= BTCF_AtLast;-
5247 }else{
executed 1275737 times by 58 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 (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 (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
1275737
5248 pCur->curFlags &= ~BTCF_AtLast;-
5249 }
never executed: end of block
0
5250 }else if( rc==SQLITE_EMPTY ){
rc==16Description
TRUEevaluated 1061535 times by 37 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • ...
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-1061535
5251 assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );-
5252 *pRes = 1;-
5253 rc = SQLITE_OK;-
5254 }
executed 1061535 times by 37 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • ...
1061535
5255 return rc;
executed 2337277 times by 64 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 (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)
  • ...
2337277
5256}-
5257-
5258/* Move the cursor so that it points to an entry near the key -
5259** specified by pIdxKey or intKey. Return a success code.-
5260**-
5261** For INTKEY tables, the intKey parameter is used. pIdxKey -
5262** must be NULL. For index tables, pIdxKey is used and intKey-
5263** is ignored.-
5264**-
5265** If an exact match is not found, then the cursor is always-
5266** left pointing at a leaf page which would hold the entry if it-
5267** were present. The cursor might point to an entry that comes-
5268** before or after the key.-
5269**-
5270** An integer is written into *pRes which is the result of-
5271** comparing the key with the entry to which the cursor is -
5272** pointing. The meaning of the integer written into-
5273** *pRes is as follows:-
5274**-
5275** *pRes<0 The cursor is left pointing at an entry that-
5276** is smaller than intKey/pIdxKey or if the table is empty-
5277** and the cursor is therefore left point to nothing.-
5278**-
5279** *pRes==0 The cursor is left pointing at an entry that-
5280** exactly matches intKey/pIdxKey.-
5281**-
5282** *pRes>0 The cursor is left pointing at an entry that-
5283** is larger than intKey/pIdxKey.-
5284**-
5285** For index tables, the pIdxKey->eqSeen field is set to 1 if there-
5286** exists an entry in the table that exactly matches pIdxKey. -
5287*/-
5288int sqlite3BtreeMovetoUnpacked(-
5289 BtCursor *pCur, /* The cursor to be moved */-
5290 UnpackedRecord *pIdxKey, /* Unpacked index key */-
5291 i64 intKey, /* The table key */-
5292 int biasRight, /* If true, bias the search to the high end */-
5293 int *pRes /* Write search results here */-
5294){-
5295 int rc;-
5296 RecordCompare xRecordCompare;-
5297-
5298 assert( cursorOwnsBtShared(pCur) );-
5299 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );-
5300 assert( pRes );-
5301 assert( (pIdxKey==0)==(pCur->pKeyInfo==0) );-
5302 assert( pCur->eState!=CURSOR_VALID || (pIdxKey==0)==(pCur->curIntKey!=0) );-
5303-
5304 /* If the cursor is already positioned at the point we are trying-
5305 ** to move to, then just return without doing any work */-
5306 if( pIdxKey==0
pIdxKey==0Description
TRUEevaluated 5972233 times by 65 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 2613691 times by 379 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)
  • ...
2613691-5972233
5307 && pCur->eState==CURSOR_VALID && (pCur->curFlags & BTCF_ValidNKey)!=0
pCur->eState==0Description
TRUEevaluated 4602579 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
FALSEevaluated 1369654 times by 36 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • ...
(pCur->curFlags & 0x02)!=0Description
TRUEevaluated 4348502 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
FALSEevaluated 254077 times by 1 test
Evaluated by:
  • Self test (438)
254077-4602579
5308 ){-
5309 if( pCur->info.nKey==intKey ){
pCur->info.nKey==intKeyDescription
TRUEevaluated 85399 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4263103 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
85399-4263103
5310 *pRes = 0;-
5311 return SQLITE_OK;
executed 85399 times by 1 test: return 0;
Executed by:
  • Self test (438)
85399
5312 }-
5313 if( pCur->info.nKey<intKey ){
pCur->info.nKey<intKeyDescription
TRUEevaluated 4182136 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
FALSEevaluated 80967 times by 1 test
Evaluated by:
  • Self test (438)
80967-4182136
5314 if( (pCur->curFlags & BTCF_AtLast)!=0 ){
(pCur->curFlags & 0x08)!=0Description
TRUEevaluated 3836720 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
FALSEevaluated 345416 times by 1 test
Evaluated by:
  • Self test (438)
345416-3836720
5315 *pRes = -1;-
5316 return SQLITE_OK;
executed 3836720 times by 58 tests: return 0;
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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
3836720
5317 }-
5318 /* If the requested key is one more than the previous key, then-
5319 ** try to get there using sqlite3BtreeNext() rather than a full-
5320 ** binary search. This is an optimization only. The correct answer-
5321 ** is still obtained without this case, only a little more slowely */-
5322 if( pCur->info.nKey+1==intKey && !pCur->skipNext ){
pCur->info.nKey+1==intKeyDescription
TRUEevaluated 280929 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 64487 times by 1 test
Evaluated by:
  • Self test (438)
!pCur->skipNextDescription
TRUEevaluated 280929 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-280929
5323 *pRes = 0;-
5324 rc = sqlite3BtreeNext(pCur, 0);-
5325 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 280737 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 192 times by 1 test
Evaluated by:
  • Self test (438)
192-280737
5326 getCellInfo(pCur);-
5327 if( pCur->info.nKey==intKey ){
pCur->info.nKey==intKeyDescription
TRUEevaluated 275874 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4863 times by 1 test
Evaluated by:
  • Self test (438)
4863-275874
5328 return SQLITE_OK;
executed 275874 times by 1 test: return 0;
Executed by:
  • Self test (438)
275874
5329 }-
5330 }else if( rc==SQLITE_DONE ){
executed 4863 times by 1 test: end of block
Executed by:
  • Self test (438)
rc==101Description
TRUEevaluated 192 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-4863
5331 rc = SQLITE_OK;-
5332 }else{
executed 192 times by 1 test: end of block
Executed by:
  • Self test (438)
192
5333 return rc;
never executed: return rc;
0
5334 }-
5335 }-
5336 }
executed 69542 times by 1 test: end of block
Executed by:
  • Self test (438)
69542
5337 }
executed 150509 times by 1 test: end of block
Executed by:
  • Self test (438)
150509
5338-
5339 if( pIdxKey ){
pIdxKeyDescription
TRUEevaluated 2613691 times by 379 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)
  • ...
FALSEevaluated 1774240 times by 36 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • ...
1774240-2613691
5340 xRecordCompare = sqlite3VdbeFindCompare(pIdxKey);-
5341 pIdxKey->errCode = 0;-
5342 assert( pIdxKey->default_rc==1 -
5343 || pIdxKey->default_rc==0 -
5344 || pIdxKey->default_rc==-1-
5345 );-
5346 }else{
executed 2613691 times by 379 tests: end of block
Executed 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)
  • ...
2613691
5347 xRecordCompare = 0; /* All keys are integers */-
5348 }
executed 1774240 times by 36 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • ...
1774240
5349-
5350 rc = moveToRoot(pCur);-
5351 if( rc ){
rcDescription
TRUEevaluated 1082185 times by 34 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • ...
FALSEevaluated 3305746 times by 395 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)
  • ...
1082185-3305746
5352 if( rc==SQLITE_EMPTY ){
rc==16Description
TRUEevaluated 1082181 times by 34 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • ...
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-1082181
5353 assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );-
5354 *pRes = -1;-
5355 return SQLITE_OK;
executed 1082181 times by 34 tests: return 0;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • ...
1082181
5356 }-
5357 return rc;
executed 4 times by 1 test: return rc;
Executed by:
  • Self test (438)
4
5358 }-
5359 assert( pCur->pPage );-
5360 assert( pCur->pPage->isInit );-
5361 assert( pCur->eState==CURSOR_VALID );-
5362 assert( pCur->pPage->nCell > 0 );-
5363 assert( pCur->iPage==0 || pCur->apPage[0]->intKey==pCur->curIntKey );-
5364 assert( pCur->curIntKey || pIdxKey );-
5365 for(;;){-
5366 int lwr, upr, idx, c;-
5367 Pgno chldPg;-
5368 MemPage *pPage = pCur->pPage;-
5369 u8 *pCell; /* Pointer to current cell in pPage */-
5370-
5371 /* pPage->nCell must be greater than zero. If this is the root-page-
5372 ** the cursor would have been INVALID above and this for(;;) loop-
5373 ** not run. If this is not the root-page, then the moveToChild() routine-
5374 ** would have already detected db corruption. Similarly, pPage must-
5375 ** be the right kind (index or table) of b-tree page. Otherwise-
5376 ** a moveToChild() or moveToRoot() call would have detected corruption. */-
5377 assert( pPage->nCell>0 );-
5378 assert( pPage->intKey==(pIdxKey==0) );-
5379 lwr = 0;-
5380 upr = pPage->nCell-1;-
5381 assert( biasRight==0 || biasRight==1 );-
5382 idx = upr>>(1-biasRight); /* idx = biasRight ? upr : (lwr+upr)/2; */-
5383 pCur->ix = (u16)idx;-
5384 if( xRecordCompare==0 ){
xRecordCompare==0Description
TRUEevaluated 1731964 times by 29 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
FALSEevaluated 8273420 times by 369 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
1731964-8273420
5385 for(;;){-
5386 i64 nCellKey;-
5387 pCell = findCellPastPtr(pPage, idx);-
5388 if( pPage->intKeyLeaf ){
pPage->intKeyLeafDescription
TRUEevaluated 3155884 times by 29 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
FALSEevaluated 4139582 times by 1 test
Evaluated by:
  • Self test (438)
3155884-4139582
5389 while( 0x80 <= *(pCell++) ){
0x80 <= *(pCell++)Description
TRUEevaluated 257755 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3155884 times by 29 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
257755-3155884
5390 if( pCell>=pPage->aDataEnd ){
pCell>=pPage->aDataEndDescription
TRUEnever evaluated
FALSEevaluated 257755 times by 1 test
Evaluated by:
  • Self test (438)
0-257755
5391 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(5391);
0
5392 }-
5393 }
executed 257755 times by 1 test: end of block
Executed by:
  • Self test (438)
257755
5394 }
executed 3155884 times by 29 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
3155884
5395 getVarint(pCell, (u64*)&nCellKey);-
5396 if( nCellKey<intKey ){
nCellKey<intKeyDescription
TRUEevaluated 4617226 times by 24 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • 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 2678240 times by 29 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
2678240-4617226
5397 lwr = idx+1;-
5398 if( lwr>upr ){ c = -1; break; }
executed 854488 times by 5 tests: break;
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
lwr>uprDescription
TRUEevaluated 854488 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 3762738 times by 24 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
854488-3762738
5399 }else if( nCellKey>intKey ){
executed 3762738 times by 24 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
nCellKey>intKeyDescription
TRUEevaluated 2439036 times by 2 tests
Evaluated by:
  • Self test (40)
  • Self test (438)
FALSEevaluated 239204 times by 28 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
239204-3762738
5400 upr = idx-1;-
5401 if( lwr>upr ){ c = +1; break; }
executed 638272 times by 2 tests: break;
Executed by:
  • Self test (40)
  • Self test (438)
lwr>uprDescription
TRUEevaluated 638272 times by 2 tests
Evaluated by:
  • Self test (40)
  • Self test (438)
FALSEevaluated 1800764 times by 1 test
Evaluated by:
  • Self test (438)
638272-1800764
5402 }else{
executed 1800764 times by 1 test: end of block
Executed by:
  • Self test (438)
1800764
5403 assert( nCellKey==intKey );-
5404 pCur->ix = (u16)idx;-
5405 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 16155 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 223049 times by 28 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
16155-223049
5406 lwr = idx;-
5407 goto moveto_next_layer;
executed 16155 times by 1 test: goto moveto_next_layer;
Executed by:
  • Self test (438)
16155
5408 }else{-
5409 pCur->curFlags |= BTCF_ValidNKey;-
5410 pCur->info.nKey = nCellKey;-
5411 pCur->info.nSize = 0;-
5412 *pRes = 0;-
5413 return SQLITE_OK;
executed 223049 times by 28 tests: return 0;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
223049
5414 }-
5415 }-
5416 assert( lwr+upr>=0 );-
5417 idx = (lwr+upr)>>1; /* idx = (lwr+upr)/2; */-
5418 }
executed 5563502 times by 24 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (40)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • Self test (97)
  • Self test (98)
  • Self test (99)
5563502
5419 }else{
executed 1492760 times by 5 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
1492760
5420 for(;;){-
5421 int nCell; /* Size of the pCell cell in bytes */-
5422 pCell = findCellPastPtr(pPage, idx);-
5423-
5424 /* The maximum supported page-size is 65536 bytes. This means that-
5425 ** the maximum number of record bytes stored on an index B-Tree-
5426 ** page is less than 16384 bytes and may be stored as a 2-byte-
5427 ** varint. This information is used to attempt to avoid parsing -
5428 ** the entire cell by checking for the cases where the record is -
5429 ** stored entirely within the b-tree page by inspecting the first -
5430 ** 2 bytes of the cell.-
5431 */-
5432 nCell = pCell[0];-
5433 if( nCell<=pPage->max1bytePayload ){
nCell<=pPage->max1bytePayloadDescription
TRUEevaluated 26304959 times by 6 tests
Evaluated by:
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (86)
  • Self test (88)
FALSEevaluated 4554738 times by 364 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
4554738-26304959
5434 /* This branch runs if the record-size field of the cell is a-
5435 ** single byte varint and the record fits entirely on the main-
5436 ** b-tree page. */-
5437 testcase( pCell+nCell+1==pPage->aDataEnd );-
5438 c = xRecordCompare(nCell, (void*)&pCell[1], pIdxKey);-
5439 }else if( !(pCell[1] & 0x80)
executed 26304959 times by 6 tests: end of block
Executed by:
  • Self test (43)
  • Self test (438)
  • Self test (45)
  • Self test (53)
  • Self test (86)
  • Self test (88)
!(pCell[1] & 0x80)Description
TRUEevaluated 4554335 times by 364 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
FALSEevaluated 403 times by 1 test
Evaluated by:
  • Self test (438)
403-26304959
5440 && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal
(nCell = ((nCe...Page->maxLocalDescription
TRUEevaluated 3282196 times by 6 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
FALSEevaluated 1272139 times by 360 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
1272139-3282196
5441 ){-
5442 /* The record-size field is a 2 byte varint and the record -
5443 ** fits entirely on the main b-tree page. */-
5444 testcase( pCell+nCell+2==pPage->aDataEnd );-
5445 c = xRecordCompare(nCell, (void*)&pCell[2], pIdxKey);-
5446 }else{
executed 3282196 times by 6 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
3282196
5447 /* The record flows over onto one or more overflow pages. In-
5448 ** this case the whole cell needs to be parsed, a buffer allocated-
5449 ** and accessPayload() used to retrieve the record into the-
5450 ** buffer before VdbeRecordCompare() can be called. -
5451 **-
5452 ** If the record is corrupt, the xRecordCompare routine may read-
5453 ** up to two varints past the end of the buffer. An extra 18 -
5454 ** bytes of padding is allocated at the end of the buffer in-
5455 ** case this happens. */-
5456 void *pCellKey;-
5457 u8 * const pCellBody = pCell - pPage->childPtrSize;-
5458 pPage->xParseCell(pPage, pCellBody, &pCur->info);-
5459 nCell = (int)pCur->info.nKey;-
5460 testcase( nCell<0 ); /* True if key size is 2^32 or more */-
5461 testcase( nCell==0 ); /* Invalid key size: 0x80 0x80 0x00 */-
5462 testcase( nCell==1 ); /* Invalid key size: 0x80 0x80 0x01 */-
5463 testcase( nCell==2 ); /* Minimum legal index key size */-
5464 if( nCell<2 ){
nCell<2Description
TRUEnever evaluated
FALSEevaluated 1272542 times by 360 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
0-1272542
5465 rc = SQLITE_CORRUPT_PAGE(pPage);-
5466 goto moveto_finish;
never executed: goto moveto_finish;
0
5467 }-
5468 pCellKey = sqlite3Malloc( nCell+18 );-
5469 if( pCellKey==0 ){
pCellKey==0Description
TRUEnever evaluated
FALSEevaluated 1272542 times by 360 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
0-1272542
5470 rc = SQLITE_NOMEM_BKPT;-
5471 goto moveto_finish;
never executed: goto moveto_finish;
0
5472 }-
5473 pCur->ix = (u16)idx;-
5474 rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0);-
5475 pCur->curFlags &= ~BTCF_ValidOvfl;-
5476 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 1272542 times by 360 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
0-1272542
5477 sqlite3_free(pCellKey);-
5478 goto moveto_finish;
never executed: goto moveto_finish;
0
5479 }-
5480 c = xRecordCompare(nCell, pCellKey, pIdxKey);-
5481 sqlite3_free(pCellKey);-
5482 }
executed 1272542 times by 360 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
1272542
5483 assert( -
5484 (pIdxKey->errCode!=SQLITE_CORRUPT || c==0)-
5485 && (pIdxKey->errCode!=SQLITE_NOMEM || pCur->pBtree->db->mallocFailed)-
5486 );-
5487 if( c<0 ){
c<0Description
TRUEevaluated 20737527 times by 369 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
FALSEevaluated 10122170 times by 367 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
10122170-20737527
5488 lwr = idx+1;-
5489 }else if( c>0 ){
executed 20737527 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
c>0Description
TRUEevaluated 9261221 times by 367 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
FALSEevaluated 860949 times by 358 tests
Evaluated by:
  • Self test (10)
  • 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 (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)
  • ...
860949-20737527
5490 upr = idx-1;-
5491 }else{
executed 9261221 times by 367 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
9261221
5492 assert( c==0 );-
5493 *pRes = 0;-
5494 rc = SQLITE_OK;-
5495 pCur->ix = (u16)idx;-
5496 if( pIdxKey->errCode ) rc = SQLITE_CORRUPT_BKPT;
executed 6 times by 1 test: rc = sqlite3CorruptError(5496);
Executed by:
  • Self test (438)
pIdxKey->errCodeDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 860943 times by 358 tests
Evaluated by:
  • Self test (10)
  • 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 (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)
  • ...
6-860943
5497 goto moveto_finish;
executed 860949 times by 358 tests: goto moveto_finish;
Executed by:
  • Self test (10)
  • 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 (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)
  • ...
860949
5498 }-
5499 if( lwr>upr ) break;
executed 7412471 times by 359 tests: break;
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
lwr>uprDescription
TRUEevaluated 7412471 times by 359 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
FALSEevaluated 22586277 times by 369 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
7412471-22586277
5500 assert( lwr+upr>=0 );-
5501 idx = (lwr+upr)>>1; /* idx = (lwr+upr)/2 */-
5502 }
executed 22586277 times by 369 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
22586277
5503 }
executed 7412471 times by 359 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
7412471
5504 assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) );-
5505 assert( pPage->isInit );-
5506 if( pPage->leaf ){
pPage->leafDescription
TRUEevaluated 2221619 times by 362 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
FALSEevaluated 6683612 times by 355 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
2221619-6683612
5507 assert( pCur->ix<pCur->pPage->nCell );-
5508 pCur->ix = (u16)idx;-
5509 *pRes = c;-
5510 rc = SQLITE_OK;-
5511 goto moveto_finish;
executed 2221619 times by 362 tests: goto moveto_finish;
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
2221619
5512 }-
5513moveto_next_layer:
code before this statement executed 6683612 times by 355 tests: moveto_next_layer:
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
6683612
5514 if( lwr>=pPage->nCell ){
lwr>=pPage->nCellDescription
TRUEevaluated 2428998 times by 346 tests
Evaluated by:
  • Self test (10)
  • 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 (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)
  • ...
FALSEevaluated 4270769 times by 355 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
2428998-4270769
5515 chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]);-
5516 }else{
executed 2428998 times by 346 tests: end of block
Executed by:
  • Self test (10)
  • 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 (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)
  • ...
2428998
5517 chldPg = get4byte(findCell(pPage, lwr));-
5518 }
executed 4270769 times by 355 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
4270769
5519 pCur->ix = (u16)lwr;-
5520 rc = moveToChild(pCur, chldPg);-
5521 if( rc ) break;
executed 129 times by 1 test: break;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 129 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6699638 times by 355 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
129-6699638
5522 }
executed 6699638 times by 355 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
6699638
5523moveto_finish:
code before this statement executed 129 times by 1 test: moveto_finish:
Executed by:
  • Self test (438)
129
5524 pCur->info.nSize = 0;-
5525 assert( (pCur->curFlags & BTCF_ValidOvfl)==0 );-
5526 return rc;
executed 3082697 times by 373 tests: return rc;
Executed by:
  • Self test (10)
  • 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)
  • Self test (127)
  • ...
3082697
5527}-
5528-
5529-
5530/*-
5531** Return TRUE if the cursor is not pointing at an entry of the table.-
5532**-
5533** TRUE will be returned after a call to sqlite3BtreeNext() moves-
5534** past the last entry in the table or sqlite3BtreePrev() moves past-
5535** the first entry. TRUE is also returned if the table is empty.-
5536*/-
5537int sqlite3BtreeEof(BtCursor *pCur){-
5538 /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries-
5539 ** have been deleted? This API will need to change to return an error code-
5540 ** as well as the boolean result value.-
5541 */-
5542 return (CURSOR_VALID!=pCur->eState);
executed 381 times by 1 test: return (0!=pCur->eState);
Executed by:
  • Self test (438)
381
5543}-
5544-
5545/*-
5546** Return an estimate for the number of rows in the table that pCur is-
5547** pointing to. Return a negative number if no estimate is currently -
5548** available.-
5549*/-
5550i64 sqlite3BtreeRowCountEst(BtCursor *pCur){-
5551 i64 n;-
5552 u8 i;-
5553-
5554 assert( cursorOwnsBtShared(pCur) );-
5555 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );-
5556-
5557 /* Currently this interface is only called by the OP_IfSmaller-
5558 ** opcode, and it that case the cursor will always be valid and-
5559 ** will always point to a leaf node. */-
5560 if( NEVER(pCur->eState!=CURSOR_VALID) ) return -1;
never executed: return -1;
(pCur->eState!=0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
0-8
5561 if( NEVER(pCur->pPage->leaf==0) ) return -1;
never executed: return -1;
(pCur->pPage->leaf==0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
0-8
5562-
5563 n = pCur->pPage->nCell;-
5564 for(i=0; i<pCur->iPage; i++){
i<pCur->iPageDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
2-8
5565 n *= pCur->apPage[i]->nCell;-
5566 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
5567 return n;
executed 8 times by 1 test: return n;
Executed by:
  • Self test (438)
8
5568}-
5569-
5570/*-
5571** Advance the cursor to the next entry in the database. -
5572** Return value:-
5573**-
5574** SQLITE_OK success-
5575** SQLITE_DONE cursor is already pointing at the last element-
5576** otherwise some kind of error occurred-
5577**-
5578** The main entry point is sqlite3BtreeNext(). That routine is optimized-
5579** for the common case of merely incrementing the cell counter BtCursor.aiIdx-
5580** to the next cell on the current page. The (slower) btreeNext() helper-
5581** routine is called when it is necessary to move to a different page or-
5582** to restore the cursor.-
5583**-
5584** If bit 0x01 of the F argument in sqlite3BtreeNext(C,F) is 1, then the-
5585** cursor corresponds to an SQL index and this routine could have been-
5586** skipped if the SQL index had been a unique index. The F argument-
5587** is a hint to the implement. SQLite btree implementation does not use-
5588** this hint, but COMDB2 does.-
5589*/-
5590static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){-
5591 int rc;-
5592 int idx;-
5593 MemPage *pPage;-
5594-
5595 assert( cursorOwnsBtShared(pCur) );-
5596 assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );-
5597 if( pCur->eState!=CURSOR_VALID ){
pCur->eState!=0Description
TRUEevaluated 527064 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 2567164 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)
  • ...
527064-2567164
5598 assert( (pCur->curFlags & BTCF_ValidOvfl)==0 );-
5599 rc = restoreCursorPosition(pCur);
pCur->eState>=3Description
TRUEevaluated 137180 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 389884 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
137180-389884
5600 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 527061 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
3-527061
5601 return rc;
executed 3 times by 1 test: return rc;
Executed by:
  • Self test (438)
3
5602 }-
5603 if( CURSOR_INVALID==pCur->eState ){
1==pCur->eStateDescription
TRUEevaluated 57657 times by 3 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
FALSEevaluated 469404 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
57657-469404
5604 return SQLITE_DONE;
executed 57657 times by 3 tests: return 101;
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
57657
5605 }-
5606 if( pCur->skipNext ){
pCur->skipNextDescription
TRUEevaluated 468813 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 591 times by 1 test
Evaluated by:
  • Self test (438)
591-468813
5607 assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_SKIPNEXT );-
5608 pCur->eState = CURSOR_VALID;-
5609 if( pCur->skipNext>0 ){
pCur->skipNext>0Description
TRUEevaluated 366329 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
FALSEevaluated 102484 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
102484-366329
5610 pCur->skipNext = 0;-
5611 return SQLITE_OK;
executed 366329 times by 4 tests: return 0;
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
366329
5612 }-
5613 pCur->skipNext = 0;-
5614 }
executed 102484 times by 7 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
102484
5615 }
executed 103075 times by 7 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
103075
5616-
5617 pPage = pCur->pPage;-
5618 idx = ++pCur->ix;-
5619 if( !pPage->isInit ){
!pPage->isInitDescription
TRUEnever evaluated
FALSEevaluated 2670239 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)
  • ...
0-2670239
5620 /* The only known way for this to happen is for there to be a-
5621 ** recursive SQL function that does a DELETE operation as part of a-
5622 ** SELECT which deletes content out from under an active cursor-
5623 ** in a corrupt database file where the table being DELETE-ed from-
5624 ** has pages in common with the table being queried. See TH3-
5625 ** module cov1/btree78.test testcase 220 (2018-06-08) for an-
5626 ** example. */-
5627 return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(5627);
0
5628 }-
5629-
5630 /* If the database file is corrupt, it is possible for the value of idx -
5631 ** to be invalid here. This can only occur if a second cursor modifies-
5632 ** the page while cursor pCur is holding a reference to it. Which can-
5633 ** only happen if the database is corrupt in such a way as to link the-
5634 ** page into more than one b-tree structure. */-
5635 testcase( idx>pPage->nCell );-
5636-
5637 if( idx>=pPage->nCell ){
idx>=pPage->nCellDescription
TRUEevaluated 2637847 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 32392 times by 1 test
Evaluated by:
  • Self test (438)
32392-2637847
5638 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 84257 times by 108 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 (353)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • Self test (357)
  • Self test (358)
  • Self test (359)
  • Self test (360)
  • Self test (361)
  • Self test (362)
  • Self test (363)
  • Self test (364)
  • Self test (365)
  • Self test (366)
  • ...
FALSEevaluated 2553590 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)
  • ...
84257-2553590
5639 rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));-
5640 if( rc ) return rc;
executed 6 times by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 84251 times by 108 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 (353)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • Self test (357)
  • Self test (358)
  • Self test (359)
  • Self test (360)
  • Self test (361)
  • Self test (362)
  • Self test (363)
  • Self test (364)
  • Self test (365)
  • Self test (366)
  • ...
6-84251
5641 return moveToLeftmost(pCur);
executed 84251 times by 108 tests: return moveToLeftmost(pCur);
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 (353)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • Self test (357)
  • Self test (358)
  • Self test (359)
  • Self test (360)
  • Self test (361)
  • Self test (362)
  • Self test (363)
  • Self test (364)
  • Self test (365)
  • Self test (366)
  • ...
84251
5642 }-
5643 do{-
5644 if( pCur->iPage==0 ){
pCur->iPage==0Description
TRUEevaluated 274458 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 2361672 times by 355 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
274458-2361672
5645 pCur->eState = CURSOR_INVALID;-
5646 return SQLITE_DONE;
executed 274458 times by 434 tests: return 101;
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)
  • ...
274458
5647 }-
5648 moveToParent(pCur);-
5649 pPage = pCur->pPage;-
5650 }while( pCur->ix>=pPage->nCell );
executed 2361672 times by 355 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
pCur->ix>=pPage->nCellDescription
TRUEevaluated 82540 times by 108 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 (353)
  • Self test (354)
  • Self test (355)
  • Self test (356)
  • Self test (357)
  • Self test (358)
  • Self test (359)
  • Self test (360)
  • Self test (361)
  • Self test (362)
  • Self test (363)
  • Self test (364)
  • Self test (365)
  • Self test (366)
  • ...
FALSEevaluated 2279132 times by 355 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
82540-2361672
5651 if( pPage->intKey ){
pPage->intKeyDescription
TRUEevaluated 2206477 times by 355 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
FALSEevaluated 72655 times by 1 test
Evaluated by:
  • Self test (438)
72655-2206477
5652 return sqlite3BtreeNext(pCur, 0);
executed 2206477 times by 355 tests: return sqlite3BtreeNext(pCur, 0);
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
2206477
5653 }else{-
5654 return SQLITE_OK;
executed 72655 times by 1 test: return 0;
Executed by:
  • Self test (438)
72655
5655 }-
5656 }-
5657 if( pPage->leaf ){
pPage->leafDescription
TRUEevaluated 32392 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-32392
5658 return SQLITE_OK;
executed 32392 times by 1 test: return 0;
Executed by:
  • Self test (438)
32392
5659 }else{-
5660 return moveToLeftmost(pCur);
never executed: return moveToLeftmost(pCur);
0
5661 }-
5662}-
5663int sqlite3BtreeNext(BtCursor *pCur, int flags){-
5664 MemPage *pPage;-
5665 UNUSED_PARAMETER( flags ); /* Used in COMDB2 but not native SQLite */-
5666 assert( cursorOwnsBtShared(pCur) );-
5667 assert( flags==0 || flags==1 );-
5668 assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );-
5669 pCur->info.nSize = 0;-
5670 pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);-
5671 if( pCur->eState!=CURSOR_VALID ) return btreeNext(pCur);
executed 527064 times by 7 tests: return btreeNext(pCur);
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
pCur->eState!=0Description
TRUEevaluated 527064 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 22556236 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)
  • ...
527064-22556236
5672 pPage = pCur->pPage;-
5673 if( (++pCur->ix)>=pPage->nCell ){
(++pCur->ix)>=pPage->nCellDescription
TRUEevaluated 2567164 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 19989072 times by 415 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)
  • ...
2567164-19989072
5674 pCur->ix--;-
5675 return btreeNext(pCur);
executed 2567164 times by 434 tests: return btreeNext(pCur);
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)
  • ...
2567164
5676 }-
5677 if( pPage->leaf ){
pPage->leafDescription
TRUEevaluated 17796017 times by 414 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 2193055 times by 353 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
2193055-17796017
5678 return SQLITE_OK;
executed 17796017 times by 414 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)
  • ...
17796017
5679 }else{-
5680 return moveToLeftmost(pCur);
executed 2193055 times by 353 tests: return moveToLeftmost(pCur);
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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 (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • Self test (124)
  • Self test (125)
  • Self test (126)
  • ...
2193055
5681 }-
5682}-
5683-
5684/*-
5685** Step the cursor to the back to the previous entry in the database.-
5686** Return values:-
5687**-
5688** SQLITE_OK success-
5689** SQLITE_DONE the cursor is already on the first element of the table-
5690** otherwise some kind of error occurred-
5691**-
5692** The main entry point is sqlite3BtreePrevious(). That routine is optimized-
5693** for the common case of merely decrementing the cell counter BtCursor.aiIdx-
5694** to the previous cell on the current page. The (slower) btreePrevious()-
5695** helper routine is called when it is necessary to move to a different page-
5696** or to restore the cursor.-
5697**-
5698** If bit 0x01 of the F argument to sqlite3BtreePrevious(C,F) is 1, then-
5699** the cursor corresponds to an SQL index and this routine could have been-
5700** skipped if the SQL index had been a unique index. The F argument is a-
5701** hint to the implement. The native SQLite btree implementation does not-
5702** use this hint, but COMDB2 does.-
5703*/-
5704static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){-
5705 int rc;-
5706 MemPage *pPage;-
5707-
5708 assert( cursorOwnsBtShared(pCur) );-
5709 assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );-
5710 assert( (pCur->curFlags & (BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey))==0 );-
5711 assert( pCur->info.nSize==0 );-
5712 if( pCur->eState!=CURSOR_VALID ){
pCur->eState!=0Description
TRUEevaluated 68 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 14798 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
68-14798
5713 rc = restoreCursorPosition(pCur);
pCur->eState>=3Description
TRUEevaluated 63 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-63
5714 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 68 times by 1 test
Evaluated by:
  • Self test (438)
0-68
5715 return rc;
never executed: return rc;
0
5716 }-
5717 if( CURSOR_INVALID==pCur->eState ){
1==pCur->eStateDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 65 times by 1 test
Evaluated by:
  • Self test (438)
3-65
5718 return SQLITE_DONE;
executed 3 times by 1 test: return 101;
Executed by:
  • Self test (438)
3
5719 }-
5720 if( pCur->skipNext ){
pCur->skipNextDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 51 times by 1 test
Evaluated by:
  • Self test (438)
14-51
5721 assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_SKIPNEXT );-
5722 pCur->eState = CURSOR_VALID;-
5723 if( pCur->skipNext<0 ){
pCur->skipNext<0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
6-8
5724 pCur->skipNext = 0;-
5725 return SQLITE_OK;
executed 6 times by 1 test: return 0;
Executed by:
  • Self test (438)
6
5726 }-
5727 pCur->skipNext = 0;-
5728 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test (438)
8
5729 }
executed 59 times by 1 test: end of block
Executed by:
  • Self test (438)
59
5730-
5731 pPage = pCur->pPage;-
5732 assert( pPage->isInit );-
5733 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 12050 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
FALSEevaluated 2807 times by 1 test
Evaluated by:
  • Self test (438)
2807-12050
5734 int idx = pCur->ix;-
5735 rc = moveToChild(pCur, get4byte(findCell(pPage, idx)));-
5736 if( rc ) return rc;
executed 20 times by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12030 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
20-12030
5737 rc = moveToRightmost(pCur);-
5738 }else{
executed 12030 times by 302 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
12030
5739 while( pCur->ix==0 ){
pCur->ix==0Description
TRUEevaluated 3406 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 854 times by 1 test
Evaluated by:
  • Self test (438)
854-3406
5740 if( pCur->iPage==0 ){
pCur->iPage==0Description
TRUEevaluated 1953 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1453 times by 1 test
Evaluated by:
  • Self test (438)
1453-1953
5741 pCur->eState = CURSOR_INVALID;-
5742 return SQLITE_DONE;
executed 1953 times by 1 test: return 101;
Executed by:
  • Self test (438)
1953
5743 }-
5744 moveToParent(pCur);-
5745 }
executed 1453 times by 1 test: end of block
Executed by:
  • Self test (438)
1453
5746 assert( pCur->info.nSize==0 );-
5747 assert( (pCur->curFlags & (BTCF_ValidOvfl))==0 );-
5748-
5749 pCur->ix--;-
5750 pPage = pCur->pPage;-
5751 if( pPage->intKey && !pPage->leaf ){
pPage->intKeyDescription
TRUEevaluated 752 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 102 times by 1 test
Evaluated by:
  • Self test (438)
!pPage->leafDescription
TRUEevaluated 740 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
12-752
5752 rc = sqlite3BtreePrevious(pCur, 0);-
5753 }else{
executed 740 times by 1 test: end of block
Executed by:
  • Self test (438)
740
5754 rc = SQLITE_OK;-
5755 }
executed 114 times by 1 test: end of block
Executed by:
  • Self test (438)
114
5756 }-
5757 return rc;
executed 12884 times by 302 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
12884
5758}-
5759int sqlite3BtreePrevious(BtCursor *pCur, int flags){-
5760 assert( cursorOwnsBtShared(pCur) );-
5761 assert( flags==0 || flags==1 );-
5762 assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );-
5763 UNUSED_PARAMETER( flags ); /* Used in COMDB2 but not native SQLite */-
5764 pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey);-
5765 pCur->info.nSize = 0;-
5766 if( pCur->eState!=CURSOR_VALID
pCur->eState!=0Description
TRUEevaluated 68 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 122809 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
68-122809
5767 || pCur->ix==0
pCur->ix==0Description
TRUEevaluated 5685 times by 196 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (254)
  • Self test (255)
  • Self test (256)
  • Self test (257)
  • Self test (258)
  • Self test (259)
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • Self test (267)
  • Self test (268)
  • Self test (269)
  • Self test (270)
  • Self test (271)
  • Self test (272)
  • ...
FALSEevaluated 117124 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
5685-117124
5768 || pCur->pPage->leaf==0
pCur->pPage->leaf==0Description
TRUEevaluated 9113 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
FALSEevaluated 108011 times by 1 test
Evaluated by:
  • Self test (438)
9113-108011
5769 ){-
5770 return btreePrevious(pCur);
executed 14866 times by 302 tests: return btreePrevious(pCur);
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
14866
5771 }-
5772 pCur->ix--;-
5773 return SQLITE_OK;
executed 108011 times by 1 test: return 0;
Executed by:
  • Self test (438)
108011
5774}-
5775-
5776/*-
5777** Allocate a new page from the database file.-
5778**-
5779** The new page is marked as dirty. (In other words, sqlite3PagerWrite()-
5780** has already been called on the new page.) The new page has also-
5781** been referenced and the calling routine is responsible for calling-
5782** sqlite3PagerUnref() on the new page when it is done.-
5783**-
5784** SQLITE_OK is returned on success. Any other return value indicates-
5785** an error. *ppPage is set to NULL in the event of an error.-
5786**-
5787** If the "nearby" parameter is not 0, then an effort is made to -
5788** locate a page close to the page number "nearby". This can be used in an-
5789** attempt to keep related pages close to each other in the database file,-
5790** which in turn can make database access faster.-
5791**-
5792** If the eMode parameter is BTALLOC_EXACT and the nearby page exists-
5793** anywhere on the free-list, then it is guaranteed to be returned. If-
5794** eMode is BTALLOC_LT then the page returned will be less than or equal-
5795** to nearby if any such page exists. If eMode is BTALLOC_ANY then there-
5796** are no restrictions on which page is returned.-
5797*/-
5798static int allocateBtreePage(-
5799 BtShared *pBt, /* The btree */-
5800 MemPage **ppPage, /* Store pointer to the allocated page here */-
5801 Pgno *pPgno, /* Store the page number here */-
5802 Pgno nearby, /* Search for a page near this one */-
5803 u8 eMode /* BTALLOC_EXACT, BTALLOC_LT, or BTALLOC_ANY */-
5804){-
5805 MemPage *pPage1;-
5806 int rc;-
5807 u32 n; /* Number of pages on the freelist */-
5808 u32 k; /* Number of leaves on the trunk of the freelist */-
5809 MemPage *pTrunk = 0;-
5810 MemPage *pPrevTrunk = 0;-
5811 Pgno mxPage; /* Total size of the database file */-
5812-
5813 assert( sqlite3_mutex_held(pBt->mutex) );-
5814 assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) );-
5815 pPage1 = pBt->pPage1;-
5816 mxPage = btreePagecount(pBt);-
5817 /* EVIDENCE-OF: R-05119-02637 The 4-byte big-endian integer at offset 36-
5818 ** stores stores the total number of pages on the freelist. */-
5819 n = get4byte(&pPage1->aData[36]);-
5820 testcase( n==mxPage-1 );-
5821 if( n>=mxPage ){
n>=mxPageDescription
TRUEnever evaluated
FALSEevaluated 973883 times by 376 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)
  • ...
0-973883
5822 return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(5822);
0
5823 }-
5824 if( n>0 ){
n>0Description
TRUEevaluated 170860 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEevaluated 803023 times by 304 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)
  • ...
170860-803023
5825 /* There are pages on the freelist. Reuse one of those pages. */-
5826 Pgno iTrunk;-
5827 u8 searchList = 0; /* If the free-list must be searched for 'nearby' */-
5828 u32 nSearch = 0; /* Count of the number of search attempts */-
5829 -
5830 /* If eMode==BTALLOC_EXACT and a query of the pointer-map-
5831 ** shows that the page 'nearby' is somewhere on the free-list, then-
5832 ** the entire-list will be searched for that page.-
5833 */-
5834#ifndef SQLITE_OMIT_AUTOVACUUM-
5835 if( eMode==BTALLOC_EXACT ){
eMode==1Description
TRUEevaluated 7397 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 163463 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
7397-163463
5836 if( nearby<=mxPage ){
nearby<=mxPageDescription
TRUEevaluated 7397 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-7397
5837 u8 eType;-
5838 assert( nearby>0 );-
5839 assert( pBt->autoVacuum );-
5840 rc = ptrmapGet(pBt, nearby, &eType, 0);-
5841 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 7397 times by 1 test
Evaluated by:
  • Self test (438)
0-7397
5842 if( eType==PTRMAP_FREEPAGE ){
eType==2Description
TRUEevaluated 7394 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
3-7394
5843 searchList = 1;-
5844 }
executed 7394 times by 1 test: end of block
Executed by:
  • Self test (438)
7394
5845 }
executed 7397 times by 1 test: end of block
Executed by:
  • Self test (438)
7397
5846 }else if( eMode==BTALLOC_LE ){
executed 7397 times by 1 test: end of block
Executed by:
  • Self test (438)
eMode==2Description
TRUEevaluated 927 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 162536 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
927-162536
5847 searchList = 1;-
5848 }
executed 927 times by 1 test: end of block
Executed by:
  • Self test (438)
927
5849#endif-
5850-
5851 /* Decrement the free-list count by 1. Set iTrunk to the index of the-
5852 ** first free-list trunk page. iPrevTrunk is initially 1.-
5853 */-
5854 rc = sqlite3PagerWrite(pPage1->pDbPage);-
5855 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 170860 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
0-170860
5856 put4byte(&pPage1->aData[36], n-1);-
5857-
5858 /* The code within this loop is run only once if the 'searchList' variable-
5859 ** is not true. Otherwise, it runs once for each trunk-page on the-
5860 ** free-list until the page 'nearby' is located (eMode==BTALLOC_EXACT)-
5861 ** or until a page less than 'nearby' is located (eMode==BTALLOC_LT)-
5862 */-
5863 do {-
5864 pPrevTrunk = pTrunk;-
5865 if( pPrevTrunk ){
pPrevTrunkDescription
TRUEevaluated 23799 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 170860 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
23799-170860
5866 /* EVIDENCE-OF: R-01506-11053 The first integer on a freelist trunk page-
5867 ** is the page number of the next freelist trunk page in the list or-
5868 ** zero if this is the last freelist trunk page. */-
5869 iTrunk = get4byte(&pPrevTrunk->aData[0]);-
5870 }else{
executed 23799 times by 1 test: end of block
Executed by:
  • Self test (438)
23799
5871 /* EVIDENCE-OF: R-59841-13798 The 4-byte big-endian integer at offset 32-
5872 ** stores the page number of the first page of the freelist, or zero if-
5873 ** the freelist is empty. */-
5874 iTrunk = get4byte(&pPage1->aData[32]);-
5875 }
executed 170860 times by 339 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
170860
5876 testcase( iTrunk==mxPage );-
5877 if( iTrunk>mxPage || nSearch++ > n ){
iTrunk>mxPageDescription
TRUEnever evaluated
FALSEevaluated 194659 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
nSearch++ > nDescription
TRUEnever evaluated
FALSEevaluated 194659 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
0-194659
5878 rc = SQLITE_CORRUPT_PGNO(pPrevTrunk ? pPrevTrunk->pgno : 1);-
5879 }else{
never executed: end of block
0
5880 rc = btreeGetUnusedPage(pBt, iTrunk, &pTrunk, 0);-
5881 }
executed 194659 times by 339 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
194659
5882 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 194659 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
0-194659
5883 pTrunk = 0;-
5884 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5885 }-
5886 assert( pTrunk!=0 );-
5887 assert( pTrunk->aData!=0 );-
5888 /* EVIDENCE-OF: R-13523-04394 The second integer on a freelist trunk page-
5889 ** is the number of leaf page pointers to follow. */-
5890 k = get4byte(&pTrunk->aData[4]);-
5891 if( k==0 && !searchList ){
k==0Description
TRUEevaluated 25438 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEevaluated 169221 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)
!searchListDescription
TRUEevaluated 21123 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEevaluated 4315 times by 1 test
Evaluated by:
  • Self test (438)
4315-169221
5892 /* The trunk has no leaves and the list is not being searched. -
5893 ** So extract the trunk page itself and use it as the newly -
5894 ** allocated page */-
5895 assert( pPrevTrunk==0 );-
5896 rc = sqlite3PagerWrite(pTrunk->pDbPage);-
5897 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 21123 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
0-21123
5898 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5899 }-
5900 *pPgno = iTrunk;-
5901 memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);-
5902 *ppPage = pTrunk;-
5903 pTrunk = 0;-
5904 TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));-
5905 }else if( k>(u32)(pBt->usableSize/4 - 2) ){
executed 21123 times by 339 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
k>(u32)(pBt->usableSize/4 - 2)Description
TRUEnever evaluated
FALSEevaluated 173536 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)
0-173536
5906 /* Value of k is out of range. Database corruption */-
5907 rc = SQLITE_CORRUPT_PGNO(iTrunk);-
5908 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5909#ifndef SQLITE_OMIT_AUTOVACUUM-
5910 }else if( searchList
searchListDescription
TRUEevaluated 32120 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 141416 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)
32120-141416
5911 && (nearby==iTrunk || (iTrunk<nearby && eMode==BTALLOC_LE))
nearby==iTrunkDescription
TRUEevaluated 517 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 31603 times by 1 test
Evaluated by:
  • Self test (438)
iTrunk<nearbyDescription
TRUEevaluated 29996 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1607 times by 1 test
Evaluated by:
  • Self test (438)
eMode==2Description
TRUEevaluated 501 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 29495 times by 1 test
Evaluated by:
  • Self test (438)
501-31603
5912 ){-
5913 /* The list is being searched and this trunk page is the page-
5914 ** to allocate, regardless of whether it has leaves.-
5915 */-
5916 *pPgno = iTrunk;-
5917 *ppPage = pTrunk;-
5918 searchList = 0;-
5919 rc = sqlite3PagerWrite(pTrunk->pDbPage);-
5920 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 1018 times by 1 test
Evaluated by:
  • Self test (438)
0-1018
5921 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5922 }-
5923 if( k==0 ){
k==0Description
TRUEevaluated 136 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 882 times by 1 test
Evaluated by:
  • Self test (438)
136-882
5924 if( !pPrevTrunk ){
!pPrevTrunkDescription
TRUEevaluated 104 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
32-104
5925 memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);-
5926 }else{
executed 104 times by 1 test: end of block
Executed by:
  • Self test (438)
104
5927 rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);-
5928 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 32 times by 1 test
Evaluated by:
  • Self test (438)
0-32
5929 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5930 }-
5931 memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4);-
5932 }
executed 32 times by 1 test: end of block
Executed by:
  • Self test (438)
32
5933 }else{-
5934 /* The trunk page is required by the caller but it contains -
5935 ** pointers to free-list leaves. The first leaf becomes a trunk-
5936 ** page in this case.-
5937 */-
5938 MemPage *pNewTrunk;-
5939 Pgno iNewTrunk = get4byte(&pTrunk->aData[8]);-
5940 if( iNewTrunk>mxPage ){
iNewTrunk>mxPageDescription
TRUEnever evaluated
FALSEevaluated 882 times by 1 test
Evaluated by:
  • Self test (438)
0-882
5941 rc = SQLITE_CORRUPT_PGNO(iTrunk);-
5942 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5943 }-
5944 testcase( iNewTrunk==mxPage );-
5945 rc = btreeGetUnusedPage(pBt, iNewTrunk, &pNewTrunk, 0);-
5946 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 882 times by 1 test
Evaluated by:
  • Self test (438)
0-882
5947 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5948 }-
5949 rc = sqlite3PagerWrite(pNewTrunk->pDbPage);-
5950 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 882 times by 1 test
Evaluated by:
  • Self test (438)
0-882
5951 releasePage(pNewTrunk);-
5952 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5953 }-
5954 memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4);-
5955 put4byte(&pNewTrunk->aData[4], k-1);-
5956 memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4);-
5957 releasePage(pNewTrunk);-
5958 if( !pPrevTrunk ){
!pPrevTrunkDescription
TRUEevaluated 620 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 262 times by 1 test
Evaluated by:
  • Self test (438)
262-620
5959 assert( sqlite3PagerIswriteable(pPage1->pDbPage) );-
5960 put4byte(&pPage1->aData[32], iNewTrunk);-
5961 }else{
executed 620 times by 1 test: end of block
Executed by:
  • Self test (438)
620
5962 rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);-
5963 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 262 times by 1 test
Evaluated by:
  • Self test (438)
0-262
5964 goto end_allocate_page;
never executed: goto end_allocate_page;
0
5965 }-
5966 put4byte(&pPrevTrunk->aData[0], iNewTrunk);-
5967 }
executed 262 times by 1 test: end of block
Executed by:
  • Self test (438)
262
5968 }-
5969 pTrunk = 0;-
5970 TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));-
5971#endif-
5972 }else if( k>0 ){
executed 1018 times by 1 test: end of block
Executed by:
  • Self test (438)
k>0Description
TRUEevaluated 168339 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 4179 times by 1 test
Evaluated by:
  • Self test (438)
1018-168339
5973 /* Extract a leaf from the trunk */-
5974 u32 closest;-
5975 Pgno iPage;-
5976 unsigned char *aData = pTrunk->aData;-
5977 if( nearby>0 ){
nearby>0Description
TRUEevaluated 86213 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 82126 times by 10 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 (6)
  • Self test (8)
82126-86213
5978 u32 i;-
5979 closest = 0;-
5980 if( eMode==BTALLOC_LE ){
eMode==2Description
TRUEevaluated 570 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 85643 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
570-85643
5981 for(i=0; i<k; i++){
i<kDescription
TRUEevaluated 17282 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 172 times by 1 test
Evaluated by:
  • Self test (438)
172-17282
5982 iPage = get4byte(&aData[8+i*4]);-
5983 if( iPage<=nearby ){
iPage<=nearbyDescription
TRUEevaluated 398 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 16884 times by 1 test
Evaluated by:
  • Self test (438)
398-16884
5984 closest = i;-
5985 break;
executed 398 times by 1 test: break;
Executed by:
  • Self test (438)
398
5986 }-
5987 }
executed 16884 times by 1 test: end of block
Executed by:
  • Self test (438)
16884
5988 }else{
executed 570 times by 1 test: end of block
Executed by:
  • Self test (438)
570
5989 int dist;-
5990 dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);-
5991 for(i=1; i<k; i++){
i<kDescription
TRUEevaluated 5341825 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 85643 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
85643-5341825
5992 int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);-
5993 if( d2<dist ){
d2<distDescription
TRUEevaluated 2299678 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 3042147 times by 1 test
Evaluated by:
  • Self test (438)
2299678-3042147
5994 closest = i;-
5995 dist = d2;-
5996 }
executed 2299678 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
2299678
5997 }
executed 5341825 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
5341825
5998 }
executed 85643 times by 2 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
85643
5999 }else{-
6000 closest = 0;-
6001 }
executed 82126 times by 10 tests: end of block
Executed 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 (6)
  • Self test (8)
82126
6002-
6003 iPage = get4byte(&aData[8+closest*4]);-
6004 testcase( iPage==mxPage );-
6005 if( iPage>mxPage ){
iPage>mxPageDescription
TRUEnever evaluated
FALSEevaluated 168339 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)
0-168339
6006 rc = SQLITE_CORRUPT_PGNO(iTrunk);-
6007 goto end_allocate_page;
never executed: goto end_allocate_page;
0
6008 }-
6009 testcase( iPage==mxPage );-
6010 if( !searchList
!searchListDescription
TRUEevaluated 141416 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 26923 times by 1 test
Evaluated by:
  • Self test (438)
26923-141416
6011 || (iPage==nearby || (iPage<nearby && eMode==BTALLOC_LE))
iPage==nearbyDescription
TRUEevaluated 6908 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 20015 times by 1 test
Evaluated by:
  • Self test (438)
iPage<nearbyDescription
TRUEevaluated 19222 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 793 times by 1 test
Evaluated by:
  • Self test (438)
eMode==2Description
TRUEevaluated 395 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 18827 times by 1 test
Evaluated by:
  • Self test (438)
395-20015
6012 ){-
6013 int noContent;-
6014 *pPgno = iPage;-
6015 TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"-
6016 ": %d more free pages\n",-
6017 *pPgno, closest+1, k, pTrunk->pgno, n-1));-
6018 rc = sqlite3PagerWrite(pTrunk->pDbPage);-
6019 if( rc ) goto end_allocate_page;
never executed: goto end_allocate_page;
rcDescription
TRUEnever evaluated
FALSEevaluated 148719 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)
0-148719
6020 if( closest<k-1 ){
closest<k-1Description
TRUEevaluated 119899 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 28820 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)
28820-119899
6021 memcpy(&aData[8+closest*4], &aData[4+k*4], 4);-
6022 }
executed 119899 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
119899
6023 put4byte(&aData[4], k-1);-
6024 noContent = !btreeGetHasContent(pBt, *pPgno)? PAGER_GET_NOCONTENT : 0;
!btreeGetHasCo...t(pBt, *pPgno)Description
TRUEevaluated 30486 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 118233 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)
30486-118233
6025 rc = btreeGetUnusedPage(pBt, *pPgno, ppPage, noContent);-
6026 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 148715 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 4 times by 1 test
Evaluated by:
  • Self test (438)
4-148715
6027 rc = sqlite3PagerWrite((*ppPage)->pDbPage);-
6028 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 148715 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)
0-148715
6029 releasePage(*ppPage);-
6030 *ppPage = 0;-
6031 }
never executed: end of block
0
6032 }
executed 148715 times by 11 tests: end of block
Executed 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)
148715
6033 searchList = 0;-
6034 }
executed 148719 times by 11 tests: end of block
Executed 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)
148719
6035 }
executed 168339 times by 11 tests: end of block
Executed 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)
168339
6036 releasePage(pPrevTrunk);-
6037 pPrevTrunk = 0;-
6038 }while( searchList );
executed 194659 times by 339 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
searchListDescription
TRUEevaluated 23799 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 170860 times by 339 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
23799-194659
6039 }else{
executed 170860 times by 339 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
170860
6040 /* There are no pages on the freelist, so append a new page to the-
6041 ** database image.-
6042 **-
6043 ** Normally, new pages allocated by this block can be requested from the-
6044 ** pager layer with the 'no-content' flag set. This prevents the pager-
6045 ** from trying to read the pages content from disk. However, if the-
6046 ** current transaction has already run one or more incremental-vacuum-
6047 ** steps, then the page we are about to allocate may contain content-
6048 ** that is required in the event of a rollback. In this case, do-
6049 ** not set the no-content flag. This causes the pager to load and journal-
6050 ** the current page content before overwriting it.-
6051 **-
6052 ** Note that the pager will not actually attempt to load or journal -
6053 ** content for any page that really does lie past the end of the database-
6054 ** file on disk. So the effects of disabling the no-content optimization-
6055 ** here are confined to those pages that lie between the end of the-
6056 ** database image and the end of the database file.-
6057 */-
6058 int bNoContent = (0==IfNotOmitAV(pBt->bDoTruncate))? PAGER_GET_NOCONTENT:0;
(0==(pBt->bDoTruncate))Description
TRUEevaluated 801547 times by 304 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 1476 times by 1 test
Evaluated by:
  • Self test (438)
1476-801547
6059-
6060 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);-
6061 if( rc ) return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 803022 times by 304 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)
  • ...
1-803022
6062 pBt->nPage++;-
6063 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
executed 1211 times by 15 tests: pBt->nPage++;
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
pBt->nPage==((...pageSize))+1))Description
TRUEevaluated 1211 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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 801811 times by 304 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)
  • ...
1211-801811
6064-
6065#ifndef SQLITE_OMIT_AUTOVACUUM-
6066 if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){
pBt->autoVacuumDescription
TRUEevaluated 34134 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 768888 times by 303 tests
Evaluated by:
  • 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)
  • Self test (197)
  • ...
(ptrmapPageno(...=(pBt->nPage))Description
TRUEevaluated 283 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 33851 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
283-768888
6067 /* If *pPgno refers to a pointer-map page, allocate two new pages-
6068 ** at the end of the file instead of one. The first allocated page-
6069 ** becomes a new pointer-map page, the second is used by the caller.-
6070 */-
6071 MemPage *pPg = 0;-
6072 TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));-
6073 assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );-
6074 rc = btreeGetUnusedPage(pBt, pBt->nPage, &pPg, bNoContent);-
6075 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 283 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEnever evaluated
0-283
6076 rc = sqlite3PagerWrite(pPg->pDbPage);-
6077 releasePage(pPg);-
6078 }
executed 283 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
283
6079 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 283 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-283
6080 pBt->nPage++;-
6081 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; }
never executed: end of block
pBt->nPage==((...pageSize))+1))Description
TRUEnever evaluated
FALSEevaluated 283 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-283
6082 }
executed 283 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
283
6083#endif-
6084 put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);-
6085 *pPgno = pBt->nPage;-
6086-
6087 assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );-
6088 rc = btreeGetUnusedPage(pBt, *pPgno, ppPage, bNoContent);-
6089 if( rc ) return rc;
executed 7 times by 2 tests: return rc;
Executed by:
  • Self test (39)
  • Self test (438)
rcDescription
TRUEevaluated 7 times by 2 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
FALSEevaluated 803015 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)
  • ...
7-803015
6090 rc = sqlite3PagerWrite((*ppPage)->pDbPage);-
6091 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 803015 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)
  • ...
0-803015
6092 releasePage(*ppPage);-
6093 *ppPage = 0;-
6094 }
never executed: end of block
0
6095 TRACE(("ALLOCATE: %d from end of file\n", *pPgno));-
6096 }
executed 803015 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)
  • ...
803015
6097-
6098 assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );-
6099-
6100end_allocate_page:
code before this statement executed 973875 times by 375 tests: end_allocate_page:
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 (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)
  • ...
973875
6101 releasePage(pTrunk);-
6102 releasePage(pPrevTrunk);-
6103 assert( rc!=SQLITE_OK || sqlite3PagerPageRefcount((*ppPage)->pDbPage)<=1 );-
6104 assert( rc!=SQLITE_OK || (*ppPage)->isInit==0 );-
6105 return rc;
executed 973875 times by 375 tests: return rc;
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 (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)
  • ...
973875
6106}-
6107-
6108/*-
6109** This function is used to add page iPage to the database file free-list. -
6110** It is assumed that the page is not already a part of the free-list.-
6111**-
6112** The value passed as the second argument to this function is optional.-
6113** If the caller happens to have a pointer to the MemPage object -
6114** corresponding to page iPage handy, it may pass it as the second value. -
6115** Otherwise, it may pass NULL.-
6116**-
6117** If a pointer to a MemPage object is passed as the second argument,-
6118** its reference count is not altered by this function.-
6119*/-
6120static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){-
6121 MemPage *pTrunk = 0; /* Free-list trunk page */-
6122 Pgno iTrunk = 0; /* Page number of free-list trunk page */ -
6123 MemPage *pPage1 = pBt->pPage1; /* Local reference to page 1 */-
6124 MemPage *pPage; /* Page being freed. May be NULL. */-
6125 int rc; /* Return Code */-
6126 int nFree; /* Initial number of pages on free-list */-
6127-
6128 assert( sqlite3_mutex_held(pBt->mutex) );-
6129 assert( CORRUPT_DB || iPage>1 );-
6130 assert( !pMemPage || pMemPage->pgno==iPage );-
6131-
6132 if( iPage<2 ) return SQLITE_CORRUPT_BKPT;
executed 1 time by 1 test: return sqlite3CorruptError(6132);
Executed by:
  • Self test (438)
iPage<2Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 291130 times by 350 tests
Evaluated 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)
  • ...
1-291130
6133 if( pMemPage ){
pMemPageDescription
TRUEevaluated 283690 times by 350 tests
Evaluated 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)
  • ...
FALSEevaluated 7440 times by 10 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
7440-283690
6134 pPage = pMemPage;-
6135 sqlite3PagerRef(pPage->pDbPage);-
6136 }else{
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
6137 pPage = btreePageLookup(pBt, iPage);-
6138 }
executed 7440 times by 10 tests: end of block
Executed by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
7440
6139-
6140 /* Increment the free page count on pPage1 */-
6141 rc = sqlite3PagerWrite(pPage1->pDbPage);-
6142 if( rc ) goto freepage_out;
executed 73 times by 1 test: goto freepage_out;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 73 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 291054 times by 347 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (113)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
73-291054
6143 nFree = get4byte(&pPage1->aData[36]);-
6144 put4byte(&pPage1->aData[36], nFree+1);-
6145-
6146 if( pBt->btsFlags & BTS_SECURE_DELETE ){
pBt->btsFlags & 0x0004Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 291032 times by 347 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (113)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
22-291032
6147 /* If the secure_delete option is enabled, then-
6148 ** always fully overwrite deleted information with zeros.-
6149 */-
6150 if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) )
!pPageDescription
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
((rc = btreeGe...pPage, 0))!=0)Description
TRUEnever evaluated
FALSEnever evaluated
0-22
6151 || ((rc = sqlite3PagerWrite(pPage->pDbPage))!=0)
((rc = sqlite3...>pDbPage))!=0)Description
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • Self test (438)
0-22
6152 ){-
6153 goto freepage_out;
never executed: goto freepage_out;
0
6154 }-
6155 memset(pPage->aData, 0, pPage->pBt->pageSize);-
6156 }
executed 22 times by 1 test: end of block
Executed by:
  • Self test (438)
22
6157-
6158 /* If the database supports auto-vacuum, write an entry in the pointer-map-
6159 ** to indicate that the page is free.-
6160 */-
6161 if( ISAUTOVACUUM ){
(pBt->autoVacuum)Description
TRUEevaluated 54230 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 236824 times by 344 tests
Evaluated by:
  • Self test (10)
  • Self test (113)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
54230-236824
6162 ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc);-
6163 if( rc ) goto freepage_out;
executed 38 times by 1 test: goto freepage_out;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 54192 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
38-54192
6164 }
executed 54192 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
54192
6165-
6166 /* Now manipulate the actual database free-list structure. There are two-
6167 ** possibilities. If the free-list is currently empty, or if the first-
6168 ** trunk page in the free-list is full, then this page will become a-
6169 ** new free-list trunk page. Otherwise, it will become a leaf of the-
6170 ** first trunk page in the current free-list. This block tests if it-
6171 ** is possible to add the page as a new free-list leaf.-
6172 */-
6173 if( nFree!=0 ){
nFree!=0Description
TRUEevaluated 268478 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 22538 times by 347 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (113)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
22538-268478
6174 u32 nLeaf; /* Initial number of leaf cells on trunk page */-
6175-
6176 iTrunk = get4byte(&pPage1->aData[32]);-
6177 rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);-
6178 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 268478 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)
0-268478
6179 goto freepage_out;
never executed: goto freepage_out;
0
6180 }-
6181-
6182 nLeaf = get4byte(&pTrunk->aData[4]);-
6183 assert( pBt->usableSize>32 );-
6184 if( nLeaf > (u32)pBt->usableSize/4 - 2 ){
nLeaf > (u32)p...ableSize/4 - 2Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 268477 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)
1-268477
6185 rc = SQLITE_CORRUPT_BKPT;-
6186 goto freepage_out;
executed 1 time by 1 test: goto freepage_out;
Executed by:
  • Self test (438)
1
6187 }-
6188 if( nLeaf < (u32)pBt->usableSize/4 - 8 ){
nLeaf < (u32)p...ableSize/4 - 8Description
TRUEevaluated 267699 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 778 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
778-267699
6189 /* In this case there is room on the trunk page to insert the page-
6190 ** being freed as a new leaf.-
6191 **-
6192 ** Note that the trunk page is not really full until it contains-
6193 ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have-
6194 ** coded. But due to a coding error in versions of SQLite prior to-
6195 ** 3.6.0, databases with freelist trunk pages holding more than-
6196 ** usableSize/4 - 8 entries will be reported as corrupt. In order-
6197 ** to maintain backwards compatibility with older versions of SQLite,-
6198 ** we will continue to restrict the number of entries to usableSize/4 - 8-
6199 ** for now. At some point in the future (once everyone has upgraded-
6200 ** to 3.6.0 or later) we should consider fixing the conditional above-
6201 ** to read "usableSize/4-2" instead of "usableSize/4-8".-
6202 **-
6203 ** EVIDENCE-OF: R-19920-11576 However, newer versions of SQLite still-
6204 ** avoid using the last six entries in the freelist trunk page array in-
6205 ** order that database files created by newer versions of SQLite can be-
6206 ** read by older versions of SQLite.-
6207 */-
6208 rc = sqlite3PagerWrite(pTrunk->pDbPage);-
6209 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 267699 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)
FALSEnever evaluated
0-267699
6210 put4byte(&pTrunk->aData[4], nLeaf+1);-
6211 put4byte(&pTrunk->aData[8+nLeaf*4], iPage);-
6212 if( pPage && (pBt->btsFlags & BTS_SECURE_DELETE)==0 ){
pPageDescription
TRUEevaluated 261253 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 6446 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (6)
(pBt->btsFlags & 0x0004)==0Description
TRUEevaluated 261233 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 20 times by 1 test
Evaluated by:
  • Self test (438)
20-261253
6213 sqlite3PagerDontWrite(pPage->pDbPage);-
6214 }
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
6215 rc = btreeSetHasContent(pBt, iPage);-
6216 }
executed 267699 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)
267699
6217 TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno));-
6218 goto freepage_out;
executed 267699 times by 15 tests: goto freepage_out;
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)
267699
6219 }-
6220 }
executed 778 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
778
6221-
6222 /* If control flows to this point, then it was not possible to add the-
6223 ** the page being freed as a leaf page of the first trunk in the free-list.-
6224 ** Possibly because the free-list is empty, or possibly because the -
6225 ** first trunk in the free-list is full. Either way, the page being freed-
6226 ** will become the new first trunk page in the free-list.-
6227 */-
6228 if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){
pPage==0Description
TRUEevaluated 884 times by 10 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
FALSEevaluated 22432 times by 347 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (113)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
0!=(rc = btree...e, &pPage, 0))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 876 times by 10 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
8-22432
6229 goto freepage_out;
executed 8 times by 1 test: goto freepage_out;
Executed by:
  • Self test (438)
8
6230 }-
6231 rc = sqlite3PagerWrite(pPage->pDbPage);-
6232 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 23179 times by 344 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
30-23179
6233 goto freepage_out;
executed 30 times by 1 test: goto freepage_out;
Executed by:
  • Self test (438)
30
6234 }-
6235 put4byte(pPage->aData, iTrunk);-
6236 put4byte(&pPage->aData[4], 0);-
6237 put4byte(&pPage1->aData[32], iPage);-
6238 TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk));-
6239-
6240freepage_out:
code before this statement executed 23179 times by 344 tests: freepage_out:
Executed by:
  • Self test
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
23179
6241 if( pPage ){
pPageDescription
TRUEevaluated 284464 times by 344 tests
Evaluated by:
  • Self test
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 6564 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (6)
6564-284464
6242 pPage->isInit = 0;-
6243 }
executed 284464 times by 344 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
284464
6244 releasePage(pPage);-
6245 releasePage(pTrunk);-
6246 return rc;
executed 291028 times by 344 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
291028
6247}-
6248static void freePage(MemPage *pPage, int *pRC){-
6249 if( (*pRC)==SQLITE_OK ){
(*pRC)==0Description
TRUEevaluated 187899 times by 18 tests
Evaluated by:
  • Self test
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
FALSEnever evaluated
0-187899
6250 *pRC = freePage2(pPage->pBt, pPage, pPage->pgno);-
6251 }
executed 187899 times by 18 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 (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
187899
6252}
executed 187899 times by 18 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 (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (54)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (8)
187899
6253-
6254/*-
6255** Free any overflow pages associated with the given Cell. Store-
6256** size information about the cell in pInfo.-
6257*/-
6258static int clearCell(-
6259 MemPage *pPage, /* The page that contains the Cell */-
6260 unsigned char *pCell, /* First byte of the Cell */-
6261 CellInfo *pInfo /* Size information about the cell */-
6262){-
6263 BtShared *pBt;-
6264 Pgno ovflPgno;-
6265 int rc;-
6266 int nOvfl;-
6267 u32 ovflPageSize;-
6268-
6269 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
6270 pPage->xParseCell(pPage, pCell, pInfo);-
6271 if( pInfo->nLocal==pInfo->nPayload ){
pInfo->nLocal==pInfo->nPayloadDescription
TRUEevaluated 2960381 times by 346 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
FALSEevaluated 36200 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
36200-2960381
6272 return SQLITE_OK; /* No overflow pages. Return without doing anything */
executed 2960381 times by 346 tests: return 0;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
2960381
6273 }-
6274 testcase( pCell + pInfo->nSize == pPage->aDataEnd );-
6275 testcase( pCell + (pInfo->nSize-1) == pPage->aDataEnd );-
6276 if( pCell + pInfo->nSize > pPage->aDataEnd ){
pCell + pInfo-...Page->aDataEndDescription
TRUEnever evaluated
FALSEevaluated 36200 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
0-36200
6277 /* Cell extends past end of page */-
6278 return SQLITE_CORRUPT_PAGE(pPage);
never executed: return sqlite3CorruptError(6278);
0
6279 }-
6280 ovflPgno = get4byte(pCell + pInfo->nSize - 4);-
6281 pBt = pPage->pBt;-
6282 assert( pBt->usableSize > 4 );-
6283 ovflPageSize = pBt->usableSize - 4;-
6284 nOvfl = (pInfo->nPayload - pInfo->nLocal + ovflPageSize - 1)/ovflPageSize;-
6285 assert( nOvfl>0 || -
6286 (CORRUPT_DB && (pInfo->nPayload + ovflPageSize)<ovflPageSize)-
6287 );-
6288 while( nOvfl-- ){
nOvfl--Description
TRUEevaluated 103233 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
FALSEevaluated 35948 times by 338 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
35948-103233
6289 Pgno iNext = 0;-
6290 MemPage *pOvfl = 0;-
6291 if( ovflPgno<2 || ovflPgno>btreePagecount(pBt) ){
ovflPgno<2Description
TRUEnever evaluated
FALSEevaluated 103233 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
ovflPgno>btreePagecount(pBt)Description
TRUEnever evaluated
FALSEevaluated 103233 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
0-103233
6292 /* 0 is not a legal page number and page 1 cannot be an -
6293 ** overflow page. Therefore if ovflPgno<2 or past the end of the -
6294 ** file the database must be corrupt. */-
6295 return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(6295);
0
6296 }-
6297 if( nOvfl ){
nOvflDescription
TRUEevaluated 67034 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 36199 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
36199-67034
6298 rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext);-
6299 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 67034 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
0-67034
6300 }
executed 67034 times by 2 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
67034
6301-
6302 if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) )
pOvflDescription
TRUEevaluated 63235 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
FALSEevaluated 39998 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
((pOvfl = btre...ovflPgno))!=0)Description
TRUEevaluated 32558 times by 343 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
FALSEevaluated 7440 times by 10 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
7440-63235
6303 && sqlite3PagerPageRefcount(pOvfl->pDbPage)!=1
sqlite3PagerPa...l->pDbPage)!=1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 95792 times by 344 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
1-95792
6304 ){-
6305 /* There is no reason any cursor should have an outstanding reference -
6306 ** to an overflow page belonging to a cell that is being deleted/updated.-
6307 ** So if there exists more than one reference to this page, then it -
6308 ** must not really be an overflow page and the database must be corrupt. -
6309 ** It is helpful to detect this before calling freePage2(), as -
6310 ** freePage2() may zero the page contents if secure-delete mode is-
6311 ** enabled. If this 'overflow' page happens to be a page that the-
6312 ** caller is iterating through or using in some other way, this-
6313 ** can be problematic.-
6314 */-
6315 rc = SQLITE_CORRUPT_BKPT;-
6316 }else{
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
6317 rc = freePage2(pBt, pOvfl, ovflPgno);-
6318 }
executed 103130 times by 338 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
103130
6319-
6320 if( pOvfl ){
pOvflDescription
TRUEevaluated 95691 times by 338 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEevaluated 7440 times by 10 tests
Evaluated by:
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (34)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
7440-95691
6321 sqlite3PagerUnref(pOvfl->pDbPage);-
6322 }
executed 95691 times by 338 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
95691
6323 if( rc ) return rc;
executed 150 times by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 150 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 102981 times by 338 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
150-102981
6324 ovflPgno = iNext;-
6325 }
executed 102981 times by 338 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
102981
6326 return SQLITE_OK;
executed 35948 times by 338 tests: return 0;
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
35948
6327}-
6328-
6329/*-
6330** Create the byte sequence used to represent a cell on page pPage-
6331** and write that byte sequence into pCell[]. Overflow pages are-
6332** allocated and filled in as necessary. The calling procedure-
6333** is responsible for making sure sufficient space has been allocated-
6334** for pCell[].-
6335**-
6336** Note that pCell does not necessary need to point to the pPage->aData-
6337** area. pCell might point to some temporary storage. The cell will-
6338** be constructed in this temporary area then copied into pPage->aData-
6339** later.-
6340*/-
6341static int fillInCell(-
6342 MemPage *pPage, /* The page that contains the cell */-
6343 unsigned char *pCell, /* Complete text of the cell */-
6344 const BtreePayload *pX, /* Payload with which to construct the cell */-
6345 int *pnSize /* Write cell size here */-
6346){-
6347 int nPayload;-
6348 const u8 *pSrc;-
6349 int nSrc, n, rc, mn;-
6350 int spaceLeft;-
6351 MemPage *pToRelease;-
6352 unsigned char *pPrior;-
6353 unsigned char *pPayload;-
6354 BtShared *pBt;-
6355 Pgno pgnoOvfl;-
6356 int nHeader;-
6357-
6358 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
6359-
6360 /* pPage is not necessarily writeable since pCell might be auxiliary-
6361 ** buffer space that is separate from the pPage buffer area */-
6362 assert( pCell<pPage->aData || pCell>=&pPage->aData[pPage->pBt->pageSize]-
6363 || sqlite3PagerIswriteable(pPage->pDbPage) );-
6364-
6365 /* Fill in the header. */-
6366 nHeader = pPage->childPtrSize;-
6367 if( pPage->intKey ){
pPage->intKeyDescription
TRUEevaluated 5369151 times by 384 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 (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)
  • Self test (134)
  • Self test (135)
  • ...
FALSEevaluated 2378697 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2378697-5369151
6368 nPayload = pX->nData + pX->nZero;-
6369 pSrc = pX->pData;-
6370 nSrc = pX->nData;-
6371 assert( pPage->intKeyLeaf ); /* fillInCell() only called for leaves */-
6372 nHeader += putVarint32(&pCell[nHeader], nPayload);
((u32)(nPayload)<(u32)0x80)Description
TRUEevaluated 4527898 times by 49 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (2)
  • 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 (41)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • ...
FALSEevaluated 841253 times by 349 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (11)
  • 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)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
841253-4527898
6373 nHeader += putVarint(&pCell[nHeader], *(u64*)&pX->nKey);-
6374 }else{
executed 5369151 times by 384 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 (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)
  • Self test (134)
  • Self test (135)
  • ...
5369151
6375 assert( pX->nKey<=0x7fffffff && pX->pKey!=0 );-
6376 nSrc = nPayload = (int)pX->nKey;-
6377 pSrc = pX->pKey;-
6378 nHeader += putVarint32(&pCell[nHeader], nPayload);
((u32)(nPayload)<(u32)0x80)Description
TRUEevaluated 2204515 times by 6 tests
Evaluated by:
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (86)
  • Self test (88)
FALSEevaluated 174182 times by 356 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
174182-2204515
6379 }
executed 2378697 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2378697
6380 -
6381 /* Fill in the payload */-
6382 pPayload = &pCell[nHeader];-
6383 if( nPayload<=pPage->maxLocal ){
nPayload<=pPage->maxLocalDescription
TRUEevaluated 7606669 times by 384 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 (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)
  • Self test (134)
  • Self test (135)
  • ...
FALSEevaluated 141179 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
141179-7606669
6384 /* This is the common case where everything fits on the btree page-
6385 ** and no overflow pages are required. */-
6386 n = nHeader + nPayload;-
6387 testcase( n==3 );-
6388 testcase( n==4 );-
6389 if( n<4 ) n = 4;
executed 64622 times by 1 test: n = 4;
Executed by:
  • Self test (438)
n<4Description
TRUEevaluated 64622 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7542047 times by 384 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 (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)
  • Self test (134)
  • Self test (135)
  • ...
64622-7542047
6390 *pnSize = n;-
6391 assert( nSrc<=nPayload );-
6392 testcase( nSrc<nPayload );-
6393 memcpy(pPayload, pSrc, nSrc);-
6394 memset(pPayload+nSrc, 0, nPayload-nSrc);-
6395 return SQLITE_OK;
executed 7606669 times by 384 tests: return 0;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • 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)
  • Self test (134)
  • Self test (135)
  • ...
7606669
6396 }-
6397-
6398 /* If we reach this point, it means that some of the content will need-
6399 ** to spill onto overflow pages.-
6400 */-
6401 mn = pPage->minLocal;-
6402 n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4);-
6403 testcase( n==pPage->maxLocal );-
6404 testcase( n==pPage->maxLocal+1 );-
6405 if( n > pPage->maxLocal ) n = mn;
executed 86671 times by 357 tests: n = mn;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
n > pPage->maxLocalDescription
TRUEevaluated 86671 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 54508 times by 12 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (438)
  • 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)
54508-86671
6406 spaceLeft = n;-
6407 *pnSize = n + nHeader + 4;-
6408 pPrior = &pCell[nHeader+n];-
6409 pToRelease = 0;-
6410 pgnoOvfl = 0;-
6411 pBt = pPage->pBt;-
6412-
6413 /* At this point variables should be set as follows:-
6414 **-
6415 ** nPayload Total payload size in bytes-
6416 ** pPayload Begin writing payload here-
6417 ** spaceLeft Space available at pPayload. If nPayload>spaceLeft,-
6418 ** that means content must spill into overflow pages.-
6419 ** *pnSize Size of the local cell (not counting overflow pages)-
6420 ** pPrior Where to write the pgno of the first overflow page-
6421 **-
6422 ** Use a call to btreeParseCellPtr() to verify that the values above-
6423 ** were computed correctly.-
6424 */-
6425#ifdef SQLITE_DEBUG-
6426 {-
6427 CellInfo info;-
6428 pPage->xParseCell(pPage, pCell, &info);-
6429 assert( nHeader==(int)(info.pPayload - pCell) );-
6430 assert( info.nKey==pX->nKey );-
6431 assert( *pnSize == info.nSize );-
6432 assert( spaceLeft == info.nLocal );-
6433 }-
6434#endif-
6435-
6436 /* Write the payload into the local Cell and any extra into overflow pages */-
6437 while( 1 ){-
6438 n = nPayload;-
6439 if( n>spaceLeft ) n = spaceLeft;
executed 305001 times by 357 tests: n = spaceLeft;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
n>spaceLeftDescription
TRUEevaluated 305001 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 141176 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
141176-305001
6440-
6441 /* If pToRelease is not zero than pPayload points into the data area-
6442 ** of pToRelease. Make sure pToRelease is still writeable. */-
6443 assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );-
6444-
6445 /* If pPayload is part of the data area of pPage, then make sure pPage-
6446 ** is still writeable */-
6447 assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]-
6448 || sqlite3PagerIswriteable(pPage->pDbPage) );-
6449-
6450 if( nSrc>=n ){
nSrc>=nDescription
TRUEevaluated 422307 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 23870 times by 1 test
Evaluated by:
  • Self test (438)
23870-422307
6451 memcpy(pPayload, pSrc, n);-
6452 }else if( nSrc>0 ){
executed 422307 times by 357 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
nSrc>0Description
TRUEevaluated 64 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 23806 times by 1 test
Evaluated by:
  • Self test (438)
64-422307
6453 n = nSrc;-
6454 memcpy(pPayload, pSrc, n);-
6455 }else{
executed 64 times by 1 test: end of block
Executed by:
  • Self test (438)
64
6456 memset(pPayload, 0, n);-
6457 }
executed 23806 times by 1 test: end of block
Executed by:
  • Self test (438)
23806
6458 nPayload -= n;-
6459 if( nPayload<=0 ) break;
executed 141176 times by 357 tests: break;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
nPayload<=0Description
TRUEevaluated 141176 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 305001 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
141176-305001
6460 pPayload += n;-
6461 pSrc += n;-
6462 nSrc -= n;-
6463 spaceLeft -= n;-
6464 if( spaceLeft==0 ){
spaceLeft==0Description
TRUEevaluated 304937 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 64 times by 1 test
Evaluated by:
  • Self test (438)
64-304937
6465 MemPage *pOvfl = 0;-
6466#ifndef SQLITE_OMIT_AUTOVACUUM-
6467 Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */-
6468 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 13805 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 291132 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
13805-291132
6469 do{-
6470 pgnoOvfl++;-
6471 } while(
executed 13831 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
13831
6472 PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt)
(ptrmapPageno(...)==(pgnoOvfl))Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13813 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
pgnoOvfl==((Pg...pageSize))+1))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13805 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
8-13813
6473 );-
6474 }
executed 13805 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
13805
6475#endif-
6476 rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0);-
6477#ifndef SQLITE_OMIT_AUTOVACUUM-
6478 /* If the database supports auto-vacuum, and the second or subsequent-
6479 ** overflow page is being allocated, add an entry to the pointer-map-
6480 ** for that page now. -
6481 **-
6482 ** If this is the first overflow page, then write a partial entry -
6483 ** to the pointer-map. If we write nothing to this pointer-map slot,-
6484 ** then the optimistic overflow chain processing in clearCell()-
6485 ** may misinterpret the uninitialized values and delete the-
6486 ** wrong pages from the database.-
6487 */-
6488 if( pBt->autoVacuum && rc==SQLITE_OK ){
pBt->autoVacuumDescription
TRUEevaluated 13805 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 291132 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
rc==0Description
TRUEevaluated 13805 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEnever evaluated
0-291132
6489 u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1);
pgnoPtrmapDescription
TRUEevaluated 4946 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8859 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
4946-8859
6490 ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc);-
6491 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 13805 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-13805
6492 releasePage(pOvfl);-
6493 }
never executed: end of block
0
6494 }
executed 13805 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
13805
6495#endif-
6496 if( rc ){
rcDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 304934 times by 357 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
3-304934
6497 releasePage(pToRelease);-
6498 return rc;
executed 3 times by 1 test: return rc;
Executed by:
  • Self test (438)
3
6499 }-
6500-
6501 /* If pToRelease is not zero than pPrior points into the data area-
6502 ** of pToRelease. Make sure pToRelease is still writeable. */-
6503 assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );-
6504-
6505 /* If pPrior is part of the data area of pPage, then make sure pPage-
6506 ** is still writeable */-
6507 assert( pPrior<pPage->aData || pPrior>=&pPage->aData[pBt->pageSize]-
6508 || sqlite3PagerIswriteable(pPage->pDbPage) );-
6509-
6510 put4byte(pPrior, pgnoOvfl);-
6511 releasePage(pToRelease);-
6512 pToRelease = pOvfl;-
6513 pPrior = pOvfl->aData;-
6514 put4byte(pPrior, 0);-
6515 pPayload = &pOvfl->aData[4];-
6516 spaceLeft = pBt->usableSize - 4;-
6517 }
executed 304934 times by 357 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
304934
6518 }
executed 304998 times by 357 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
304998
6519 releasePage(pToRelease);-
6520 return SQLITE_OK;
executed 141176 times by 357 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
141176
6521}-
6522-
6523/*-
6524** Remove the i-th cell from pPage. This routine effects pPage only.-
6525** The cell content is not freed or deallocated. It is assumed that-
6526** the cell content has been copied someplace else. This routine just-
6527** removes the reference to the cell from pPage.-
6528**-
6529** "sz" must be the number of bytes in the cell.-
6530*/-
6531static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){-
6532 u32 pc; /* Offset to cell content of cell being deleted */-
6533 u8 *data; /* pPage->aData */-
6534 u8 *ptr; /* Used to move bytes around within data[] */-
6535 int rc; /* The return code */-
6536 int hdr; /* Beginning of the header. 0 most pages. 100 page 1 */-
6537-
6538 if( *pRC ) return;
executed 1 time by 1 test: return;
Executed by:
  • Self test (438)
*pRCDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3013413 times by 367 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
1-3013413
6539 assert( idx>=0 && idx<pPage->nCell );-
6540 assert( CORRUPT_DB || sz==cellSize(pPage, idx) );-
6541 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
6542 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
6543 data = pPage->aData;-
6544 ptr = &pPage->aCellIdx[2*idx];-
6545 pc = get2byte(ptr);-
6546 hdr = pPage->hdrOffset;-
6547 testcase( pc==get2byte(&data[hdr+5]) );-
6548 testcase( pc+sz==pPage->pBt->usableSize );-
6549 if( pc+sz > pPage->pBt->usableSize ){
pc+sz > pPage->pBt->usableSizeDescription
TRUEnever evaluated
FALSEevaluated 3013413 times by 367 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
0-3013413
6550 *pRC = SQLITE_CORRUPT_BKPT;-
6551 return;
never executed: return;
0
6552 }-
6553 rc = freeSpace(pPage, pc, sz);-
6554 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 3013413 times by 367 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
0-3013413
6555 *pRC = rc;-
6556 return;
never executed: return;
0
6557 }-
6558 pPage->nCell--;-
6559 if( pPage->nCell==0 ){
pPage->nCell==0Description
TRUEevaluated 1104272 times by 329 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • ...
FALSEevaluated 1909141 times by 365 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
1104272-1909141
6560 memset(&data[hdr+1], 0, 4);-
6561 data[hdr+7] = 0;-
6562 put2byte(&data[hdr+5], pPage->pBt->usableSize);-
6563 pPage->nFree = pPage->pBt->usableSize - pPage->hdrOffset-
6564 - pPage->childPtrSize - 8;-
6565 }else{
executed 1104272 times by 329 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • ...
1104272
6566 memmove(ptr, ptr+2, 2*(pPage->nCell - idx));-
6567 put2byte(&data[hdr+3], pPage->nCell);-
6568 pPage->nFree += 2;-
6569 }
executed 1909141 times by 365 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
1909141
6570}-
6571-
6572/*-
6573** Insert a new cell on pPage at cell index "i". pCell points to the-
6574** content of the cell.-
6575**-
6576** If the cell content will fit on the page, then put it there. If it-
6577** will not fit, then make a copy of the cell content into pTemp if-
6578** pTemp is not null. Regardless of pTemp, allocate a new entry-
6579** in pPage->apOvfl[] and make it point to the cell content (either-
6580** in pTemp or the original pCell) and also record its index. -
6581** Allocating a new entry in pPage->aCell[] implies that -
6582** pPage->nOverflow is incremented.-
6583**-
6584** *pRC must be SQLITE_OK when this routine is called.-
6585*/-
6586static void insertCell(-
6587 MemPage *pPage, /* Page into which we are copying */-
6588 int i, /* New cell becomes the i-th cell of the page */-
6589 u8 *pCell, /* Content of the new cell */-
6590 int sz, /* Bytes of content in pCell */-
6591 u8 *pTemp, /* Temp storage space for pCell, if needed */-
6592 Pgno iChild, /* If non-zero, replace first 4 bytes with this value */-
6593 int *pRC /* Read and write return code from here */-
6594){-
6595 int idx = 0; /* Where to write new cell content in data[] */-
6596 int j; /* Loop counter */-
6597 u8 *data; /* The content of the whole page */-
6598 u8 *pIns; /* The point in pPage->aCellIdx[] where no cell inserted */-
6599-
6600 assert( *pRC==SQLITE_OK );-
6601 assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );-
6602 assert( MX_CELL(pPage->pBt)<=10921 );-
6603 assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB );-
6604 assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) );-
6605 assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) );-
6606 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
6607 /* The cell should normally be sized correctly. However, when moving a-
6608 ** malformed cell from a leaf page to an interior page, if the cell size-
6609 ** wanted to be less than 4 but got rounded up to 4 on the leaf, then size-
6610 ** might be less than 8 (leaf-size + pointer) on the interior node. Hence-
6611 ** the term after the || in the following assert(). */-
6612 assert( sz==pPage->xCellSize(pPage, pCell) || (sz==8 && iChild>0) );-
6613 if( pPage->nOverflow || sz+2>pPage->nFree ){
pPage->nOverflowDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 9453294 times by 391 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 (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)
  • ...
sz+2>pPage->nFreeDescription
TRUEevaluated 923397 times by 337 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • ...
FALSEevaluated 8529897 times by 391 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 (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)
  • ...
14-9453294
6614 if( pTemp ){
pTempDescription
TRUEevaluated 32556 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 890855 times by 337 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • ...
32556-890855
6615 memcpy(pTemp, pCell, sz);-
6616 pCell = pTemp;-
6617 }
executed 32556 times by 3 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
  • Self test (64)
32556
6618 if( iChild ){
iChildDescription
TRUEevaluated 51860 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 871551 times by 337 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • ...
51860-871551
6619 put4byte(pCell, iChild);-
6620 }
executed 51860 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
51860
6621 j = pPage->nOverflow++;-
6622 /* Comparison against ArraySize-1 since we hold back one extra slot-
6623 ** as a contingency. In other words, never need more than 3 overflow-
6624 ** slots but 4 are allocated, just to be safe. */-
6625 assert( j < ArraySize(pPage->apOvfl)-1 );-
6626 pPage->apOvfl[j] = pCell;-
6627 pPage->aiOvfl[j] = (u16)i;-
6628-
6629 /* When multiple overflows occur, they are always sequential and in-
6630 ** sorted order. This invariants arise because multiple overflows can-
6631 ** only occur when inserting divider cells into the parent page during-
6632 ** balancing, and the dividers are adjacent and sorted.-
6633 */-
6634 assert( j==0 || pPage->aiOvfl[j-1]<(u16)i ); /* Overflows in sorted order */-
6635 assert( j==0 || i==pPage->aiOvfl[j-1]+1 ); /* Overflows are sequential */-
6636 }else{
executed 923411 times by 337 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • ...
923411
6637 int rc = sqlite3PagerWrite(pPage->pDbPage);-
6638 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8529857 times by 388 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
28-8529857
6639 *pRC = rc;-
6640 return;
executed 28 times by 1 test: return;
Executed by:
  • Self test (438)
28
6641 }-
6642 assert( sqlite3PagerIswriteable(pPage->pDbPage) );-
6643 data = pPage->aData;-
6644 assert( &data[pPage->cellOffset]==pPage->aCellIdx );-
6645 rc = allocateSpace(pPage, sz, &idx);-
6646 if( rc ){ *pRC = rc; return; }
executed 2 times by 1 test: return;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 8529855 times by 388 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
2-8529855
6647 /* The allocateSpace() routine guarantees the following properties-
6648 ** if it returns successfully */-
6649 assert( idx >= 0 );-
6650 assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB );-
6651 assert( idx+sz <= (int)pPage->pBt->usableSize );-
6652 pPage->nFree -= (u16)(2 + sz);-
6653 memcpy(&data[idx], pCell, sz);-
6654 if( iChild ){
iChildDescription
TRUEevaluated 1653744 times by 328 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
FALSEevaluated 6876111 times by 385 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
1653744-6876111
6655 put4byte(&data[idx], iChild);-
6656 }
executed 1653744 times by 328 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 (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
1653744
6657 pIns = pPage->aCellIdx + i*2;-
6658 memmove(pIns+2, pIns, 2*(pPage->nCell - i));-
6659 put2byte(pIns, idx);-
6660 pPage->nCell++;-
6661 /* increment the cell count */-
6662 if( (++data[pPage->hdrOffset+4])==0 ) data[pPage->hdrOffset+3]++;
never executed: data[pPage->hdrOffset+3]++;
(++data[pPage-...rOffset+4])==0Description
TRUEnever evaluated
FALSEevaluated 8529855 times by 388 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
0-8529855
6663 assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell );-
6664#ifndef SQLITE_OMIT_AUTOVACUUM-
6665 if( pPage->pBt->autoVacuum ){
pPage->pBt->autoVacuumDescription
TRUEevaluated 340729 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 8189126 times by 387 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
340729-8189126
6666 /* The cell may contain a pointer to an overflow page. If so, write-
6667 ** the entry for the overflow page into the pointer map.-
6668 */-
6669 ptrmapPutOvflPtr(pPage, pCell, pRC);-
6670 }
executed 340729 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
340729
6671#endif-
6672 }
executed 8529855 times by 388 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
8529855
6673}-
6674-
6675/*-
6676** A CellArray object contains a cache of pointers and sizes for a-
6677** consecutive sequence of cells that might be held on multiple pages.-
6678*/-
6679typedef struct CellArray CellArray;-
6680struct CellArray {-
6681 int nCell; /* Number of cells in apCell[] */-
6682 MemPage *pRef; /* Reference page */-
6683 u8 **apCell; /* All cells begin balanced */-
6684 u16 *szCell; /* Local size of all cells in apCell[] */-
6685};-
6686-
6687/*-
6688** Make sure the cell sizes at idx, idx+1, ..., idx+N-1 have been-
6689** computed.-
6690*/-
6691static void populateCellCache(CellArray *p, int idx, int N){-
6692 assert( idx>=0 && idx+N<=p->nCell );-
6693 while( N>0 ){
N>0Description
TRUEevaluated 494128 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 58002 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
58002-494128
6694 assert( p->apCell[idx]!=0 );-
6695 if( p->szCell[idx]==0 ){
p->szCell[idx]==0Description
TRUEevaluated 390557 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 103571 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
103571-390557
6696 p->szCell[idx] = p->pRef->xCellSize(p->pRef, p->apCell[idx]);-
6697 }else{
executed 390557 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
390557
6698 assert( CORRUPT_DB ||-
6699 p->szCell[idx]==p->pRef->xCellSize(p->pRef, p->apCell[idx]) );-
6700 }
executed 103571 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
103571
6701 idx++;-
6702 N--;-
6703 }
executed 494128 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
494128
6704}
executed 58002 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
58002
6705-
6706/*-
6707** Return the size of the Nth element of the cell array-
6708*/-
6709static SQLITE_NOINLINE u16 computeCellSize(CellArray *p, int N){-
6710 assert( N>=0 && N<p->nCell );-
6711 assert( p->szCell[N]==0 );-
6712 p->szCell[N] = p->pRef->xCellSize(p->pRef, p->apCell[N]);-
6713 return p->szCell[N];
executed 7361032 times by 325 tests: return p->szCell[N];
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
7361032
6714}-
6715static u16 cachedCellSize(CellArray *p, int N){-
6716 assert( N>=0 && N<p->nCell );-
6717 if( p->szCell[N] ) return p->szCell[N];
executed 11240325 times by 325 tests: return p->szCell[N];
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
p->szCell[N]Description
TRUEevaluated 11240325 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 7361032 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
7361032-11240325
6718 return computeCellSize(p, N);
executed 7361032 times by 325 tests: return computeCellSize(p, N);
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
7361032
6719}-
6720-
6721/*-
6722** Array apCell[] contains pointers to nCell b-tree page cells. The -
6723** szCell[] array contains the size in bytes of each cell. This function-
6724** replaces the current contents of page pPg with the contents of the cell-
6725** array.-
6726**-
6727** Some of the cells in apCell[] may currently be stored in pPg. This-
6728** function works around problems caused by this by making a copy of any -
6729** such cells before overwriting the page data.-
6730**-
6731** The MemPage.nFree field is invalidated by this function. It is the -
6732** responsibility of the caller to set it correctly.-
6733*/-
6734static int rebuildPage(-
6735 MemPage *pPg, /* Edit this page */-
6736 int nCell, /* Final number of cells on page */-
6737 u8 **apCell, /* Array of cells */-
6738 u16 *szCell /* Array of cell sizes */-
6739){-
6740 const int hdr = pPg->hdrOffset; /* Offset of header on pPg */-
6741 u8 * const aData = pPg->aData; /* Pointer to data for pPg */-
6742 const int usableSize = pPg->pBt->usableSize;-
6743 u8 * const pEnd = &aData[usableSize];-
6744 int i;-
6745 u8 *pCellptr = pPg->aCellIdx;-
6746 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);-
6747 u8 *pData;-
6748-
6749 i = get2byte(&aData[hdr+5]);-
6750 memcpy(&pTmp[i], &aData[i], usableSize - i);-
6751-
6752 pData = pEnd;-
6753 for(i=0; i<nCell; i++){
i<nCellDescription
TRUEevaluated 892390 times by 23 tests
Evaluated 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)
FALSEevaluated 456264 times by 23 tests
Evaluated 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)
456264-892390
6754 u8 *pCell = apCell[i];-
6755 if( SQLITE_WITHIN(pCell,aData,pEnd) ){
((uptr)(pCell)>=(uptr)(aData))Description
TRUEevaluated 541559 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 350831 times by 23 tests
Evaluated 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)
((uptr)(pCell)<(uptr)(pEnd))Description
TRUEevaluated 416517 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 125042 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
125042-541559
6756 pCell = &pTmp[pCell - aData];-
6757 }
executed 416517 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
416517
6758 pData -= szCell[i];-
6759 put2byte(pCellptr, (pData - aData));-
6760 pCellptr += 2;-
6761 if( pData < pCellptr ) return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(6761);
pData < pCellptrDescription
TRUEnever evaluated
FALSEevaluated 892390 times by 23 tests
Evaluated 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)
0-892390
6762 memcpy(pData, pCell, szCell[i]);-
6763 assert( szCell[i]==pPg->xCellSize(pPg, pCell) || CORRUPT_DB );-
6764 testcase( szCell[i]!=pPg->xCellSize(pPg,pCell) );-
6765 }
executed 892390 times by 23 tests: end of block
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)
892390
6766-
6767 /* The pPg->nFree field is now set incorrectly. The caller will fix it. */-
6768 pPg->nCell = nCell;-
6769 pPg->nOverflow = 0;-
6770-
6771 put2byte(&aData[hdr+1], 0);-
6772 put2byte(&aData[hdr+3], pPg->nCell);-
6773 put2byte(&aData[hdr+5], pData - aData);-
6774 aData[hdr+7] = 0x00;-
6775 return SQLITE_OK;
executed 456264 times by 23 tests: return 0;
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)
456264
6776}-
6777-
6778/*-
6779** Array apCell[] contains nCell pointers to b-tree cells. Array szCell-
6780** contains the size in bytes of each such cell. This function attempts to -
6781** add the cells stored in the array to page pPg. If it cannot (because -
6782** the page needs to be defragmented before the cells will fit), non-zero-
6783** is returned. Otherwise, if the cells are added successfully, zero is-
6784** returned.-
6785**-
6786** Argument pCellptr points to the first entry in the cell-pointer array-
6787** (part of page pPg) to populate. After cell apCell[0] is written to the-
6788** page body, a 16-bit offset is written to pCellptr. And so on, for each-
6789** cell in the array. It is the responsibility of the caller to ensure-
6790** that it is safe to overwrite this part of the cell-pointer array.-
6791**-
6792** When this function is called, *ppData points to the start of the -
6793** content area on page pPg. If the size of the content area is extended,-
6794** *ppData is updated to point to the new start of the content area-
6795** before returning.-
6796**-
6797** Finally, argument pBegin points to the byte immediately following the-
6798** end of the space required by this page for the cell-pointer area (for-
6799** all cells - not just those inserted by the current call). If the content-
6800** area must be extended to before this point in order to accomodate all-
6801** cells in apCell[], then the cells do not fit and non-zero is returned.-
6802*/-
6803static int pageInsertArray(-
6804 MemPage *pPg, /* Page to add cells to */-
6805 u8 *pBegin, /* End of cell-pointer array */-
6806 u8 **ppData, /* IN/OUT: Page content -area pointer */-
6807 u8 *pCellptr, /* Pointer to cell-pointer area */-
6808 int iFirst, /* Index of first cell to add */-
6809 int nCell, /* Number of cells to add to pPg */-
6810 CellArray *pCArray /* Array of cells */-
6811){-
6812 int i;-
6813 u8 *aData = pPg->aData;-
6814 u8 *pData = *ppData;-
6815 int iEnd = iFirst + nCell;-
6816 assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */-
6817 for(i=iFirst; i<iEnd; i++){
i<iEndDescription
TRUEevaluated 4830502 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2683112 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2683112-4830502
6818 int sz, rc;-
6819 u8 *pSlot;-
6820 sz = cachedCellSize(pCArray, i);-
6821 if( (aData[1]==0 && aData[2]==0) || (pSlot = pageFindSlot(pPg,sz,&rc))==0 ){
aData[1]==0Description
TRUEevaluated 2669662 times by 271 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • ...
FALSEevaluated 2160840 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
aData[2]==0Description
TRUEevaluated 2553600 times by 271 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • ...
FALSEevaluated 116062 times by 266 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • Self test (203)
  • ...
(pSlot = pageF...Pg,sz,&rc))==0Description
TRUEevaluated 117201 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 2159701 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
116062-2669662
6822 if( (pData - pBegin)<sz ) return 1;
executed 57824 times by 4 tests: return 1;
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
(pData - pBegin)<szDescription
TRUEevaluated 57824 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 2612977 times by 271 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • ...
57824-2612977
6823 pData -= sz;-
6824 pSlot = pData;-
6825 }
executed 2612977 times by 271 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • ...
2612977
6826 /* pSlot and pCArray->apCell[i] will never overlap on a well-formed-
6827 ** database. But they might for a corrupt database. Hence use memmove()-
6828 ** since memcpy() sends SIGABORT with overlapping buffers on OpenBSD */-
6829 assert( (pSlot+sz)<=pCArray->apCell[i]-
6830 || pSlot>=(pCArray->apCell[i]+sz)-
6831 || CORRUPT_DB );-
6832 memmove(pSlot, pCArray->apCell[i], sz);-
6833 put2byte(pCellptr, (pSlot - aData));-
6834 pCellptr += 2;-
6835 }
executed 4772678 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
4772678
6836 *ppData = pData;-
6837 return 0;
executed 2683112 times by 319 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2683112
6838}-
6839-
6840/*-
6841** Array apCell[] contains nCell pointers to b-tree cells. Array szCell -
6842** contains the size in bytes of each such cell. This function adds the-
6843** space associated with each cell in the array that is currently stored -
6844** within the body of pPg to the pPg free-list. The cell-pointers and other-
6845** fields of the page are not updated.-
6846**-
6847** This function returns the total number of cells added to the free-list.-
6848*/-
6849static int pageFreeArray(-
6850 MemPage *pPg, /* Page to edit */-
6851 int iFirst, /* First cell to delete */-
6852 int nCell, /* Cells to delete */-
6853 CellArray *pCArray /* Array of cells */-
6854){-
6855 u8 * const aData = pPg->aData;-
6856 u8 * const pEnd = &aData[pPg->pBt->usableSize];-
6857 u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize];-
6858 int nRet = 0;-
6859 int i;-
6860 int iEnd = iFirst + nCell;-
6861 u8 *pFree = 0;-
6862 int szFree = 0;-
6863-
6864 for(i=iFirst; i<iEnd; i++){
i<iEndDescription
TRUEevaluated 4125563 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 886234 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
886234-4125563
6865 u8 *pCell = pCArray->apCell[i];-
6866 if( SQLITE_WITHIN(pCell, pStart, pEnd) ){
((uptr)(pCell)...uptr)(pStart))Description
TRUEevaluated 3965095 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 160468 times by 15 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (64)
  • Self test (8)
((uptr)(pCell)<(uptr)(pEnd))Description
TRUEevaluated 3876396 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 88699 times by 6 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (64)
88699-3965095
6867 int sz;-
6868 /* No need to use cachedCellSize() here. The sizes of all cells that-
6869 ** are to be freed have already been computing while deciding which-
6870 ** cells need freeing */-
6871 sz = pCArray->szCell[i]; assert( sz>0 );-
6872 if( pFree!=(pCell + sz) ){
pFree!=(pCell + sz)Description
TRUEevaluated 1575446 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2300950 times by 15 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 (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (64)
  • Self test (8)
1575446-2300950
6873 if( pFree ){
pFreeDescription
TRUEevaluated 743435 times by 268 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • ...
FALSEevaluated 832011 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
743435-832011
6874 assert( pFree>aData && (pFree - aData)<65536 );-
6875 freeSpace(pPg, (u16)(pFree - aData), szFree);-
6876 }
executed 743435 times by 268 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • ...
743435
6877 pFree = pCell;-
6878 szFree = sz;-
6879 if( pFree+sz>pEnd ) return 0;
never executed: return 0;
pFree+sz>pEndDescription
TRUEnever evaluated
FALSEevaluated 1575446 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
0-1575446
6880 }else{
executed 1575446 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1575446
6881 pFree = pCell;-
6882 szFree += sz;-
6883 }
executed 2300950 times by 15 tests: end of block
Executed 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 (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (64)
  • Self test (8)
2300950
6884 nRet++;-
6885 }
executed 3876396 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
3876396
6886 }
executed 4125563 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
4125563
6887 if( pFree ){
pFreeDescription
TRUEevaluated 832011 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 54223 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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 (64)
  • Self test (8)
54223-832011
6888 assert( pFree>aData && (pFree - aData)<65536 );-
6889 freeSpace(pPg, (u16)(pFree - aData), szFree);-
6890 }
executed 832011 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
832011
6891 return nRet;
executed 886234 times by 319 tests: return nRet;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
886234
6892}-
6893-
6894/*-
6895** apCell[] and szCell[] contains pointers to and sizes of all cells in the-
6896** pages being balanced. The current page, pPg, has pPg->nCell cells starting-
6897** with apCell[iOld]. After balancing, this page should hold nNew cells-
6898** starting at apCell[iNew].-
6899**-
6900** This routine makes the necessary adjustments to pPg so that it contains-
6901** the correct cells after being balanced.-
6902**-
6903** The pPg->nFree field is invalid when this function returns. It is the-
6904** responsibility of the caller to set it correctly.-
6905*/-
6906static int editPage(-
6907 MemPage *pPg, /* Edit this page */-
6908 int iOld, /* Index of first cell currently on page */-
6909 int iNew, /* Index of new first cell on page */-
6910 int nNew, /* Final number of cells on page */-
6911 CellArray *pCArray /* Array of cells and sizes */-
6912){-
6913 u8 * const aData = pPg->aData;-
6914 const int hdr = pPg->hdrOffset;-
6915 u8 *pBegin = &pPg->aCellIdx[nNew * 2];-
6916 int nCell = pPg->nCell; /* Cells stored on pPg */-
6917 u8 *pData;-
6918 u8 *pCellptr;-
6919 int i;-
6920 int iOldEnd = iOld + pPg->nCell + pPg->nOverflow;-
6921 int iNewEnd = iNew + nNew;-
6922-
6923#ifdef SQLITE_DEBUG-
6924 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);-
6925 memcpy(pTmp, aData, pPg->pBt->usableSize);-
6926#endif-
6927-
6928 /* Remove cells from the start and end of the page */-
6929 if( iOld<iNew ){
iOld<iNewDescription
TRUEevaluated 466772 times by 168 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (287)
  • Self test (288)
  • Self test (289)
  • Self test (290)
  • Self test (291)
  • Self test (292)
  • Self test (293)
  • Self test (294)
  • Self test (295)
  • Self test (296)
  • Self test (297)
  • Self test (298)
  • Self test (299)
  • Self test (300)
  • Self test (301)
  • ...
FALSEevaluated 1578047 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
466772-1578047
6930 int nShift = pageFreeArray(pPg, iOld, iNew-iOld, pCArray);-
6931 memmove(pPg->aCellIdx, &pPg->aCellIdx[nShift*2], nCell*2);-
6932 nCell -= nShift;-
6933 }
executed 466772 times by 168 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (287)
  • Self test (288)
  • Self test (289)
  • Self test (290)
  • Self test (291)
  • Self test (292)
  • Self test (293)
  • Self test (294)
  • Self test (295)
  • Self test (296)
  • Self test (297)
  • Self test (298)
  • Self test (299)
  • Self test (300)
  • Self test (301)
  • ...
466772
6934 if( iNewEnd < iOldEnd ){
iNewEnd < iOldEndDescription
TRUEevaluated 419462 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 1625357 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
419462-1625357
6935 nCell -= pageFreeArray(pPg, iNewEnd, iOldEnd - iNewEnd, pCArray);-
6936 }
executed 419462 times by 318 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
419462
6937-
6938 pData = &aData[get2byteNotZero(&aData[hdr+5])];-
6939 if( pData<pBegin ) goto editpage_fail;
executed 178 times by 1 test: goto editpage_fail;
Executed by:
  • Self test (438)
pData<pBeginDescription
TRUEevaluated 178 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2044641 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
178-2044641
6940-
6941 /* Add cells to the start of the page */-
6942 if( iNew<iOld ){
iNew<iOldDescription
TRUEevaluated 419397 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 1625244 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
419397-1625244
6943 int nAdd = MIN(nNew,iOld-iNew);
(nNew)<(iOld-iNew)Description
TRUEevaluated 114 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 419283 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
114-419283
6944 assert( (iOld-iNew)<nNew || nCell==0 || CORRUPT_DB );-
6945 pCellptr = pPg->aCellIdx;-
6946 memmove(&pCellptr[nAdd*2], pCellptr, nCell*2);-
6947 if( pageInsertArray(
pageInsertArra...Add, pCArray )Description
TRUEevaluated 4281 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 415116 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
4281-415116
6948 pPg, pBegin, &pData, pCellptr,
pageInsertArra...Add, pCArray )Description
TRUEevaluated 4281 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 415116 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
4281-415116
6949 iNew, nAdd, pCArray
pageInsertArra...Add, pCArray )Description
TRUEevaluated 4281 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 415116 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
4281-415116
6950 ) ) goto editpage_fail;
executed 4281 times by 2 tests: goto editpage_fail;
Executed by:
  • Self test (438)
  • Self test (54)
pageInsertArra...Add, pCArray )Description
TRUEevaluated 4281 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
FALSEevaluated 415116 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
4281-415116
6951 nCell += nAdd;-
6952 }
executed 415116 times by 318 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
415116
6953-
6954 /* Add any overflow cells */-
6955 for(i=0; i<pPg->nOverflow; i++){
i<pPg->nOverflowDescription
TRUEevaluated 525108 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2003825 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
525108-2003825
6956 int iCell = (iOld + pPg->aiOvfl[i]) - iNew;-
6957 if( iCell>=0 && iCell<nNew ){
iCell>=0Description
TRUEevaluated 513780 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 11328 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (8)
iCell<nNewDescription
TRUEevaluated 317714 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 196066 times by 14 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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 (64)
  • Self test (8)
11328-513780
6958 pCellptr = &pPg->aCellIdx[iCell * 2];-
6959 memmove(&pCellptr[2], pCellptr, (nCell - iCell) * 2);-
6960 nCell++;-
6961 if( pageInsertArray(
pageInsertArra..., 1, pCArray )Description
TRUEevaluated 36535 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 281179 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
36535-281179
6962 pPg, pBegin, &pData, pCellptr,
pageInsertArra..., 1, pCArray )Description
TRUEevaluated 36535 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 281179 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
36535-281179
6963 iCell+iNew, 1, pCArray
pageInsertArra..., 1, pCArray )Description
TRUEevaluated 36535 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 281179 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
36535-281179
6964 ) ) goto editpage_fail;
executed 36535 times by 3 tests: goto editpage_fail;
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
pageInsertArra..., 1, pCArray )Description
TRUEevaluated 36535 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
FALSEevaluated 281179 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
36535-281179
6965 }
executed 281179 times by 318 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
281179
6966 }
executed 488573 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
488573
6967-
6968 /* Append cells to the end of the page */-
6969 pCellptr = &pPg->aCellIdx[nCell*2];-
6970 if( pageInsertArray(
pageInsertArra...ell, pCArray )Description
TRUEevaluated 17008 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 1986817 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
17008-1986817
6971 pPg, pBegin, &pData, pCellptr,
pageInsertArra...ell, pCArray )Description
TRUEevaluated 17008 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 1986817 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
17008-1986817
6972 iNew+nCell, nNew-nCell, pCArray
pageInsertArra...ell, pCArray )Description
TRUEevaluated 17008 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 1986817 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
17008-1986817
6973 ) ) goto editpage_fail;
executed 17008 times by 4 tests: goto editpage_fail;
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
pageInsertArra...ell, pCArray )Description
TRUEevaluated 17008 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 1986817 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
17008-1986817
6974-
6975 pPg->nCell = nNew;-
6976 pPg->nOverflow = 0;-
6977-
6978 put2byte(&aData[hdr+3], pPg->nCell);-
6979 put2byte(&aData[hdr+5], pData - aData);-
6980-
6981#ifdef SQLITE_DEBUG-
6982 for(i=0; i<nNew && !CORRUPT_DB; i++){-
6983 u8 *pCell = pCArray->apCell[i+iNew];-
6984 int iOff = get2byteAligned(&pPg->aCellIdx[i*2]);-
6985 if( SQLITE_WITHIN(pCell, aData, &aData[pPg->pBt->usableSize]) ){-
6986 pCell = &pTmp[pCell - aData];-
6987 }-
6988 assert( 0==memcmp(pCell, &aData[iOff],-
6989 pCArray->pRef->xCellSize(pCArray->pRef, pCArray->apCell[i+iNew])) );-
6990 }-
6991#endif-
6992-
6993 return SQLITE_OK;
executed 1986817 times by 319 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1986817
6994 editpage_fail:-
6995 /* Unable to edit this page. Rebuild it from scratch instead. */-
6996 populateCellCache(pCArray, iNew, nNew);-
6997 return rebuildPage(pPg, nNew, &pCArray->apCell[iNew], &pCArray->szCell[iNew]);
executed 58002 times by 4 tests: return rebuildPage(pPg, nNew, &pCArray->apCell[iNew], &pCArray->szCell[iNew]);
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
58002
6998}-
6999-
7000/*-
7001** The following parameters determine how many adjacent pages get involved-
7002** in a balancing operation. NN is the number of neighbors on either side-
7003** of the page that participate in the balancing operation. NB is the-
7004** total number of pages that participate, including the target page and-
7005** NN neighbors on either side.-
7006**-
7007** The minimum value of NN is 1 (of course). Increasing NN above 1-
7008** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance-
7009** in exchange for a larger degradation in INSERT and UPDATE performance.-
7010** The value of NN appears to give the best results overall.-
7011*/-
7012#define NN 1 /* Number of neighbors on either side of pPage */-
7013#define NB (NN*2+1) /* Total pages involved in the balance */-
7014-
7015-
7016#ifndef SQLITE_OMIT_QUICKBALANCE-
7017/*-
7018** This version of balance() handles the common special case where-
7019** a new entry is being inserted on the extreme right-end of the-
7020** tree, in other words, when the new entry will become the largest-
7021** entry in the tree.-
7022**-
7023** Instead of trying to balance the 3 right-most leaf pages, just add-
7024** a new page to the right-hand side and put the one new entry in-
7025** that page. This leaves the right side of the tree somewhat-
7026** unbalanced. But odds are that we will be inserting new entries-
7027** at the end soon afterwards so the nearly empty page will quickly-
7028** fill up. On average.-
7029**-
7030** pPage is the leaf page which is the right-most page in the tree.-
7031** pParent is its parent. pPage must have a single overflow entry-
7032** which is also the right-most entry on the page.-
7033**-
7034** The pSpace buffer is used to store a temporary copy of the divider-
7035** cell that will be inserted into pParent. Such a cell consists of a 4-
7036** byte page number followed by a variable length integer. In other-
7037** words, at most 13 bytes. Hence the pSpace buffer must be at-
7038** least 13 bytes in size.-
7039*/-
7040static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){-
7041 BtShared *const pBt = pPage->pBt; /* B-Tree Database */-
7042 MemPage *pNew; /* Newly allocated page */-
7043 int rc; /* Return Code */-
7044 Pgno pgnoNew; /* Page number of pNew */-
7045-
7046 assert( sqlite3_mutex_held(pPage->pBt->mutex) );-
7047 assert( sqlite3PagerIswriteable(pParent->pDbPage) );-
7048 assert( pPage->nOverflow==1 );-
7049-
7050 /* This error condition is now caught prior to reaching this function */-
7051 if( NEVER(pPage->nCell==0) ) return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(7051);
(pPage->nCell==0)Description
TRUEnever evaluated
FALSEevaluated 398262 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
0-398262
7052-
7053 /* Allocate a new page. This page will become the right-sibling of -
7054 ** pPage. Make the parent page writable, so that the new divider cell-
7055 ** may be inserted. If both these operations are successful, proceed.-
7056 */-
7057 rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);-
7058-
7059 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 398262 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEnever evaluated
0-398262
7060-
7061 u8 *pOut = &pSpace[4];-
7062 u8 *pCell = pPage->apOvfl[0];-
7063 u16 szCell = pPage->xCellSize(pPage, pCell);-
7064 u8 *pStop;-
7065-
7066 assert( sqlite3PagerIswriteable(pNew->pDbPage) );-
7067 assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );-
7068 zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);-
7069 rc = rebuildPage(pNew, 1, &pCell, &szCell);-
7070 if( NEVER(rc) ) return rc;
never executed: return rc;
(rc)Description
TRUEnever evaluated
FALSEevaluated 398262 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
0-398262
7071 pNew->nFree = pBt->usableSize - pNew->cellOffset - 2 - szCell;-
7072-
7073 /* If this is an auto-vacuum database, update the pointer map-
7074 ** with entries for the new page, and any pointer from the -
7075 ** cell on the page to an overflow page. If either of these-
7076 ** operations fails, the return code is set, but the contents-
7077 ** of the parent page are still manipulated by thh code below.-
7078 ** That is Ok, at this point the parent page is guaranteed to-
7079 ** be marked as dirty. Returning an error code will cause a-
7080 ** rollback, undoing any changes made to the parent page.-
7081 */-
7082 if( ISAUTOVACUUM ){
(pBt->autoVacuum)Description
TRUEevaluated 30001 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 368261 times by 19 tests
Evaluated by:
  • 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 (438)
  • Self test (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
30001-368261
7083 ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc);-
7084 if( szCell>pNew->minLocal ){
szCell>pNew->minLocalDescription
TRUEevaluated 28348 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 1653 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
1653-28348
7085 ptrmapPutOvflPtr(pNew, pCell, &rc);-
7086 }
executed 28348 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
28348
7087 }
executed 30001 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
30001
7088 -
7089 /* Create a divider cell to insert into pParent. The divider cell-
7090 ** consists of a 4-byte page number (the page number of pPage) and-
7091 ** a variable length key value (which must be the same value as the-
7092 ** largest key on pPage).-
7093 **-
7094 ** To find the largest key value on pPage, first find the right-most -
7095 ** cell on pPage. The first two fields of this cell are the -
7096 ** record-length (a variable length integer at most 32-bits in size)-
7097 ** and the key value (a variable length integer, may have any value).-
7098 ** The first of the while(...) loops below skips over the record-length-
7099 ** field. The second while(...) loop copies the key value from the-
7100 ** cell on pPage into the pSpace buffer.-
7101 */-
7102 pCell = findCell(pPage, pPage->nCell-1);-
7103 pStop = &pCell[9];-
7104 while( (*(pCell++)&0x80) && pCell<pStop );
executed 306447 times by 19 tests: ;
Executed by:
  • 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 (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
(*(pCell++)&0x80)Description
TRUEevaluated 306447 times by 19 tests
Evaluated by:
  • 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 (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEevaluated 398262 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
pCell<pStopDescription
TRUEevaluated 306447 times by 19 tests
Evaluated by:
  • 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 (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEnever evaluated
0-398262
7105 pStop = &pCell[9];-
7106 while( ((*(pOut++) = *(pCell++))&0x80) && pCell<pStop );
executed 494762 times by 6 tests: ;
Executed by:
  • Self test
  • Self test (101)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
((*(pOut++) = ...Cell++))&0x80)Description
TRUEevaluated 494762 times by 6 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEevaluated 398262 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
pCell<pStopDescription
TRUEevaluated 494762 times by 6 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEnever evaluated
0-494762
7107-
7108 /* Insert the new divider cell into pParent. */-
7109 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 398262 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEnever evaluated
0-398262
7110 insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),-
7111 0, pPage->pgno, &rc);-
7112 }
executed 398262 times by 22 tests: end of block
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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
398262
7113-
7114 /* Set the right-child pointer of pParent to point to the new page. */-
7115 put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew);-
7116 -
7117 /* Release the reference to the new page. */-
7118 releasePage(pNew);-
7119 }
executed 398262 times by 22 tests: end of block
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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
398262
7120-
7121 return rc;
executed 398262 times by 22 tests: return rc;
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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
398262
7122}-
7123#endif /* SQLITE_OMIT_QUICKBALANCE */-
7124-
7125#if 0-
7126/*-
7127** This function does not contribute anything to the operation of SQLite.-
7128** it is sometimes activated temporarily while debugging code responsible -
7129** for setting pointer-map entries.-
7130*/-
7131static int ptrmapCheckPages(MemPage **apPage, int nPage){-
7132 int i, j;-
7133 for(i=0; i<nPage; i++){-
7134 Pgno n;-
7135 u8 e;-
7136 MemPage *pPage = apPage[i];-
7137 BtShared *pBt = pPage->pBt;-
7138 assert( pPage->isInit );-
7139-
7140 for(j=0; j<pPage->nCell; j++){-
7141 CellInfo info;-
7142 u8 *z;-
7143 -
7144 z = findCell(pPage, j);-
7145 pPage->xParseCell(pPage, z, &info);-
7146 if( info.nLocal<info.nPayload ){-
7147 Pgno ovfl = get4byte(&z[info.nSize-4]);-
7148 ptrmapGet(pBt, ovfl, &e, &n);-
7149 assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 );-
7150 }-
7151 if( !pPage->leaf ){-
7152 Pgno child = get4byte(z);-
7153 ptrmapGet(pBt, child, &e, &n);-
7154 assert( n==pPage->pgno && e==PTRMAP_BTREE );-
7155 }-
7156 }-
7157 if( !pPage->leaf ){-
7158 Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]);-
7159 ptrmapGet(pBt, child, &e, &n);-
7160 assert( n==pPage->pgno && e==PTRMAP_BTREE );-
7161 }-
7162 }-
7163 return 1;-
7164}-
7165#endif-
7166-
7167/*-
7168** This function is used to copy the contents of the b-tree node stored -
7169** on page pFrom to page pTo. If page pFrom was not a leaf page, then-
7170** the pointer-map entries for each child page are updated so that the-
7171** parent page stored in the pointer map is page pTo. If pFrom contained-
7172** any cells with overflow page pointers, then the corresponding pointer-
7173** map entries are also updated so that the parent page is page pTo.-
7174**-
7175** If pFrom is currently carrying any overflow cells (entries in the-
7176** MemPage.apOvfl[] array), they are not copied to pTo. -
7177**-
7178** Before returning, page pTo is reinitialized using btreeInitPage().-
7179**-
7180** The performance of this function is not critical. It is only used by -
7181** the balance_shallower() and balance_deeper() procedures, neither of-
7182** which are called often under normal circumstances.-
7183*/-
7184static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){-
7185 if( (*pRC)==SQLITE_OK ){
(*pRC)==0Description
TRUEevaluated 8195 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-8195
7186 BtShared * const pBt = pFrom->pBt;-
7187 u8 * const aFrom = pFrom->aData;-
7188 u8 * const aTo = pTo->aData;-
7189 int const iFromHdr = pFrom->hdrOffset;-
7190 int const iToHdr = ((pTo->pgno==1) ? 100 : 0);
(pTo->pgno==1)Description
TRUEevaluated 770 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7425 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
770-7425
7191 int rc;-
7192 int iData;-
7193 -
7194 -
7195 assert( pFrom->isInit );-
7196 assert( pFrom->nFree>=iToHdr );-
7197 assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize );-
7198 -
7199 /* Copy the b-tree node content from page pFrom to page pTo. */-
7200 iData = get2byte(&aFrom[iFromHdr+5]);-
7201 memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData);-
7202 memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell);-
7203 -
7204 /* Reinitialize page pTo so that the contents of the MemPage structure-
7205 ** match the new data. The initialization of pTo can actually fail under-
7206 ** fairly obscure circumstances, even though it is a copy of initialized -
7207 ** page pFrom.-
7208 */-
7209 pTo->isInit = 0;-
7210 rc = btreeInitPage(pTo);-
7211 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 8195 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
0-8195
7212 *pRC = rc;-
7213 return;
never executed: return;
0
7214 }-
7215 -
7216 /* If this is an auto-vacuum database, update the pointer-map entries-
7217 ** for any b-tree or overflow pages that pTo now contains the pointers to.-
7218 */-
7219 if( ISAUTOVACUUM ){
(pBt->autoVacuum)Description
TRUEevaluated 373 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 7822 times by 7 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
373-7822
7220 *pRC = setChildPtrmaps(pTo);-
7221 }
executed 373 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
373
7222 }
executed 8195 times by 8 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
8195
7223}
executed 8196 times by 8 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
8196
7224-
7225/*-
7226** This routine redistributes cells on the iParentIdx'th child of pParent-
7227** (hereafter "the page") and up to 2 siblings so that all pages have about the-
7228** same amount of free space. Usually a single sibling on either side of the-
7229** page are used in the balancing, though both siblings might come from one-
7230** side if the page is the first or last child of its parent. If the page -
7231** has fewer than 2 siblings (something which can only happen if the page-
7232** is a root page or a child of a root page) then all available siblings-
7233** participate in the balancing.-
7234**-
7235** The number of siblings of the page might be increased or decreased by -
7236** one or two in an effort to keep pages nearly full but not over full. -
7237**-
7238** Note that when this routine is called, some of the cells on the page-
7239** might not actually be stored in MemPage.aData[]. This can happen-
7240** if the page is overfull. This routine ensures that all cells allocated-
7241** to the page and its siblings fit into MemPage.aData[] before returning.-
7242**-
7243** In the course of balancing the page and its siblings, cells may be-
7244** inserted into or removed from the parent page (pParent). Doing so-
7245** may cause the parent page to become overfull or underfull. If this-
7246** happens, it is the responsibility of the caller to invoke the correct-
7247** balancing routine to fix this problem (see the balance() routine). -
7248**-
7249** If this routine fails for any reason, it might leave the database-
7250** in a corrupted state. So if this routine fails, the database should-
7251** be rolled back.-
7252**-
7253** The third argument to this function, aOvflSpace, is a pointer to a-
7254** buffer big enough to hold one page. If while inserting cells into the parent-
7255** page (pParent) the parent page becomes overfull, this buffer is-
7256** used to store the parent's overflow cells. Because this function inserts-
7257** a maximum of four divider cells into the parent page, and the maximum-
7258** size of a cell stored within an internal node is always less than 1/4-
7259** of the page-size, the aOvflSpace[] buffer is guaranteed to be large-
7260** enough for all overflow cells.-
7261**-
7262** If aOvflSpace is set to a null pointer, this function returns -
7263** SQLITE_NOMEM.-
7264*/-
7265static int balance_nonroot(-
7266 MemPage *pParent, /* Parent page of siblings being balanced */-
7267 int iParentIdx, /* Index of "the page" in pParent */-
7268 u8 *aOvflSpace, /* page-size bytes of space for parent ovfl */-
7269 int isRoot, /* True if pParent is a root-page */-
7270 int bBulk /* True if this call is part of a bulk load */-
7271){-
7272 BtShared *pBt; /* The whole database */-
7273 int nMaxCells = 0; /* Allocated size of apCell, szCell, aFrom. */-
7274 int nNew = 0; /* Number of pages in apNew[] */-
7275 int nOld; /* Number of pages in apOld[] */-
7276 int i, j, k; /* Loop counters */-
7277 int nxDiv; /* Next divider slot in pParent->aCell[] */-
7278 int rc = SQLITE_OK; /* The return code */-
7279 u16 leafCorrection; /* 4 if pPage is a leaf. 0 if not */-
7280 int leafData; /* True if pPage is a leaf of a LEAFDATA tree */-
7281 int usableSpace; /* Bytes in pPage beyond the header */-
7282 int pageFlags; /* Value of pPage->aData[0] */-
7283 int iSpace1 = 0; /* First unused byte of aSpace1[] */-
7284 int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */-
7285 int szScratch; /* Size of scratch memory requested */-
7286 MemPage *apOld[NB]; /* pPage and up to two siblings */-
7287 MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */-
7288 u8 *pRight; /* Location in parent of right-sibling pointer */-
7289 u8 *apDiv[NB-1]; /* Divider cells in pParent */-
7290 int cntNew[NB+2]; /* Index in b.paCell[] of cell after i-th page */-
7291 int cntOld[NB+2]; /* Old index in b.apCell[] */-
7292 int szNew[NB+2]; /* Combined size of cells placed on i-th page */-
7293 u8 *aSpace1; /* Space for copies of dividers cells */-
7294 Pgno pgno; /* Temp var to store a page number in */-
7295 u8 abDone[NB+2]; /* True after i'th new page is populated */-
7296 Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */-
7297 Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */-
7298 u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */-
7299 CellArray b; /* Parsed information on cells being balanced */-
7300-
7301 memset(abDone, 0, sizeof(abDone));-
7302 b.nCell = 0;-
7303 b.apCell = 0;-
7304 pBt = pParent->pBt;-
7305 assert( sqlite3_mutex_held(pBt->mutex) );-
7306 assert( sqlite3PagerIswriteable(pParent->pDbPage) );-
7307-
7308#if 0-
7309 TRACE(("BALANCE: begin page %d child of %d\n", pPage->pgno, pParent->pgno));-
7310#endif-
7311-
7312 /* At this point pParent may have at most one overflow cell. And if-
7313 ** this overflow cell is present, it must be the cell with -
7314 ** index iParentIdx. This scenario comes about when this function-
7315 ** is called (indirectly) from sqlite3BtreeDelete().-
7316 */-
7317 assert( pParent->nOverflow==0 || pParent->nOverflow==1 );-
7318 assert( pParent->nOverflow==0 || pParent->aiOvfl[0]==iParentIdx );-
7319-
7320 if( !aOvflSpace ){
!aOvflSpaceDescription
TRUEnever evaluated
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
0-748698
7321 return SQLITE_NOMEM_BKPT;
never executed: return 7;
0
7322 }-
7323-
7324 /* Find the sibling pages to balance. Also locate the cells in pParent -
7325 ** that divide the siblings. An attempt is made to find NN siblings on -
7326 ** either side of pPage. More siblings are taken from one side, however, -
7327 ** if there are fewer than NN siblings on the other side. If pParent-
7328 ** has NB or fewer children then all children of pParent are taken. -
7329 **-
7330 ** This loop also drops the divider cells from the parent page. This-
7331 ** way, the remainder of the function does not have to deal with any-
7332 ** overflow cells in the parent page, since if any existed they will-
7333 ** have already been removed.-
7334 */-
7335 i = pParent->nOverflow + pParent->nCell;-
7336 if( i<2 ){
i<2Description
TRUEevaluated 78514 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 670184 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
78514-670184
7337 nxDiv = 0;-
7338 }else{
executed 78514 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
78514
7339 assert( bBulk==0 || bBulk==1 );-
7340 if( iParentIdx==0 ){
iParentIdx==0Description
TRUEevaluated 51106 times by 112 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (338)
  • Self test (339)
  • Self test (340)
  • Self test (341)
  • Self test (342)
  • Self test (343)
  • Self test (344)
  • Self test (345)
  • Self test (346)
  • Self test (347)
  • Self test (348)
  • Self test (349)
  • Self test (350)
  • Self test (351)
  • Self test (352)
  • Self test (353)
  • Self test (354)
  • ...
FALSEevaluated 619078 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
51106-619078
7341 nxDiv = 0;-
7342 }else if( iParentIdx==i ){
executed 51106 times by 112 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (32)
  • Self test (33)
  • Self test (338)
  • Self test (339)
  • Self test (340)
  • Self test (341)
  • Self test (342)
  • Self test (343)
  • Self test (344)
  • Self test (345)
  • Self test (346)
  • Self test (347)
  • Self test (348)
  • Self test (349)
  • Self test (350)
  • Self test (351)
  • Self test (352)
  • Self test (353)
  • Self test (354)
  • ...
iParentIdx==iDescription
TRUEevaluated 370022 times by 150 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • 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)
  • Self test (319)
  • ...
FALSEevaluated 249056 times by 323 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
51106-370022
7343 nxDiv = i-2+bBulk;-
7344 }else{
executed 370022 times by 150 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • 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)
  • Self test (319)
  • ...
370022
7345 nxDiv = iParentIdx-1;-
7346 }
executed 249056 times by 323 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
249056
7347 i = 2-bBulk;-
7348 }
executed 670184 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
670184
7349 nOld = i+1;-
7350 if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){
(i+nxDiv-pPare...pParent->nCellDescription
TRUEevaluated 474737 times by 151 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 (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)
  • ...
FALSEevaluated 273961 times by 323 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
273961-474737
7351 pRight = &pParent->aData[pParent->hdrOffset+8];-
7352 }else{
executed 474737 times by 151 tests: end of block
Executed 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 (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)
  • ...
474737
7353 pRight = findCell(pParent, i+nxDiv-pParent->nOverflow);-
7354 }
executed 273961 times by 323 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
273961
7355 pgno = get4byte(pRight);-
7356 while( 1 ){-
7357 rc = getAndInitPage(pBt, pgno, &apOld[i], 0, 0);-
7358 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 1945832 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
0-1945832
7359 memset(apOld, 0, (i+1)*sizeof(MemPage*));-
7360 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7361 }-
7362 nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow;-
7363 if( (i--)==0 ) break;
executed 748698 times by 325 tests: break;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
(i--)==0Description
TRUEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 1197134 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
748698-1197134
7364-
7365 if( pParent->nOverflow && i+nxDiv==pParent->aiOvfl[0] ){
pParent->nOverflowDescription
TRUEnever evaluated
FALSEevaluated 1197134 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
i+nxDiv==pParent->aiOvfl[0]Description
TRUEnever evaluated
FALSEnever evaluated
0-1197134
7366 apDiv[i] = pParent->apOvfl[0];-
7367 pgno = get4byte(apDiv[i]);-
7368 szNew[i] = pParent->xCellSize(pParent, apDiv[i]);-
7369 pParent->nOverflow = 0;-
7370 }else{
never executed: end of block
0
7371 apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow);-
7372 pgno = get4byte(apDiv[i]);-
7373 szNew[i] = pParent->xCellSize(pParent, apDiv[i]);-
7374-
7375 /* Drop the cell from the parent page. apDiv[i] still points to-
7376 ** the cell within the parent, even though it has been dropped.-
7377 ** This is safe because dropping a cell only overwrites the first-
7378 ** four bytes of it, and this function does not need the first-
7379 ** four bytes of the divider cell. So the pointer is safe to use-
7380 ** later on. -
7381 **-
7382 ** But not if we are in secure-delete mode. In secure-delete mode,-
7383 ** the dropCell() routine will overwrite the entire cell with zeroes.-
7384 ** In this case, temporarily copy the cell into the aOvflSpace[]-
7385 ** buffer. It will be copied out again as soon as the aSpace[] buffer-
7386 ** is allocated. */-
7387 if( pBt->btsFlags & BTS_FAST_SECURE ){
pBt->btsFlags & 0x000cDescription
TRUEnever evaluated
FALSEevaluated 1197134 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
0-1197134
7388 int iOff;-
7389-
7390 iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData);-
7391 if( (iOff+szNew[i])>(int)pBt->usableSize ){
(iOff+szNew[i]...Bt->usableSizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
7392 rc = SQLITE_CORRUPT_BKPT;-
7393 memset(apOld, 0, (i+1)*sizeof(MemPage*));-
7394 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7395 }else{-
7396 memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]);-
7397 apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData];-
7398 }
never executed: end of block
0
7399 }-
7400 dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i], &rc);-
7401 }
executed 1197134 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
1197134
7402 }-
7403-
7404 /* Make nMaxCells a multiple of 4 in order to preserve 8-byte-
7405 ** alignment */-
7406 nMaxCells = (nMaxCells + 3)&~3;-
7407-
7408 /*-
7409 ** Allocate space for memory structures-
7410 */-
7411 szScratch =-
7412 nMaxCells*sizeof(u8*) /* b.apCell */-
7413 + nMaxCells*sizeof(u16) /* b.szCell */-
7414 + pBt->pageSize; /* aSpace1 */-
7415-
7416 assert( szScratch<=6*(int)pBt->pageSize );-
7417 b.apCell = sqlite3StackAllocRaw(0, szScratch );-
7418 if( b.apCell==0 ){
b.apCell==0Description
TRUEnever evaluated
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
0-748698
7419 rc = SQLITE_NOMEM_BKPT;-
7420 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7421 }-
7422 b.szCell = (u16*)&b.apCell[nMaxCells];-
7423 aSpace1 = (u8*)&b.szCell[nMaxCells];-
7424 assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );-
7425-
7426 /*-
7427 ** Load pointers to all cells on sibling pages and the divider cells-
7428 ** into the local b.apCell[] array. Make copies of the divider cells-
7429 ** into space obtained from aSpace1[]. The divider cells have already-
7430 ** been removed from pParent.-
7431 **-
7432 ** If the siblings are on leaf pages, then the child pointers of the-
7433 ** divider cells are stripped from the cells before they are copied-
7434 ** into aSpace1[]. In this way, all cells in b.apCell[] are without-
7435 ** child pointers. If siblings are not leaves, then all cell in-
7436 ** b.apCell[] include child pointers. Either way, all cells in b.apCell[]-
7437 ** are alike.-
7438 **-
7439 ** leafCorrection: 4 if pPage is a leaf. 0 if pPage is not a leaf.-
7440 ** leafData: 1 if pPage holds key+data and pParent holds only keys.-
7441 */-
7442 b.pRef = apOld[0];-
7443 leafCorrection = b.pRef->leaf*4;-
7444 leafData = b.pRef->intKeyLeaf;-
7445 for(i=0; i<nOld; i++){
i<nOldDescription
TRUEevaluated 1945832 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
748698-1945832
7446 MemPage *pOld = apOld[i];-
7447 int limit = pOld->nCell;-
7448 u8 *aData = pOld->aData;-
7449 u16 maskPage = pOld->maskPage;-
7450 u8 *piCell = aData + pOld->cellOffset;-
7451 u8 *piEnd;-
7452-
7453 /* Verify that all sibling pages are of the same "type" (table-leaf,-
7454 ** table-interior, index-leaf, or index-interior).-
7455 */-
7456 if( pOld->aData[0]!=apOld[0]->aData[0] ){
pOld->aData[0]...d[0]->aData[0]Description
TRUEnever evaluated
FALSEevaluated 1945832 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
0-1945832
7457 rc = SQLITE_CORRUPT_BKPT;-
7458 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7459 }-
7460-
7461 /* Load b.apCell[] with pointers to all cells in pOld. If pOld-
7462 ** contains overflow cells, include them in the b.apCell[] array-
7463 ** in the correct spot.-
7464 **-
7465 ** Note that when there are multiple overflow cells, it is always the-
7466 ** case that they are sequential and adjacent. This invariant arises-
7467 ** because multiple overflows can only occurs when inserting divider-
7468 ** cells into a parent on a prior balance, and divider cells are always-
7469 ** adjacent and are inserted in order. There is an assert() tagged-
7470 ** with "NOTE 1" in the overflow cell insertion loop to prove this-
7471 ** invariant.-
7472 **-
7473 ** This must be done in advance. Once the balance starts, the cell-
7474 ** offset section of the btree page will be overwritten and we will no-
7475 ** long be able to find the cells if a pointer to each cell is not saved-
7476 ** first.-
7477 */-
7478 memset(&b.szCell[b.nCell], 0, sizeof(b.szCell[0])*(limit+pOld->nOverflow));-
7479 if( pOld->nOverflow>0 ){
pOld->nOverflow>0Description
TRUEevaluated 525131 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 1420701 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
525131-1420701
7480 limit = pOld->aiOvfl[0];-
7481 for(j=0; j<limit; j++){
j<limitDescription
TRUEevaluated 12349740 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 525131 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
525131-12349740
7482 b.apCell[b.nCell] = aData + (maskPage & get2byteAligned(piCell));-
7483 piCell += 2;-
7484 b.nCell++;-
7485 }
executed 12349740 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
12349740
7486 for(k=0; k<pOld->nOverflow; k++){
k<pOld->nOverflowDescription
TRUEevaluated 525145 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 525131 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
525131-525145
7487 assert( k==0 || pOld->aiOvfl[k-1]+1==pOld->aiOvfl[k] );/* NOTE 1 */-
7488 b.apCell[b.nCell] = pOld->apOvfl[k];-
7489 b.nCell++;-
7490 }
executed 525145 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
525145
7491 }
executed 525131 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
525131
7492 piEnd = aData + pOld->cellOffset + 2*pOld->nCell;-
7493 while( piCell<piEnd ){
piCell<piEndDescription
TRUEevaluated 30612145 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 1945832 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
1945832-30612145
7494 assert( b.nCell<nMaxCells );-
7495 b.apCell[b.nCell] = aData + (maskPage & get2byteAligned(piCell));-
7496 piCell += 2;-
7497 b.nCell++;-
7498 }
executed 30612145 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
30612145
7499-
7500 cntOld[i] = b.nCell;-
7501 if( i<nOld-1 && !leafData){
i<nOld-1Description
TRUEevaluated 1197134 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
!leafDataDescription
TRUEevaluated 726100 times by 324 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
FALSEevaluated 471034 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
471034-1197134
7502 u16 sz = (u16)szNew[i];-
7503 u8 *pTemp;-
7504 assert( b.nCell<nMaxCells );-
7505 b.szCell[b.nCell] = sz;-
7506 pTemp = &aSpace1[iSpace1];-
7507 iSpace1 += sz;-
7508 assert( sz<=pBt->maxLocal+23 );-
7509 assert( iSpace1 <= (int)pBt->pageSize );-
7510 memcpy(pTemp, apDiv[i], sz);-
7511 b.apCell[b.nCell] = pTemp+leafCorrection;-
7512 assert( leafCorrection==0 || leafCorrection==4 );-
7513 b.szCell[b.nCell] = b.szCell[b.nCell] - leafCorrection;-
7514 if( !pOld->leaf ){
!pOld->leafDescription
TRUEevaluated 169945 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 556155 times by 323 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
169945-556155
7515 assert( leafCorrection==0 );-
7516 assert( pOld->hdrOffset==0 );-
7517 /* The right pointer of the child page pOld becomes the left-
7518 ** pointer of the divider cell */-
7519 memcpy(b.apCell[b.nCell], &pOld->aData[8], 4);-
7520 }else{
executed 169945 times by 3 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
  • Self test (64)
169945
7521 assert( leafCorrection==4 );-
7522 while( b.szCell[b.nCell]<4 ){
b.szCell[b.nCell]<4Description
TRUEnever evaluated
FALSEevaluated 556155 times by 323 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
0-556155
7523 /* Do not allow any cells smaller than 4 bytes. If a smaller cell-
7524 ** does exist, pad it with 0x00 bytes. */-
7525 assert( b.szCell[b.nCell]==3 || CORRUPT_DB );-
7526 assert( b.apCell[b.nCell]==&aSpace1[iSpace1-3] || CORRUPT_DB );-
7527 aSpace1[iSpace1++] = 0x00;-
7528 b.szCell[b.nCell]++;-
7529 }
never executed: end of block
0
7530 }
executed 556155 times by 323 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
556155
7531 b.nCell++;-
7532 }
executed 726100 times by 324 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • ...
726100
7533 }
executed 1945832 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
1945832
7534-
7535 /*-
7536 ** Figure out the number of pages needed to hold all b.nCell cells.-
7537 ** Store this number in "k". Also compute szNew[] which is the total-
7538 ** size of all cells on the i-th page and cntNew[] which is the index-
7539 ** in b.apCell[] of the cell that divides page i from page i+1. -
7540 ** cntNew[k] should equal b.nCell.-
7541 **-
7542 ** Values computed by this block:-
7543 **-
7544 ** k: The total number of sibling pages-
7545 ** szNew[i]: Spaced used on the i-th sibling page.-
7546 ** cntNew[i]: Index in b.apCell[] and b.szCell[] for the first cell to-
7547 ** the right of the i-th sibling page.-
7548 ** usableSpace: Number of bytes of space available on each sibling.-
7549 ** -
7550 */-
7551 usableSpace = pBt->usableSize - 12 + leafCorrection;-
7552 for(i=0; i<nOld; i++){
i<nOldDescription
TRUEevaluated 1945832 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
748698-1945832
7553 MemPage *p = apOld[i];-
7554 szNew[i] = usableSpace - p->nFree;-
7555 for(j=0; j<p->nOverflow; j++){
j<p->nOverflowDescription
TRUEevaluated 525145 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 1945832 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
525145-1945832
7556 szNew[i] += 2 + p->xCellSize(p, p->apOvfl[j]);-
7557 }
executed 525145 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
525145
7558 cntNew[i] = cntOld[i];-
7559 }
executed 1945832 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
1945832
7560 k = nOld;-
7561 for(i=0; i<k; i++){
i<kDescription
TRUEevaluated 2044855 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
748698-2044855
7562 int sz;-
7563 while( szNew[i]>usableSpace ){
szNew[i]>usableSpaceDescription
TRUEevaluated 343060 times by 323 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • ...
FALSEevaluated 2044855 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
343060-2044855
7564 if( i+1>=k ){
i+1>=kDescription
TRUEevaluated 219419 times by 271 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • ...
FALSEevaluated 123641 times by 321 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • ...
123641-219419
7565 k = i+2;-
7566 if( k>NB+2 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
never executed: goto balance_cleanup;
k>(1*2+1)+2Description
TRUEnever evaluated
FALSEevaluated 219419 times by 271 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • ...
0-219419
7567 szNew[k-1] = 0;-
7568 cntNew[k-1] = b.nCell;-
7569 }
executed 219419 times by 271 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • ...
219419
7570 sz = 2 + cachedCellSize(&b, cntNew[i]-1);-
7571 szNew[i] -= sz;-
7572 if( !leafData ){
!leafDataDescription
TRUEevaluated 273961 times by 323 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • ...
FALSEevaluated 69099 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
69099-273961
7573 if( cntNew[i]<b.nCell ){
cntNew[i]<b.nCellDescription
TRUEevaluated 113560 times by 321 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • ...
FALSEevaluated 160401 times by 271 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • ...
113560-160401
7574 sz = 2 + cachedCellSize(&b, cntNew[i]);-
7575 }else{
executed 113560 times by 321 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • ...
113560
7576 sz = 0;-
7577 }
executed 160401 times by 271 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • ...
160401
7578 }-
7579 szNew[i+1] += sz;-
7580 cntNew[i]--;-
7581 }
executed 343060 times by 323 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • ...
343060
7582 while( cntNew[i]<b.nCell ){
cntNew[i]<b.nCellDescription
TRUEevaluated 4915134 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
748698-4915134
7583 sz = 2 + cachedCellSize(&b, cntNew[i]);-
7584 if( szNew[i]+sz>usableSpace ) break;
executed 1296157 times by 325 tests: break;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
szNew[i]+sz>usableSpaceDescription
TRUEevaluated 1296157 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 3618977 times by 222 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (233)
  • Self test (234)
  • Self test (235)
  • Self test (236)
  • Self test (237)
  • Self test (238)
  • Self test (239)
  • Self test (240)
  • Self test (241)
  • Self test (242)
  • Self test (243)
  • Self test (244)
  • Self test (245)
  • Self test (246)
  • Self test (247)
  • ...
1296157-3618977
7585 szNew[i] += sz;-
7586 cntNew[i]++;-
7587 if( !leafData ){
!leafDataDescription
TRUEevaluated 2074046 times by 221 tests
Evaluated 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 (23)
  • Self test (233)
  • Self test (234)
  • Self test (235)
  • Self test (236)
  • Self test (237)
  • Self test (238)
  • Self test (239)
  • Self test (240)
  • Self test (241)
  • Self test (242)
  • Self test (243)
  • Self test (244)
  • Self test (245)
  • Self test (246)
  • Self test (247)
  • Self test (248)
  • ...
FALSEevaluated 1544931 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
1544931-2074046
7588 if( cntNew[i]<b.nCell ){
cntNew[i]<b.nCellDescription
TRUEevaluated 2068461 times by 221 tests
Evaluated 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 (23)
  • Self test (233)
  • Self test (234)
  • Self test (235)
  • Self test (236)
  • Self test (237)
  • Self test (238)
  • Self test (239)
  • Self test (240)
  • Self test (241)
  • Self test (242)
  • Self test (243)
  • Self test (244)
  • Self test (245)
  • Self test (246)
  • Self test (247)
  • Self test (248)
  • ...
FALSEevaluated 5585 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)
5585-2068461
7589 sz = 2 + cachedCellSize(&b, cntNew[i]);-
7590 }else{
executed 2068461 times by 221 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 (23)
  • Self test (233)
  • Self test (234)
  • Self test (235)
  • Self test (236)
  • Self test (237)
  • Self test (238)
  • Self test (239)
  • Self test (240)
  • Self test (241)
  • Self test (242)
  • Self test (243)
  • Self test (244)
  • Self test (245)
  • Self test (246)
  • Self test (247)
  • Self test (248)
  • ...
2068461
7591 sz = 0;-
7592 }
executed 5585 times by 11 tests: end of block
Executed 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)
5585
7593 }-
7594 szNew[i+1] -= sz;-
7595 }
executed 3618977 times by 222 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (233)
  • Self test (234)
  • Self test (235)
  • Self test (236)
  • Self test (237)
  • Self test (238)
  • Self test (239)
  • Self test (240)
  • Self test (241)
  • Self test (242)
  • Self test (243)
  • Self test (244)
  • Self test (245)
  • Self test (246)
  • Self test (247)
  • ...
3618977
7596 if( cntNew[i]>=b.nCell ){
cntNew[i]>=b.nCellDescription
TRUEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 1296157 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
748698-1296157
7597 k = i+1;-
7598 }else if( cntNew[i] <= (i>0 ? cntNew[i-1] : 0) ){
executed 748698 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
cntNew[i] <= (...tNew[i-1] : 0)Description
TRUEnever evaluated
FALSEevaluated 1296157 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
i>0Description
TRUEevaluated 551790 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 744367 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
0-1296157
7599 rc = SQLITE_CORRUPT_BKPT;-
7600 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7601 }-
7602 }
executed 2044855 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
2044855
7603-
7604 /*-
7605 ** The packing computed by the previous block is biased toward the siblings-
7606 ** on the left side (siblings with smaller keys). The left siblings are-
7607 ** always nearly full, while the right-most sibling might be nearly empty.-
7608 ** The next block of code attempts to adjust the packing of siblings to-
7609 ** get a better balance.-
7610 **-
7611 ** This adjustment is more than an optimization. The packing above might-
7612 ** be so out of balance as to be illegal. For example, the right-most-
7613 ** sibling might be completely empty. This adjustment is not optional.-
7614 */-
7615 for(i=k-1; i>0; i--){
i>0Description
TRUEevaluated 1296157 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 748698 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
748698-1296157
7616 int szRight = szNew[i]; /* Size of sibling on the right */-
7617 int szLeft = szNew[i-1]; /* Size of sibling on the left */-
7618 int r; /* Index of right-most cell in left sibling */-
7619 int d; /* Index of first cell to the left of right sibling */-
7620-
7621 r = cntNew[i-1] - 1;-
7622 d = r + 1 - leafData;-
7623 (void)cachedCellSize(&b, d);-
7624 do{-
7625 assert( d<nMaxCells );-
7626 assert( r<nMaxCells );-
7627 (void)cachedCellSize(&b, r);-
7628 if( szRight!=0
szRight!=0Description
TRUEevaluated 4282399 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 179310 times by 271 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • ...
179310-4282399
7629 && (bBulk || szRight+b.szCell[d]+2 > szLeft-(b.szCell[r]+(i==k-1?0:2)))){
i==k-1Description
TRUEevaluated 2415816 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 1485458 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
bBulkDescription
TRUEevaluated 381125 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3901274 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
szRight+b.szCe...+(i==k-1?0:2))Description
TRUEevaluated 915032 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 2986242 times by 272 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • ...
381125-3901274
7630 break;
executed 1296157 times by 325 tests: break;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
1296157
7631 }-
7632 szRight += b.szCell[d] + 2;-
7633 szLeft -= b.szCell[r] + 2;-
7634 cntNew[i-1] = r;-
7635 r--;-
7636 d--;-
7637 }while( r>=0 );
executed 3165552 times by 272 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • ...
r>=0Description
TRUEevaluated 3165552 times by 272 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (182)
  • Self test (183)
  • Self test (184)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • ...
FALSEnever evaluated
0-3165552
7638 szNew[i] = szRight;-
7639 szNew[i-1] = szLeft;-
7640 if( cntNew[i-1] <= (i>1 ? cntNew[i-2] : 0) ){
cntNew[i-1] <=...tNew[i-2] : 0)Description
TRUEnever evaluated
FALSEevaluated 1296157 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
i>1Description
TRUEevaluated 551790 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 744367 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
0-1296157
7641 rc = SQLITE_CORRUPT_BKPT;-
7642 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7643 }-
7644 }
executed 1296157 times by 325 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
1296157
7645-
7646 /* Sanity check: For a non-corrupt database file one of the follwing-
7647 ** must be true:-
7648 ** (1) We found one or more cells (cntNew[0])>0), or-
7649 ** (2) pPage is a virtual root page. A virtual root page is when-
7650 ** the real root page is page 1 and we are the only child of-
7651 ** that page.-
7652 */-
7653 assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) || CORRUPT_DB);-
7654 TRACE(("BALANCE: old: %d(nc=%d) %d(nc=%d) %d(nc=%d)\n",-
7655 apOld[0]->pgno, apOld[0]->nCell,-
7656 nOld>=2 ? apOld[1]->pgno : 0, nOld>=2 ? apOld[1]->nCell : 0,-
7657 nOld>=3 ? apOld[2]->pgno : 0, nOld>=3 ? apOld[2]->nCell : 0-
7658 ));-
7659-
7660 /*-
7661 ** Allocate k new pages. Reuse old pages where possible.-
7662 */-
7663 pageFlags = apOld[0]->aData[0];-
7664 for(i=0; i<k; i++){
i<kDescription
TRUEevaluated 2044837 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 748686 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686-2044837
7665 MemPage *pNew;-
7666 if( i<nOld ){
i<nOldDescription
TRUEevaluated 1825421 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
FALSEevaluated 219416 times by 268 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • ...
219416-1825421
7667 pNew = apNew[i] = apOld[i];-
7668 apOld[i] = 0;-
7669 rc = sqlite3PagerWrite(pNew->pDbPage);-
7670 nNew++;-
7671 if( rc ) goto balance_cleanup;
never executed: goto balance_cleanup;
rcDescription
TRUEnever evaluated
FALSEevaluated 1825412 times by 322 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
0-1825412
7672 }else{
executed 1825412 times by 322 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
1825412
7673 assert( i>0 );-
7674 rc = allocateBtreePage(pBt, &pNew, &pgno, (bBulk ? 1 : pgno), 0);-
7675 if( rc ) goto balance_cleanup;
executed 3 times by 1 test: goto balance_cleanup;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 219413 times by 268 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • ...
3-219413
7676 zeroPage(pNew, pageFlags);-
7677 apNew[i] = pNew;-
7678 nNew++;-
7679 cntOld[i] = b.nCell;-
7680-
7681 /* Set the pointer-map entry for the new sibling page. */-
7682 if( ISAUTOVACUUM ){
(pBt->autoVacuum)Description
TRUEevaluated 5633 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 213780 times by 268 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • ...
5633-213780
7683 ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);-
7684 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 5633 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-5633
7685 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7686 }-
7687 }
executed 5633 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
5633
7688 }
executed 219413 times by 268 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • ...
219413
7689 }-
7690-
7691 /*-
7692 ** Reassign page numbers so that the new pages are in ascending order. -
7693 ** This helps to keep entries in the disk file in order so that a scan-
7694 ** of the table is closer to a linear scan through the file. That in turn -
7695 ** helps the operating system to deliver pages from the disk more rapidly.-
7696 **-
7697 ** An O(n^2) insertion sort algorithm is used, but since n is never more -
7698 ** than (NB+2) (a small constant), that should not be a problem.-
7699 **-
7700 ** When NB==3, this one optimization makes the database about 25% faster -
7701 ** for large insertions and deletions.-
7702 */-
7703 for(i=0; i<nNew; i++){
i<nNewDescription
TRUEevaluated 2044819 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 748686 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686-2044819
7704 aPgOrder[i] = aPgno[i] = apNew[i]->pgno;-
7705 aPgFlags[i] = apNew[i]->pDbPage->flags;-
7706 for(j=0; j<i; j++){
j<iDescription
TRUEevaluated 1955817 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2044819 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1955817-2044819
7707 if( aPgno[j]==aPgno[i] ){
aPgno[j]==aPgno[i]Description
TRUEnever evaluated
FALSEevaluated 1955817 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
0-1955817
7708 /* This branch is taken if the set of sibling pages somehow contains-
7709 ** duplicate entries. This can happen if the database is corrupt. -
7710 ** It would be simpler to detect this as part of the loop below, but-
7711 ** we do the detection here in order to avoid populating the pager-
7712 ** cache with two separate objects associated with the same-
7713 ** page number. */-
7714 assert( CORRUPT_DB );-
7715 rc = SQLITE_CORRUPT_BKPT;-
7716 goto balance_cleanup;
never executed: goto balance_cleanup;
0
7717 }-
7718 }
executed 1955817 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1955817
7719 }
executed 2044819 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2044819
7720 for(i=0; i<nNew; i++){
i<nNewDescription
TRUEevaluated 2044819 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 748686 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686-2044819
7721 int iBest = 0; /* aPgno[] index of page number to use */-
7722 for(j=1; j<nNew; j++){
j<nNewDescription
TRUEevaluated 3911634 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2044819 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2044819-3911634
7723 if( aPgOrder[j]<aPgOrder[iBest] ) iBest = j;
executed 1312754 times by 319 tests: iBest = j;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
aPgOrder[j]<aPgOrder[iBest]Description
TRUEevaluated 1312754 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2598880 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1312754-2598880
7724 }
executed 3911634 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
3911634
7725 pgno = aPgOrder[iBest];-
7726 aPgOrder[iBest] = 0xffffffff;-
7727 if( iBest!=i ){
iBest!=iDescription
TRUEevaluated 224356 times by 151 tests
Evaluated 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)
  • ...
FALSEevaluated 1820463 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
224356-1820463
7728 if( iBest>i ){
iBest>iDescription
TRUEevaluated 109975 times by 151 tests
Evaluated 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)
  • ...
FALSEevaluated 114381 times by 151 tests
Evaluated 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)
  • ...
109975-114381
7729 sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0);-
7730 }
executed 109975 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)
  • ...
109975
7731 sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]);-
7732 apNew[i]->pgno = pgno;-
7733 }
executed 224356 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)
  • ...
224356
7734 }
executed 2044819 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2044819
7735-
7736 TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) "-
7737 "%d(%d nc=%d) %d(%d nc=%d)\n",-
7738 apNew[0]->pgno, szNew[0], cntNew[0],-
7739 nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,-
7740 nNew>=2 ? cntNew[1] - cntNew[0] - !leafData : 0,-
7741 nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,-
7742 nNew>=3 ? cntNew[2] - cntNew[1] - !leafData : 0,-
7743 nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,-
7744 nNew>=4 ? cntNew[3] - cntNew[2] - !leafData : 0,-
7745 nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0,-
7746 nNew>=5 ? cntNew[4] - cntNew[3] - !leafData : 0-
7747 ));-
7748-
7749 assert( sqlite3PagerIswriteable(pParent->pDbPage) );-
7750 put4byte(pRight, apNew[nNew-1]->pgno);-
7751-
7752 /* If the sibling pages are not leaves, ensure that the right-child pointer-
7753 ** of the right-most new sibling page is set to the value that was -
7754 ** originally in the same field of the right-most old sibling page. */-
7755 if( (pageFlags & PTF_LEAF)==0 && nOld!=nNew ){
(pageFlags & 0x08)==0Description
TRUEevaluated 131014 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 617672 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
nOld!=nNewDescription
TRUEevaluated 23238 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
FALSEevaluated 107776 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
  • Self test (64)
23238-617672
7756 MemPage *pOld = (nNew>nOld ? apNew : apOld)[nOld-1];
nNew>nOldDescription
TRUEevaluated 22356 times by 3 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
FALSEevaluated 882 times by 1 test
Evaluated by:
  • Self test (438)
882-22356
7757 memcpy(&apNew[nNew-1]->aData[8], &pOld->aData[8], 4);-
7758 }
executed 23238 times by 3 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (64)
23238
7759-
7760 /* Make any required updates to pointer map entries associated with -
7761 ** cells stored on sibling pages following the balance operation. Pointer-
7762 ** map entries associated with divider cells are set by the insertCell()-
7763 ** routine. The associated pointer map entries are:-
7764 **-
7765 ** a) if the cell contains a reference to an overflow chain, the-
7766 ** entry associated with the first page in the overflow chain, and-
7767 **-
7768 ** b) if the sibling pages are not leaves, the child page associated-
7769 ** with the cell.-
7770 **-
7771 ** If the sibling pages are not leaves, then the pointer map entry -
7772 ** associated with the right-child of each sibling may also need to be -
7773 ** updated. This happens below, after the sibling pages have been -
7774 ** populated, not here.-
7775 */-
7776 if( ISAUTOVACUUM ){
(pBt->autoVacuum)Description
TRUEevaluated 74409 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 674277 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
74409-674277
7777 MemPage *pNew = apNew[0];-
7778 u8 *aOld = pNew->aData;-
7779 int cntOldNext = pNew->nCell + pNew->nOverflow;-
7780 int usableSize = pBt->usableSize;-
7781 int iNew = 0;-
7782 int iOld = 0;-
7783-
7784 for(i=0; i<b.nCell; i++){
i<b.nCellDescription
TRUEevaluated 1681776 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 74409 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
74409-1681776
7785 u8 *pCell = b.apCell[i];-
7786 if( i==cntOldNext ){
i==cntOldNextDescription
TRUEevaluated 141428 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 1540348 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
141428-1540348
7787 MemPage *pOld = (++iOld)<nNew ? apNew[iOld] : apOld[iOld];
(++iOld)<nNewDescription
TRUEevaluated 106195 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 35233 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
35233-106195
7788 cntOldNext += pOld->nCell + pOld->nOverflow + !leafData;-
7789 aOld = pOld->aData;-
7790 }
executed 141428 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
141428
7791 if( i==cntNew[iNew] ){
i==cntNew[iNew]Description
TRUEevaluated 111828 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 1569948 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
111828-1569948
7792 pNew = apNew[++iNew];-
7793 if( !leafData ) continue;
executed 62640 times by 3 tests: continue;
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
!leafDataDescription
TRUEevaluated 62640 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 49188 times by 1 test
Evaluated by:
  • Self test (438)
49188-62640
7794 }
executed 49188 times by 1 test: end of block
Executed by:
  • Self test (438)
49188
7795-
7796 /* Cell pCell is destined for new sibling page pNew. Originally, it-
7797 ** was either part of sibling page iOld (possibly an overflow cell), -
7798 ** or else the divider cell to the left of sibling page iOld. So,-
7799 ** if sibling page iOld had the same page number as pNew, and if-
7800 ** pCell really was a part of sibling page iOld (not a divider or-
7801 ** overflow cell), we can skip updating the pointer map entries. */-
7802 if( iOld>=nNew
iOld>=nNewDescription
TRUEevaluated 146299 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 1472837 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
146299-1472837
7803 || pNew->pgno!=aPgno[iOld]
pNew->pgno!=aPgno[iOld]Description
TRUEevaluated 368537 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 1104300 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
368537-1104300
7804 || !SQLITE_WITHIN(pCell,aOld,&aOld[usableSize])
((uptr)(pCell)>=(uptr)(aOld))Description
TRUEevaluated 1065000 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 39300 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
((uptr)(pCell)...[usableSize]))Description
TRUEevaluated 1046362 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 18638 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
18638-1065000
7805 ){-
7806 if( !leafCorrection ){
!leafCorrectionDescription
TRUEevaluated 77701 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 495073 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
77701-495073
7807 ptrmapPut(pBt, get4byte(pCell), PTRMAP_BTREE, pNew->pgno, &rc);-
7808 }
executed 77701 times by 1 test: end of block
Executed by:
  • Self test (438)
77701
7809 if( cachedCellSize(&b,i)>pNew->minLocal ){
cachedCellSize...pNew->minLocalDescription
TRUEevaluated 364237 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 208537 times by 1 test
Evaluated by:
  • Self test (438)
208537-364237
7810 ptrmapPutOvflPtr(pNew, pCell, &rc);-
7811 }
executed 364237 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
364237
7812 if( rc ) goto balance_cleanup;
never executed: goto balance_cleanup;
rcDescription
TRUEnever evaluated
FALSEevaluated 572774 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-572774
7813 }
executed 572774 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
572774
7814 }
executed 1619136 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1619136
7815 }
executed 74409 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
74409
7816-
7817 /* Insert new divider cells into pParent. */-
7818 for(i=0; i<nNew-1; i++){
i<nNew-1Description
TRUEevaluated 1296133 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 748686 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686-1296133
7819 u8 *pCell;-
7820 u8 *pTemp;-
7821 int sz;-
7822 MemPage *pNew = apNew[i];-
7823 j = cntNew[i];-
7824-
7825 assert( j<nMaxCells );-
7826 assert( b.apCell[j]!=0 );-
7827 pCell = b.apCell[j];-
7828 sz = b.szCell[j] + leafCorrection;-
7829 pTemp = &aOvflSpace[iOvflSpace];-
7830 if( !pNew->leaf ){
!pNew->leafDescription
TRUEevaluated 191419 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 1104714 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
191419-1104714
7831 memcpy(&pNew->aData[8], pCell, 4);-
7832 }else if( leafData ){
executed 191419 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (438)
  • Self test (54)
  • Self test (64)
leafDataDescription
TRUEevaluated 415241 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 689473 times by 317 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • ...
191419-689473
7833 /* If the tree is a leaf-data tree, and the siblings are leaves, -
7834 ** then there is no divider cell in b.apCell[]. Instead, the divider -
7835 ** cell consists of the integer key for the right-most cell of -
7836 ** the sibling-page assembled above only.-
7837 */-
7838 CellInfo info;-
7839 j--;-
7840 pNew->xParseCell(pNew, b.apCell[j], &info);-
7841 pCell = pTemp;-
7842 sz = 4 + putVarint(&pCell[4], info.nKey);-
7843 pTemp = 0;-
7844 }else{
executed 415241 times by 5 tests: end of block
Executed by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
415241
7845 pCell -= 4;-
7846 /* Obscure case for non-leaf-data trees: If the cell at pCell was-
7847 ** previously stored on a leaf node, and its reported size was 4-
7848 ** bytes, then it may actually be smaller than this -
7849 ** (see btreeParseCellPtr(), 4 bytes is the minimum size of-
7850 ** any cell). But it is important to pass the correct size to -
7851 ** insertCell(), so reparse the cell now.-
7852 **-
7853 ** This can only happen for b-trees used to evaluate "IN (SELECT ...)"-
7854 ** and WITHOUT ROWID tables with exactly one column which is the-
7855 ** primary key.-
7856 */-
7857 if( b.szCell[j]==4 ){
b.szCell[j]==4Description
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 689456 times by 317 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • ...
17-689456
7858 assert(leafCorrection==4);-
7859 sz = pParent->xCellSize(pParent, pCell);-
7860 }
executed 17 times by 1 test: end of block
Executed by:
  • Self test (438)
17
7861 }
executed 689473 times by 317 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • ...
689473
7862 iOvflSpace += sz;-
7863 assert( sz<=pBt->maxLocal+23 );-
7864 assert( iOvflSpace <= (int)pBt->pageSize );-
7865 insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno, &rc);-
7866 if( rc!=SQLITE_OK ) goto balance_cleanup;
never executed: goto balance_cleanup;
rc!=0Description
TRUEnever evaluated
FALSEevaluated 1296133 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
0-1296133
7867 assert( sqlite3PagerIswriteable(pParent->pDbPage) );-
7868 }
executed 1296133 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1296133
7869-
7870 /* Now update the actual sibling pages. The order in which they are updated-
7871 ** is important, as this code needs to avoid disrupting any page from which-
7872 ** cells may still to be read. In practice, this means:-
7873 **-
7874 ** (1) If cells are moving left (from apNew[iPg] to apNew[iPg-1])-
7875 ** then it is not safe to update page apNew[iPg] until after-
7876 ** the left-hand sibling apNew[iPg-1] has been updated.-
7877 **-
7878 ** (2) If cells are moving right (from apNew[iPg] to apNew[iPg+1])-
7879 ** then it is not safe to update page apNew[iPg] until after-
7880 ** the right-hand sibling apNew[iPg+1] has been updated.-
7881 **-
7882 ** If neither of the above apply, the page is safe to update.-
7883 **-
7884 ** The iPg value in the following loop starts at nNew-1 goes down-
7885 ** to 0, then back up to nNew-1 again, thus making two passes over-
7886 ** the pages. On the initial downward pass, only condition (1) above-
7887 ** needs to be tested because (2) will always be true from the previous-
7888 ** step. On the upward pass, both conditions are always true, so the-
7889 ** upwards pass simply processes pages that were missed on the downward-
7890 ** pass.-
7891 */-
7892 for(i=1-nNew; i<nNew; i++){
i<nNewDescription
TRUEevaluated 3340952 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 748686 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686-3340952
7893 int iPg = i<0 ? -i : i;
i<0Description
TRUEevaluated 1296133 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2044819 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1296133-2044819
7894 assert( iPg>=0 && iPg<nNew );-
7895 if( abDone[iPg] ) continue; /* Skip pages already processed */
executed 829361 times by 318 tests: continue;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
abDone[iPg]Description
TRUEevaluated 829361 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2511591 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
829361-2511591
7896 if( i>=0 /* On the upwards pass, or... */
i>=0Description
TRUEevaluated 1215458 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 1296133 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1215458-1296133
7897 || cntOld[iPg-1]>=cntNew[iPg-1] /* Condition (1) is true */
cntOld[iPg-1]>=cntNew[iPg-1]Description
TRUEevaluated 829361 times by 318 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 466772 times by 168 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (287)
  • Self test (288)
  • Self test (289)
  • Self test (290)
  • Self test (291)
  • Self test (292)
  • Self test (293)
  • Self test (294)
  • Self test (295)
  • Self test (296)
  • Self test (297)
  • Self test (298)
  • Self test (299)
  • Self test (300)
  • Self test (301)
  • ...
466772-829361
7898 ){-
7899 int iNew;-
7900 int iOld;-
7901 int nNewCell;-
7902-
7903 /* Verify condition (1): If cells are moving left, update iPg-
7904 ** only after iPg-1 has already been updated. */-
7905 assert( iPg==0 || cntOld[iPg-1]>=cntNew[iPg-1] || abDone[iPg-1] );-
7906-
7907 /* Verify condition (2): If cells are moving right, update iPg-
7908 ** only after iPg+1 has already been updated. */-
7909 assert( cntNew[iPg]>=cntOld[iPg] || abDone[iPg+1] );-
7910-
7911 if( iPg==0 ){
iPg==0Description
TRUEevaluated 748686 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 1296133 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686-1296133
7912 iNew = iOld = 0;-
7913 nNewCell = cntNew[0];-
7914 }else{
executed 748686 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686
7915 iOld = iPg<nOld ? (cntOld[iPg-1] + !leafData) : b.nCell;
iPg<nOldDescription
TRUEevaluated 1076720 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 219413 times by 268 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (185)
  • Self test (186)
  • Self test (187)
  • Self test (188)
  • Self test (189)
  • 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)
  • Self test (199)
  • Self test (20)
  • Self test (200)
  • Self test (201)
  • Self test (202)
  • ...
219413-1076720
7916 iNew = cntNew[iPg-1] + !leafData;-
7917 nNewCell = cntNew[iPg] - iNew;-
7918 }
executed 1296133 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1296133
7919-
7920 rc = editPage(apNew[iPg], iOld, iNew, nNewCell, &b);-
7921 if( rc ) goto balance_cleanup;
never executed: goto balance_cleanup;
rcDescription
TRUEnever evaluated
FALSEevaluated 2044819 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
0-2044819
7922 abDone[iPg]++;-
7923 apNew[iPg]->nFree = usableSpace-szNew[iPg];-
7924 assert( apNew[iPg]->nOverflow==0 );-
7925 assert( apNew[iPg]->nCell==nNewCell );-
7926 }
executed 2044819 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2044819
7927 }
executed 2511591 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2511591
7928-
7929 /* All pages have been processed exactly once */-
7930 assert( memcmp(abDone, "\01\01\01\01\01", nNew)==0 );-
7931-
7932 assert( nOld>0 );-
7933 assert( nNew>0 );-
7934-
7935 if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
isRootDescription
TRUEevaluated 179037 times by 18 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
FALSEevaluated 569649 times by 304 tests
Evaluated by:
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (160)
  • Self test (161)
  • ...
pParent->nCell==0Description
TRUEevaluated 3674 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
FALSEevaluated 175363 times by 18 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (14)
  • Self test (15)
  • Self test (16)
  • Self test (18)
  • Self test (20)
  • Self test (22)
  • Self test (23)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (54)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (8)
pParent->hdrOf...pNew[0]->nFreeDescription
TRUEevaluated 1036 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2638 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
1036-569649
7936 /* The root page of the b-tree now contains no cells. The only sibling-
7937 ** page is the right-child of the parent. Copy the contents of the-
7938 ** child page into the parent, decreasing the overall height of the-
7939 ** b-tree structure by one. This is described as the "balance-shallower"-
7940 ** sub-algorithm in some documentation.-
7941 **-
7942 ** If this is an auto-vacuum database, the call to copyNodeContent() -
7943 ** sets all pointer-map entries corresponding to database image pages -
7944 ** for which the pointer is stored within the content being copied.-
7945 **-
7946 ** It is critical that the child page be defragmented before being-
7947 ** copied into the parent, because if the parent is page 1 then it will-
7948 ** by smaller than the child due to the database header, and so all the-
7949 ** free space needs to be up front.-
7950 */-
7951 assert( nNew==1 || CORRUPT_DB );-
7952 rc = defragmentPage(apNew[0], -1);-
7953 testcase( rc!=SQLITE_OK );-
7954 assert( apNew[0]->nFree == -
7955 (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)-
7956 || rc!=SQLITE_OK-
7957 );-
7958 copyNodeContent(apNew[0], pParent, &rc);-
7959 freePage(apNew[0], &rc);-
7960 }else if( ISAUTOVACUUM && !leafCorrection ){
executed 1036 times by 1 test: end of block
Executed by:
  • Self test (438)
(pBt->autoVacuum)Description
TRUEevaluated 74342 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 673308 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
!leafCorrectionDescription
TRUEevaluated 2242 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 72100 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
1036-673308
7961 /* Fix the pointer map entries associated with the right-child of each-
7962 ** sibling page. All other pointer map entries have already been taken-
7963 ** care of. */-
7964 for(i=0; i<nNew; i++){
i<nNewDescription
TRUEevaluated 6409 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2242 times by 1 test
Evaluated by:
  • Self test (438)
2242-6409
7965 u32 key = get4byte(&apNew[i]->aData[8]);-
7966 ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);-
7967 }
executed 6409 times by 1 test: end of block
Executed by:
  • Self test (438)
6409
7968 }
executed 2242 times by 1 test: end of block
Executed by:
  • Self test (438)
2242
7969-
7970 assert( pParent->isInit );-
7971 TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",-
7972 nOld, nNew, b.nCell));-
7973-
7974 /* Free any old pages that were not reused as new pages.-
7975 */-
7976 for(i=nNew; i<nOld; i++){
i<nOldDescription
TRUEevaluated 120396 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 748686 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
120396-748686
7977 freePage(apOld[i], &rc);-
7978 }
executed 120396 times by 11 tests: end of block
Executed 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)
120396
7979-
7980#if 0-
7981 if( ISAUTOVACUUM && rc==SQLITE_OK && apNew[0]->isInit ){-
7982 /* The ptrmapCheckPages() contains assert() statements that verify that-
7983 ** all pointer map pages are set correctly. This is helpful while -
7984 ** debugging. This is usually disabled because a corrupt database may-
7985 ** cause an assert() statement to fail. */-
7986 ptrmapCheckPages(apNew, nNew);-
7987 ptrmapCheckPages(&pParent, 1);-
7988 }-
7989#endif-
7990-
7991 /*-
7992 ** Cleanup before returning.-
7993 */-
7994balance_cleanup:
code before this statement executed 748686 times by 319 tests: balance_cleanup:
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748686
7995 sqlite3StackFree(0, b.apCell);-
7996 for(i=0; i<nOld; i++){
i<nOldDescription
TRUEevaluated 1945805 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 748689 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748689-1945805
7997 releasePage(apOld[i]);-
7998 }
executed 1945805 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
1945805
7999 for(i=0; i<nNew; i++){
i<nNewDescription
TRUEevaluated 2044822 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 748689 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748689-2044822
8000 releasePage(apNew[i]);-
8001 }
executed 2044822 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
2044822
8002-
8003 return rc;
executed 748689 times by 319 tests: return rc;
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748689
8004}-
8005-
8006-
8007/*-
8008** This function is called when the root page of a b-tree structure is-
8009** overfull (has one or more overflow pages).-
8010**-
8011** A new child page is allocated and the contents of the current root-
8012** page, including overflow cells, are copied into the child. The root-
8013** page is then overwritten to make it an empty page with the right-child -
8014** pointer pointing to the new page.-
8015**-
8016** Before returning, all pointer-map entries corresponding to pages -
8017** that the new child-page now contains pointers to are updated. The-
8018** entry corresponding to the new right-child pointer of the root-
8019** page is also updated.-
8020**-
8021** If successful, *ppChild is set to contain a reference to the child -
8022** page and SQLITE_OK is returned. In this case the caller is required-
8023** to call releasePage() on *ppChild exactly once. If an error occurs,-
8024** an error code is returned and *ppChild is set to 0.-
8025*/-
8026static int balance_deeper(MemPage *pRoot, MemPage **ppChild){-
8027 int rc; /* Return value from subprocedures */-
8028 MemPage *pChild = 0; /* Pointer to a new child page */-
8029 Pgno pgnoChild = 0; /* Page number of the new child page */-
8030 BtShared *pBt = pRoot->pBt; /* The BTree */-
8031-
8032 assert( pRoot->nOverflow>0 );-
8033 assert( sqlite3_mutex_held(pBt->mutex) );-
8034-
8035 /* Make pRoot, the root page of the b-tree, writable. Allocate a new -
8036 ** page that will become the new right-child of pPage. Copy the contents-
8037 ** of the node stored on pRoot into the new child page.-
8038 */-
8039 rc = sqlite3PagerWrite(pRoot->pDbPage);-
8040 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 7160 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEnever evaluated
0-7160
8041 rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0);-
8042 copyNodeContent(pRoot, pChild, &rc);-
8043 if( ISAUTOVACUUM ){
(pBt->autoVacuum)Description
TRUEevaluated 306 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 6854 times by 7 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
306-6854
8044 ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc);-
8045 }
executed 306 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
306
8046 }
executed 7160 times by 8 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
7160
8047 if( rc ){
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7159 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
1-7159
8048 *ppChild = 0;-
8049 releasePage(pChild);-
8050 return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
1
8051 }-
8052 assert( sqlite3PagerIswriteable(pChild->pDbPage) );-
8053 assert( sqlite3PagerIswriteable(pRoot->pDbPage) );-
8054 assert( pChild->nCell==pRoot->nCell );-
8055-
8056 TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno));-
8057-
8058 /* Copy the overflow cells from pRoot to pChild */-
8059 memcpy(pChild->aiOvfl, pRoot->aiOvfl,-
8060 pRoot->nOverflow*sizeof(pRoot->aiOvfl[0]));-
8061 memcpy(pChild->apOvfl, pRoot->apOvfl,-
8062 pRoot->nOverflow*sizeof(pRoot->apOvfl[0]));-
8063 pChild->nOverflow = pRoot->nOverflow;-
8064-
8065 /* Zero the contents of pRoot. Then install pChild as the right-child. */-
8066 zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF);-
8067 put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild);-
8068-
8069 *ppChild = pChild;-
8070 return SQLITE_OK;
executed 7159 times by 8 tests: return 0;
Executed by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
7159
8071}-
8072-
8073/*-
8074** The page that pCur currently points to has just been modified in-
8075** some way. This function figures out if this modification means the-
8076** tree needs to be balanced, and if so calls the appropriate balancing -
8077** routine. Balancing routines are:-
8078**-
8079** balance_quick()-
8080** balance_deeper()-
8081** balance_nonroot()-
8082*/-
8083static int balance(BtCursor *pCur){-
8084 int rc = SQLITE_OK;-
8085 const int nMin = pCur->pBt->usableSize * 2 / 3;-
8086 u8 aBalanceQuickSpace[13];-
8087 u8 *pFree = 0;-
8088-
8089 VVA_ONLY( int balance_quick_called = 0 );-
8090 VVA_ONLY( int balance_deeper_called = 0 );-
8091-
8092 do {-
8093 int iPage = pCur->iPage;-
8094 MemPage *pPage = pCur->pPage;-
8095-
8096 if( iPage==0 ){
iPage==0Description
TRUEevaluated 1277332 times by 211 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 (24)
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • ...
FALSEevaluated 2517183 times by 349 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
1277332-2517183
8097 if( pPage->nOverflow ){
pPage->nOverflowDescription
TRUEevaluated 7160 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEevaluated 1270172 times by 211 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 (24)
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • ...
7160-1270172
8098 /* The root page of the b-tree is overfull. In this case call the-
8099 ** balance_deeper() function to create a new child for the root-page-
8100 ** and copy the current contents of the root-page to it. The-
8101 ** next iteration of the do-loop will balance the child page.-
8102 */ -
8103 assert( balance_deeper_called==0 );-
8104 VVA_ONLY( balance_deeper_called++ );-
8105 rc = balance_deeper(pPage, &pCur->apPage[1]);-
8106 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 7159 times by 8 tests
Evaluated by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-7159
8107 pCur->iPage = 1;-
8108 pCur->ix = 0;-
8109 pCur->aiIdx[0] = 0;-
8110 pCur->apPage[0] = pPage;-
8111 pCur->pPage = pCur->apPage[1];-
8112 assert( pCur->pPage->nOverflow );-
8113 }
executed 7159 times by 8 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
7159
8114 }else{
executed 7160 times by 8 tests: end of block
Executed by:
  • Self test
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (57)
  • Self test (58)
  • Self test (64)
7160
8115 break;
executed 1270172 times by 211 tests: break;
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 (24)
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • ...
1270172
8116 }-
8117 }else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){
pPage->nOverflow==0Description
TRUEevaluated 1593787 times by 337 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 923396 times by 337 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • ...
pPage->nFree<=nMinDescription
TRUEevaluated 1370220 times by 337 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 223567 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)
223567-1593787
8118 break;
executed 1370220 times by 337 tests: break;
Executed by:
  • Self test (10)
  • Self test (101)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
1370220
8119 }else{-
8120 MemPage * const pParent = pCur->apPage[iPage-1];-
8121 int const iIdx = pCur->aiIdx[iPage-1];-
8122-
8123 rc = sqlite3PagerWrite(pParent->pDbPage);-
8124 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1146960 times by 334 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • ...
FALSEnever evaluated
0-1146960
8125#ifndef SQLITE_OMIT_QUICKBALANCE-
8126 if( pPage->intKeyLeaf
pPage->intKeyLeafDescription
TRUEevaluated 642808 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEevaluated 504152 times by 325 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • ...
504152-642808
8127 && pPage->nOverflow==1
pPage->nOverflow==1Description
TRUEevaluated 505060 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEevaluated 137748 times by 1 test
Evaluated by:
  • Self test (438)
137748-505060
8128 && pPage->aiOvfl[0]==pPage->nCell
pPage->aiOvfl[0]==pPage->nCellDescription
TRUEevaluated 488489 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEevaluated 16571 times by 1 test
Evaluated by:
  • Self test (438)
16571-488489
8129 && pParent->pgno!=1
pParent->pgno!=1Description
TRUEevaluated 398334 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEevaluated 90155 times by 5 tests
Evaluated by:
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
90155-398334
8130 && pParent->nCell==iIdx
pParent->nCell==iIdxDescription
TRUEevaluated 398262 times by 22 tests
Evaluated 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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
FALSEevaluated 72 times by 1 test
Evaluated by:
  • Self test (438)
72-398262
8131 ){-
8132 /* Call balance_quick() to create a new sibling of pPage on which-
8133 ** to store the overflow cell. balance_quick() inserts a new cell-
8134 ** into pParent, which may cause pParent overflow. If this-
8135 ** happens, the next iteration of the do-loop will balance pParent -
8136 ** use either balance_nonroot() or balance_deeper(). Until this-
8137 ** happens, the overflow cell is stored in the aBalanceQuickSpace[]-
8138 ** buffer. -
8139 **-
8140 ** The purpose of the following assert() is to check that only a-
8141 ** single call to balance_quick() is made for each call to this-
8142 ** function. If this were not verified, a subtle bug involving reuse-
8143 ** of the aBalanceQuickSpace[] might sneak in.-
8144 */-
8145 assert( balance_quick_called==0 ); -
8146 VVA_ONLY( balance_quick_called++ );-
8147 rc = balance_quick(pParent, pPage, aBalanceQuickSpace);-
8148 }else
executed 398262 times by 22 tests: end of block
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 (57)
  • Self test (58)
  • Self test (6)
  • Self test (64)
  • Self test (7)
  • Self test (9)
398262
8149#endif-
8150 {-
8151 /* In this case, call balance_nonroot() to redistribute cells-
8152 ** between pPage and up to 2 of its sibling pages. This involves-
8153 ** modifying the contents of pParent, which may cause pParent to-
8154 ** become overfull or underfull. The next iteration of the do-loop-
8155 ** will balance the parent page to correct this.-
8156 ** -
8157 ** If the parent page becomes overfull, the overflow cell or cells-
8158 ** are stored in the pSpace buffer allocated immediately below. -
8159 ** A subsequent iteration of the do-loop will deal with this by-
8160 ** calling balance_nonroot() (balance_deeper() may be called first,-
8161 ** but it doesn't deal with overflow cells - just moves them to a-
8162 ** different page). Once this subsequent call to balance_nonroot() -
8163 ** has completed, it is safe to release the pSpace buffer used by-
8164 ** the previous call, as the overflow cell data will have been -
8165 ** copied either into the body of a database page or into the new-
8166 ** pSpace buffer passed to the latter call to balance_nonroot().-
8167 */-
8168 u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize);-
8169 rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1,-
8170 pCur->hints&BTREE_BULKLOAD);-
8171 if( pFree ){
pFreeDescription
TRUEevaluated 112023 times by 3 tests
Evaluated by:
  • Self test (438)
  • Self test (54)
  • Self test (64)
FALSEevaluated 636666 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
112023-636666
8172 /* If pFree is not NULL, it points to the pSpace buffer used -
8173 ** by a previous call to balance_nonroot(). Its contents are-
8174 ** now stored either on real database pages or within the -
8175 ** new pSpace buffer, so it may be safely freed here. */-
8176 sqlite3PageFree(pFree);-
8177 }
executed 112023 times by 3 tests: end of block
Executed by:
  • Self test (438)
  • Self test (54)
  • Self test (64)
112023
8178-
8179 /* The pSpace buffer will be freed after the next call to-
8180 ** balance_nonroot(), or just before this function returns, whichever-
8181 ** comes first. */-
8182 pFree = pSpace;-
8183 }
executed 748689 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
748689
8184 }-
8185-
8186 pPage->nOverflow = 0;-
8187-
8188 /* The next iteration of the do-loop balances the parent page. */-
8189 releasePage(pPage);-
8190 pCur->iPage--;-
8191 assert( pCur->iPage>=0 );-
8192 pCur->pPage = pCur->apPage[pCur->iPage];-
8193 }
executed 1146951 times by 328 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 (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
1146951
8194 }while( rc==SQLITE_OK );
rc==0Description
TRUEevaluated 1154107 times by 328 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
4-1154107
8195-
8196 if( pFree ){
pFreeDescription
TRUEevaluated 636666 times by 319 tests
Evaluated by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
FALSEevaluated 2003730 times by 355 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
636666-2003730
8197 sqlite3PageFree(pFree);-
8198 }
executed 636666 times by 319 tests: end of block
Executed by:
  • Self test (10)
  • Self test (101)
  • Self test (12)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • ...
636666
8199 return rc;
executed 2640396 times by 355 tests: return rc;
Executed by:
  • Self test
  • Self test (10)
  • Self test (101)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
2640396
8200}-
8201-
8202/* Overwrite content from pX into pDest. Only do the write if the-
8203** content is different from what is already there.-
8204*/-
8205static int btreeOverwriteContent(-
8206 MemPage *pPage, /* MemPage on which writing will occur */-
8207 u8 *pDest, /* Pointer to the place to start writing */-
8208 const BtreePayload *pX, /* Source of data to write */-
8209 int iOffset, /* Offset of first byte to write */-
8210 int iAmt /* Number of bytes to be written */-
8211){-
8212 int nData = pX->nData - iOffset;-
8213 if( nData<=0 ){
nData<=0Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 50855 times by 14 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
11-50855
8214 /* Overwritting with zeros */-
8215 int i;-
8216 for(i=0; i<iAmt && pDest[i]==0; i++){}
executed 9900 times by 1 test: end of block
Executed by:
  • Self test (438)
i<iAmtDescription
TRUEevaluated 9900 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
pDest[i]==0Description
TRUEevaluated 9900 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-9900
8217 if( i<iAmt ){
i<iAmtDescription
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
0-11
8218 int rc = sqlite3PagerWrite(pPage->pDbPage);-
8219 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEnever evaluated
0
8220 memset(pDest + i, 0, iAmt - i);-
8221 }
never executed: end of block
0
8222 }else{
executed 11 times by 1 test: end of block
Executed by:
  • Self test (438)
11
8223 if( nData<iAmt ){
nData<iAmtDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 50844 times by 14 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
11-50844
8224 /* Mixed read data and zeros at the end. Make a recursive call-
8225 ** to write the zeros then fall through to write the real data */-
8226 int rc = btreeOverwriteContent(pPage, pDest+nData, pX, iOffset+nData,-
8227 iAmt-nData);-
8228 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • Self test (438)
0-11
8229 iAmt = nData;-
8230 }
executed 11 times by 1 test: end of block
Executed by:
  • Self test (438)
11
8231 if( memcmp(pDest, ((u8*)pX->pData) + iOffset, iAmt)!=0 ){
memcmp(pDest, ...fset, iAmt)!=0Description
TRUEevaluated 43182 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
FALSEevaluated 7673 times by 2 tests
Evaluated by:
  • Self test (3)
  • Self test (438)
7673-43182
8232 int rc = sqlite3PagerWrite(pPage->pDbPage);-
8233 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 43180 times by 13 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
2-43180
8234 memcpy(pDest, ((u8*)pX->pData) + iOffset, iAmt);-
8235 }
executed 43180 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 (2)
  • Self test (20)
  • Self test (22)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
43180
8236 }
executed 50853 times by 14 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
50853
8237 return SQLITE_OK;
executed 50864 times by 14 tests: return 0;
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
50864
8238}-
8239-
8240/*-
8241** Overwrite the cell that cursor pCur is pointing to with fresh content-
8242** contained in pX.-
8243*/-
8244static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){-
8245 int iOffset; /* Next byte of pX->pData to write */-
8246 int nTotal = pX->nData + pX->nZero; /* Total bytes of to write */-
8247 int rc; /* Return code */-
8248 MemPage *pPage = pCur->pPage; /* Page being written */-
8249 BtShared *pBt; /* Btree */-
8250 Pgno ovflPgno; /* Next overflow page to write */-
8251 u32 ovflPageSize; /* Size to write on overflow page */-
8252-
8253 if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd ){
pCur->info.pPa...Page->aDataEndDescription
TRUEnever evaluated
FALSEevaluated 47950 times by 14 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
0-47950
8254 return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(8254);
0
8255 }-
8256 /* Overwrite the local portion first */-
8257 rc = btreeOverwriteContent(pPage, pCur->info.pPayload, pX,-
8258 0, pCur->info.nLocal);-
8259 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 47948 times by 14 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
2-47948
8260 if( pCur->info.nLocal==nTotal ) return SQLITE_OK;
executed 47489 times by 12 tests: return 0;
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 (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
pCur->info.nLocal==nTotalDescription
TRUEevaluated 47489 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 (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
FALSEevaluated 459 times by 3 tests
Evaluated by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
459-47489
8261-
8262 /* Now overwrite the overflow pages */-
8263 iOffset = pCur->info.nLocal;-
8264 assert( nTotal>=0 );-
8265 assert( iOffset>=0 );-
8266 ovflPgno = get4byte(pCur->info.pPayload + iOffset);-
8267 pBt = pPage->pBt;-
8268 ovflPageSize = pBt->usableSize - 4;-
8269 do{-
8270 rc = btreeGetPage(pBt, ovflPgno, &pPage, 0);-
8271 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 2905 times by 3 tests
Evaluated by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
0-2905
8272 if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 ){
sqlite3PagerPa...e->pDbPage)!=1Description
TRUEnever evaluated
FALSEevaluated 2905 times by 3 tests
Evaluated by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
0-2905
8273 rc = SQLITE_CORRUPT_BKPT;-
8274 }else{
never executed: end of block
0
8275 if( iOffset+ovflPageSize<(u32)nTotal ){
iOffset+ovflPa...ze<(u32)nTotalDescription
TRUEevaluated 2446 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 459 times by 3 tests
Evaluated by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
459-2446
8276 ovflPgno = get4byte(pPage->aData);-
8277 }else{
executed 2446 times by 1 test: end of block
Executed by:
  • Self test (438)
2446
8278 ovflPageSize = nTotal - iOffset;-
8279 }
executed 459 times by 3 tests: end of block
Executed by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
459
8280 rc = btreeOverwriteContent(pPage, pPage->aData+4, pX,-
8281 iOffset, ovflPageSize);-
8282 }
executed 2905 times by 3 tests: end of block
Executed by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
2905
8283 sqlite3PagerUnref(pPage->pDbPage);-
8284 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 2905 times by 3 tests
Evaluated by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
0-2905
8285 iOffset += ovflPageSize;-
8286 }while( iOffset<nTotal );
executed 2905 times by 3 tests: end of block
Executed by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
iOffset<nTotalDescription
TRUEevaluated 2446 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 459 times by 3 tests
Evaluated by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
459-2905
8287 return SQLITE_OK;
executed 459 times by 3 tests: return 0;
Executed by:
  • Self test (2)
  • Self test (3)
  • Self test (438)
459
8288}-
8289-
8290-
8291/*-
8292** Insert a new record into the BTree. The content of the new record-
8293** is described by the pX object. The pCur cursor is used only to-
8294** define what table the record should be inserted into, and is left-
8295** pointing at a random location.-
8296**-
8297** For a table btree (used for rowid tables), only the pX.nKey value of-
8298** the key is used. The pX.pKey value must be NULL. The pX.nKey is the-
8299** rowid or INTEGER PRIMARY KEY of the row. The pX.nData,pData,nZero fields-
8300** hold the content of the row.-
8301**-
8302** For an index btree (used for indexes and WITHOUT ROWID tables), the-
8303** key is an arbitrary byte sequence stored in pX.pKey,nKey. The -
8304** pX.pData,nData,nZero fields must be zero.-
8305**-
8306** If the seekResult parameter is non-zero, then a successful call to-
8307** MovetoUnpacked() to seek cursor pCur to (pKey,nKey) has already-
8308** been performed. In other words, if seekResult!=0 then the cursor-
8309** is currently pointing to a cell that will be adjacent to the cell-
8310** to be inserted. If seekResult<0 then pCur points to a cell that is-
8311** smaller then (pKey,nKey). If seekResult>0 then pCur points to a cell-
8312** that is larger than (pKey,nKey).-
8313**-
8314** If seekResult==0, that means pCur is pointing at some unknown location.-
8315** In that case, this routine must seek the cursor to the correct insertion-
8316** point for (pKey,nKey) before doing the insertion. For index btrees,-
8317** if pX->nMem is non-zero, then pX->aMem contains pointers to the unpacked-
8318** key values and pX->aMem can be used instead of pX->pKey to avoid having-
8319** to decode the key.-
8320*/-
8321int sqlite3BtreeInsert(-
8322 BtCursor *pCur, /* Insert data into the table of this cursor */-
8323 const BtreePayload *pX, /* Content of the row to be inserted */-
8324 int flags, /* True if this is likely an append */-
8325 int seekResult /* Result of prior MovetoUnpacked() call */-
8326){-
8327 int rc;-
8328 int loc = seekResult; /* -1: before desired location +1: after */-
8329 int szNew = 0;-
8330 int idx;-
8331 MemPage *pPage;-
8332 Btree *p = pCur->pBtree;-
8333 BtShared *pBt = p->pBt;-
8334 unsigned char *oldCell;-
8335 unsigned char *newCell = 0;-
8336-
8337 assert( (flags & (BTREE_SAVEPOSITION|BTREE_APPEND))==flags );-
8338-
8339 if( pCur->eState==CURSOR_FAULT ){
pCur->eState==4Description
TRUEnever evaluated
FALSEevaluated 7795798 times by 393 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 (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)
  • ...
0-7795798
8340 assert( pCur->skipNext!=SQLITE_OK );-
8341 return pCur->skipNext;
never executed: return pCur->skipNext;
0
8342 }-
8343-
8344 assert( cursorOwnsBtShared(pCur) );-
8345 assert( (pCur->curFlags & BTCF_WriteFlag)!=0-
8346 && pBt->inTransaction==TRANS_WRITE-
8347 && (pBt->btsFlags & BTS_READ_ONLY)==0 );-
8348 assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );-
8349-
8350 /* Assert that the caller has been consistent. If this cursor was opened-
8351 ** expecting an index b-tree, then the caller should be inserting blob-
8352 ** keys with no associated data. If the cursor was opened expecting an-
8353 ** intkey table, the caller should be inserting integer keys with a-
8354 ** blob of associated data. */-
8355 assert( (pX->pKey==0)==(pCur->pKeyInfo==0) );-
8356-
8357 /* Save the positions of any other cursors open on this table.-
8358 **-
8359 ** In some cases, the call to btreeMoveto() below is a no-op. For-
8360 ** example, when inserting data into a table with auto-generated integer-
8361 ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the -
8362 ** integer key to use. It then calls this function to actually insert the -
8363 ** data into the intkey B-Tree. In this case btreeMoveto() recognizes-
8364 ** that the cursor is already where it needs to be and returns without-
8365 ** doing any work. To avoid thwarting these optimizations, it is important-
8366 ** not to clear the cursor here.-
8367 */-
8368 if( pCur->curFlags & BTCF_Multiple ){
pCur->curFlags & 0x20Description
TRUEevaluated 723828 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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 7071970 times by 393 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 (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)
  • ...
723828-7071970
8369 rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);-
8370 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 723828 times by 15 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
0-723828
8371 }
executed 723828 times by 15 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (64)
  • 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)
723828
8372-
8373 if( pCur->pKeyInfo==0 ){
pCur->pKeyInfo==0Description
TRUEevaluated 5414674 times by 390 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 2381124 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2381124-5414674
8374 assert( pX->pKey==0 );-
8375 /* If this is an insert into a table b-tree, invalidate any incrblob -
8376 ** cursors open on the row being replaced */-
8377 invalidateIncrblobCursors(p, pCur->pgnoRoot, pX->nKey, 0);-
8378-
8379 /* If BTREE_SAVEPOSITION is set, the cursor must already be pointing -
8380 ** to a row with the same key as the new entry being inserted.-
8381 */-
8382#ifdef SQLITE_DEBUG-
8383 if( flags & BTREE_SAVEPOSITION ){-
8384 assert( pCur->curFlags & BTCF_ValidNKey );-
8385 assert( pX->nKey==pCur->info.nKey );-
8386 assert( pCur->info.nSize!=0 );-
8387 assert( loc==0 );-
8388 }-
8389#endif-
8390-
8391 /* On the other hand, BTREE_SAVEPOSITION==0 does not imply-
8392 ** that the cursor is not pointing to a row to be overwritten.-
8393 ** So do a complete check.-
8394 */-
8395 if( (pCur->curFlags&BTCF_ValidNKey)!=0 && pX->nKey==pCur->info.nKey ){
(pCur->curFlags&0x02)!=0Description
TRUEevaluated 3942646 times by 387 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
FALSEevaluated 1472028 times by 34 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (438)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • Self test (64)
  • Self test (72)
  • Self test (73)
  • ...
pX->nKey==pCur->info.nKeyDescription
TRUEevaluated 91691 times by 361 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 3850955 times by 58 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 (21)
  • Self test (22)
  • Self test (23)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (31)
  • Self test (32)
  • Self test (33)
  • Self test (38)
  • ...
91691-3942646
8396 /* The cursor is pointing to the entry that is to be-
8397 ** overwritten */-
8398 assert( pX->nData>=0 && pX->nZero>=0 );-
8399 if( pCur->info.nSize!=0
pCur->info.nSize!=0Description
TRUEevaluated 91678 times by 361 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • ...
FALSEevaluated 13 times by 1 test
Evaluated by:
  • Self test (438)
13-91678
8400 && pCur->info.nPayload==(u32)pX->nData+pX->nZero
pCur->info.nPa...Data+pX->nZeroDescription
TRUEevaluated 45523 times by 14 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
FALSEevaluated 46155 times by 348 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • ...
45523-46155
8401 ){-
8402 /* New entry is the same size as the old. Do an overwrite */-
8403 return btreeOverwriteCell(pCur, pX);
executed 45523 times by 14 tests: return btreeOverwriteCell(pCur, pX);
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (16)
  • Self test (18)
  • Self test (2)
  • Self test (20)
  • Self test (22)
  • Self test (3)
  • Self test (4)
  • Self test (438)
  • Self test (5)
  • Self test (6)
  • Self test (8)
45523
8404 }-
8405 assert( loc==0 );-
8406 }else if( loc==0 ){
executed 46168 times by 348 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • ...
loc==0Description
TRUEevaluated 4914096 times by 64 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 408887 times by 1 test
Evaluated by:
  • Self test (438)
46168-4914096
8407 /* The cursor is *not* pointing to the cell to be overwritten, nor-
8408 ** to an adjacent cell. Move the cursor so that it is pointing either-
8409 ** to the cell to be overwritten or an adjacent cell.-
8410 */-
8411 rc = sqlite3BtreeMovetoUnpacked(pCur, 0, pX->nKey, flags!=0, &loc);-
8412 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 4914096 times by 64 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-4914096
8413 }
executed 4914096 times by 64 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 (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)
  • ...
4914096
8414 }else{
executed 5369151 times by 384 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 (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)
  • Self test (134)
  • Self test (135)
  • ...
5369151
8415 /* This is an index or a WITHOUT ROWID table */-
8416-
8417 /* If BTREE_SAVEPOSITION is set, the cursor must already be pointing -
8418 ** to a row with the same key as the new entry being inserted.-
8419 */-
8420 assert( (flags & BTREE_SAVEPOSITION)==0 || loc==0 );-
8421-
8422 /* If the cursor is not already pointing either to the cell to be-
8423 ** overwritten, or if a new cell is being inserted, if the cursor is-
8424 ** not pointing to an immediately adjacent cell, then move the cursor-
8425 ** so that it does.-
8426 */-
8427 if( loc==0 && (flags & BTREE_SAVEPOSITION)==0 ){
loc==0Description
TRUEevaluated 1179391 times by 337 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEevaluated 1201733 times by 30 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • 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 (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (6)
  • Self test (7)
  • Self test (9)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • ...
(flags & 0x02)==0Description
TRUEevaluated 1178827 times by 337 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEevaluated 564 times by 1 test
Evaluated by:
  • Self test (438)
564-1201733
8428 if( pX->nMem ){
pX->nMemDescription
TRUEevaluated 1129774 times by 337 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEevaluated 49053 times by 1 test
Evaluated by:
  • Self test (438)
49053-1129774
8429 UnpackedRecord r;-
8430 r.pKeyInfo = pCur->pKeyInfo;-
8431 r.aMem = pX->aMem;-
8432 r.nField = pX->nMem;-
8433 r.default_rc = 0;-
8434 r.errCode = 0;-
8435 r.r1 = 0;-
8436 r.r2 = 0;-
8437 r.eqSeen = 0;-
8438 rc = sqlite3BtreeMovetoUnpacked(pCur, &r, 0, flags!=0, &loc);-
8439 }else{
executed 1129774 times by 337 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
1129774
8440 rc = btreeMoveto(pCur, pX->pKey, pX->nKey, flags!=0, &loc);-
8441 }
executed 49053 times by 1 test: end of block
Executed by:
  • Self test (438)
49053
8442 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 1178827 times by 337 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
0-1178827
8443 }
executed 1178827 times by 337 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
1178827
8444-
8445 /* If the cursor is currently pointing to an entry to be overwritten-
8446 ** and the new content is the same as as the old, then use the-
8447 ** overwrite optimization.-
8448 */-
8449 if( loc==0 ){
loc==0Description
TRUEevaluated 2822 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2378302 times by 361 tests
Evaluated by:
  • Self test (10)
  • Self test (100)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2822-2378302
8450 getCellInfo(pCur);-
8451 if( pCur->info.nKey==pX->nKey ){
pCur->info.nKey==pX->nKeyDescription
TRUEevaluated 2427 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 395 times by 1 test
Evaluated by:
  • Self test (438)
395-2427
8452 BtreePayload x2;-
8453 x2.pData = pX->pKey;-
8454 x2.nData = pX->nKey;-
8455 x2.nZero = 0;-
8456 return btreeOverwriteCell(pCur, &x2);
executed 2427 times by 1 test: return btreeOverwriteCell(pCur, &x2);
Executed by:
  • Self test (438)
2427
8457 }-
8458 }
executed 395 times by 1 test: end of block
Executed by:
  • Self test (438)
395
8459-
8460 }
executed 2378697 times by 361 tests: end of block
Executed by:
  • Self test (10)
  • Self test (100)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • ...
2378697
8461 assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) );-
8462-
8463 pPage = pCur->pPage;-
8464 assert( pPage->intKey || pX->nKey>=0 );-
8465 assert( pPage->leaf || !pPage->intKey );-
8466-
8467 TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n",-
8468 pCur->pgnoRoot, pX->nKey, pX->nData, pPage->pgno,-
8469 loc==0 ? "overwrite" : "new entry"));-
8470 assert( pPage->isInit );-
8471 newCell = pBt->pTmpSpace;-
8472 assert( newCell!=0 );-
8473 rc = fillInCell(pPage, newCell, pX, &szNew);-
8474 if( rc ) goto end_insert;
executed 3 times by 1 test: goto end_insert;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 7747845 times by 391 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 (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)
  • ...
3-7747845
8475 assert( szNew==pPage->xCellSize(pPage, newCell) );-
8476 assert( szNew <= MX_CELL_SIZE(pBt) );-
8477 idx = pCur->ix;-
8478 if( loc==0 ){
loc==0Description
TRUEevaluated 46615 times by 348 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • ...
FALSEevaluated 7701230 times by 391 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 (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)
  • ...
46615-7701230
8479 CellInfo info;-
8480 assert( idx<pPage->nCell );-
8481 rc = sqlite3PagerWrite(pPage->pDbPage);-
8482 if( rc ){
rcDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 46513 times by 345 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
3-46513
8483 goto end_insert;
executed 3 times by 1 test: goto end_insert;
Executed by:
  • Self test (438)
3
8484 }-
8485 oldCell = findCell(pPage, idx);-
8486 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 46511 times by 345 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
2-46511
8487 memcpy(newCell, oldCell, 4);-
8488 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
8489 rc = clearCell(pPage, oldCell, &info);-
8490 if( info.nSize==szNew && info.nLocal==info.nPayload
info.nSize==szNewDescription
TRUEevaluated 46 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 46467 times by 345 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
info.nLocal==info.nPayloadDescription
TRUEevaluated 40 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
6-46467
8491 && (!ISAUTOVACUUM || szNew<pPage->minLocal)
!(pBt->autoVacuum)Description
TRUEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
szNew<pPage->minLocalDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
0-39
8492 ){-
8493 /* Overwrite the old cell with the new if they are the same size.-
8494 ** We could also try to do this if the old cell is smaller, then add-
8495 ** the leftover space to the free list. But experiments show that-
8496 ** doing that is no faster then skipping this optimization and just-
8497 ** calling dropCell() and insertCell(). -
8498 **-
8499 ** This optimization cannot be used on an autovacuum database if the-
8500 ** new entry uses overflow pages, as the insertCell() call below is-
8501 ** necessary to add the PTRMAP_OVERFLOW1 pointer-map entry. */-
8502 assert( rc==SQLITE_OK ); /* clearCell never fails when nLocal==nPayload */-
8503 if( oldCell+szNew > pPage->aDataEnd ) return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(8503);
oldCell+szNew ...Page->aDataEndDescription
TRUEnever evaluated
FALSEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
0-39
8504 memcpy(oldCell, newCell, szNew);-
8505 return SQLITE_OK;
executed 39 times by 1 test: return 0;
Executed by:
  • Self test (438)
39
8506 }-
8507 dropCell(pPage, idx, info.nSize, &rc);-
8508 if( rc ) goto end_insert;
never executed: goto end_insert;
rcDescription
TRUEnever evaluated
FALSEevaluated 46474 times by 345 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
0-46474
8509 }else if( loc<0 && pPage->nCell>0 ){
executed 46474 times by 345 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
loc<0Description
TRUEevaluated 7232369 times by 379 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 (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
FALSEevaluated 468861 times by 340 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
pPage->nCell>0Description
TRUEevaluated 6151602 times by 375 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 (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
FALSEevaluated 1080767 times by 37 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (2)
  • 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 (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (55)
  • Self test (56)
  • Self test (57)
  • Self test (58)
  • ...
46474-7232369
8510 assert( pPage->leaf );-
8511 idx = ++pCur->ix;-
8512 pCur->curFlags &= ~BTCF_ValidNKey;-
8513 }else{
executed 6151602 times by 375 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 (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • ...
6151602
8514 assert( pPage->leaf );-
8515 }
executed 1549628 times by 372 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • ...
1549628
8516 insertCell(pPage, idx, newCell, szNew, 0, 0, &rc);-
8517 assert( pPage->nOverflow==0 || rc==SQLITE_OK );-
8518 assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 );-
8519-
8520 /* If no error has occurred and pPage has an overflow cell, call balance() -
8521 ** to redistribute the cells within the tree. Since balance() may move-
8522 ** the cursor, zero the BtCursor.info.nSize and BTCF_ValidNKey-
8523 ** variables.-
8524 **-
8525 ** Previous versions of SQLite called moveToRoot() to move the cursor-
8526 ** back to the root page as balance() used to invalidate the contents-
8527 ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that,-
8528 ** set the cursor state to "invalid". This makes common insert operations-
8529 ** slightly faster.-
8530 **-
8531 ** There is a subtle but important optimization here too. When inserting-
8532 ** multiple records into an intkey b-tree using a single cursor (as can-
8533 ** happen while processing an "INSERT INTO ... SELECT" statement), it-
8534 ** is advantageous to leave the cursor pointing to the last entry in-
8535 ** the b-tree if possible. If the cursor is left pointing to the last-
8536 ** entry in the table, and the next row inserted has an integer key-
8537 ** larger than the largest existing key, it is possible to insert the-
8538 ** row without seeking the cursor. This can be a big performance boost.-
8539 */-
8540 pCur->info.nSize = 0;-
8541 if( pPage->nOverflow ){
pPage->nOverflowDescription
TRUEevaluated 871551 times by 337 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (128)
  • Self test (129)
  • Self test (13)
  • Self test (130)
  • Self test (131)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • ...
FALSEevaluated 6876141 times by 385 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
871551-6876141
8542 assert( rc==SQLITE_OK );-
8543 pCur->curFlags &= ~(BTCF_ValidNKey);-
8544 rc = balance(pCur);-
8545-
8546 /* Must make sure nOverflow is reset to zero even if the balance()-
8547 ** fails. Internal data structure corruption will result otherwise. -
8548 ** Also, set the cursor state to invalid. This stops saveCursorPosition()-
8549 ** from trying to save the current position of the cursor. */-
8550 pCur->pPage->nOverflow = 0;-
8551 pCur->eState = CURSOR_INVALID;-
8552 if( (flags & BTREE_SAVEPOSITION) && rc==SQLITE_OK ){
(flags & 0x02)Description
TRUEevaluated 428 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 871111 times by 328 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (101)
  • Self test (11)
  • Self test (12)
  • Self test (13)
  • Self test (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
rc==0Description
TRUEevaluated 428 times by 1 test
Evaluated by:
  • Self test (438)
FALSEnever evaluated
0-871111
8553 btreeReleaseAllCursorPages(pCur);-
8554 if( pCur->pKeyInfo ){
pCur->pKeyInfoDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 427 times by 1 test
Evaluated by:
  • Self test (438)
1-427
8555 assert( pCur->pKey==0 );-
8556 pCur->pKey = sqlite3Malloc( pX->nKey );-
8557 if( pCur->pKey==0 ){
pCur->pKey==0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
0-1
8558 rc = SQLITE_NOMEM;-
8559 }else{
never executed: end of block
0
8560 memcpy(pCur->pKey, pX->pKey, pX->nKey);-
8561 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test (438)
1
8562 }-
8563 pCur->eState = CURSOR_REQUIRESEEK;-
8564 pCur->nKey = pX->nKey;-
8565 }
executed 428 times by 1 test: end of block
Executed by:
  • Self test (438)
428
8566 }
executed 871539 times by 328 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 (137)
  • Self test (138)
  • Self test (139)
  • Self test (14)
  • Self test (140)
  • Self test (141)
  • Self test (142)
  • Self test (143)
  • Self test (144)
  • Self test (145)
  • Self test (146)
  • Self test (147)
  • Self test (148)
  • Self test (149)
  • Self test (15)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • ...
871539
8567 assert( pCur->iPage<0 || pCur->pPage->nOverflow==0 );-
8568-
8569end_insert:
code before this statement executed 7747680 times by 388 tests: end_insert:
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (11)
  • 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)
  • Self test (133)
  • Self test (134)
  • ...
7747680
8570 return rc;
executed 7747686 times by 388 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 (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)
  • Self test (133)
  • Self test (134)
  • ...
7747686
8571}-
8572-
8573/*-
8574** Delete the entry that the cursor is pointing to. -
8575**-
8576** If the BTREE_SAVEPOSITION bit of the flags parameter is zero, then-
8577** the cursor is left pointing at an arbitrary location after the delete.-
8578** But if that bit is set, then the cursor is left in a state such that-
8579** the next call to BtreeNext() or BtreePrev() moves it to the same row-
8580** as it would have been on if the call to BtreeDelete() had been omitted.-
8581**-
8582** The BTREE_AUXDELETE bit of flags indicates that is one of several deletes-
8583** associated with a single table entry and its indexes. Only one of those-
8584** deletes is considered the "primary" delete. The primary delete occurs-
8585** on a cursor that is not a BTREE_FORDELETE cursor. All but one delete-
8586** operation on non-FORDELETE cursors is tagged with the AUXDELETE flag.-
8587** The BTREE_AUXDELETE bit is a hint that is not used by this implementation,-
8588** but which might be used by alternative storage engines.-
8589*/-
8590int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){-
8591 Btree *p = pCur->pBtree;-
8592 BtShared *pBt = p->pBt; -
8593 int rc; /* Return code */-
8594 MemPage *pPage; /* Page to delete cell from */-
8595 unsigned char *pCell; /* Pointer to cell to delete */-
8596 int iCellIdx; /* Index of cell to delete */-
8597 int iCellDepth; /* Depth of node containing pCell */ -
8598 CellInfo info; /* Size of the cell being deleted */-
8599 int bSkipnext = 0; /* Leaf cursor in SKIPNEXT state */-
8600 u8 bPreserve = flags & BTREE_SAVEPOSITION; /* Keep cursor valid */-
8601-
8602 assert( cursorOwnsBtShared(pCur) );-
8603 assert( pBt->inTransaction==TRANS_WRITE );-
8604 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );-
8605 assert( pCur->curFlags & BTCF_WriteFlag );-
8606 assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );-
8607 assert( !hasReadConflicts(p, pCur->pgnoRoot) );-
8608 assert( pCur->ix<pCur->pPage->nCell );-
8609 assert( pCur->eState==CURSOR_VALID );-
8610 assert( (flags & ~(BTREE_SAVEPOSITION | BTREE_AUXDELETE))==0 );-
8611-
8612 iCellDepth = pCur->iPage;-
8613 iCellIdx = pCur->ix;-
8614 pPage = pCur->pPage;-
8615 pCell = findCell(pPage, iCellIdx);-
8616-
8617 /* If the bPreserve flag is set to true, then the cursor position must-
8618 ** be preserved following this delete operation. If the current delete-
8619 ** will cause a b-tree rebalance, then this is done by saving the cursor-
8620 ** key and leaving the cursor in CURSOR_REQUIRESEEK state before -
8621 ** returning. -
8622 **-
8623 ** Or, if the current delete will not cause a rebalance, then the cursor-
8624 ** will be left in CURSOR_SKIPNEXT state pointing to the entry immediately-
8625 ** before or after the deleted entry. In this case set bSkipnext to true. */-
8626 if( bPreserve ){
bPreserveDescription
TRUEevaluated 452288 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 1306434 times by 347 tests
Evaluated by:
  • Self test (10)
  • 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 (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)
  • ...
452288-1306434
8627 if( !pPage->leaf
!pPage->leafDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 452285 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
3-452285
8628 || (pPage->nFree+cellSizePtr(pPage,pCell)+2)>(int)(pBt->usableSize*2/3)
(pPage->nFree+...sableSize*2/3)Description
TRUEevaluated 136621 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 315664 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
136621-315664
8629 ){-
8630 /* A b-tree rebalance will be required after deleting this entry.-
8631 ** Save the cursor key. */-
8632 rc = saveCursorKey(pCur);-
8633 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 136624 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
0-136624
8634 }else{
executed 136624 times by 5 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
136624
8635 bSkipnext = 1;-
8636 }
executed 315664 times by 4 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
315664
8637 }-
8638-
8639 /* If the page containing the entry to delete is not a leaf page, move-
8640 ** the cursor to the largest entry in the tree that is smaller than-
8641 ** the entry being deleted. This cell will replace the cell being deleted-
8642 ** from the internal node. The 'previous' entry is used for this instead-
8643 ** of the 'next' entry, as the previous entry is always a part of the-
8644 ** sub-tree headed by the child page of the cell being deleted. This makes-
8645 ** balancing the tree following the delete operation easier. */-
8646 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 11233 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
FALSEevaluated 1747489 times by 351 tests
Evaluated by:
  • Self test (10)
  • 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 (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)
  • ...
11233-1747489
8647 rc = sqlite3BtreePrevious(pCur, 0);-
8648 assert( rc!=SQLITE_DONE );-
8649 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 11233 times by 302 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
0-11233
8650 }
executed 11233 times by 302 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (149)
  • Self test (150)
  • Self test (151)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • ...
11233
8651-
8652 /* Save the positions of any other cursors open on this table before-
8653 ** making any modifications. */-
8654 if( pCur->curFlags & BTCF_Multiple ){
pCur->curFlags & 0x20Description
TRUEevaluated 5344 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1753378 times by 351 tests
Evaluated by:
  • Self test (10)
  • 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 (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)
  • ...
5344-1753378
8655 rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);-
8656 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 5344 times by 1 test
Evaluated by:
  • Self test (438)
0-5344
8657 }
executed 5344 times by 1 test: end of block
Executed by:
  • Self test (438)
5344
8658-
8659 /* If this is a delete operation to remove a row from a table b-tree,-
8660 ** invalidate any incrblob cursors open on the row being deleted. */-
8661 if( pCur->pKeyInfo==0 ){
pCur->pKeyInfo==0Description
TRUEevaluated 1603862 times by 7 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 154860 times by 347 tests
Evaluated by:
  • Self test (10)
  • 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 (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)
  • ...
154860-1603862
8662 invalidateIncrblobCursors(p, pCur->pgnoRoot, pCur->info.nKey, 0);-
8663 }
executed 1603862 times by 7 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (32)
  • Self test (33)
  • Self test (40)
  • Self test (438)
  • Self test (47)
1603862
8664-
8665 /* Make the page containing the entry to be deleted writable. Then free any-
8666 ** overflow pages associated with the entry and finally remove the cell-
8667 ** itself from within the page. */-
8668 rc = sqlite3PagerWrite(pPage->pDbPage);-
8669 if( rc ) return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1758699 times by 347 tests
Evaluated by:
  • 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)
  • Self test (132)
  • ...
1-1758699
8670 rc = clearCell(pPage, pCell, &info);-
8671 dropCell(pPage, iCellIdx, info.nSize, &rc);-
8672 if( rc ) return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1758596 times by 341 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
1-1758596
8673-
8674 /* If the cell deleted was not located on a leaf page, then the cursor-
8675 ** is currently pointing to the largest entry in the sub-tree headed-
8676 ** by the child-page of the cell that was just deleted from an internal-
8677 ** node. The cell from the leaf node needs to be moved to the internal-
8678 ** node to replace the deleted cell. */-
8679 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 11209 times by 299 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
FALSEevaluated 1747387 times by 341 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
11209-1747387
8680 MemPage *pLeaf = pCur->pPage;-
8681 int nCell;-
8682 Pgno n;-
8683 unsigned char *pTmp;-
8684-
8685 if( iCellDepth<pCur->iPage-1 ){
iCellDepth<pCur->iPage-1Description
TRUEevaluated 1695 times by 180 tests
Evaluated by:
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • Self test (267)
  • Self test (268)
  • Self test (269)
  • Self test (270)
  • Self test (271)
  • Self test (272)
  • Self test (273)
  • Self test (274)
  • Self test (275)
  • Self test (276)
  • Self test (277)
  • Self test (278)
  • Self test (279)
  • Self test (280)
  • Self test (281)
  • Self test (282)
  • Self test (283)
  • Self test (284)
  • ...
FALSEevaluated 9514 times by 299 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
1695-9514
8686 n = pCur->apPage[iCellDepth+1]->pgno;-
8687 }else{
executed 1695 times by 180 tests: end of block
Executed by:
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • Self test (267)
  • Self test (268)
  • Self test (269)
  • Self test (270)
  • Self test (271)
  • Self test (272)
  • Self test (273)
  • Self test (274)
  • Self test (275)
  • Self test (276)
  • Self test (277)
  • Self test (278)
  • Self test (279)
  • Self test (280)
  • Self test (281)
  • Self test (282)
  • Self test (283)
  • Self test (284)
  • ...
1695
8688 n = pCur->pPage->pgno;-
8689 }
executed 9514 times by 299 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
9514
8690 pCell = findCell(pLeaf, pLeaf->nCell-1);-
8691 if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(8691);
pCell<&pLeaf->aData[4]Description
TRUEnever evaluated
FALSEevaluated 11209 times by 299 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
0-11209
8692 nCell = pLeaf->xCellSize(pLeaf, pCell);-
8693 assert( MX_CELL_SIZE(pBt) >= nCell );-
8694 pTmp = pBt->pTmpSpace;-
8695 assert( pTmp!=0 );-
8696 rc = sqlite3PagerWrite(pLeaf->pDbPage);-
8697 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 11209 times by 299 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
FALSEnever evaluated
0-11209
8698 insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);-
8699 }
executed 11209 times by 299 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
11209
8700 dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);-
8701 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 11209 times by 299 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
0-11209
8702 }
executed 11209 times by 299 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
11209
8703-
8704 /* Balance the tree. If the entry deleted was located on a leaf page,-
8705 ** then the cursor still points to that page. In this case the first-
8706 ** call to balance() repairs the tree, and the if(...) condition is-
8707 ** never true.-
8708 **-
8709 ** Otherwise, if the entry deleted was on an internal node page, then-
8710 ** pCur is pointing to the leaf page from which a cell was removed to-
8711 ** replace the cell deleted from the internal node. This is slightly-
8712 ** tricky as the leaf node may be underfull, and the internal node may-
8713 ** be either under or overfull. In this case run the balancing algorithm-
8714 ** on the leaf node first. If the balance proceeds far enough up the-
8715 ** tree that we can be sure that any problem in the internal node has-
8716 ** been corrected, so be it. Otherwise, after balancing the leaf node,-
8717 ** walk the cursor up the tree to the internal node and balance it as -
8718 ** well. */-
8719 rc = balance(pCur);-
8720 if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){
rc==0Description
TRUEevaluated 1758596 times by 341 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEnever evaluated
pCur->iPage>iCellDepthDescription
TRUEevaluated 10261 times by 299 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
FALSEevaluated 1748335 times by 341 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
0-1758596
8721 releasePageNotNull(pCur->pPage);-
8722 pCur->iPage--;-
8723 while( pCur->iPage>iCellDepth ){
pCur->iPage>iCellDepthDescription
TRUEevaluated 1615 times by 180 tests
Evaluated by:
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • Self test (267)
  • Self test (268)
  • Self test (269)
  • Self test (270)
  • Self test (271)
  • Self test (272)
  • Self test (273)
  • Self test (274)
  • Self test (275)
  • Self test (276)
  • Self test (277)
  • Self test (278)
  • Self test (279)
  • Self test (280)
  • Self test (281)
  • Self test (282)
  • Self test (283)
  • Self test (284)
  • ...
FALSEevaluated 10261 times by 299 tests
Evaluated by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
1615-10261
8724 releasePage(pCur->apPage[pCur->iPage--]);-
8725 }
executed 1615 times by 180 tests: end of block
Executed by:
  • Self test (260)
  • Self test (261)
  • Self test (262)
  • Self test (263)
  • Self test (264)
  • Self test (265)
  • Self test (266)
  • Self test (267)
  • Self test (268)
  • Self test (269)
  • Self test (270)
  • Self test (271)
  • Self test (272)
  • Self test (273)
  • Self test (274)
  • Self test (275)
  • Self test (276)
  • Self test (277)
  • Self test (278)
  • Self test (279)
  • Self test (280)
  • Self test (281)
  • Self test (282)
  • Self test (283)
  • Self test (284)
  • ...
1615
8726 pCur->pPage = pCur->apPage[pCur->iPage];-
8727 rc = balance(pCur);-
8728 }
executed 10261 times by 299 tests: end of block
Executed by:
  • Self test (10)
  • Self test (12)
  • Self test (14)
  • Self test (152)
  • Self test (153)
  • Self test (154)
  • Self test (155)
  • Self test (156)
  • Self test (157)
  • Self test (158)
  • Self test (159)
  • Self test (16)
  • Self test (160)
  • Self test (161)
  • Self test (162)
  • Self test (163)
  • Self test (164)
  • Self test (165)
  • Self test (166)
  • Self test (167)
  • Self test (168)
  • Self test (169)
  • Self test (170)
  • Self test (171)
  • Self test (172)
  • ...
10261
8729-
8730 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1758596 times by 341 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
FALSEnever evaluated
0-1758596
8731 if( bSkipnext ){
bSkipnextDescription
TRUEevaluated 315664 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
FALSEevaluated 1442932 times by 341 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
315664-1442932
8732 assert( bPreserve && (pCur->iPage==iCellDepth || CORRUPT_DB) );-
8733 assert( pPage==pCur->pPage || CORRUPT_DB );-
8734 assert( (pPage->nCell>0 || CORRUPT_DB) && iCellIdx<=pPage->nCell );-
8735 pCur->eState = CURSOR_SKIPNEXT;-
8736 if( iCellIdx>=pPage->nCell ){
iCellIdx>=pPage->nCellDescription
TRUEevaluated 69257 times by 4 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
FALSEevaluated 246407 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
69257-246407
8737 pCur->skipNext = -1;-
8738 pCur->ix = pPage->nCell-1;-
8739 }else{
executed 69257 times by 4 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
  • Self test (47)
69257
8740 pCur->skipNext = 1;-
8741 }
executed 246407 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
246407
8742 }else{-
8743 rc = moveToRoot(pCur);-
8744 if( bPreserve ){
bPreserveDescription
TRUEevaluated 136622 times by 5 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
FALSEevaluated 1306310 times by 337 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
136622-1306310
8745 btreeReleaseAllCursorPages(pCur);-
8746 pCur->eState = CURSOR_REQUIRESEEK;-
8747 }
executed 136622 times by 5 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (40)
  • Self test (438)
  • Self test (47)
136622
8748 if( rc==SQLITE_EMPTY ) rc = SQLITE_OK;
executed 975774 times by 3 tests: rc = 0;
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
rc==16Description
TRUEevaluated 975774 times by 3 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
FALSEevaluated 467158 times by 341 tests
Evaluated by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
467158-975774
8749 }
executed 1442932 times by 341 tests: end of block
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
1442932
8750 }-
8751 return rc;
executed 1758596 times by 341 tests: return rc;
Executed by:
  • Self test (10)
  • 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)
  • Self test (132)
  • Self test (133)
  • Self test (134)
  • Self test (135)
  • Self test (136)
  • Self test (137)
  • Self test (138)
  • ...
1758596
8752}-
8753-
8754/*-
8755** Create a new BTree table. Write into *piTable the page-
8756** number for the root page of the new table.-
8757**-
8758** The type of type is determined by the flags parameter. Only the-
8759** following values of flags are currently in use. Other values for-
8760** flags might not work:-
8761**-
8762** BTREE_INTKEY|BTREE_LEAFDATA Used for SQL tables with rowid keys-
8763** BTREE_ZERODATA Used for SQL indices-
8764*/-
8765static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){-
8766 BtShared *pBt = p->pBt;-
8767 MemPage *pRoot;-
8768 Pgno pgnoRoot;-
8769 int rc;-
8770 int ptfFlags; /* Page-type flage for the root page of new table */-
8771-
8772 assert( sqlite3BtreeHoldsMutex(p) );-
8773 assert( pBt->inTransaction==TRANS_WRITE );-
8774 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );-
8775-
8776#ifdef SQLITE_OMIT_AUTOVACUUM-
8777 rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);-
8778 if( rc ){-
8779 return rc;-
8780 }-
8781#else-
8782 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 925 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 26678 times by 29 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (34)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • ...
925-26678
8783 Pgno pgnoMove; /* Move a page here to make room for the root-page */-
8784 MemPage *pPageMove; /* The page to move to. */-
8785-
8786 /* Creating a new table may probably require moving an existing database-
8787 ** to make room for the new tables root page. In case this page turns-
8788 ** out to be an overflow page, delete all overflow page-map caches-
8789 ** held by open cursors.-
8790 */-
8791 invalidateAllOverflowCache(pBt);-
8792-
8793 /* Read the value of meta[3] from the database to determine where the-
8794 ** root page of the new table should go. meta[3] is the largest root-page-
8795 ** created so far, so the new root-page is (meta[3]+1).-
8796 */-
8797 sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot);-
8798 pgnoRoot++;-
8799-
8800 /* The new root-page may not be allocated on a pointer-map page, or the-
8801 ** PENDING_BYTE page.-
8802 */-
8803 while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) ||
pgnoRoot==ptrm...pBt, pgnoRoot)Description
TRUEevaluated 145 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 926 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
145-926
8804 pgnoRoot==PENDING_BYTE_PAGE(pBt) ){
pgnoRoot==((Pg...pageSize))+1))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 925 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
1-925
8805 pgnoRoot++;-
8806 }
executed 146 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
146
8807 assert( pgnoRoot>=3 || CORRUPT_DB );-
8808 testcase( pgnoRoot<3 );-
8809-
8810 /* Allocate a page. The page that currently resides at pgnoRoot will-
8811 ** be moved to the allocated page (unless the allocated page happens-
8812 ** to reside at pgnoRoot).-
8813 */-
8814 rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, BTALLOC_EXACT);-
8815 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 925 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-925
8816 return rc;
never executed: return rc;
0
8817 }-
8818-
8819 if( pgnoMove!=pgnoRoot ){
pgnoMove!=pgnoRootDescription
TRUEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
FALSEevaluated 823 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
102-823
8820 /* pgnoRoot is the page that will be used for the root-page of-
8821 ** the new table (assuming an error did not occur). But we were-
8822 ** allocated pgnoMove. If required (i.e. if it was not allocated-
8823 ** by extending the file), the current page at position pgnoMove-
8824 ** is already journaled.-
8825 */-
8826 u8 eType = 0;-
8827 Pgno iPtrPage = 0;-
8828-
8829 /* Save the positions of any open cursors. This is required in-
8830 ** case they are holding a reference to an xFetch reference-
8831 ** corresponding to page pgnoRoot. */-
8832 rc = saveAllCursors(pBt, 0, 0);-
8833 releasePage(pPageMove);-
8834 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
0-102
8835 return rc;
never executed: return rc;
0
8836 }-
8837-
8838 /* Move the page currently at pgnoRoot to pgnoMove. */-
8839 rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);-
8840 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
0-102
8841 return rc;
never executed: return rc;
0
8842 }-
8843 rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage);-
8844 if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){
eType==1Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
eType==2Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
0-102
8845 rc = SQLITE_CORRUPT_BKPT;-
8846 }
never executed: end of block
0
8847 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
0-102
8848 releasePage(pRoot);-
8849 return rc;
never executed: return rc;
0
8850 }-
8851 assert( eType!=PTRMAP_ROOTPAGE );-
8852 assert( eType!=PTRMAP_FREEPAGE );-
8853 rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0);-
8854 releasePage(pRoot);-
8855-
8856 /* Obtain the page at pgnoRoot */-
8857 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
0-102
8858 return rc;
never executed: return rc;
0
8859 }-
8860 rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);-
8861 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
0-102
8862 return rc;
never executed: return rc;
0
8863 }-
8864 rc = sqlite3PagerWrite(pRoot->pDbPage);-
8865 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 102 times by 2 tests
Evaluated by:
  • Self test
  • Self test (438)
0-102
8866 releasePage(pRoot);-
8867 return rc;
never executed: return rc;
0
8868 }-
8869 }else{
executed 102 times by 2 tests: end of block
Executed by:
  • Self test
  • Self test (438)
102
8870 pRoot = pPageMove;-
8871 }
executed 823 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
823
8872-
8873 /* Update the pointer-map and meta-data with the new root-page number. */-
8874 ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc);-
8875 if( rc ){
rcDescription
TRUEnever evaluated
FALSEevaluated 925 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-925
8876 releasePage(pRoot);-
8877 return rc;
never executed: return rc;
0
8878 }-
8879-
8880 /* When the new root page was allocated, page 1 was made writable in-
8881 ** order either to increase the database filesize, or to decrement the-
8882 ** freelist count. Hence, the sqlite3BtreeUpdateMeta() call cannot fail.-
8883 */-
8884 assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) );-
8885 rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot);-
8886 if( NEVER(rc) ){
(rc)Description
TRUEnever evaluated
FALSEevaluated 925 times by 4 tests
Evaluated by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
0-925
8887 releasePage(pRoot);-
8888 return rc;
never executed: return rc;
0
8889 }-
8890-
8891 }else{
executed 925 times by 4 tests: end of block
Executed by:
  • Self test
  • Self test (32)
  • Self test (33)
  • Self test (438)
925
8892 rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);-
8893 if( rc ) return rc;
executed 5 times by 2 tests: return rc;
Executed by:
  • Self test (39)
  • Self test (438)
rcDescription
TRUEevaluated 5 times by 2 tests
Evaluated by:
  • Self test (39)
  • Self test (438)
FALSEevaluated 26673 times by 28 tests
Evaluated by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
5-26673
8894 }
executed 26673 times by 28 tests: end of block
Executed by:
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
26673
8895#endif-
8896 assert( sqlite3PagerIswriteable(pRoot->pDbPage) );-
8897 if( createTabFlags & BTREE_INTKEY ){
createTabFlags & 1Description
TRUEevaluated 11302 times by 28 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
FALSEevaluated 16296 times by 22 tests
Evaluated by:
  • Self test (100)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • 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)
11302-16296
8898 ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF;-
8899 }else{
executed 11302 times by 28 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • Self test (94)
  • Self test (95)
  • Self test (96)
  • ...
11302
8900 ptfFlags = PTF_ZERODATA | PTF_LEAF;-
8901 }
executed 16296 times by 22 tests: end of block
Executed by:
  • Self test (100)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • 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)
16296
8902 zeroPage(pRoot, ptfFlags);-
8903 sqlite3PagerUnref(pRoot->pDbPage);-
8904 assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 );-
8905 *piTable = (int)pgnoRoot;-
8906 return SQLITE_OK;
executed 27598 times by 31 tests: return 0;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • ...
27598
8907}-
8908int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){-
8909 int rc;-
8910 sqlite3BtreeEnter(p);-
8911 rc = btreeCreateTable(p, piTable, flags);-
8912 sqlite3BtreeLeave(p);-
8913 return rc;
executed 27603 times by 32 tests: return rc;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (39)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • ...
27603
8914}-
8915-
8916/*-
8917** Erase the given database page and all its children. Return-
8918** the page to the freelist.-
8919*/-
8920static int clearDatabasePage(-
8921 BtShared *pBt, /* The BTree that contains the table */-
8922 Pgno pgno, /* Page number to clear */-
8923 int freePageFlag, /* Deallocate page if true */-
8924 int *pnChange /* Add number of Cells freed to this counter */-
8925){-
8926 MemPage *pPage;-
8927 int rc;-
8928 unsigned char *pCell;-
8929 int i;-
8930 int hdr;-
8931 CellInfo info;-
8932-
8933 assert( sqlite3_mutex_held(pBt->mutex) );-
8934 if( pgno>btreePagecount(pBt) ){
pgno>btreePagecount(pBt)Description
TRUEnever evaluated
FALSEevaluated 143040 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
0-143040
8935 return SQLITE_CORRUPT_BKPT;
never executed: return sqlite3CorruptError(8935);
0
8936 }-
8937 rc = getAndInitPage(pBt, pgno, &pPage, 0, 0);-
8938 if( rc ) return rc;
executed 8 times by 1 test: return rc;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 143032 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
8-143032
8939 if( pPage->bBusy ){
pPage->bBusyDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 143030 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
2-143030
8940 rc = SQLITE_CORRUPT_BKPT;-
8941 goto cleardatabasepage_out;
executed 2 times by 1 test: goto cleardatabasepage_out;
Executed by:
  • Self test (438)
2
8942 }-
8943 pPage->bBusy = 1;-
8944 hdr = pPage->hdrOffset;-
8945 for(i=0; i<pPage->nCell; i++){
i<pPage->nCellDescription
TRUEevaluated 1191373 times by 6 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
FALSEevaluated 142877 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
142877-1191373
8946 pCell = findCell(pPage, i);-
8947 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 57244 times by 5 tests
Evaluated by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
FALSEevaluated 1134129 times by 6 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
57244-1134129
8948 rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange);-
8949 if( rc ) goto cleardatabasepage_out;
executed 4 times by 1 test: goto cleardatabasepage_out;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 57240 times by 5 tests
Evaluated by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
4-57240
8950 }
executed 57240 times by 5 tests: end of block
Executed by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
57240
8951 rc = clearCell(pPage, pCell, &info);-
8952 if( rc ) goto cleardatabasepage_out;
executed 149 times by 1 test: goto cleardatabasepage_out;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 149 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1191220 times by 6 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
149-1191220
8953 }
executed 1191220 times by 6 tests: end of block
Executed by:
  • Self test
  • Self test (104)
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
1191220
8954 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 3586 times by 5 tests
Evaluated by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
FALSEevaluated 139291 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
3586-139291
8955 rc = clearDatabasePage(pBt, get4byte(&pPage->aData[hdr+8]), 1, pnChange);-
8956 if( rc ) goto cleardatabasepage_out;
executed 1 time by 1 test: goto cleardatabasepage_out;
Executed by:
  • Self test (438)
rcDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3585 times by 5 tests
Evaluated by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
1-3585
8957 }else if( pnChange ){
executed 3585 times by 5 tests: end of block
Executed by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
pnChangeDescription
TRUEevaluated 7525 times by 7 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
FALSEevaluated 131766 times by 7 tests
Evaluated by:
  • Self test
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
3585-131766
8958 assert( pPage->intKey || CORRUPT_DB );-
8959 testcase( !pPage->intKey );-
8960 *pnChange += pPage->nCell;-
8961 }
executed 7525 times by 7 tests: end of block
Executed by:
  • Self test
  • Self test (104)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
7525
8962 if( freePageFlag ){
freePageFlagDescription
TRUEevaluated 60826 times by 5 tests
Evaluated by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
FALSEevaluated 82050 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
60826-82050
8963 freePage(pPage, &rc);-
8964 }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){
executed 60826 times by 5 tests: end of block
Executed by:
  • Self test
  • Self test (34)
  • Self test (438)
  • Self test (57)
  • Self test (58)
(rc = sqlite3P...->pDbPage))==0Description
TRUEevaluated 82020 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test (438)
30-82020
8965 zeroPage(pPage, pPage->aData[hdr] | PTF_LEAF);-
8966 }
executed 82020 times by 9 tests: end of block
Executed by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
82020
8967-
8968cleardatabasepage_out:
code before this statement executed 142876 times by 9 tests: cleardatabasepage_out:
Executed by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
142876
8969 pPage->bBusy = 0;-
8970 releasePage(pPage);-
8971 return rc;
executed 143032 times by 9 tests: return rc;
Executed by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
143032
8972}-
8973-
8974/*-
8975** Delete all information from a single table in the database. iTable is-
8976** the page number of the root of the table. After this routine returns,-
8977** the root page is empty, but still exists.-
8978**-
8979** This routine will fail with SQLITE_LOCKED if there are any open-
8980** read cursors on the table. Open write cursors are moved to the-
8981** root of the table.-
8982**-
8983** If pnChange is not NULL, then table iTable must be an intkey table. The-
8984** integer value pointed to by pnChange is incremented by the number of-
8985** entries in the table.-
8986*/-
8987int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){-
8988 int rc;-
8989 BtShared *pBt = p->pBt;-
8990 sqlite3BtreeEnter(p);-
8991 assert( p->inTrans==TRANS_WRITE );-
8992-
8993 rc = saveAllCursors(pBt, (Pgno)iTable, 0);-
8994-
8995 if( SQLITE_OK==rc ){
0==rcDescription
TRUEevaluated 82210 times by 9 tests
Evaluated by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
FALSEnever evaluated
0-82210
8996 /* Invalidate all incrblob cursors open on table iTable (assuming iTable-
8997 ** is the root of a table b-tree - if it is not, the following call is-
8998 ** a no-op). */-
8999 invalidateIncrblobCursors(p, (Pgno)iTable, 0, 1);-
9000 rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange);-
9001 }
executed 82210 times by 9 tests: end of block
Executed by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
82210
9002 sqlite3BtreeLeave(p);-
9003 return rc;
executed 82210 times by 9 tests: return rc;
Executed by:
  • Self test
  • Self test (104)
  • Self test (24)
  • Self test (28)
  • Self test (34)
  • Self test (438)
  • Self test (47)
  • Self test (57)
  • Self test (58)
82210
9004}-
9005-
9006/*-
9007** Delete all information from the single table that pCur is open on.-
9008**-
9009** This routine only work for pCur on an ephemeral table.-
9010*/-
9011int sqlite3BtreeClearTableOfCursor(BtCursor *pCur){-
9012 return sqlite3BtreeClearTable(pCur->pBtree, pCur->pgnoRoot, 0);
executed 73273 times by 1 test: return sqlite3BtreeClearTable(pCur->pBtree, pCur->pgnoRoot, 0);
Executed by:
  • Self test (438)
73273
9013}-
9014-
9015/*-
9016** Erase all information in a table and add the root of the table to-
9017** the freelist. Except, the root of the principle table (the one on-
9018** page 1) is never added to the freelist.-
9019**-
9020** This routine will fail with SQLITE_LOCKED if there are any open-
9021** cursors on the table.-
9022**-
9023** If AUTOVACUUM is enabled and the page at iTable is not the last-
9024** root page in the database file, then the last root page -
9025** in the database file is moved into the slot formerly occupied by-
9026** iTable and that last slot formerly occupied by the last root page-
9027** is added to the freelist instead of iTable. In this say, all-
9028** root pages are kept at the beginning of the database file, which-
9029** is necessary for AUTOVACUUM to work right. *piMoved is set to the -
9030** page number that used to be the last root page in the file before-
9031** the move. If no page gets moved, *piMoved is set to 0.-
9032** The last root page is recorded in meta[3] and the value of-
9033** meta[3] is updated by this procedure.-
9034*/-
9035static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){-
9036 int rc;-
9037 MemPage *pPage = 0;-
9038 BtShared *pBt = p->pBt;-
9039-
9040 assert( sqlite3BtreeHoldsMutex(p) );-
9041 assert( p->inTrans==TRANS_WRITE );-
9042 assert( iTable>=2 );-
9043-
9044 rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0);-
9045 if( rc ) return rc;
never executed: return rc;
rcDescription
TRUEnever evaluated
FALSEevaluated 5646 times by 4 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
0-5646
9046 rc = sqlite3BtreeClearTable(p, iTable, 0);-
9047 if( rc ){
rcDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 5644 times by 4 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
2-5644
9048 releasePage(pPage);-
9049 return rc;
executed 2 times by 1 test: return rc;
Executed by:
  • Self test (438)
2
9050 }-
9051-
9052 *piMoved = 0;-
9053-
9054#ifdef SQLITE_OMIT_AUTOVACUUM-
9055 freePage(pPage, &rc);-
9056 releasePage(pPage);-
9057#else-
9058 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 745 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4899 times by 4 tests
Evaluated by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
745-4899
9059 Pgno maxRootPgno;-
9060 sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno);-
9061-
9062 if( iTable==maxRootPgno ){
iTable==maxRootPgnoDescription
TRUEevaluated 373 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 372 times by 1 test
Evaluated by:
  • Self test (438)
372-373
9063 /* If the table being dropped is the table with the largest root-page-
9064 ** number in the database, put the root page on the free list. -
9065 */-
9066 freePage(pPage, &rc);-
9067 releasePage(pPage);-
9068 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 373 times by 1 test
Evaluated by:
  • Self test (438)
0-373
9069 return rc;
never executed: return rc;
0
9070 }-
9071 }else{
executed 373 times by 1 test: end of block
Executed by:
  • Self test (438)
373
9072 /* The table being dropped does not have the largest root-page-
9073 ** number in the database. So move the page that does into the -
9074 ** gap left by the deleted root-page.-
9075 */-
9076 MemPage *pMove;-
9077 releasePage(pPage);-
9078 rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);-
9079 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 372 times by 1 test
Evaluated by:
  • Self test (438)
0-372
9080 return rc;
never executed: return rc;
0
9081 }-
9082 rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0);-
9083 releasePage(pMove);-
9084 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 369 times by 1 test
Evaluated by:
  • Self test (438)
3-369
9085 return rc;
executed 3 times by 1 test: return rc;
Executed by:
  • Self test (438)
3
9086 }-
9087 pMove = 0;-
9088 rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);-
9089 freePage(pMove, &rc);-
9090 releasePage(pMove);-
9091 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 368 times by 1 test
Evaluated by:
  • Self test (438)
1-368
9092 return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
1
9093 }-
9094 *piMoved = maxRootPgno;-
9095 }
executed 368 times by 1 test: end of block
Executed by:
  • Self test (438)
368
9096-
9097 /* Set the new 'max-root-page' value in the database header. This-
9098 ** is the old value less one, less one more if that happens to-
9099 ** be a root-page number, less one again if that is the-
9100 ** PENDING_BYTE_PAGE.-
9101 */-
9102 maxRootPgno--;-
9103 while( maxRootPgno==PENDING_BYTE_PAGE(pBt)
maxRootPgno==(...pageSize))+1))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 783 times by 1 test
Evaluated by:
  • Self test (438)
1-783
9104 || PTRMAP_ISPAGE(pBt, maxRootPgno) ){
(ptrmapPageno(...(maxRootPgno))Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 741 times by 1 test
Evaluated by:
  • Self test (438)
42-741
9105 maxRootPgno--;-
9106 }
executed 43 times by 1 test: end of block
Executed by:
  • Self test (438)
43
9107 assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) );-
9108-
9109 rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno);-
9110 }else{
executed 741 times by 1 test: end of block
Executed by:
  • Self test (438)
741
9111 freePage(pPage, &rc);-
9112 releasePage(pPage);-
9113 }
executed 4899 times by 4 tests: end of block
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
4899
9114#endif-
9115 return rc;
executed 5640 times by 4 tests: return rc;
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
5640
9116}-
9117int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){-
9118 int rc;-
9119 sqlite3BtreeEnter(p);-
9120 rc = btreeDropTable(p, iTable, piMoved);-
9121 sqlite3BtreeLeave(p);-
9122 return rc;
executed 5646 times by 4 tests: return rc;
Executed by:
  • Self test (24)
  • Self test (28)
  • Self test (438)
  • Self test (47)
5646
9123}-
9124-
9125-
9126/*-
9127** This function may only be called if the b-tree connection already-
9128** has a read or write transaction open on the database.-
9129**-
9130** Read the meta-information out of a database file. Meta[0]-
9131** is the number of free pages currently in the database. Meta[1]-
9132** through meta[15] are available for use by higher layers. Meta[0]-
9133** is read-only, the others are read/write.-
9134** -
9135** The schema layer numbers meta values differently. At the schema-
9136** layer (and the SetCookie and ReadCookie opcodes) the number of-
9137** free pages is not visible. So Cookie[0] is the same as Meta[1].-
9138**-
9139** This routine treats Meta[BTREE_DATA_VERSION] as a special case. Instead-
9140** of reading the value out of the header, it instead loads the "DataVersion"-
9141** from the pager. The BTREE_DATA_VERSION value is not actually stored in the-
9142** database file. It is a number computed by the pager. But its access-
9143** pattern is the same as header meta values, and so it is convenient to-
9144** read it from this routine.-
9145*/-
9146void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){-
9147 BtShared *pBt = p->pBt;-
9148-
9149 sqlite3BtreeEnter(p);-
9150 assert( p->inTrans>TRANS_NONE );-
9151 assert( SQLITE_OK==querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK) );-
9152 assert( pBt->pPage1 );-
9153 assert( idx>=0 && idx<=15 );-
9154-
9155 if( idx==BTREE_DATA_VERSION ){
idx==15Description
TRUEevaluated 39 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 129220 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)
  • ...
39-129220
9156 *pMeta = sqlite3PagerDataVersion(pBt->pPager) + p->iDataVersion;-
9157 }else{
executed 39 times by 1 test: end of block
Executed by:
  • Self test (438)
39
9158 *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]);-
9159 }
executed 129220 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)
  • ...
129220
9160-
9161 /* If auto-vacuum is disabled in this build and this is an auto-vacuum-
9162 ** database, mark the database as read-only. */-
9163#ifdef SQLITE_OMIT_AUTOVACUUM-
9164 if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ){-
9165 pBt->btsFlags |= BTS_READ_ONLY;-
9166 }-
9167#endif-
9168-
9169 sqlite3BtreeLeave(p);-
9170}
executed 129259 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)
  • ...
129259
9171-
9172/*-
9173** Write meta-information back into the database. Meta[0] is-
9174** read-only and may not be written.-
9175*/-
9176int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){-
9177 BtShared *pBt = p->pBt;-
9178 unsigned char *pP1;-
9179 int rc;-
9180 assert( idx>=1 && idx<=15 );-
9181 sqlite3BtreeEnter(p);-
9182 assert( p->inTrans==TRANS_WRITE );-
9183 assert( pBt->pPage1!=0 );-
9184 pP1 = pBt->pPage1->aData;-
9185 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);-
9186 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 35731 times by 31 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • ...
FALSEnever evaluated
0-35731
9187 put4byte(&pP1[36 + idx*4], iMeta);-
9188#ifndef SQLITE_OMIT_AUTOVACUUM-
9189 if( idx==BTREE_INCR_VACUUM ){
idx==7Description
TRUEevaluated 130 times by 3 tests
Evaluated by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
FALSEevaluated 35601 times by 31 tests
Evaluated by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • ...
130-35601
9190 assert( pBt->autoVacuum || iMeta==0 );-
9191 assert( iMeta==0 || iMeta==1 );-
9192 pBt->incrVacuum = (u8)iMeta;-
9193 }
executed 130 times by 3 tests: end of block
Executed by:
  • Self test (32)
  • Self test (33)
  • Self test (438)
130
9194#endif-
9195 }
executed 35731 times by 31 tests: end of block
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • ...
35731
9196 sqlite3BtreeLeave(p);-
9197 return rc;
executed 35731 times by 31 tests: return rc;
Executed by:
  • Self test
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (24)
  • Self test (26)
  • Self test (27)
  • Self test (28)
  • Self test (29)
  • Self test (32)
  • Self test (33)
  • Self test (34)
  • Self test (42)
  • Self test (438)
  • Self test (44)
  • Self test (46)
  • Self test (47)
  • Self test (48)
  • Self test (57)
  • Self test (58)
  • Self test (72)
  • Self test (73)
  • Self test (91)
  • Self test (92)
  • Self test (93)
  • ...
35731
9198}-
9199-
9200#ifndef SQLITE_OMIT_BTREECOUNT-
9201/*-
9202** The first argument, pCur, is a cursor opened on some b-tree. Count the-
9203** number of entries in the b-tree and write the result to *pnEntry.-
9204**-
9205** SQLITE_OK is returned if the operation is successfully executed. -
9206** Otherwise, if an error is encountered (i.e. an IO error or database-
9207** corruption) an SQLite error code is returned.-
9208*/-
9209int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){-
9210 i64 nEntry = 0; /* Value to return in *pnEntry */-
9211 int rc; /* Return code */-
9212-
9213 rc = moveToRoot(pCur);-
9214 if( rc==SQLITE_EMPTY ){
rc==16Description
TRUEevaluated 413 times by 2 tests
Evaluated by:
  • Self test (104)
  • Self test (438)
FALSEevaluated 130612 times by 14 tests
Evaluated by:
  • Self test (103)
  • 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)
413-130612
9215 *pnEntry = 0;-
9216 return SQLITE_OK;
executed 413 times by 2 tests: return 0;
Executed by:
  • Self test (104)
  • Self test (438)
413
9217 }-
9218-
9219 /* Unless an error occurs, the following loop runs one iteration for each-
9220 ** page in the B-Tree structure (not including overflow pages). -
9221 */-
9222 while( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1366101 times by 14 tests
Evaluated by:
  • Self test (103)
  • 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)
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
1-1366101
9223 int iIdx; /* Index of child node in parent */-
9224 MemPage *pPage; /* Current page of the b-tree */-
9225-
9226 /* If this is a leaf page or the tree is not an int-key tree, then -
9227 ** this page contains countable entries. Increment the entry counter-
9228 ** accordingly.-
9229 */-
9230 pPage = pCur->pPage;-
9231 if( pPage->leaf || !pPage->intKey ){
pPage->leafDescription
TRUEevaluated 1217958 times by 14 tests
Evaluated by:
  • Self test (103)
  • 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)
FALSEevaluated 148143 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
!pPage->intKeyDescription
TRUEevaluated 18419 times by 2 tests
Evaluated by:
  • Self test (438)
  • Self test (74)
FALSEevaluated 129724 times by 2 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
18419-1217958
9232 nEntry += pPage->nCell;-
9233 }
executed 1236377 times by 14 tests: end of block
Executed by:
  • Self test (103)
  • 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)
1236377
9234-
9235 /* pPage is a leaf node. This loop navigates the cursor so that it -
9236 ** points to the first interior cell that it points to the parent of-
9237 ** the next page in the tree that has not yet been visited. The-
9238 ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell-
9239 ** of the page, or to the number of cells in the page if the next page-
9240 ** to visit is the right-child of its parent.-
9241 **-
9242 ** If all pages in the tree have been visited, return SQLITE_OK to the-
9243 ** caller.-
9244 */-
9245 if( pPage->leaf ){
pPage->leafDescription
TRUEevaluated 1217958 times by 14 tests
Evaluated by:
  • Self test (103)
  • 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)
FALSEevaluated 148143 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
148143-1217958
9246 do {-
9247 if( pCur->iPage==0 ){
pCur->iPage==0Description
TRUEevaluated 130611 times by 14 tests
Evaluated by:
  • Self test (103)
  • 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)
FALSEevaluated 1235491 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
130611-1235491
9248 /* All pages of the b-tree have been visited. Return successfully. */-
9249 *pnEntry = nEntry;-
9250 return moveToRoot(pCur);
executed 130611 times by 14 tests: return moveToRoot(pCur);
Executed by:
  • Self test (103)
  • 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)
130611
9251 }-
9252 moveToParent(pCur);-
9253 }while ( pCur->ix>=pCur->pPage->nCell );
executed 1235491 times by 3 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
pCur->ix>=pCur->pPage->nCellDescription
TRUEevaluated 148144 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
FALSEevaluated 1087347 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
148144-1235491
9254-
9255 pCur->ix++;-
9256 pPage = pCur->pPage;-
9257 }
executed 1087347 times by 3 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
1087347
9258-
9259 /* Descend to the child node of the cell that the cursor currently -
9260 ** points at. This is the right-child if (iIdx==pPage->nCell).-
9261 */-
9262 iIdx = pCur->ix;-
9263 if( iIdx==pPage->nCell ){
iIdx==pPage->nCellDescription
TRUEevaluated 148143 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
FALSEevaluated 1087347 times by 3 tests
Evaluated by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
148143-1087347
9264 rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));-
9265 }else{
executed 148143 times by 3 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
148143
9266 rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx)));-
9267 }
executed 1087347 times by 3 tests: end of block
Executed by:
  • Self test (34)
  • Self test (438)
  • Self test (74)
1087347
9268 }-
9269-
9270 /* An error has occurred. Return an error code. */-
9271 return rc;
executed 1 time by 1 test: return rc;
Executed by:
  • Self test (438)
1
9272}-
9273#endif-
9274-
9275/*-
9276** Return the pager associated with a BTree. This routine is used for-
9277** testing and debugging only.-
9278*/-
9279Pager *sqlite3BtreePager(Btree *p){-
9280 return p->pBt->pPager;
executed 722692 times by 434 tests: return p->pBt->pPager;
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)
  • ...
722692
9281}-
9282-
9283#ifndef SQLITE_OMIT_INTEGRITY_CHECK-
9284/*-
9285** Append a message to the error message string.-
9286*/-
9287static void checkAppendMsg(-
9288 IntegrityCk *pCheck,-
9289 const char *zFormat,-
9290 ...-
9291){-
9292 va_list ap;-
9293 if( !pCheck->mxErr ) return;
never executed: return;
!pCheck->mxErrDescription
TRUEnever evaluated
FALSEevaluated 223 times by 1 test
Evaluated by:
  • Self test (438)
0-223
9294 pCheck->mxErr--;-
9295 pCheck->nErr++;-
9296 va_start(ap, zFormat);-
9297 if( pCheck->errMsg.nChar ){
pCheck->errMsg.nCharDescription
TRUEevaluated 55 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 168 times by 1 test
Evaluated by:
  • Self test (438)
55-168
9298 sqlite3_str_append(&pCheck->errMsg, "\n", 1);-
9299 }
executed 55 times by 1 test: end of block
Executed by:
  • Self test (438)
55
9300 if( pCheck->zPfx ){
pCheck->zPfxDescription
TRUEevaluated 140 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 83 times by 1 test
Evaluated by:
  • Self test (438)
83-140
9301 sqlite3_str_appendf(&pCheck->errMsg, pCheck->zPfx, pCheck->v1, pCheck->v2);-
9302 }
executed 140 times by 1 test: end of block
Executed by:
  • Self test (438)
140
9303 sqlite3_str_vappendf(&pCheck->errMsg, zFormat, ap);-
9304 va_end(ap);-
9305 if( pCheck->errMsg.accError==SQLITE_NOMEM ){
pCheck->errMsg.accError==7Description
TRUEnever evaluated
FALSEevaluated 223 times by 1 test
Evaluated by:
  • Self test (438)
0-223
9306 pCheck->mallocFailed = 1;-
9307 }
never executed: end of block
0
9308}
executed 223 times by 1 test: end of block
Executed by:
  • Self test (438)
223
9309#endif /* SQLITE_OMIT_INTEGRITY_CHECK */-
9310-
9311#ifndef SQLITE_OMIT_INTEGRITY_CHECK-
9312-
9313/*-
9314** Return non-zero if the bit in the IntegrityCk.aPgRef[] array that-
9315** corresponds to page iPg is already set.-
9316*/-
9317static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){-
9318 assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 );-
9319 return (pCheck->aPgRef[iPg/8] & (1 << (iPg & 0x07)));
executed 4704997 times by 12 tests: return (pCheck->aPgRef[iPg/8] & (1 << (iPg & 0x07)));
Executed by:
  • 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)
4704997
9320}-
9321-
9322/*-
9323** Set the bit in the IntegrityCk.aPgRef[] array that corresponds to page iPg.-
9324*/-
9325static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){-
9326 assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 );-
9327 pCheck->aPgRef[iPg/8] |= (1 << (iPg & 0x07));-
9328}
executed 1568355 times by 12 tests: end of block
Executed by:
  • 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)
1568355
9329-
9330-
9331/*-
9332** Add 1 to the reference count for page iPage. If this is the second-
9333** reference to the page, add an error message to pCheck->zErrMsg.-
9334** Return 1 if there are 2 or more references to the page and 0 if-
9335** if this is the first reference to the page.-
9336**-
9337** Also check that the page number is in bounds.-
9338*/-
9339static int checkRef(IntegrityCk *pCheck, Pgno iPage){-
9340 if( iPage>pCheck->nPage || iPage==0 ){
iPage>pCheck->nPageDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1563847 times by 12 tests
Evaluated by:
  • 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)
iPage==0Description
TRUEnever evaluated
FALSEevaluated 1563847 times by 12 tests
Evaluated by:
  • 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-1563847
9341 checkAppendMsg(pCheck, "invalid page number %d", iPage);-
9342 return 1;
executed 4 times by 1 test: return 1;
Executed by:
  • Self test (438)
4
9343 }-
9344 if( getPageReferenced(pCheck, iPage) ){
getPageReferen...pCheck, iPage)Description
TRUEevaluated 21 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1563826 times by 12 tests
Evaluated by:
  • 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)
21-1563826
9345 checkAppendMsg(pCheck, "2nd reference to page %d", iPage);-
9346 return 1;
executed 21 times by 1 test: return 1;
Executed by:
  • Self test (438)
21
9347 }-
9348 setPageReferenced(pCheck, iPage);-
9349 return 0;
executed 1563826 times by 12 tests: return 0;
Executed by:
  • 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)
1563826
9350}-
9351-
9352#ifndef SQLITE_OMIT_AUTOVACUUM-
9353/*-
9354** Check that the entry in the pointer-map for page iChild maps to -
9355** page iParent, pointer type ptrType. If not, append an error message-
9356** to pCheck.-
9357*/-
9358static void checkPtrmap(-
9359 IntegrityCk *pCheck, /* Integrity check context */-
9360 Pgno iChild, /* Child page number */-
9361 u8 eType, /* Expected pointer map type */-
9362 Pgno iParent /* Expected pointer map parent page number */-
9363){-
9364 int rc;-
9365 u8 ePtrmapType;-
9366 Pgno iPtrmapParent;-
9367-
9368 rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent);-
9369 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 266621 times by 1 test
Evaluated by:
  • Self test (438)
28-266621
9370 if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1;
never executed: pCheck->mallocFailed = 1;
rc==7Description
TRUEnever evaluated
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
rc==(10 | (12<<8))Description
TRUEnever evaluated
FALSEevaluated 28 times by 1 test
Evaluated by:
  • Self test (438)
0-28
9371 checkAppendMsg(pCheck, "Failed to read ptrmap key=%d", iChild);-
9372 return;
executed 28 times by 1 test: return;
Executed by:
  • Self test (438)
28
9373 }-
9374-
9375 if( ePtrmapType!=eType || iPtrmapParent!=iParent ){
ePtrmapType!=eTypeDescription
TRUEevaluated 56 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 266565 times by 1 test
Evaluated by:
  • Self test (438)
iPtrmapParent!=iParentDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 266553 times by 1 test
Evaluated by:
  • Self test (438)
12-266565
9376 checkAppendMsg(pCheck,-
9377 "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)", -
9378 iChild, eType, iParent, ePtrmapType, iPtrmapParent);-
9379 }
executed 68 times by 1 test: end of block
Executed by:
  • Self test (438)
68
9380}
executed 266621 times by 1 test: end of block
Executed by:
  • Self test (438)
266621
9381#endif-
9382-
9383/*-
9384** Check the integrity of the freelist or of an overflow page list.-
9385** Verify that the number of pages on the list is N.-
9386*/-
9387static void checkList(-
9388 IntegrityCk *pCheck, /* Integrity checking context */-
9389 int isFreeList, /* True for a freelist. False for overflow page list */-
9390 int iPage, /* Page number for first page in the list */-
9391 int N /* Expected number of pages in the list */-
9392){-
9393 int i;-
9394 int expected = N;-
9395 int nErrAtStart = pCheck->nErr;-
9396 while( iPage!=0 && pCheck->mxErr ){
iPage!=0Description
TRUEevaluated 364936 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
FALSEevaluated 318974 times by 12 tests
Evaluated by:
  • 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)
pCheck->mxErrDescription
TRUEevaluated 364936 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
FALSEnever evaluated
0-364936
9397 DbPage *pOvflPage;-
9398 unsigned char *pOvflData;-
9399 if( checkRef(pCheck, iPage) ) break;
executed 7 times by 1 test: break;
Executed by:
  • Self test (438)
checkRef(pCheck, iPage)Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 364929 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
7-364929
9400 N--;-
9401 if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage, 0) ){
sqlite3PagerGe...&pOvflPage, 0)Description
TRUEnever evaluated
FALSEevaluated 364929 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
0-364929
9402 checkAppendMsg(pCheck, "failed to get page %d", iPage);-
9403 break;
never executed: break;
0
9404 }-
9405 pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage);-
9406 if( isFreeList ){
isFreeListDescription
TRUEevaluated 2636 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 362293 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
2636-362293
9407 int n = get4byte(&pOvflData[4]);-
9408#ifndef SQLITE_OMIT_AUTOVACUUM-
9409 if( pCheck->pBt->autoVacuum ){
pCheck->pBt->autoVacuumDescription
TRUEevaluated 264 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2372 times by 1 test
Evaluated by:
  • Self test (438)
264-2372
9410 checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0);-
9411 }
executed 264 times by 1 test: end of block
Executed by:
  • Self test (438)
264
9412#endif-
9413 if( n>(int)pCheck->pBt->usableSize/4-2 ){
n>(int)pCheck-...usableSize/4-2Description
TRUEnever evaluated
FALSEevaluated 2636 times by 1 test
Evaluated by:
  • Self test (438)
0-2636
9414 checkAppendMsg(pCheck,-
9415 "freelist leaf count too big on page %d", iPage);-
9416 N--;-
9417 }else{
never executed: end of block
0
9418 for(i=0; i<n; i++){
i<nDescription
TRUEevaluated 153638 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2636 times by 1 test
Evaluated by:
  • Self test (438)
2636-153638
9419 Pgno iFreePage = get4byte(&pOvflData[8+i*4]);-
9420#ifndef SQLITE_OMIT_AUTOVACUUM-
9421 if( pCheck->pBt->autoVacuum ){
pCheck->pBt->autoVacuumDescription
TRUEevaluated 12430 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 141208 times by 1 test
Evaluated by:
  • Self test (438)
12430-141208
9422 checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0);-
9423 }
executed 12430 times by 1 test: end of block
Executed by:
  • Self test (438)
12430
9424#endif-
9425 checkRef(pCheck, iFreePage);-
9426 }
executed 153638 times by 1 test: end of block
Executed by:
  • Self test (438)
153638
9427 N -= n;-
9428 }
executed 2636 times by 1 test: end of block
Executed by:
  • Self test (438)
2636
9429 }-
9430#ifndef SQLITE_OMIT_AUTOVACUUM-
9431 else{-
9432 /* If this database supports auto-vacuum and iPage is not the last-
9433 ** page in this overflow list, check that the pointer-map entry for-
9434 ** the following page matches iPage.-
9435 */-
9436 if( pCheck->pBt->autoVacuum && N>0 ){
pCheck->pBt->autoVacuumDescription
TRUEevaluated 140064 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 222229 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
N>0Description
TRUEevaluated 4886 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 135178 times by 1 test
Evaluated by:
  • Self test (438)
4886-222229
9437 i = get4byte(pOvflData);-
9438 checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage);-
9439 }
executed 4886 times by 1 test: end of block
Executed by:
  • Self test (438)
4886
9440 }
executed 362293 times by 5 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
362293
9441#endif-
9442 iPage = get4byte(pOvflData);-
9443 sqlite3PagerUnref(pOvflPage);-
9444 }
executed 364929 times by 5 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
364929
9445 if( N && nErrAtStart==pCheck->nErr ){
NDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 318972 times by 12 tests
Evaluated by:
  • 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)
nErrAtStart==pCheck->nErrDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6 times by 1 test
Evaluated by:
  • Self test (438)
3-318972
9446 checkAppendMsg(pCheck,-
9447 "%s is %d but should be %d",-
9448 isFreeList ? "size" : "overflow list length",-
9449 expected-N, expected);-
9450 }
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
9451}
executed 318981 times by 12 tests: end of block
Executed by:
  • 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)
318981
9452#endif /* SQLITE_OMIT_INTEGRITY_CHECK */-
9453-
9454/*-
9455** An implementation of a min-heap.-
9456**-
9457** aHeap[0] is the number of elements on the heap. aHeap[1] is the-
9458** root element. The daughter nodes of aHeap[N] are aHeap[N*2]-
9459** and aHeap[N*2+1].-
9460**-
9461** The heap property is this: Every node is less than or equal to both-
9462** of its daughter nodes. A consequence of the heap property is that the-
9463** root node aHeap[1] is always the minimum value currently in the heap.-
9464**-
9465** The btreeHeapInsert() routine inserts an unsigned 32-bit number onto-
9466** the heap, preserving the heap property. The btreeHeapPull() routine-
9467** removes the root element from the heap (the minimum value in the heap)-
9468** and then moves other nodes around as necessary to preserve the heap-
9469** property.-
9470**-
9471** This heap is used for cell overlap and coverage testing. Each u32-
9472** entry represents the span of a cell or freeblock on a btree page. -
9473** The upper 16 bits are the index of the first byte of a range and the-
9474** lower 16 bits are the index of the last byte of that range.-
9475*/-
9476static void btreeHeapInsert(u32 *aHeap, u32 x){-
9477 u32 j, i = ++aHeap[0];-
9478 aHeap[i] = x;-
9479 while( (j = i/2)>0 && aHeap[j]>aHeap[i] ){
(j = i/2)>0Description
TRUEevaluated 3046186 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 1158400 times by 12 tests
Evaluated by:
  • 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)
aHeap[j]>aHeap[i]Description
TRUEevaluated 672771 times by 9 tests
Evaluated by:
  • Self test (438)
  • 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 2373415 times by 12 tests
Evaluated by:
  • 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)
672771-3046186
9480 x = aHeap[j];-
9481 aHeap[j] = aHeap[i];-
9482 aHeap[i] = x;-
9483 i = j;-
9484 }
executed 672771 times by 9 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
672771
9485}
executed 3531815 times by 12 tests: end of block
Executed by:
  • 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)
3531815
9486static int btreeHeapPull(u32 *aHeap, u32 *pOut){-
9487 u32 j, i, x;-
9488 if( (x = aHeap[0])==0 ) return 0;
executed 1045235 times by 12 tests: return 0;
Executed by:
  • 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)
(x = aHeap[0])==0Description
TRUEevaluated 1045235 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 3531380 times by 12 tests
Evaluated by:
  • 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)
1045235-3531380
9489 *pOut = aHeap[1];-
9490 aHeap[1] = aHeap[x];-
9491 aHeap[x] = 0xffffffff;-
9492 aHeap[0]--;-
9493 i = 1;-
9494 while( (j = i*2)<=aHeap[0] ){
(j = i*2)<=aHeap[0]Description
TRUEevaluated 6988685 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 3153823 times by 12 tests
Evaluated by:
  • 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)
3153823-6988685
9495 if( aHeap[j]>aHeap[j+1] ) j++;
executed 2872213 times by 3 tests: j++;
Executed by:
  • Self test (43)
  • Self test (438)
  • Self test (74)
aHeap[j]>aHeap[j+1]Description
TRUEevaluated 2872213 times by 3 tests
Evaluated by:
  • Self test (43)
  • Self test (438)
  • Self test (74)
FALSEevaluated 4116472 times by 12 tests
Evaluated by:
  • 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)
2872213-4116472
9496 if( aHeap[i]<aHeap[j] ) break;
executed 377557 times by 7 tests: break;
Executed by:
  • Self test (438)
  • Self test (45)
  • Self test (65)
  • Self test (67)
  • Self test (68)
  • Self test (71)
  • Self test (74)
aHeap[i]<aHeap[j]Description
TRUEevaluated 377557 times by 7 tests
Evaluated by:
  • Self test (438)
  • Self test (45)
  • Self test (65)
  • Self test (67)
  • Self test (68)
  • Self test (71)
  • Self test (74)
FALSEevaluated 6611128 times by 12 tests
Evaluated by:
  • 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)
377557-6611128
9497 x = aHeap[i];-
9498 aHeap[i] = aHeap[j];-
9499 aHeap[j] = x;-
9500 i = j;-
9501 }
executed 6611128 times by 12 tests: end of block
Executed by:
  • 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)
6611128
9502 return 1;
executed 3531380 times by 12 tests: return 1;
Executed by:
  • 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)
3531380
9503}-
9504-
9505#ifndef SQLITE_OMIT_INTEGRITY_CHECK-
9506/*-
9507** Do various sanity checks on a single page of a tree. Return-
9508** the tree depth. Root pages return 0. Parents of root pages-
9509** return 1, and so forth.-
9510** -
9511** These checks are done:-
9512**-
9513** 1. Make sure that cells and freeblocks do not overlap-
9514** but combine to completely cover the page.-
9515** 2. Make sure integer cell keys are in order.-
9516** 3. Check the integrity of overflow pages.-
9517** 4. Recursively call checkTreePage on all children.-
9518** 5. Verify that the depth of all children is the same.-
9519*/-
9520static int checkTreePage(-
9521 IntegrityCk *pCheck, /* Context for the sanity check */-
9522 int iPage, /* Page number of the page to check */-
9523 i64 *piMinKey, /* Write minimum integer primary key here */-
9524 i64 maxKey /* Error if integer primary key greater than this */-
9525){-
9526 MemPage *pPage = 0; /* The page being analyzed */-
9527 int i; /* Loop counter */-
9528 int rc; /* Result code from subroutine call */-
9529 int depth = -1, d2; /* Depth of a subtree */-
9530 int pgno; /* Page number */-
9531 int nFrag; /* Number of fragmented bytes on the page */-
9532 int hdr; /* Offset to the page header */-
9533 int cellStart; /* Offset to the start of the cell pointer array */-
9534 int nCell; /* Number of cells */-
9535 int doCoverageCheck = 1; /* True if cell coverage checking should be done */-
9536 int keyCanBeEqual = 1; /* True if IPK can be equal to maxKey-
9537 ** False if IPK must be strictly less than maxKey */-
9538 u8 *data; /* Page content */-
9539 u8 *pCell; /* Cell content */-
9540 u8 *pCellIdx; /* Next element of the cell pointer array */-
9541 BtShared *pBt; /* The BtShared object that owns pPage */-
9542 u32 pc; /* Address of a cell */-
9543 u32 usableSize; /* Usable size of the page */-
9544 u32 contentOffset; /* Offset to the start of the cell content area */-
9545 u32 *heap = 0; /* Min-heap used for checking cell coverage */-
9546 u32 x, prev = 0; /* Next and previous entry on the min-heap */-
9547 const char *saved_zPfx = pCheck->zPfx;-
9548 int saved_v1 = pCheck->v1;-
9549 int saved_v2 = pCheck->v2;-
9550 u8 savedIsInit = 0;-
9551-
9552 /* Check that the page exists-
9553 */-
9554 pBt = pCheck->pBt;-
9555 usableSize = pBt->usableSize;-
9556 if( iPage==0 ) return 0;
never executed: return 0;
iPage==0Description
TRUEnever evaluated
FALSEevaluated 1045277 times by 12 tests
Evaluated by:
  • 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-1045277
9557 if( checkRef(pCheck, iPage) ) return 0;
executed 12 times by 1 test: return 0;
Executed by:
  • Self test (438)
checkRef(pCheck, iPage)Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1045265 times by 12 tests
Evaluated by:
  • 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)
12-1045265
9558 pCheck->zPfx = "Page %d: ";-
9559 pCheck->v1 = iPage;-
9560 if( (rc = btreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){
(rc = btreeGet...&pPage, 0))!=0Description
TRUEnever evaluated
FALSEevaluated 1045265 times by 12 tests
Evaluated by:
  • 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-1045265
9561 checkAppendMsg(pCheck,-
9562 "unable to get the page. error code=%d", rc);-
9563 goto end_of_check;
never executed: goto end_of_check;
0
9564 }-
9565-
9566 /* Clear MemPage.isInit to make sure the corruption detection code in-
9567 ** btreeInitPage() is executed. */-
9568 savedIsInit = pPage->isInit;-
9569 pPage->isInit = 0;-
9570 if( (rc = btreeInitPage(pPage))!=0 ){
(rc = btreeInitPage(pPage))!=0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1045247 times by 12 tests
Evaluated by:
  • 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)
18-1045247
9571 assert( rc==SQLITE_CORRUPT ); /* The only possible error from InitPage */-
9572 checkAppendMsg(pCheck,-
9573 "btreeInitPage() returns error code %d", rc);-
9574 goto end_of_check;
executed 18 times by 1 test: goto end_of_check;
Executed by:
  • Self test (438)
18
9575 }-
9576 data = pPage->aData;-
9577 hdr = pPage->hdrOffset;-
9578-
9579 /* Set up for cell analysis */-
9580 pCheck->zPfx = "On tree page %d cell %d: ";-
9581 contentOffset = get2byteNotZero(&data[hdr+5]);-
9582 assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */-
9583-
9584 /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the-
9585 ** number of cells on the page. */-
9586 nCell = get2byte(&data[hdr+3]);-
9587 assert( pPage->nCell==nCell );-
9588-
9589 /* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page-
9590 ** immediately follows the b-tree page header. */-
9591 cellStart = hdr + 12 - 4*pPage->leaf;-
9592 assert( pPage->aCellIdx==&data[cellStart] );-
9593 pCellIdx = &data[cellStart + 2*(nCell-1)];-
9594-
9595 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 29709 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
FALSEevaluated 1015538 times by 12 tests
Evaluated by:
  • 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)
29709-1015538
9596 /* Analyze the right-child page of internal pages */-
9597 pgno = get4byte(&data[hdr+8]);-
9598#ifndef SQLITE_OMIT_AUTOVACUUM-
9599 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 7085 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 22624 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
7085-22624
9600 pCheck->zPfx = "On page %d at right child: ";-
9601 checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage);-
9602 }
executed 7085 times by 1 test: end of block
Executed by:
  • Self test (438)
7085
9603#endif-
9604 depth = checkTreePage(pCheck, pgno, &maxKey, maxKey);-
9605 keyCanBeEqual = 0;-
9606 }else{
executed 29709 times by 5 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
29709
9607 /* For leaf pages, the coverage check will occur in the same loop-
9608 ** as the other cell checks, so initialize the heap. */-
9609 heap = pCheck->heap;-
9610 heap[0] = 0;-
9611 }
executed 1015538 times by 12 tests: end of block
Executed by:
  • 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)
1015538
9612-
9613 /* EVIDENCE-OF: R-02776-14802 The cell pointer array consists of K 2-byte-
9614 ** integer offsets to the cell contents. */-
9615 for(i=nCell-1; i>=0 && pCheck->mxErr; i--){
i>=0Description
TRUEevaluated 3467020 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 1045245 times by 12 tests
Evaluated by:
  • 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)
pCheck->mxErrDescription
TRUEevaluated 3467018 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-3467020
9616 CellInfo info;-
9617-
9618 /* Check cell size */-
9619 pCheck->v2 = i;-
9620 assert( pCellIdx==&data[cellStart + i*2] );-
9621 pc = get2byteAligned(pCellIdx);-
9622 pCellIdx -= 2;-
9623 if( pc<contentOffset || pc>usableSize-4 ){
pc<contentOffsetDescription
TRUEnever evaluated
FALSEevaluated 3467018 times by 12 tests
Evaluated by:
  • 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)
pc>usableSize-4Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3467016 times by 12 tests
Evaluated by:
  • 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-3467018
9624 checkAppendMsg(pCheck, "Offset %d out of range %d..%d",-
9625 pc, contentOffset, usableSize-4);-
9626 doCoverageCheck = 0;-
9627 continue;
executed 2 times by 1 test: continue;
Executed by:
  • Self test (438)
2
9628 }-
9629 pCell = &data[pc];-
9630 pPage->xParseCell(pPage, pCell, &info);-
9631 if( pc+info.nSize>usableSize ){
pc+info.nSize>usableSizeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3467015 times by 12 tests
Evaluated by:
  • 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)
1-3467015
9632 checkAppendMsg(pCheck, "Extends off end of page");-
9633 doCoverageCheck = 0;-
9634 continue;
executed 1 time by 1 test: continue;
Executed by:
  • Self test (438)
1
9635 }-
9636-
9637 /* Check for integer primary key out of range */-
9638 if( pPage->intKey ){
pPage->intKeyDescription
TRUEevaluated 2736652 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 730363 times by 12 tests
Evaluated by:
  • 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)
730363-2736652
9639 if( keyCanBeEqual ? (info.nKey > maxKey) : (info.nKey >= maxKey) ){
keyCanBeEqual ...Key >= maxKey)Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2736634 times by 12 tests
Evaluated by:
  • 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)
keyCanBeEqualDescription
TRUEevaluated 930057 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 1806595 times by 12 tests
Evaluated by:
  • 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)
18-2736634
9640 checkAppendMsg(pCheck, "Rowid %lld out of order", info.nKey);-
9641 }
executed 18 times by 1 test: end of block
Executed by:
  • Self test (438)
18
9642 maxKey = info.nKey;-
9643 keyCanBeEqual = 0; /* Only the first key on the page may ==maxKey */-
9644 }
executed 2736652 times by 12 tests: end of block
Executed by:
  • 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)
2736652
9645-
9646 /* Check the content overflow list */-
9647 if( info.nPayload>info.nLocal ){
info.nPayload>info.nLocalDescription
TRUEevaluated 313232 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
FALSEevaluated 3153783 times by 12 tests
Evaluated by:
  • 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)
313232-3153783
9648 int nPage; /* Number of pages on the overflow chain */-
9649 Pgno pgnoOvfl; /* First page of the overflow chain */-
9650 assert( pc + info.nSize - 4 <= usableSize );-
9651 nPage = (info.nPayload - info.nLocal + usableSize - 5)/(usableSize - 4);-
9652 pgnoOvfl = get4byte(&pCell[info.nSize - 4]);-
9653#ifndef SQLITE_OMIT_AUTOVACUUM-
9654 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 135178 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 178054 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
135178-178054
9655 checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage);-
9656 }
executed 135178 times by 1 test: end of block
Executed by:
  • Self test (438)
135178
9657#endif-
9658 checkList(pCheck, 0, pgnoOvfl, nPage);-
9659 }
executed 313232 times by 5 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
313232
9660-
9661 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 997781 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
FALSEevaluated 2469234 times by 12 tests
Evaluated by:
  • 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)
997781-2469234
9662 /* Check sanity of left child page for internal pages */-
9663 pgno = get4byte(pCell);-
9664#ifndef SQLITE_OMIT_AUTOVACUUM-
9665 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 103998 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 893783 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
103998-893783
9666 checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage);-
9667 }
executed 103998 times by 1 test: end of block
Executed by:
  • Self test (438)
103998
9668#endif-
9669 d2 = checkTreePage(pCheck, pgno, &maxKey, maxKey);-
9670 keyCanBeEqual = 0;-
9671 if( d2!=depth ){
d2!=depthDescription
TRUEnever evaluated
FALSEevaluated 997781 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
0-997781
9672 checkAppendMsg(pCheck, "Child page depth differs");-
9673 depth = d2;-
9674 }
never executed: end of block
0
9675 }else{
executed 997781 times by 5 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
997781
9676 /* Populate the coverage-checking heap for leaf pages */-
9677 btreeHeapInsert(heap, (pc<<16)|(pc+info.nSize-1));-
9678 }
executed 2469234 times by 12 tests: end of block
Executed by:
  • 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)
2469234
9679 }-
9680 *piMinKey = maxKey;-
9681-
9682 /* Check for complete coverage of the page-
9683 */-
9684 pCheck->zPfx = 0;-
9685 if( doCoverageCheck && pCheck->mxErr>0 ){
doCoverageCheckDescription
TRUEevaluated 1045244 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
pCheck->mxErr>0Description
TRUEevaluated 1045244 times by 12 tests
Evaluated by:
  • 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)
FALSEnever evaluated
0-1045244
9686 /* For leaf pages, the min-heap has already been initialized and the-
9687 ** cells have already been inserted. But for internal pages, that has-
9688 ** not yet been done, so do it now */-
9689 if( !pPage->leaf ){
!pPage->leafDescription
TRUEevaluated 29708 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
FALSEevaluated 1015536 times by 12 tests
Evaluated by:
  • 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)
29708-1015536
9690 heap = pCheck->heap;-
9691 heap[0] = 0;-
9692 for(i=nCell-1; i>=0; i--){
i>=0Description
TRUEevaluated 997780 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
FALSEevaluated 29708 times by 5 tests
Evaluated by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
29708-997780
9693 u32 size;-
9694 pc = get2byteAligned(&data[cellStart+i*2]);-
9695 size = pPage->xCellSize(pPage, &data[pc]);-
9696 btreeHeapInsert(heap, (pc<<16)|(pc+size-1));-
9697 }
executed 997780 times by 5 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
997780
9698 }
executed 29708 times by 5 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (74)
29708
9699 /* Add the freeblocks to the min-heap-
9700 **-
9701 ** EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header-
9702 ** is the offset of the first freeblock, or zero if there are no-
9703 ** freeblocks on the page. -
9704 */-
9705 i = get2byte(&data[hdr+1]);-
9706 while( i>0 ){
i>0Description
TRUEevaluated 64801 times by 9 tests
Evaluated by:
  • Self test (438)
  • 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 1045244 times by 12 tests
Evaluated by:
  • 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)
64801-1045244
9707 int size, j;-
9708 assert( (u32)i<=usableSize-4 ); /* Enforced by btreeInitPage() */-
9709 size = get2byte(&data[i+2]);-
9710 assert( (u32)(i+size)<=usableSize ); /* Enforced by btreeInitPage() */-
9711 btreeHeapInsert(heap, (((u32)i)<<16)|(i+size-1));-
9712 /* EVIDENCE-OF: R-58208-19414 The first 2 bytes of a freeblock are a-
9713 ** big-endian integer which is the offset in the b-tree page of the next-
9714 ** freeblock in the chain, or zero if the freeblock is the last on the-
9715 ** chain. */-
9716 j = get2byte(&data[i]);-
9717 /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of-
9718 ** increasing offset. */-
9719 assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */-
9720 assert( (u32)j<=usableSize-4 ); /* Enforced by btreeInitPage() */-
9721 i = j;-
9722 }
executed 64801 times by 9 tests: end of block
Executed by:
  • Self test (438)
  • Self test (65)
  • Self test (66)
  • Self test (67)
  • Self test (68)
  • Self test (69)
  • Self test (70)
  • Self test (71)
  • Self test (74)
64801
9723 /* Analyze the min-heap looking for overlap between cells and/or -
9724 ** freeblocks, and counting the number of untracked bytes in nFrag.-
9725 ** -
9726 ** Each min-heap entry is of the form: (start_address<<16)|end_address.-
9727 ** There is an implied first entry the covers the page header, the cell-
9728 ** pointer index, and the gap between the cell pointer index and the start-
9729 ** of cell content. -
9730 **-
9731 ** The loop below pulls entries from the min-heap in order and compares-
9732 ** the start_address against the previous end_address. If there is an-
9733 ** overlap, that means bytes are used multiple times. If there is a gap,-
9734 ** that gap is added to the fragmentation count.-
9735 */-
9736 nFrag = 0;-
9737 prev = contentOffset - 1; /* Implied first min-heap entry */-
9738 while( btreeHeapPull(heap,&x) ){
btreeHeapPull(heap,&x)Description
TRUEevaluated 3531380 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 1045235 times by 12 tests
Evaluated by:
  • 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)
1045235-3531380
9739 if( (prev&0xffff)>=(x>>16) ){
(prev&0xffff)>=(x>>16)Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 3531371 times by 12 tests
Evaluated by:
  • 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)
9-3531371
9740 checkAppendMsg(pCheck,-
9741 "Multiple uses for byte %u of page %d", x>>16, iPage);-
9742 break;
executed 9 times by 1 test: break;
Executed by:
  • Self test (438)
9
9743 }else{-
9744 nFrag += (x>>16) - (prev&0xffff) - 1;-
9745 prev = x;-
9746 }
executed 3531371 times by 12 tests: end of block
Executed by:
  • 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)
3531371
9747 }-
9748 nFrag += usableSize - (prev&0xffff) - 1;-
9749 /* EVIDENCE-OF: R-43263-13491 The total number of bytes in all fragments-
9750 ** is stored in the fifth field of the b-tree page header.-
9751 ** EVIDENCE-OF: R-07161-27322 The one-byte integer at offset 7 gives the-
9752 ** number of fragmented free bytes within the cell content area.-
9753 */-
9754 if( heap[0]==0 && nFrag!=data[hdr+7] ){
heap[0]==0Description
TRUEevaluated 1045235 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 9 times by 1 test
Evaluated by:
  • Self test (438)
nFrag!=data[hdr+7]Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1045233 times by 12 tests
Evaluated by:
  • 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)
2-1045235
9755 checkAppendMsg(pCheck,-
9756 "Fragmentation of %d bytes reported as %d on page %d",-
9757 nFrag, data[hdr+7], iPage);-
9758 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test (438)
2
9759 }
executed 1045244 times by 12 tests: end of block
Executed by:
  • 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)
1045244
9760-
9761end_of_check:
code before this statement executed 1045247 times by 12 tests: end_of_check:
Executed by:
  • 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)
1045247
9762 if( !doCoverageCheck ) pPage->isInit = savedIsInit;
executed 3 times by 1 test: pPage->isInit = savedIsInit;
Executed by:
  • Self test (438)
!doCoverageCheckDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1045262 times by 12 tests
Evaluated by:
  • 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)
3-1045262
9763 releasePage(pPage);-
9764 pCheck->zPfx = saved_zPfx;-
9765 pCheck->v1 = saved_v1;-
9766 pCheck->v2 = saved_v2;-
9767 return depth+1;
executed 1045265 times by 12 tests: return depth+1;
Executed by:
  • 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)
1045265
9768}-
9769#endif /* SQLITE_OMIT_INTEGRITY_CHECK */-
9770-
9771#ifndef SQLITE_OMIT_INTEGRITY_CHECK-
9772/*-
9773** This routine does a complete check of the given BTree file. aRoot[] is-
9774** an array of pages numbers were each page number is the root page of-
9775** a table. nRoot is the number of entries in aRoot.-
9776**-
9777** A read-only or read-write transaction must be opened before calling-
9778** this function.-
9779**-
9780** Write the number of error seen in *pnErr. Except for some memory-
9781** allocation errors, an error message held in memory obtained from-
9782** malloc is returned if *pnErr is non-zero. If *pnErr==0 then NULL is-
9783** returned. If a memory allocation error occurs, NULL is returned.-
9784*/-
9785char *sqlite3BtreeIntegrityCheck(-
9786 Btree *p, /* The btree to be checked */-
9787 int *aRoot, /* An array of root pages numbers for individual trees */-
9788 int nRoot, /* Number of entries in aRoot[] */-
9789 int mxErr, /* Stop reporting errors after this many */-
9790 int *pnErr /* Write number of errors seen to this variable */-
9791){-
9792 Pgno i;-
9793 IntegrityCk sCheck;-
9794 BtShared *pBt = p->pBt;-
9795 int savedDbFlags = pBt->db->flags;-
9796 char zErr[100];-
9797 VVA_ONLY( int nRef );-
9798-
9799 sqlite3BtreeEnter(p);-
9800 assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE );-
9801 VVA_ONLY( nRef = sqlite3PagerRefcount(pBt->pPager) );-
9802 assert( nRef>=0 );-
9803 sCheck.pBt = pBt;-
9804 sCheck.pPager = pBt->pPager;-
9805 sCheck.nPage = btreePagecount(sCheck.pBt);-
9806 sCheck.mxErr = mxErr;-
9807 sCheck.nErr = 0;-
9808 sCheck.mallocFailed = 0;-
9809 sCheck.zPfx = 0;-
9810 sCheck.v1 = 0;-
9811 sCheck.v2 = 0;-
9812 sCheck.aPgRef = 0;-
9813 sCheck.heap = 0;-
9814 sqlite3StrAccumInit(&sCheck.errMsg, 0, zErr, sizeof(zErr), SQLITE_MAX_LENGTH);-
9815 sCheck.errMsg.printfFlags = SQLITE_PRINTF_INTERNAL;-
9816 if( sCheck.nPage==0 ){
sCheck.nPage==0Description
TRUEevaluated 5536 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 5749 times by 12 tests
Evaluated by:
  • 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)
5536-5749
9817 goto integrity_ck_cleanup;
executed 5536 times by 12 tests: goto integrity_ck_cleanup;
Executed by:
  • 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)
5536
9818 }-
9819-
9820 sCheck.aPgRef = sqlite3MallocZero((sCheck.nPage / 8)+ 1);-
9821 if( !sCheck.aPgRef ){
!sCheck.aPgRefDescription
TRUEnever evaluated
FALSEevaluated 5749 times by 12 tests
Evaluated by:
  • 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-5749
9822 sCheck.mallocFailed = 1;-
9823 goto integrity_ck_cleanup;
never executed: goto integrity_ck_cleanup;
0
9824 }-
9825 sCheck.heap = (u32*)sqlite3PageMalloc( pBt->pageSize );-
9826 if( sCheck.heap==0 ){
sCheck.heap==0Description
TRUEnever evaluated
FALSEevaluated 5749 times by 12 tests
Evaluated by:
  • 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-5749
9827 sCheck.mallocFailed = 1;-
9828 goto integrity_ck_cleanup;
never executed: goto integrity_ck_cleanup;
0
9829 }-
9830-
9831 i = PENDING_BYTE_PAGE(pBt);-
9832 if( i<=sCheck.nPage ) setPageReferenced(&sCheck, i);
executed 4529 times by 4 tests: setPageReferenced(&sCheck, i);
Executed by:
  • Self test (438)
  • Self test (70)
  • Self test (71)
  • Self test (74)
i<=sCheck.nPageDescription
TRUEevaluated 4529 times by 4 tests
Evaluated by:
  • Self test (438)
  • Self test (70)
  • Self test (71)
  • Self test (74)
FALSEevaluated 1220 times by 9 tests
Evaluated by:
  • 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)
1220-4529
9833-
9834 /* Check the integrity of the freelist-
9835 */-
9836 sCheck.zPfx = "Main freelist: ";-
9837 checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]),-
9838 get4byte(&pBt->pPage1->aData[36]));-
9839 sCheck.zPfx = 0;-
9840-
9841 /* Check all the tables.-
9842 */-
9843#ifndef SQLITE_OMIT_AUTOVACUUM-
9844 if( pBt->autoVacuum ){
pBt->autoVacuumDescription
TRUEevaluated 1293 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 4456 times by 12 tests
Evaluated by:
  • 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)
1293-4456
9845 int mx = 0;-
9846 int mxInHdr;-
9847 for(i=0; (int)i<nRoot; i++) if( mx<aRoot[i] ) mx = aRoot[i];
executed 1606 times by 1 test: mx = aRoot[i];
Executed by:
  • Self test (438)
mx<aRoot[i]Description
TRUEevaluated 1606 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2495 times by 1 test
Evaluated by:
  • Self test (438)
(int)i<nRootDescription
TRUEevaluated 4101 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1293 times by 1 test
Evaluated by:
  • Self test (438)
1293-4101
9848 mxInHdr = get4byte(&pBt->pPage1->aData[52]);-
9849 if( mx!=mxInHdr ){
mx!=mxInHdrDescription
TRUEnever evaluated
FALSEevaluated 1293 times by 1 test
Evaluated by:
  • Self test (438)
0-1293
9850 checkAppendMsg(&sCheck,-
9851 "max rootpage (%d) disagrees with header (%d)",-
9852 mx, mxInHdr-
9853 );-
9854 }
never executed: end of block
0
9855 }else if( get4byte(&pBt->pPage1->aData[64])!=0 ){
executed 1293 times by 1 test: end of block
Executed by:
  • Self test (438)
sqlite3Get4byt...>aData[64])!=0Description
TRUEnever evaluated
FALSEevaluated 4456 times by 12 tests
Evaluated by:
  • 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-4456
9856 checkAppendMsg(&sCheck,-
9857 "incremental_vacuum enabled with a max rootpage of zero"-
9858 );-
9859 }
never executed: end of block
0
9860#endif-
9861 testcase( pBt->db->flags & SQLITE_CellSizeCk );-
9862 pBt->db->flags &= ~SQLITE_CellSizeCk;-
9863 for(i=0; (int)i<nRoot && sCheck.mxErr; i++){
(int)i<nRootDescription
TRUEevaluated 17836 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 5747 times by 12 tests
Evaluated by:
  • 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)
sCheck.mxErrDescription
TRUEevaluated 17834 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-17836
9864 i64 notUsed;-
9865 if( aRoot[i]==0 ) continue;
executed 47 times by 1 test: continue;
Executed by:
  • Self test (438)
aRoot[i]==0Description
TRUEevaluated 47 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 17787 times by 12 tests
Evaluated by:
  • 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)
47-17787
9866#ifndef SQLITE_OMIT_AUTOVACUUM-
9867 if( pBt->autoVacuum && aRoot[i]>1 ){
pBt->autoVacuumDescription
TRUEevaluated 4101 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 13686 times by 12 tests
Evaluated by:
  • 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)
aRoot[i]>1Description
TRUEevaluated 2808 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1293 times by 1 test
Evaluated by:
  • Self test (438)
1293-13686
9868 checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0);-
9869 }
executed 2808 times by 1 test: end of block
Executed by:
  • Self test (438)
2808
9870#endif-
9871 checkTreePage(&sCheck, aRoot[i], &notUsed, LARGEST_INT64);-
9872 }
executed 17787 times by 12 tests: end of block
Executed by:
  • 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)
17787
9873 pBt->db->flags = savedDbFlags;-
9874-
9875 /* Make sure every page in the file is referenced-
9876 */-
9877 for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
i<=sCheck.nPageDescription
TRUEevaluated 1570580 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 5744 times by 12 tests
Evaluated by:
  • 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)
sCheck.mxErrDescription
TRUEevaluated 1570575 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
5-1570580
9878#ifdef SQLITE_OMIT_AUTOVACUUM-
9879 if( getPageReferenced(&sCheck, i)==0 ){-
9880 checkAppendMsg(&sCheck, "Page %d is never used", i);-
9881 }-
9882#else-
9883 /* If the database supports auto-vacuum, make sure no tables contain-
9884 ** references to pointer-map pages.-
9885 */-
9886 if( getPageReferenced(&sCheck, i)==0 &&
getPageReferen...&sCheck, i)==0Description
TRUEevaluated 2222 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 1568353 times by 12 tests
Evaluated by:
  • 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)
2222-1568353
9887 (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){
ptrmapPageno(pBt, i)!=iDescription
TRUEevaluated 49 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 2173 times by 1 test
Evaluated by:
  • Self test (438)
!pBt->autoVacuumDescription
TRUEnever evaluated
FALSEevaluated 2173 times by 1 test
Evaluated by:
  • Self test (438)
0-2173
9888 checkAppendMsg(&sCheck, "Page %d is never used", i);-
9889 }
executed 49 times by 1 test: end of block
Executed by:
  • Self test (438)
49
9890 if( getPageReferenced(&sCheck, i)!=0 &&
getPageReferen...&sCheck, i)!=0Description
TRUEevaluated 1568353 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 2222 times by 1 test
Evaluated by:
  • Self test (438)
2222-1568353
9891 (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
ptrmapPageno(pBt, i)==iDescription
TRUEevaluated 9363 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 1558990 times by 12 tests
Evaluated by:
  • 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)
pBt->autoVacuumDescription
TRUEnever evaluated
FALSEevaluated 9363 times by 12 tests
Evaluated by:
  • 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-1558990
9892 checkAppendMsg(&sCheck, "Pointer map page %d is referenced", i);-
9893 }
never executed: end of block
0
9894#endif-
9895 }
executed 1570575 times by 12 tests: end of block
Executed by:
  • 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)
1570575
9896-
9897 /* Clean up and report errors.-
9898 */-
9899integrity_ck_cleanup:
code before this statement executed 5749 times by 12 tests: integrity_ck_cleanup:
Executed by:
  • 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)
5749
9900 sqlite3PageFree(sCheck.heap);-
9901 sqlite3_free(sCheck.aPgRef);-
9902 if( sCheck.mallocFailed ){
sCheck.mallocFailedDescription
TRUEnever evaluated
FALSEevaluated 11285 times by 12 tests
Evaluated by:
  • 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-11285
9903 sqlite3_str_reset(&sCheck.errMsg);-
9904 sCheck.nErr++;-
9905 }
never executed: end of block
0
9906 *pnErr = sCheck.nErr;-
9907 if( sCheck.nErr==0 ) sqlite3_str_reset(&sCheck.errMsg);
executed 11117 times by 12 tests: sqlite3_str_reset(&sCheck.errMsg);
Executed by:
  • 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)
sCheck.nErr==0Description
TRUEevaluated 11117 times by 12 tests
Evaluated by:
  • 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)
FALSEevaluated 168 times by 1 test
Evaluated by:
  • Self test (438)
168-11117
9908 /* Make sure this analysis did not leave any unref() pages. */-
9909 assert( nRef==sqlite3PagerRefcount(pBt->pPager) );-
9910 sqlite3BtreeLeave(p);-
9911 return sqlite3StrAccumFinish(&sCheck.errMsg);
executed 11285 times by 12 tests: return sqlite3StrAccumFinish(&sCheck.errMsg);
Executed by:
  • 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)
11285
9912}-
9913#endif /* SQLITE_OMIT_INTEGRITY_CHECK */-
9914-
9915/*-
9916** Return the full pathname of the underlying database file. Return-
9917** an empty string if the database is in-memory or a TEMP database.-
9918**-
9919** The pager filename is invariant as long as the pager is-
9920** open so it is safe to access without the BtShared mutex.-
9921*/-
9922const char *sqlite3BtreeGetFilename(Btree *p){-
9923 assert( p->pBt->pPager!=0 );-
9924 return sqlite3PagerFilename(p->pBt->pPager, 1);
executed 341250 times by 434 tests: return sqlite3PagerFilename(p->pBt->pPager, 1);
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)
  • ...
341250
9925}-
9926-
9927/*-
9928** Return the pathname of the journal file for this database. The return-
9929** value of this routine is the same regardless of whether the journal file-
9930** has been created or not.-
9931**-
9932** The pager journal filename is invariant as long as the pager is-
9933** open so it is safe to access without the BtShared mutex.-
9934*/-
9935const char *sqlite3BtreeGetJournalname(Btree *p){-
9936 assert( p->pBt->pPager!=0 );-
9937 return sqlite3PagerJournalname(p->pBt->pPager);
executed 138 times by 3 tests: return sqlite3PagerJournalname(p->pBt->pPager);
Executed by:
  • Self test (4)
  • Self test (438)
  • Self test (5)
138
9938}-
9939-
9940/*-
9941** Return non-zero if a transaction is active.-
9942*/-
9943int sqlite3BtreeIsInTrans(Btree *p){-
9944 assert( p==0 || sqlite3_mutex_held(p->db->mutex) );-
9945 return (p && (p->inTrans==TRANS_WRITE));
executed 740617 times by 437 tests: return (p && (p->inTrans==2));
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)
  • ...
pDescription
TRUEevaluated 426158 times by 437 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 314459 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)
  • ...
(p->inTrans==2)Description
TRUEevaluated 102821 times by 156 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)
  • ...
FALSEevaluated 323337 times by 436 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)
  • ...
102821-740617
9946}-
9947-
9948#ifndef SQLITE_OMIT_WAL-
9949/*-
9950** Run a checkpoint on the Btree passed as the first argument.-
9951**-
9952** Return SQLITE_LOCKED if this or any other connection has an open -
9953** transaction on the shared-cache the argument Btree is connected to.-
9954**-
9955** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.-
9956*/-
9957int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){-
9958 int rc = SQLITE_OK;-
9959 if( p ){
pDescription
TRUEevaluated 6597 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 4497 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)
4497-6597
9960 BtShared *pBt = p->pBt;-
9961 sqlite3BtreeEnter(p);-
9962 if( pBt->inTransaction!=TRANS_NONE ){
pBt->inTransaction!=0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 6594 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)
3-6594
9963 rc = SQLITE_LOCKED;-
9964 }else{
executed 3 times by 1 test: end of block
Executed by:
  • Self test (438)
3
9965 rc = sqlite3PagerCheckpoint(pBt->pPager, p->db, eMode, pnLog, pnCkpt);-
9966 }
executed 6594 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)
6594
9967 sqlite3BtreeLeave(p);-
9968 }
executed 6597 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)
6597
9969 return rc;
executed 11094 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)
11094
9970}-
9971#endif-
9972-
9973/*-
9974** Return non-zero if a read (or write) transaction is active.-
9975*/-
9976int sqlite3BtreeIsInReadTrans(Btree *p){-
9977 assert( p );-
9978 assert( sqlite3_mutex_held(p->db->mutex) );-
9979 return p->inTrans!=TRANS_NONE;
executed 24033 times by 436 tests: return p->inTrans!=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)
  • ...
24033
9980}-
9981-
9982int sqlite3BtreeIsInBackup(Btree *p){-
9983 assert( p );-
9984 assert( sqlite3_mutex_held(p->db->mutex) );-
9985 return p->nBackup!=0;
executed 68717 times by 66 tests: return p->nBackup!=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)
  • ...
68717
9986}-
9987-
9988/*-
9989** This function returns a pointer to a blob of memory associated with-
9990** a single shared-btree. The memory is used by client code for its own-
9991** purposes (for example, to store a high-level schema associated with -
9992** the shared-btree). The btree layer manages reference counting issues.-
9993**-
9994** The first time this is called on a shared-btree, nBytes bytes of memory-
9995** are allocated, zeroed, and returned to the caller. For each subsequent -
9996** call the nBytes parameter is ignored and a pointer to the same blob-
9997** of memory returned. -
9998**-
9999** If the nBytes parameter is 0 and the blob of memory has not yet been-
10000** allocated, a null pointer is returned. If the blob has already been-
10001** allocated, it is returned as normal.-
10002**-
10003** Just before the shared-btree is closed, the function passed as the -
10004** xFree argument when the memory allocation was made is invoked on the -
10005** blob of allocated memory. The xFree function should not call sqlite3_free()-
10006** on the memory, the btree layer does that.-
10007*/-
10008void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){-
10009 BtShared *pBt = p->pBt;-
10010 sqlite3BtreeEnter(p);-
10011 if( !pBt->pSchema && nBytes ){
!pBt->pSchemaDescription
TRUEevaluated 128817 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 490 times by 1 test
Evaluated by:
  • Self test (438)
nBytesDescription
TRUEevaluated 33174 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 95643 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)
  • ...
490-128817
10012 pBt->pSchema = sqlite3DbMallocZero(0, nBytes);-
10013 pBt->xFreeSchema = xFree;-
10014 }
executed 33174 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)
  • ...
33174
10015 sqlite3BtreeLeave(p);-
10016 return pBt->pSchema;
executed 129307 times by 438 tests: return pBt->pSchema;
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)
  • ...
129307
10017}-
10018-
10019/*-
10020** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared -
10021** btree as the argument handle holds an exclusive lock on the -
10022** sqlite_master table. Otherwise SQLITE_OK.-
10023*/-
10024int sqlite3BtreeSchemaLocked(Btree *p){-
10025 int rc;-
10026 assert( sqlite3_mutex_held(p->db->mutex) );-
10027 sqlite3BtreeEnter(p);-
10028 rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);-
10029 assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE );-
10030 sqlite3BtreeLeave(p);-
10031 return rc;
executed 638848 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)
  • ...
638848
10032}-
10033-
10034-
10035#ifndef SQLITE_OMIT_SHARED_CACHE-
10036/*-
10037** Obtain a lock on the table whose root page is iTab. The-
10038** lock is a write lock if isWritelock is true or a read lock-
10039** if it is false.-
10040*/-
10041int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){-
10042 int rc = SQLITE_OK;-
10043 assert( p->inTrans!=TRANS_NONE );-
10044 if( p->sharable ){
p->sharableDescription
TRUEevaluated 1832 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 371 times by 1 test
Evaluated by:
  • Self test (438)
371-1832
10045 u8 lockType = READ_LOCK + isWriteLock;-
10046 assert( READ_LOCK+1==WRITE_LOCK );-
10047 assert( isWriteLock==0 || isWriteLock==1 );-
10048-
10049 sqlite3BtreeEnter(p);-
10050 rc = querySharedCacheTableLock(p, iTab, lockType);-
10051 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 1786 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 46 times by 1 test
Evaluated by:
  • Self test (438)
46-1786
10052 rc = setSharedCacheTableLock(p, iTab, lockType);-
10053 }
executed 1786 times by 1 test: end of block
Executed by:
  • Self test (438)
1786
10054 sqlite3BtreeLeave(p);-
10055 }
executed 1832 times by 1 test: end of block
Executed by:
  • Self test (438)
1832
10056 return rc;
executed 2203 times by 1 test: return rc;
Executed by:
  • Self test (438)
2203
10057}-
10058#endif-
10059-
10060#ifndef SQLITE_OMIT_INCRBLOB-
10061/*-
10062** Argument pCsr must be a cursor opened for writing on an -
10063** INTKEY table currently pointing at a valid table entry. -
10064** This function modifies the data stored as part of that entry.-
10065**-
10066** Only the data content may only be modified, it is not possible to -
10067** change the length of the data stored. If this function is called with-
10068** parameters that attempt to write past the end of the existing data,-
10069** no modifications are made and SQLITE_CORRUPT is returned.-
10070*/-
10071int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){-
10072 int rc;-
10073 assert( cursorOwnsBtShared(pCsr) );-
10074 assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) );-
10075 assert( pCsr->curFlags & BTCF_Incrblob );-
10076-
10077 rc = restoreCursorPosition(pCsr);
pCsr->eState>=3Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 347 times by 1 test
Evaluated by:
  • Self test (438)
5-347
10078 if( rc!=SQLITE_OK ){
rc!=0Description
TRUEnever evaluated
FALSEevaluated 352 times by 1 test
Evaluated by:
  • Self test (438)
0-352
10079 return rc;
never executed: return rc;
0
10080 }-
10081 assert( pCsr->eState!=CURSOR_REQUIRESEEK );-
10082 if( pCsr->eState!=CURSOR_VALID ){
pCsr->eState!=0Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 345 times by 1 test
Evaluated by:
  • Self test (438)
7-345
10083 return SQLITE_ABORT;
executed 7 times by 1 test: return 4;
Executed by:
  • Self test (438)
7
10084 }-
10085-
10086 /* Save the positions of all other cursors open on this table. This is-
10087 ** required in case any of them are holding references to an xFetch-
10088 ** version of the b-tree page modified by the accessPayload call below.-
10089 **-
10090 ** Note that pCsr must be open on a INTKEY table and saveCursorPosition()-
10091 ** and hence saveAllCursors() cannot fail on a BTREE_INTKEY table, hence-
10092 ** saveAllCursors can only return SQLITE_OK.-
10093 */-
10094 VVA_ONLY(rc =) saveAllCursors(pCsr->pBt, pCsr->pgnoRoot, pCsr);-
10095 assert( rc==SQLITE_OK );-
10096-
10097 /* Check some assumptions: -
10098 ** (a) the cursor is open for writing,-
10099 ** (b) there is a read/write transaction open,-
10100 ** (c) the connection holds a write-lock on the table (if required),-
10101 ** (d) there are no conflicting read-locks, and-
10102 ** (e) the cursor points at a valid row of an intKey table.-
10103 */-
10104 if( (pCsr->curFlags & BTCF_WriteFlag)==0 ){
(pCsr->curFlags & 0x01)==0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 341 times by 1 test
Evaluated by:
  • Self test (438)
4-341
10105 return SQLITE_READONLY;
executed 4 times by 1 test: return 8;
Executed by:
  • Self test (438)
4
10106 }-
10107 assert( (pCsr->pBt->btsFlags & BTS_READ_ONLY)==0-
10108 && pCsr->pBt->inTransaction==TRANS_WRITE );-
10109 assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) );-
10110 assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) );-
10111 assert( pCsr->pPage->intKey );-
10112-
10113 return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
executed 341 times by 1 test: return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
Executed by:
  • Self test (438)
341
10114}-
10115-
10116/* -
10117** Mark this cursor as an incremental blob cursor.-
10118*/-
10119void sqlite3BtreeIncrblobCursor(BtCursor *pCur){-
10120 pCur->curFlags |= BTCF_Incrblob;-
10121 pCur->pBtree->hasIncrblobCur = 1;-
10122}
executed 361 times by 1 test: end of block
Executed by:
  • Self test (438)
361
10123#endif-
10124-
10125/*-
10126** Set both the "read version" (single byte at byte offset 18) and -
10127** "write version" (single byte at byte offset 19) fields in the database-
10128** header to iVersion.-
10129*/-
10130int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){-
10131 BtShared *pBt = pBtree->pBt;-
10132 int rc; /* Return code */-
10133 -
10134 assert( iVersion==1 || iVersion==2 );-
10135-
10136 /* If setting the version fields to 1, do not automatically open the-
10137 ** WAL connection, even if the version fields are currently set to 2.-
10138 */-
10139 pBt->btsFlags &= ~BTS_NO_WAL;-
10140 if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL;
executed 23 times by 1 test: pBt->btsFlags |= 0x0020;
Executed by:
  • Self test (438)
iVersion==1Description
TRUEevaluated 23 times by 1 test
Evaluated by:
  • Self test (438)
FALSEevaluated 544 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
23-544
10141-
10142 rc = sqlite3BtreeBeginTrans(pBtree, 0, 0);-
10143 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 567 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
FALSEnever evaluated
0-567
10144 u8 *aData = pBt->pPage1->aData;-
10145 if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){
aData[18]!=(u8)iVersionDescription
TRUEevaluated 559 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
aData[19]!=(u8)iVersionDescription
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • Self test (438)
0-559
10146 rc = sqlite3BtreeBeginTrans(pBtree, 2, 0);-
10147 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 557 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test (438)
2-557
10148 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);-
10149 if( rc==SQLITE_OK ){
rc==0Description
TRUEevaluated 557 times by 4 tests
Evaluated by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
FALSEnever evaluated
0-557
10150 aData[18] = (u8)iVersion;-
10151 aData[19] = (u8)iVersion;-
10152 }
executed 557 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
557
10153 }
executed 557 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
557
10154 }
executed 559 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
559
10155 }
executed 567 times by 4 tests: end of block
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
567
10156-
10157 pBt->btsFlags &= ~BTS_NO_WAL;-
10158 return rc;
executed 567 times by 4 tests: return rc;
Executed by:
  • Self test (101)
  • Self test (104)
  • Self test (28)
  • Self test (438)
567
10159}-
10160-
10161/*-
10162** Return true if the cursor has a hint specified. This routine is-
10163** only used from within assert() statements-
10164*/-
10165int sqlite3BtreeCursorHasHint(BtCursor *pCsr, unsigned int mask){-
10166 return (pCsr->hints & mask)!=0;
executed 471598 times by 1 test: return (pCsr->hints & mask)!=0;
Executed by:
  • Self test (438)
471598
10167}-
10168-
10169/*-
10170** Return true if the given Btree is read-only.-
10171*/-
10172int sqlite3BtreeIsReadonly(Btree *p){-
10173 return (p->pBt->btsFlags & BTS_READ_ONLY)!=0;
executed 369 times by 1 test: return (p->pBt->btsFlags & 0x0001)!=0;
Executed by:
  • Self test (438)
369
10174}-
10175-
10176/*-
10177** Return the size of the header added to each page by this module.-
10178*/-
10179int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(MemPage)); }
never executed: return (((sizeof(MemPage))+7)&~7);
0
10180-
10181#if !defined(SQLITE_OMIT_SHARED_CACHE)-
10182/*-
10183** Return true if the Btree passed as the only argument is sharable.-
10184*/-
10185int sqlite3BtreeSharable(Btree *p){-
10186 return p->sharable;
executed 693824 times by 435 tests: return p->sharable;
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)
  • ...
693824
10187}-
10188-
10189/*-
10190** Return the number of connections to the BtShared object accessed by-
10191** the Btree handle passed as the only argument. For private caches -
10192** this is always 1. For shared caches it may be 1 or greater.-
10193*/-
10194int sqlite3BtreeConnectionCount(Btree *p){-
10195 testcase( p->sharable );-
10196 return p->pBt->nRef;
executed 8 times by 1 test: return p->pBt->nRef;
Executed by:
  • Self test (438)
8
10197}-
10198#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2