Lines Matching refs:pPg
55239 PgHdr *pPg; local
55245 pPg = (PgHdr*)pLower->pExtra;
55246 printf("%3d: nRef %2lld flgs %02x data ", i, pPg->nRef, pPg->flags);
55249 printf(" ptr %p\n", pPg);
55280 static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){
55283 if( p==pPg ) return 1;
55287 static int pageNotOnDirtyList(PCache *pCache, PgHdr *pPg){
55290 if( p==pPg ) return 0;
55309 SQLITE_PRIVATE int sqlite3PcachePageSanity(PgHdr *pPg){
55311 assert( pPg!=0 );
55312 assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */
55313 pCache = pPg->pCache;
55315 if( pPg->flags & PGHDR_CLEAN ){
55316 assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */
55317 assert( pageNotOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirtylist */
55319 assert( (pPg->flags & PGHDR_DIRTY)!=0 );/* If not CLEAN must be DIRTY */
55320 assert( pPg->pDirtyNext==0 || pPg->pDirtyNext->pDirtyPrev==pPg );
55321 assert( pPg->pDirtyPrev==0 || pPg->pDirtyPrev->pDirtyNext==pPg );
55322 assert( pPg->pDirtyPrev!=0 || pCache->pDirty==pPg );
55323 assert( pageOnDirtyList(pCache, pPg) );
55326 if( pPg->flags & PGHDR_WRITEABLE ){
55327 assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */
55619 PgHdr *pPg; local
55632 for(pPg=pCache->pSynced;
55633 pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC));
55634 pPg=pPg->pDirtyPrev
55636 pCache->pSynced = pPg;
55637 if( !pPg ){
55638 for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev);
55640 if( pPg ){
55645 pPg->pgno, pgno,
55649 pcacheTrace(("%p.SPILL %d\n",pCache,pPg->pgno));
55650 rc = pCache->xStress(pCache->pStress, pPg);
56539 void *pPg; local
56557 pPg = pcache1Alloc(pCache->szAlloc);
56562 if( pPg==0 ) return 0;
56563 p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage];
56564 p->page.pBuf = pPg;
57186 sqlite3_pcache_page *pPg,
57190 PgHdr1 *pPage = (PgHdr1 *)pPg;
57221 sqlite3_pcache_page *pPg,
57226 PgHdr1 *pPage = (PgHdr1 *)pPg;
59122 static int subjRequiresPage(PgHdr *pPg){
59123 Pager *pPager = pPg->pPager;
59125 Pgno pgno = pPg->pgno;
59143 static int pageInJournal(Pager *pPager, PgHdr *pPg){
59144 return sqlite3BitvecTest(pPager->pInJournal, pPg->pgno);
59317 static void checkPage(PgHdr *pPg){
59318 Pager *pPager = pPg->pPager;
59320 assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) );
60351 PgHdr *pPg; /* An existing page in the cache */ local
60457 pPg = 0;
60459 pPg = sqlite3PagerLookup(pPager, pgno);
60461 assert( pPg || !MEMDB );
60462 assert( pPager->eState!=PAGER_OPEN || pPg==0 || pPager->tempFile );
60470 isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC));
60477 testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 );
60494 }else if( !isMainJrnl && pPg==0 ){
60514 rc = sqlite3PagerGet(pPager, pgno, &pPg, 1);
60518 sqlite3PcacheMakeDirty(pPg);
60520 if( pPg ){
60528 pData = pPg->pData;
60530 pPager->xReiniter(pPg);
60535 pager_set_pagehash(pPg);
60542 sqlite3PcacheRelease(pPg);
61077 static int readDbPage(PgHdr *pPg){
61078 Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */
61088 rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame);
61092 rc = sqlite3WalReadFrame(pPager->pWal, iFrame,pPager->pageSize,pPg->pData);
61096 i64 iOffset = (pPg->pgno-1)*(i64)pPager->pageSize;
61097 rc = sqlite3OsRead(pPager->fd, pPg->pData, pPager->pageSize, iOffset);
61103 if( pPg->pgno==1 ){
61119 u8 *dbFileVers = &((u8*)pPg->pData)[24];
61125 IOTRACE(("PGIN %p %d\n", pPager, pPg->pgno));
61127 PAGERID(pPager), pPg->pgno, pager_pagehash(pPg)));
61140 static void pager_write_changecounter(PgHdr *pPg){
61142 if( NEVER(pPg==0) ) return;
61145 change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1;
61146 put32bits(((char*)pPg->pData)+24, change_counter);
61151 put32bits(((char*)pPg->pData)+92, change_counter);
61152 put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER);
61171 PgHdr *pPg; local
61174 pPg = sqlite3PagerLookup(pPager, iPg);
61175 if( pPg ){
61176 if( sqlite3PcachePageRefcount(pPg)==1 ){
61177 sqlite3PcacheDrop(pPg);
61179 rc = readDbPage(pPg);
61181 pPager->xReiniter(pPg);
61183 sqlite3PagerUnrefNotNull(pPg);
62030 static void assertTruncateConstraintCb(PgHdr *pPg){
62031 Pager *pPager = pPg->pPager;
62032 assert( pPg->flags&PGHDR_DIRTY );
62033 if( pPg->pgno>pPager->dbSize ){ /* if (a) is false */
62034 Pgno pgno = pPg->pgno;
62036 for(i=0; i<pPg->pPager->nSavepoint; i++){
62158 static void pagerReleaseMapPage(PgHdr *pPg){
62159 Pager *pPager = pPg->pPager;
62161 pPg->pDirty = pPager->pMmapFreelist;
62162 pPager->pMmapFreelist = pPg;
62165 sqlite3OsUnfetch(pPager->fd, (i64)(pPg->pgno-1)*pPager->pageSize, pPg->pData);
62280 SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){
62281 return pPg->pgno;
62288 SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){
62289 sqlite3PcacheRef(pPg);
62587 static int subjournalPage(PgHdr *pPg){
62589 Pager *pPager = pPg->pPager;
62597 || pageInJournal(pPager, pPg)
62598 || pPg->pgno>pPager->dbOrigSize
62605 void *pData = pPg->pData;
62609 PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));
62610 rc = write32bits(pPager->sjfd, offset, pPg->pgno);
62619 rc = addToSavepointBitvecs(pPager, pPg->pgno);
62623 static int subjournalPageIfRequired(PgHdr *pPg){
62624 if( subjRequiresPage(pPg) ){
62625 return subjournalPage(pPg);
62650 static int pagerStress(void *p, PgHdr *pPg){
62654 assert( pPg->pPager==pPager );
62655 assert( pPg->flags&PGHDR_DIRTY );
62679 || (pPg->flags & PGHDR_NEED_SYNC)!=0)
62685 pPg->pDirty = 0;
62688 rc = subjournalPageIfRequired(pPg);
62690 rc = pagerWalFrames(pPager, pPg, 0, 0);
62702 if( pPg->flags&PGHDR_NEED_SYNC
62710 assert( (pPg->flags&PGHDR_NEED_SYNC)==0 );
62711 rc = pager_write_pagelist(pPager, pPg);
62717 PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno));
62718 sqlite3PcacheMakeClean(pPg);
63583 PgHdr *pPg; local
63595 pPg = 0;
63603 pPg = *ppPage = sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pBase);
63604 assert( pPg==(*ppPage) );
63605 assert( pPg->pgno==pgno );
63606 assert( pPg->pPager==pPager || pPg->pPager==0 );
63609 if( pPg->pPager && !noContent ){
63628 pPg->pPager = pPager;
63635 sqlite3PcacheRelease(pPg);
63636 pPg = 0;
63656 memset(pPg->pData, 0, pPager->pageSize);
63659 assert( pPg->pPager==pPager );
63661 rc = readDbPage(pPg);
63666 pager_set_pagehash(pPg);
63672 if( pPg ){
63673 sqlite3PcacheDrop(pPg);
63689 PgHdr *pPg = 0; local
63728 pPg = sqlite3PagerLookup(pPager, pgno);
63730 if( pPg==0 ){
63731 rc = pagerAcquireMapPage(pPager, pgno, pData, &pPg);
63735 if( pPg ){
63737 *ppPage = pPg;
63825 SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage *pPg){
63826 TESTONLY( Pager *pPager = pPg->pPager; )
63827 assert( pPg!=0 );
63828 if( pPg->flags & PGHDR_MMAP ){
63829 assert( pPg->pgno!=1 ); /* Page1 is never memory mapped */
63830 pagerReleaseMapPage(pPg);
63832 sqlite3PcacheRelease(pPg);
63837 SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
63838 if( pPg ) sqlite3PagerUnrefNotNull(pPg);
63840 SQLITE_PRIVATE void sqlite3PagerUnrefPageOne(DbPage *pPg){
63842 assert( pPg!=0 );
63843 assert( pPg->pgno==1 );
63844 assert( (pPg->flags & PGHDR_MMAP)==0 ); /* Page1 is never memory mapped */
63845 pPager = pPg->pPager;
63846 sqlite3PcacheRelease(pPg);
64032 static SQLITE_NOINLINE int pagerAddPageToRollbackJournal(PgHdr *pPg){
64033 Pager *pPager = pPg->pPager;
64042 assert( pPg->pgno!=PAGER_SJ_PGNO(pPager) );
64045 pData2 = pPg->pData;
64055 pPg->flags |= PGHDR_NEED_SYNC;
64057 rc = write32bits(pPager->jfd, iOff, pPg->pgno);
64064 IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno,
64068 PAGERID(pPager), pPg->pgno,
64069 ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg)));
64074 rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno);
64077 rc |= addToSavepointBitvecs(pPager, pPg->pgno);
64089 static int pager_write(PgHdr *pPg){
64090 Pager *pPager = pPg->pPager;
64104 CHECK_PAGE(pPg);
64123 sqlite3PcacheMakeDirty(pPg);
64131 && sqlite3BitvecTestNotNull(pPager->pInJournal, pPg->pgno)==0
64134 if( pPg->pgno<=pPager->dbOrigSize ){
64135 rc = pagerAddPageToRollbackJournal(pPg);
64141 pPg->flags |= PGHDR_NEED_SYNC;
64144 PAGERID(pPager), pPg->pgno,
64145 ((pPg->flags&PGHDR_NEED_SYNC)?1:0)));
64154 pPg->flags |= PGHDR_WRITEABLE;
64160 rc = subjournalPageIfRequired(pPg);
64164 if( pPager->dbSize<pPg->pgno ){
64165 pPager->dbSize = pPg->pgno;
64181 static SQLITE_NOINLINE int pagerWriteLargeSector(PgHdr *pPg){
64188 Pager *pPager = pPg->pPager; /* The pager that owns pPg */
64203 pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;
64206 if( pPg->pgno>nPageCount ){
64207 nPage = (pPg->pgno - pg1)+1;
64214 assert(pg1<=pPg->pgno);
64215 assert((pg1+nPage)>pPg->pgno);
64220 if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
64275 SQLITE_PRIVATE int sqlite3PagerWrite(PgHdr *pPg){
64276 Pager *pPager = pPg->pPager;
64277 assert( (pPg->flags & PGHDR_MMAP)==0 );
64280 if( (pPg->flags & PGHDR_WRITEABLE)!=0 && pPager->dbSize>=pPg->pgno ){
64281 if( pPager->nSavepoint ) return subjournalPageIfRequired(pPg);
64287 return pagerWriteLargeSector(pPg);
64289 return pager_write(pPg);
64299 SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){
64300 return pPg->flags & PGHDR_WRITEABLE;
64324 SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){
64325 Pager *pPager = pPg->pPager;
64326 if( !pPager->tempFile && (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){
64327 PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager)));
64328 IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno))
64329 pPg->flags |= PGHDR_DONT_WRITE;
64330 pPg->flags &= ~PGHDR_WRITEABLE;
64331 testcase( pPg->flags & PGHDR_NEED_SYNC );
64332 pager_set_pagehash(pPg);
64599 PgHdr *pPg; local
64607 && (!(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
65199 SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
65205 assert( pPg->nRef>0 );
65216 rc = sqlite3PagerWrite(pPg);
65238 if( (pPg->flags & PGHDR_DIRTY)!=0
65239 && SQLITE_OK!=(rc = subjournalPageIfRequired(pPg))
65245 PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno));
65246 IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno))
65255 if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
65256 needSyncPgno = pPg->pgno;
65258 pageInJournal(pPager, pPg) || pPg->pgno>pPager->dbOrigSize );
65259 assert( pPg->flags&PGHDR_DIRTY );
65267 pPg->flags &= ~PGHDR_NEED_SYNC;
65275 pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);
65285 origPgno = pPg->pgno;
65286 sqlite3PcacheMove(pPg, pgno);
65287 sqlite3PcacheMakeDirty(pPg);
65337 SQLITE_PRIVATE void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){
65338 assert( pPg->pgno!=iNew );
65339 pPg->flags = flags;
65340 sqlite3PcacheMove(pPg, iNew);
65346 SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
65347 assert( pPg->nRef>0 || pPg->pPager->memDb );
65348 return pPg->pData;
65355 SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){
65356 return pPg->pExtra;
73300 static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
73301 const int hdr = pPg->hdrOffset; /* Offset to page header */
73302 u8 * const aData = pPg->aData; /* Page data */
73307 int maxPC = pPg->pBt->usableSize - nByte; /* Max address for a usable slot */
73332 *pRc = SQLITE_CORRUPT_PAGE(pPg);
73347 *pRc = SQLITE_CORRUPT_PAGE(pPg);
73354 *pRc = SQLITE_CORRUPT_PAGE(pPg);
78273 MemPage *pPg = 0; local
78276 rc = btreeGetUnusedPage(pBt, pBt->nPage, &pPg, bNoContent);
78278 rc = sqlite3PagerWrite(pPg->pDbPage);
78279 releasePage(pPg);
79134 MemPage *pPg /* The page to be reconstructed */
79136 const int hdr = pPg->hdrOffset; /* Offset of header on pPg */
79137 u8 * const aData = pPg->aData; /* Pointer to data for pPg */
79138 const int usableSize = pPg->pBt->usableSize;
79143 u8 *pCellptr = pPg->aCellIdx;
79144 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);
79178 assert( sz==pPg->xCellSize(pPg, pCell) || CORRUPT_DB );
79189 pPg->nCell = (u16)nCell;
79190 pPg->nOverflow = 0;
79193 put2byte(&aData[hdr+3], pPg->nCell);
79224 MemPage *pPg, /* Page to add cells to */
79233 u8 *aData = pPg->aData; /* Complete page */
79238 assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */
79248 if( (aData[1]==0 && aData[2]==0) || (pSlot = pageFindSlot(pPg,sz,&rc))==0 ){
79290 MemPage *pPg, /* Page to edit */
79295 u8 * const aData = pPg->aData;
79296 u8 * const pEnd = &aData[pPg->pBt->usableSize];
79297 u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize];
79329 freeSpace(pPg, aOfst[j], aAfter[j]-aOfst[j]);
79342 freeSpace(pPg, aOfst[j], aAfter[j]-aOfst[j]);
79360 MemPage *pPg, /* Edit this page */
79366 u8 * const aData = pPg->aData;
79367 const int hdr = pPg->hdrOffset;
79368 u8 *pBegin = &pPg->aCellIdx[nNew * 2];
79369 int nCell = pPg->nCell; /* Cells stored on pPg */
79373 int iOldEnd = iOld + pPg->nCell + pPg->nOverflow;
79377 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);
79378 memcpy(pTmp, aData, pPg->pBt->usableSize);
79384 int nShift = pageFreeArray(pPg, iOld, iNew-iOld, pCArray);
79386 memmove(pPg->aCellIdx, &pPg->aCellIdx[nShift*2], nCell*2);
79390 int nTail = pageFreeArray(pPg, iNewEnd, iOldEnd - iNewEnd, pCArray);
79397 if( NEVER(pData>pPg->aDataEnd) ) goto editpage_fail;
79404 pCellptr = pPg->aCellIdx;
79407 pPg, pBegin, &pData, pCellptr,
79414 for(i=0; i<pPg->nOverflow; i++){
79415 int iCell = (iOld + pPg->aiOvfl[i]) - iNew;
79417 pCellptr = &pPg->aCellIdx[iCell * 2];
79424 pPg, pBegin, &pData, pCellptr,
79432 pCellptr = &pPg->aCellIdx[nCell*2];
79434 pPg, pBegin, &pData, pCellptr,
79442 pPg->nCell = (u16)nNew;
79443 pPg->nOverflow = 0;
79445 put2byte(&aData[hdr+3], pPg->nCell);
79451 int iOff = get2byteAligned(&pPg->aCellIdx[i*2]);
79452 if( SQLITE_WITHIN(pCell, aData, &aData[pPg->pBt->usableSize]) ){
79465 return rebuildPage(pCArray, iNew, nNew, pPg);
83559 DbPage *pPg; local
83560 rc = sqlite3PagerGet(pDestPager, iPg, &pPg, 0);
83562 rc = sqlite3PagerWrite(pPg);
83563 sqlite3PagerUnref(pPg);
227208 DbPage *pPg = 0;
227209 rc = sqlite3PagerGet(sqlite3BtreePager(pBt), iPrev, &pPg, 0);
227211 assert( pPg==0 );
227214 pCell->aOvfl[j] = sqlite3Get4byte(sqlite3PagerGetData(pPg));
227215 sqlite3PagerUnref(pPg);
227264 StatPage *pPg /* Load page into this object */
227270 if( pPg->aPg==0 ){
227271 pPg->aPg = (u8*)sqlite3_malloc(pgsz + DBSTAT_PAGE_PADDING_BYTES);
227272 if( pPg->aPg==0 ){
227275 memset(&pPg->aPg[pgsz], 0, DBSTAT_PAGE_PADDING_BYTES);
227281 memcpy(pPg->aPg, a, pgsz);
247505 #define TOMBSTONE_KEYSIZE(pPg) (pPg->p[0]==4 ? 4 : 8)
247507 #define TOMBSTONE_NSLOT(pPg) \
247508 ((pPg->nn > 16) ? ((pPg->nn-8) / TOMBSTONE_KEYSIZE(pPg)) : 1)
249659 Fts5Data *pPg = fts5DataRead(p, FTS5_SEGMENT_ROWID(iSegid, iPgno));
249660 int bEmpty = (pPg && pPg->nn==4);
249661 fts5DataRelease(pPg);
252045 Fts5Data *pPg,
252050 const int szKey = TOMBSTONE_KEYSIZE(pPg);
252051 const int nSlot = TOMBSTONE_NSLOT(pPg);
252052 const int nElem = fts5GetU32(&pPg->p[4]);
252058 pPg->p[1] = 0x01;
252066 fts5PutU32(&pPg->p[4], nElem+1);
252068 u32 *aSlot = (u32*)&pPg->p[8];
252075 u64 *aSlot = (u64*)&pPg->p[8];
252145 Fts5Data *pPg = apOut[(iVal % nOut)];
252146 res = fts5IndexTombstoneAddToPage(pPg, 0, nOut, iVal);
252281 Fts5Data *pPg = 0;
252291 pPg = fts5DataRead(p, FTS5_TOMBSTONE_ROWID(pSeg->iSegid,iPg));
252292 if( pPg==0 ){
252297 if( 0==fts5IndexTombstoneAddToPage(pPg, 0, pSeg->nPgTombstone, iRowid) ){
252298 fts5DataWrite(p, FTS5_TOMBSTONE_ROWID(pSeg->iSegid,iPg), pPg->p, pPg->nn);
252299 fts5DataRelease(pPg);
252305 szKey = pPg ? TOMBSTONE_KEYSIZE(pPg) : 4;
252309 fts5IndexTombstoneRebuild(p, pSeg, pPg, iPg, szKey, &nHash, &apHash);
252325 fts5DataRelease(pPg);