Lines Matching refs:p

112 static int setDestPgsz(sqlite3_backup *p){  in setDestPgsz()  argument
114 rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),0,0); in setDestPgsz()
124 static int checkReadTransaction(sqlite3 *db, Btree *p){ in checkReadTransaction() argument
125 if( sqlite3BtreeTxnState(p)!=SQLITE_TXN_NONE ){ in checkReadTransaction()
146 sqlite3_backup *p; /* Value to return */ in sqlite3_backup_init() local
170 p = 0; in sqlite3_backup_init()
176 p = (sqlite3_backup *)sqlite3MallocZero(sizeof(sqlite3_backup)); in sqlite3_backup_init()
177 if( !p ){ in sqlite3_backup_init()
183 if( p ){ in sqlite3_backup_init()
184 p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb); in sqlite3_backup_init()
185 p->pDest = findBtree(pDestDb, pDestDb, zDestDb); in sqlite3_backup_init()
186 p->pDestDb = pDestDb; in sqlite3_backup_init()
187 p->pSrcDb = pSrcDb; in sqlite3_backup_init()
188 p->iNext = 1; in sqlite3_backup_init()
189 p->isAttached = 0; in sqlite3_backup_init()
191 if( 0==p->pSrc || 0==p->pDest in sqlite3_backup_init()
192 || checkReadTransaction(pDestDb, p->pDest)!=SQLITE_OK in sqlite3_backup_init()
199 sqlite3_free(p); in sqlite3_backup_init()
200 p = 0; in sqlite3_backup_init()
203 if( p ){ in sqlite3_backup_init()
204 p->pSrc->nBackup++; in sqlite3_backup_init()
209 return p; in sqlite3_backup_init()
227 sqlite3_backup *p, /* Backup handle */ in backupOnePage() argument
232 Pager * const pDestPager = sqlite3BtreePager(p->pDest); in backupOnePage()
233 const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc); in backupOnePage()
234 int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest); in backupOnePage()
240 assert( sqlite3BtreeGetReserveNoMutex(p->pSrc)>=0 ); in backupOnePage()
241 assert( p->bDestLocked ); in backupOnePage()
242 assert( !isFatalError(p->rc) ); in backupOnePage()
243 assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ); in backupOnePage()
260 if( iDest==PENDING_BYTE_PAGE(p->pDest->pBt) ) continue; in backupOnePage()
278 sqlite3Put4byte(&zOut[28], sqlite3BtreeLastPage(p->pSrc)); in backupOnePage()
308 static void attachBackupObject(sqlite3_backup *p){ in attachBackupObject() argument
310 assert( sqlite3BtreeHoldsMutex(p->pSrc) ); in attachBackupObject()
311 pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); in attachBackupObject()
312 p->pNext = *pp; in attachBackupObject()
313 *pp = p; in attachBackupObject()
314 p->isAttached = 1; in attachBackupObject()
320 int sqlite3_backup_step(sqlite3_backup *p, int nPage){ in sqlite3_backup_step() argument
327 if( p==0 ) return SQLITE_MISUSE_BKPT; in sqlite3_backup_step()
329 sqlite3_mutex_enter(p->pSrcDb->mutex); in sqlite3_backup_step()
330 sqlite3BtreeEnter(p->pSrc); in sqlite3_backup_step()
331 if( p->pDestDb ){ in sqlite3_backup_step()
332 sqlite3_mutex_enter(p->pDestDb->mutex); in sqlite3_backup_step()
335 rc = p->rc; in sqlite3_backup_step()
337 Pager * const pSrcPager = sqlite3BtreePager(p->pSrc); /* Source pager */ in sqlite3_backup_step()
338 Pager * const pDestPager = sqlite3BtreePager(p->pDest); /* Dest pager */ in sqlite3_backup_step()
346 if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){ in sqlite3_backup_step()
356 if( rc==SQLITE_OK && SQLITE_TXN_NONE==sqlite3BtreeTxnState(p->pSrc) ){ in sqlite3_backup_step()
357 rc = sqlite3BtreeBeginTrans(p->pSrc, 0, 0); in sqlite3_backup_step()
367 if( p->bDestLocked==0 && rc==SQLITE_OK && setDestPgsz(p)==SQLITE_NOMEM ){ in sqlite3_backup_step()
372 if( SQLITE_OK==rc && p->bDestLocked==0 in sqlite3_backup_step()
373 && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2, in sqlite3_backup_step()
374 (int*)&p->iDestSchema)) in sqlite3_backup_step()
376 p->bDestLocked = 1; in sqlite3_backup_step()
381 pgszSrc = sqlite3BtreeGetPageSize(p->pSrc); in sqlite3_backup_step()
382 pgszDest = sqlite3BtreeGetPageSize(p->pDest); in sqlite3_backup_step()
383 destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest)); in sqlite3_backup_step()
391 nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc); in sqlite3_backup_step()
393 for(ii=0; (nPage<0 || ii<nPage) && p->iNext<=(Pgno)nSrcPage && !rc; ii++){ in sqlite3_backup_step()
394 const Pgno iSrcPg = p->iNext; /* Source page number */ in sqlite3_backup_step()
395 if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){ in sqlite3_backup_step()
399 rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg), 0); in sqlite3_backup_step()
403 p->iNext++; in sqlite3_backup_step()
406 p->nPagecount = nSrcPage; in sqlite3_backup_step()
407 p->nRemaining = nSrcPage+1-p->iNext; in sqlite3_backup_step()
408 if( p->iNext>(Pgno)nSrcPage ){ in sqlite3_backup_step()
410 }else if( !p->isAttached ){ in sqlite3_backup_step()
411 attachBackupObject(p); in sqlite3_backup_step()
422 rc = sqlite3BtreeNewDb(p->pDest); in sqlite3_backup_step()
426 rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1); in sqlite3_backup_step()
429 if( p->pDestDb ){ in sqlite3_backup_step()
430 sqlite3ResetAllSchemasOfConnection(p->pDestDb); in sqlite3_backup_step()
433 rc = sqlite3BtreeSetVersion(p->pDest, 2); in sqlite3_backup_step()
450 assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) ); in sqlite3_backup_step()
451 assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) ); in sqlite3_backup_step()
455 if( nDestTruncate==(int)PENDING_BYTE_PAGE(p->pDest->pBt) ){ in sqlite3_backup_step()
483 nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1) in sqlite3_backup_step()
495 if( iPg!=PENDING_BYTE_PAGE(p->pDest->pBt) ){ in sqlite3_backup_step()
539 && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest, 0)) in sqlite3_backup_step()
553 TESTONLY( rc2 = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0); in sqlite3_backup_step()
554 TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc, 0); in sqlite3_backup_step()
561 p->rc = rc; in sqlite3_backup_step()
563 if( p->pDestDb ){ in sqlite3_backup_step()
564 sqlite3_mutex_leave(p->pDestDb->mutex); in sqlite3_backup_step()
566 sqlite3BtreeLeave(p->pSrc); in sqlite3_backup_step()
567 sqlite3_mutex_leave(p->pSrcDb->mutex); in sqlite3_backup_step()
574 int sqlite3_backup_finish(sqlite3_backup *p){ in sqlite3_backup_finish() argument
580 if( p==0 ) return SQLITE_OK; in sqlite3_backup_finish()
581 pSrcDb = p->pSrcDb; in sqlite3_backup_finish()
583 sqlite3BtreeEnter(p->pSrc); in sqlite3_backup_finish()
584 if( p->pDestDb ){ in sqlite3_backup_finish()
585 sqlite3_mutex_enter(p->pDestDb->mutex); in sqlite3_backup_finish()
589 if( p->pDestDb ){ in sqlite3_backup_finish()
590 p->pSrc->nBackup--; in sqlite3_backup_finish()
592 if( p->isAttached ){ in sqlite3_backup_finish()
593 pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); in sqlite3_backup_finish()
595 while( *pp!=p ){ in sqlite3_backup_finish()
599 *pp = p->pNext; in sqlite3_backup_finish()
603 sqlite3BtreeRollback(p->pDest, SQLITE_OK, 0); in sqlite3_backup_finish()
606 rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc; in sqlite3_backup_finish()
607 if( p->pDestDb ){ in sqlite3_backup_finish()
608 sqlite3Error(p->pDestDb, rc); in sqlite3_backup_finish()
611 sqlite3LeaveMutexAndCloseZombie(p->pDestDb); in sqlite3_backup_finish()
613 sqlite3BtreeLeave(p->pSrc); in sqlite3_backup_finish()
614 if( p->pDestDb ){ in sqlite3_backup_finish()
618 sqlite3_free(p); in sqlite3_backup_finish()
628 int sqlite3_backup_remaining(sqlite3_backup *p){ in sqlite3_backup_remaining() argument
630 if( p==0 ){ in sqlite3_backup_remaining()
635 return p->nRemaining; in sqlite3_backup_remaining()
642 int sqlite3_backup_pagecount(sqlite3_backup *p){ in sqlite3_backup_pagecount() argument
644 if( p==0 ){ in sqlite3_backup_pagecount()
649 return p->nPagecount; in sqlite3_backup_pagecount()
665 sqlite3_backup *p, in backupUpdate() argument
669 assert( p!=0 ); in backupUpdate()
671 assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); in backupUpdate()
672 if( !isFatalError(p->rc) && iPage<p->iNext ){ in backupUpdate()
678 assert( p->pDestDb ); in backupUpdate()
679 sqlite3_mutex_enter(p->pDestDb->mutex); in backupUpdate()
680 rc = backupOnePage(p, iPage, aData, 1); in backupUpdate()
681 sqlite3_mutex_leave(p->pDestDb->mutex); in backupUpdate()
684 p->rc = rc; in backupUpdate()
687 }while( (p = p->pNext)!=0 ); in backupUpdate()
705 sqlite3_backup *p; /* Iterator variable */ in sqlite3BackupRestart() local
706 for(p=pBackup; p; p=p->pNext){ in sqlite3BackupRestart()
707 assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); in sqlite3BackupRestart()
708 p->iNext = 1; in sqlite3BackupRestart()