Lines Matching refs:pBt
119 sqlite3_uint64 sqlite3BtreeSeekCount(Btree *pBt){ in sqlite3BtreeSeekCount() argument
120 u64 n = pBt->nSeek; in sqlite3BtreeSeekCount()
121 pBt->nSeek = 0; in sqlite3BtreeSeekCount()
140 (int)p->pgno, sqlite3PagerFilename(p->pBt->pPager, 0) in corruptPageError()
185 Schema *pSchema = (Schema *)pBtree->pBt->pSchema; in hasSharedCacheTableLock()
235 for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){ in hasSharedCacheTableLock()
270 for(p=pBtree->pBt->pCursor; p; p=p->pNext){ in hasReadConflicts()
289 BtShared *pBt = p->pBt; in querySharedCacheTableLock() local
301 assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) ); in querySharedCacheTableLock()
302 assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE ); in querySharedCacheTableLock()
312 if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){ in querySharedCacheTableLock()
313 sqlite3ConnectionBlocked(p->db, pBt->pWriter->db); in querySharedCacheTableLock()
317 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ in querySharedCacheTableLock()
332 assert( p==pBt->pWriter ); in querySharedCacheTableLock()
333 pBt->btsFlags |= BTS_PENDING; in querySharedCacheTableLock()
361 BtShared *pBt = p->pBt; in setSharedCacheTableLock() local
381 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ in setSharedCacheTableLock()
398 pLock->pNext = pBt->pLock; in setSharedCacheTableLock()
399 pBt->pLock = pLock; in setSharedCacheTableLock()
425 BtShared *pBt = p->pBt; in clearAllSharedCacheTableLocks() local
426 BtLock **ppIter = &pBt->pLock; in clearAllSharedCacheTableLocks()
434 assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree ); in clearAllSharedCacheTableLocks()
447 assert( (pBt->btsFlags & BTS_PENDING)==0 || pBt->pWriter ); in clearAllSharedCacheTableLocks()
448 if( pBt->pWriter==p ){ in clearAllSharedCacheTableLocks()
449 pBt->pWriter = 0; in clearAllSharedCacheTableLocks()
450 pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING); in clearAllSharedCacheTableLocks()
451 }else if( pBt->nTransaction==2 ){ in clearAllSharedCacheTableLocks()
461 pBt->btsFlags &= ~BTS_PENDING; in clearAllSharedCacheTableLocks()
469 BtShared *pBt = p->pBt; in downgradeAllSharedCacheTableLocks() local
470 if( pBt->pWriter==p ){ in downgradeAllSharedCacheTableLocks()
472 pBt->pWriter = 0; in downgradeAllSharedCacheTableLocks()
473 pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING); in downgradeAllSharedCacheTableLocks()
474 for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){ in downgradeAllSharedCacheTableLocks()
494 return sqlite3_mutex_held(p->pBt->mutex); in cursorHoldsMutex()
507 return (p->pBtree->db==p->pBt->db); in cursorOwnsBtShared()
521 static void invalidateAllOverflowCache(BtShared *pBt){ in invalidateAllOverflowCache() argument
523 assert( sqlite3_mutex_held(pBt->mutex) ); in invalidateAllOverflowCache()
524 for(p=pBt->pCursor; p; p=p->pNext){ in invalidateAllOverflowCache()
553 for(p=pBtree->pBt->pCursor; p; p=p->pNext){ in invalidateIncrblobCursors()
603 static int btreeSetHasContent(BtShared *pBt, Pgno pgno){ in btreeSetHasContent() argument
605 if( !pBt->pHasContent ){ in btreeSetHasContent()
606 assert( pgno<=pBt->nPage ); in btreeSetHasContent()
607 pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage); in btreeSetHasContent()
608 if( !pBt->pHasContent ){ in btreeSetHasContent()
612 if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){ in btreeSetHasContent()
613 rc = sqlite3BitvecSet(pBt->pHasContent, pgno); in btreeSetHasContent()
625 static int btreeGetHasContent(BtShared *pBt, Pgno pgno){ in btreeGetHasContent() argument
626 Bitvec *p = pBt->pHasContent; in btreeGetHasContent()
634 static void btreeClearHasContent(BtShared *pBt){ in btreeClearHasContent() argument
635 sqlite3BitvecDestroy(pBt->pHasContent); in btreeClearHasContent()
636 pBt->pHasContent = 0; in btreeClearHasContent()
758 static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){ in saveAllCursors() argument
760 assert( sqlite3_mutex_held(pBt->mutex) ); in saveAllCursors()
761 assert( pExcept==0 || pExcept->pBt==pBt ); in saveAllCursors()
762 for(p=pBt->pCursor; p; p=p->pNext){ in saveAllCursors()
971 static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){ in ptrmapPageno() argument
974 assert( sqlite3_mutex_held(pBt->mutex) ); in ptrmapPageno()
976 nPagesPerMapPage = (pBt->usableSize/5)+1; in ptrmapPageno()
979 if( ret==PENDING_BYTE_PAGE(pBt) ){ in ptrmapPageno()
995 static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){ in ptrmapPut() argument
1004 assert( sqlite3_mutex_held(pBt->mutex) ); in ptrmapPut()
1006 assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) ); in ptrmapPut()
1008 assert( pBt->autoVacuum ); in ptrmapPut()
1013 iPtrmap = PTRMAP_PAGENO(pBt, key); in ptrmapPut()
1014 rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage, 0); in ptrmapPut()
1031 assert( offset <= (int)pBt->usableSize-5 ); in ptrmapPut()
1054 static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){ in ptrmapGet() argument
1061 assert( sqlite3_mutex_held(pBt->mutex) ); in ptrmapGet()
1063 iPtrmap = PTRMAP_PAGENO(pBt, key); in ptrmapGet()
1064 rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage, 0); in ptrmapGet()
1075 assert( offset <= (int)pBt->usableSize-5 ); in ptrmapGet()
1133 surplus = minLocal + (pInfo->nPayload - minLocal)%(pPage->pBt->usableSize-4); in btreeParseCellAdjustSizeForOverflow()
1157 surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize-4); in btreePayloadToLocal()
1181 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in btreeParseCellPtrNoPayload()
1202 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in btreeParseCellPtr()
1283 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in btreeParseCellPtrIndex()
1363 nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); in cellSizePtr()
1436 nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); in cellSizePtrTableLeaf()
1477 ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC); in ptrmapPutOvflPtr()
1512 assert( pPage->pBt!=0 ); in defragmentPage()
1513 assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); in defragmentPage()
1515 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in defragmentPage()
1522 usableSize = pPage->pBt->usableSize; in defragmentPage()
1571 temp = sqlite3PagerTempSpace(pPage->pBt->pPager); in defragmentPage()
1636 int maxPC = pPg->pBt->usableSize - nByte; /* Max address for a usable slot */ in pageFindSlot()
1710 assert( pPage->pBt ); in allocateSpace()
1711 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in allocateSpace()
1715 assert( nByte < (int)(pPage->pBt->usableSize-8) ); in allocateSpace()
1727 assert( top<=(int)pPage->pBt->usableSize ); /* by btreeComputeFreeSpace() */ in allocateSpace()
1729 if( top==0 && pPage->pBt->usableSize==65536 ){ in allocateSpace()
1747 assert( pSpace+nByte<=data+pPage->pBt->usableSize ); in allocateSpace()
1781 assert( top+nByte <= (int)pPage->pBt->usableSize ); in allocateSpace()
1810 assert( pPage->pBt!=0 ); in freeSpace()
1813 assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize ); in freeSpace()
1814 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in freeSpace()
1816 assert( iStart<=pPage->pBt->usableSize-4 ); in freeSpace()
1833 if( iFreeBlk>pPage->pBt->usableSize-4 ){ /* TH3: corrupt081.100 */ in freeSpace()
1848 if( iEnd > pPage->pBt->usableSize ){ in freeSpace()
1885 if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){ in freeSpace()
1909 BtShared *pBt; /* A copy of pPage->pBt */ in decodeFlags() local
1912 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in decodeFlags()
1916 pBt = pPage->pBt; in decodeFlags()
1934 pPage->maxLocal = pBt->maxLeaf; in decodeFlags()
1935 pPage->minLocal = pBt->minLeaf; in decodeFlags()
1947 pPage->maxLocal = pBt->maxLocal; in decodeFlags()
1948 pPage->minLocal = pBt->minLocal; in decodeFlags()
1958 pPage->max1bytePayload = pBt->max1bytePayload; in decodeFlags()
1976 assert( pPage->pBt!=0 ); in btreeComputeFreeSpace()
1977 assert( pPage->pBt->db!=0 ); in btreeComputeFreeSpace()
1978 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in btreeComputeFreeSpace()
1985 usableSize = pPage->pBt->usableSize; in btreeComputeFreeSpace()
2059 usableSize = pPage->pBt->usableSize; in btreeCellSizeCheck()
2091 BtShared *pBt; /* The main btree structure */ in btreeInitPage() local
2093 assert( pPage->pBt!=0 ); in btreeInitPage()
2094 assert( pPage->pBt->db!=0 ); in btreeInitPage()
2095 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in btreeInitPage()
2101 pBt = pPage->pBt; in btreeInitPage()
2108 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); in btreeInitPage()
2109 pPage->maskPage = (u16)(pBt->pageSize - 1); in btreeInitPage()
2113 pPage->aDataEnd = pPage->aData + pBt->pageSize; in btreeInitPage()
2118 if( pPage->nCell>MX_CELL(pBt) ){ in btreeInitPage()
2122 testcase( pPage->nCell==MX_CELL(pBt) ); in btreeInitPage()
2128 || get2byteNotZero(&data[5])==(int)pBt->usableSize in btreeInitPage()
2132 if( pBt->db->flags & SQLITE_CellSizeCk ){ in btreeInitPage()
2144 BtShared *pBt = pPage->pBt; in zeroPage() local
2152 assert( sqlite3_mutex_held(pBt->mutex) ); in zeroPage()
2153 if( pBt->btsFlags & BTS_FAST_SECURE ){ in zeroPage()
2154 memset(&data[hdr], 0, pBt->usableSize - hdr); in zeroPage()
2160 put2byte(&data[hdr+5], pBt->usableSize); in zeroPage()
2161 pPage->nFree = (u16)(pBt->usableSize - first); in zeroPage()
2164 pPage->aDataEnd = &data[pBt->pageSize]; in zeroPage()
2168 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); in zeroPage()
2169 pPage->maskPage = (u16)(pBt->pageSize - 1); in zeroPage()
2179 static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){ in btreePageFromDbPage() argument
2184 pPage->pBt = pBt; in btreePageFromDbPage()
2204 BtShared *pBt, /* The btree */ in btreeGetPage() argument
2213 assert( sqlite3_mutex_held(pBt->mutex) ); in btreeGetPage()
2214 rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, flags); in btreeGetPage()
2216 *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt); in btreeGetPage()
2225 static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){ in btreePageLookup() argument
2227 assert( sqlite3_mutex_held(pBt->mutex) ); in btreePageLookup()
2228 pDbPage = sqlite3PagerLookup(pBt->pPager, pgno); in btreePageLookup()
2230 return btreePageFromDbPage(pDbPage, pgno, pBt); in btreePageLookup()
2239 static Pgno btreePagecount(BtShared *pBt){ in btreePagecount() argument
2240 return pBt->nPage; in btreePagecount()
2244 return btreePagecount(p->pBt); in sqlite3BtreeLastPage()
2261 BtShared *pBt, /* The database file */ in getAndInitPage() argument
2269 assert( sqlite3_mutex_held(pBt->mutex) ); in getAndInitPage()
2274 if( pgno>btreePagecount(pBt) ){ in getAndInitPage()
2278 rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, bReadOnly); in getAndInitPage()
2284 btreePageFromDbPage(pDbPage, pgno, pBt); in getAndInitPage()
2321 assert( pPage->pBt ); in releasePageNotNull()
2325 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in releasePageNotNull()
2334 assert( pPage->pBt ); in releasePageOne()
2338 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in releasePageOne()
2352 BtShared *pBt, /* The btree */ in btreeGetUnusedPage() argument
2357 int rc = btreeGetPage(pBt, pgno, ppPage, flags); in btreeGetUnusedPage()
2385 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in pageReinit()
2403 BtShared *pBt = (BtShared*)pArg; in btreeInvokeBusyHandler() local
2404 assert( pBt->db ); in btreeInvokeBusyHandler()
2405 assert( sqlite3_mutex_held(pBt->db->mutex) ); in btreeInvokeBusyHandler()
2406 return sqlite3InvokeBusyHandler(&pBt->db->busyHandler); in btreeInvokeBusyHandler()
2438 BtShared *pBt = 0; /* Shared part of btree structure */ in sqlite3BtreeOpen() local
2525 for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){ in sqlite3BtreeOpen()
2526 assert( pBt->nRef>0 ); in sqlite3BtreeOpen()
2527 if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager, 0)) in sqlite3BtreeOpen()
2528 && sqlite3PagerVfs(pBt->pPager)==pVfs ){ in sqlite3BtreeOpen()
2531 Btree *pExisting = db->aDb[iDb].pBt; in sqlite3BtreeOpen()
2532 if( pExisting && pExisting->pBt==pBt ){ in sqlite3BtreeOpen()
2540 p->pBt = pBt; in sqlite3BtreeOpen()
2541 pBt->nRef++; in sqlite3BtreeOpen()
2560 if( pBt==0 ){ in sqlite3BtreeOpen()
2572 pBt = sqlite3MallocZero( sizeof(*pBt) ); in sqlite3BtreeOpen()
2573 if( pBt==0 ){ in sqlite3BtreeOpen()
2577 rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename, in sqlite3BtreeOpen()
2580 sqlite3PagerSetMmapLimit(pBt->pPager, db->szMmap); in sqlite3BtreeOpen()
2581 rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader); in sqlite3BtreeOpen()
2586 pBt->openFlags = (u8)flags; in sqlite3BtreeOpen()
2587 pBt->db = db; in sqlite3BtreeOpen()
2588 sqlite3PagerSetBusyHandler(pBt->pPager, btreeInvokeBusyHandler, pBt); in sqlite3BtreeOpen()
2589 p->pBt = pBt; in sqlite3BtreeOpen()
2591 pBt->pCursor = 0; in sqlite3BtreeOpen()
2592 pBt->pPage1 = 0; in sqlite3BtreeOpen()
2593 if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY; in sqlite3BtreeOpen()
2595 pBt->btsFlags |= BTS_SECURE_DELETE; in sqlite3BtreeOpen()
2597 pBt->btsFlags |= BTS_OVERWRITE; in sqlite3BtreeOpen()
2602 pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16); in sqlite3BtreeOpen()
2603 if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE in sqlite3BtreeOpen()
2604 || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){ in sqlite3BtreeOpen()
2605 pBt->pageSize = 0; in sqlite3BtreeOpen()
2614 pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0); in sqlite3BtreeOpen()
2615 pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0); in sqlite3BtreeOpen()
2624 pBt->btsFlags |= BTS_PAGESIZE_FIXED; in sqlite3BtreeOpen()
2626 pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0); in sqlite3BtreeOpen()
2627 pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0); in sqlite3BtreeOpen()
2630 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); in sqlite3BtreeOpen()
2632 pBt->usableSize = pBt->pageSize - nReserve; in sqlite3BtreeOpen()
2633 assert( (pBt->pageSize & 7)==0 ); /* 8-byte alignment of pageSize */ in sqlite3BtreeOpen()
2638 pBt->nRef = 1; in sqlite3BtreeOpen()
2643 pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST); in sqlite3BtreeOpen()
2644 if( pBt->mutex==0 ){ in sqlite3BtreeOpen()
2650 pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList); in sqlite3BtreeOpen()
2651 GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt; in sqlite3BtreeOpen()
2666 if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){ in sqlite3BtreeOpen()
2668 if( (uptr)p->pBt<(uptr)pSib->pBt ){ in sqlite3BtreeOpen()
2673 while( pSib->pNext && (uptr)pSib->pNext->pBt<(uptr)p->pBt ){ in sqlite3BtreeOpen()
2692 if( pBt && pBt->pPager ){ in sqlite3BtreeOpen()
2693 sqlite3PagerClose(pBt->pPager, 0); in sqlite3BtreeOpen()
2695 sqlite3_free(pBt); in sqlite3BtreeOpen()
2709 pFile = sqlite3PagerFile(pBt->pPager); in sqlite3BtreeOpen()
2711 sqlite3OsFileControlHint(pFile, SQLITE_FCNTL_PDB, (void*)&pBt->db); in sqlite3BtreeOpen()
2728 static int removeFromSharingList(BtShared *pBt){ in removeFromSharingList() argument
2734 assert( sqlite3_mutex_notheld(pBt->mutex) ); in removeFromSharingList()
2737 pBt->nRef--; in removeFromSharingList()
2738 if( pBt->nRef<=0 ){ in removeFromSharingList()
2739 if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){ in removeFromSharingList()
2740 GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext; in removeFromSharingList()
2743 while( ALWAYS(pList) && pList->pNext!=pBt ){ in removeFromSharingList()
2747 pList->pNext = pBt->pNext; in removeFromSharingList()
2751 sqlite3_mutex_free(pBt->mutex); in removeFromSharingList()
2767 static SQLITE_NOINLINE int allocateTempSpace(BtShared *pBt){ in allocateTempSpace() argument
2768 assert( pBt!=0 ); in allocateTempSpace()
2769 assert( pBt->pTmpSpace==0 ); in allocateTempSpace()
2772 assert( pBt->pCursor!=0 && (pBt->pCursor->curFlags & BTCF_WriteFlag)!=0 ); in allocateTempSpace()
2773 pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize ); in allocateTempSpace()
2774 if( pBt->pTmpSpace==0 ){ in allocateTempSpace()
2775 BtCursor *pCur = pBt->pCursor; in allocateTempSpace()
2776 pBt->pCursor = pCur->pNext; /* Unlink the cursor */ in allocateTempSpace()
2796 memset(pBt->pTmpSpace, 0, 8); in allocateTempSpace()
2797 pBt->pTmpSpace += 4; in allocateTempSpace()
2804 static void freeTempSpace(BtShared *pBt){ in freeTempSpace() argument
2805 if( pBt->pTmpSpace ){ in freeTempSpace()
2806 pBt->pTmpSpace -= 4; in freeTempSpace()
2807 sqlite3PageFree(pBt->pTmpSpace); in freeTempSpace()
2808 pBt->pTmpSpace = 0; in freeTempSpace()
2816 BtShared *pBt = p->pBt; in sqlite3BtreeClose() local
2825 BtCursor *pCur = pBt->pCursor; in sqlite3BtreeClose()
2847 if( !p->sharable || removeFromSharingList(pBt) ){ in sqlite3BtreeClose()
2853 assert( !pBt->pCursor ); in sqlite3BtreeClose()
2854 sqlite3PagerClose(pBt->pPager, p->db); in sqlite3BtreeClose()
2855 if( pBt->xFreeSchema && pBt->pSchema ){ in sqlite3BtreeClose()
2856 pBt->xFreeSchema(pBt->pSchema); in sqlite3BtreeClose()
2858 sqlite3DbFree(0, pBt->pSchema); in sqlite3BtreeClose()
2859 freeTempSpace(pBt); in sqlite3BtreeClose()
2860 sqlite3_free(pBt); in sqlite3BtreeClose()
2882 BtShared *pBt = p->pBt; in sqlite3BtreeSetCacheSize() local
2885 sqlite3PagerSetCachesize(pBt->pPager, mxPage); in sqlite3BtreeSetCacheSize()
2901 BtShared *pBt = p->pBt; in sqlite3BtreeSetSpillSize() local
2905 res = sqlite3PagerSetSpillsize(pBt->pPager, mxPage); in sqlite3BtreeSetSpillSize()
2916 BtShared *pBt = p->pBt; in sqlite3BtreeSetMmapLimit() local
2919 sqlite3PagerSetMmapLimit(pBt->pPager, szMmap); in sqlite3BtreeSetMmapLimit()
2938 BtShared *pBt = p->pBt; in sqlite3BtreeSetPagerFlags() local
2941 sqlite3PagerSetFlags(pBt->pPager, pgFlags); in sqlite3BtreeSetPagerFlags()
2970 BtShared *pBt = p->pBt; in sqlite3BtreeSetPageSize() local
2973 pBt->nReserveWanted = nReserve; in sqlite3BtreeSetPageSize()
2974 x = pBt->pageSize - pBt->usableSize; in sqlite3BtreeSetPageSize()
2976 if( pBt->btsFlags & BTS_PAGESIZE_FIXED ){ in sqlite3BtreeSetPageSize()
2984 assert( !pBt->pCursor ); in sqlite3BtreeSetPageSize()
2986 pBt->pageSize = (u32)pageSize; in sqlite3BtreeSetPageSize()
2987 freeTempSpace(pBt); in sqlite3BtreeSetPageSize()
2989 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); in sqlite3BtreeSetPageSize()
2990 pBt->usableSize = pBt->pageSize - (u16)nReserve; in sqlite3BtreeSetPageSize()
2991 if( iFix ) pBt->btsFlags |= BTS_PAGESIZE_FIXED; in sqlite3BtreeSetPageSize()
3000 return p->pBt->pageSize; in sqlite3BtreeGetPageSize()
3016 assert( sqlite3_mutex_held(p->pBt->mutex) ); in sqlite3BtreeGetReserveNoMutex()
3017 n = p->pBt->pageSize - p->pBt->usableSize; in sqlite3BtreeGetReserveNoMutex()
3033 n1 = (int)p->pBt->nReserveWanted; in sqlite3BtreeGetRequestedReserve()
3048 n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage); in sqlite3BtreeMaxPageCount()
3078 p->pBt->btsFlags &= ~BTS_FAST_SECURE; in sqlite3BtreeSecureDelete()
3079 p->pBt->btsFlags |= BTS_SECURE_DELETE*newFlag; in sqlite3BtreeSecureDelete()
3081 b = (p->pBt->btsFlags & BTS_FAST_SECURE)/BTS_SECURE_DELETE; in sqlite3BtreeSecureDelete()
3096 BtShared *pBt = p->pBt; in sqlite3BtreeSetAutoVacuum()
3101 if( (pBt->btsFlags & BTS_PAGESIZE_FIXED)!=0 && (av ?1:0)!=pBt->autoVacuum ){ in sqlite3BtreeSetAutoVacuum()
3104 pBt->autoVacuum = av ?1:0; in sqlite3BtreeSetAutoVacuum()
3105 pBt->incrVacuum = av==2 ?1:0; in sqlite3BtreeSetAutoVacuum()
3123 (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE: in sqlite3BtreeGetAutoVacuum()
3124 (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL: in sqlite3BtreeGetAutoVacuum()
3140 static void setDefaultSyncFlag(BtShared *pBt, u8 safety_level){ in setDefaultSyncFlag() argument
3143 if( (db=pBt->db)!=0 && (pDb=db->aDb)!=0 ){ in setDefaultSyncFlag()
3144 while( pDb->pBt==0 || pDb->pBt->pBt!=pBt ){ pDb++; } in setDefaultSyncFlag()
3150 sqlite3PagerSetFlags(pBt->pPager, in setDefaultSyncFlag()
3156 # define setDefaultSyncFlag(pBt,safety_level) argument
3172 static int lockBtree(BtShared *pBt){ in lockBtree() argument
3178 assert( sqlite3_mutex_held(pBt->mutex) ); in lockBtree()
3179 assert( pBt->pPage1==0 ); in lockBtree()
3180 rc = sqlite3PagerSharedLock(pBt->pPager); in lockBtree()
3182 rc = btreeGetPage(pBt, 1, &pPage1, 0); in lockBtree()
3189 sqlite3PagerPagecount(pBt->pPager, (int*)&nPageFile); in lockBtree()
3193 if( (pBt->db->flags & SQLITE_ResetDatabase)!=0 ){ in lockBtree()
3210 pBt->btsFlags |= BTS_READ_ONLY; in lockBtree()
3217 pBt->btsFlags |= BTS_READ_ONLY; in lockBtree()
3231 if( page1[19]==2 && (pBt->btsFlags & BTS_NO_WAL)==0 ){ in lockBtree()
3233 rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen); in lockBtree()
3237 setDefaultSyncFlag(pBt, SQLITE_DEFAULT_WAL_SYNCHRONOUS+1); in lockBtree()
3245 setDefaultSyncFlag(pBt, SQLITE_DEFAULT_SYNCHRONOUS+1); in lockBtree()
3270 pBt->btsFlags |= BTS_PAGESIZE_FIXED; in lockBtree()
3280 if( (u32)pageSize!=pBt->pageSize ){ in lockBtree()
3288 pBt->usableSize = usableSize; in lockBtree()
3289 pBt->pageSize = pageSize; in lockBtree()
3290 freeTempSpace(pBt); in lockBtree()
3291 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, in lockBtree()
3296 if( sqlite3WritableSchema(pBt->db)==0 ){ in lockBtree()
3309 pBt->pageSize = pageSize; in lockBtree()
3310 pBt->usableSize = usableSize; in lockBtree()
3312 pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0); in lockBtree()
3313 pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0); in lockBtree()
3330 pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23); in lockBtree()
3331 pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23); in lockBtree()
3332 pBt->maxLeaf = (u16)(pBt->usableSize - 35); in lockBtree()
3333 pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23); in lockBtree()
3334 if( pBt->maxLocal>127 ){ in lockBtree()
3335 pBt->max1bytePayload = 127; in lockBtree()
3337 pBt->max1bytePayload = (u8)pBt->maxLocal; in lockBtree()
3339 assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) ); in lockBtree()
3340 pBt->pPage1 = pPage1; in lockBtree()
3341 pBt->nPage = nPage; in lockBtree()
3346 pBt->pPage1 = 0; in lockBtree()
3363 static int countValidCursors(BtShared *pBt, int wrOnly){ in countValidCursors() argument
3366 for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){ in countValidCursors()
3382 static void unlockBtreeIfUnused(BtShared *pBt){ in unlockBtreeIfUnused() argument
3383 assert( sqlite3_mutex_held(pBt->mutex) ); in unlockBtreeIfUnused()
3384 assert( countValidCursors(pBt,0)==0 || pBt->inTransaction>TRANS_NONE ); in unlockBtreeIfUnused()
3385 if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){ in unlockBtreeIfUnused()
3386 MemPage *pPage1 = pBt->pPage1; in unlockBtreeIfUnused()
3388 assert( sqlite3PagerRefcount(pBt->pPager)==1 ); in unlockBtreeIfUnused()
3389 pBt->pPage1 = 0; in unlockBtreeIfUnused()
3399 static int newDatabase(BtShared *pBt){ in newDatabase() argument
3404 assert( sqlite3_mutex_held(pBt->mutex) ); in newDatabase()
3405 if( pBt->nPage>0 ){ in newDatabase()
3408 pP1 = pBt->pPage1; in newDatabase()
3415 data[16] = (u8)((pBt->pageSize>>8)&0xff); in newDatabase()
3416 data[17] = (u8)((pBt->pageSize>>16)&0xff); in newDatabase()
3419 assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize); in newDatabase()
3420 data[20] = (u8)(pBt->pageSize - pBt->usableSize); in newDatabase()
3426 pBt->btsFlags |= BTS_PAGESIZE_FIXED; in newDatabase()
3428 assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 ); in newDatabase()
3429 assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 ); in newDatabase()
3430 put4byte(&data[36 + 4*4], pBt->autoVacuum); in newDatabase()
3431 put4byte(&data[36 + 7*4], pBt->incrVacuum); in newDatabase()
3433 pBt->nPage = 1; in newDatabase()
3446 p->pBt->nPage = 0; in sqlite3BtreeNewDb()
3447 rc = newDatabase(p->pBt); in sqlite3BtreeNewDb()
3488 BtShared *pBt = p->pBt; in sqlite3BtreeBeginTrans() local
3489 Pager *pPager = pBt->pPager; in sqlite3BtreeBeginTrans()
3502 assert( pBt->inTransaction==TRANS_WRITE || IfNotOmitAV(pBt->bDoTruncate)==0 ); in sqlite3BtreeBeginTrans()
3507 pBt->btsFlags &= ~BTS_READ_ONLY; in sqlite3BtreeBeginTrans()
3511 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){ in sqlite3BtreeBeginTrans()
3523 if( (wrflag && pBt->inTransaction==TRANS_WRITE) in sqlite3BtreeBeginTrans()
3524 || (pBt->btsFlags & BTS_PENDING)!=0 in sqlite3BtreeBeginTrans()
3526 pBlock = pBt->pWriter->db; in sqlite3BtreeBeginTrans()
3529 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ in sqlite3BtreeBeginTrans()
3550 pBt->btsFlags &= ~BTS_INITIALLY_EMPTY; in sqlite3BtreeBeginTrans()
3551 if( pBt->nPage==0 ) pBt->btsFlags |= BTS_INITIALLY_EMPTY; in sqlite3BtreeBeginTrans()
3558 if( pBt->pPage1==0 && wrflag ){ in sqlite3BtreeBeginTrans()
3559 assert( pBt->inTransaction==TRANS_NONE ); in sqlite3BtreeBeginTrans()
3572 while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) ); in sqlite3BtreeBeginTrans()
3575 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 ){ in sqlite3BtreeBeginTrans()
3580 rc = newDatabase(pBt); in sqlite3BtreeBeginTrans()
3581 }else if( rc==SQLITE_BUSY_SNAPSHOT && pBt->inTransaction==TRANS_NONE ){ in sqlite3BtreeBeginTrans()
3592 unlockBtreeIfUnused(pBt); in sqlite3BtreeBeginTrans()
3594 }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE && in sqlite3BtreeBeginTrans()
3595 btreeInvokeBusyHandler(pBt) ); in sqlite3BtreeBeginTrans()
3603 pBt->nTransaction++; in sqlite3BtreeBeginTrans()
3608 p->lock.pNext = pBt->pLock; in sqlite3BtreeBeginTrans()
3609 pBt->pLock = &p->lock; in sqlite3BtreeBeginTrans()
3614 if( p->inTrans>pBt->inTransaction ){ in sqlite3BtreeBeginTrans()
3615 pBt->inTransaction = p->inTrans; in sqlite3BtreeBeginTrans()
3618 MemPage *pPage1 = pBt->pPage1; in sqlite3BtreeBeginTrans()
3620 assert( !pBt->pWriter ); in sqlite3BtreeBeginTrans()
3621 pBt->pWriter = p; in sqlite3BtreeBeginTrans()
3622 pBt->btsFlags &= ~BTS_EXCLUSIVE; in sqlite3BtreeBeginTrans()
3623 if( wrflag>1 ) pBt->btsFlags |= BTS_EXCLUSIVE; in sqlite3BtreeBeginTrans()
3632 if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){ in sqlite3BtreeBeginTrans()
3635 put4byte(&pPage1->aData[28], pBt->nPage); in sqlite3BtreeBeginTrans()
3644 *pSchemaVersion = get4byte(&pBt->pPage1->aData[40]); in sqlite3BtreeBeginTrans()
3671 BtShared *pBt = pPage->pBt; in setChildPtrmaps() local
3674 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in setChildPtrmaps()
3686 ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc); in setChildPtrmaps()
3692 ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc); in setChildPtrmaps()
3713 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in modifyPagePointer()
3736 if( pCell+info.nSize > pPage->aData+pPage->pBt->usableSize ){ in modifyPagePointer()
3745 if( pCell+4 > pPage->aData+pPage->pBt->usableSize ){ in modifyPagePointer()
3777 BtShared *pBt, /* Btree */ in relocatePage() argument
3786 Pager *pPager = pBt->pPager; in relocatePage()
3791 assert( sqlite3_mutex_held(pBt->mutex) ); in relocatePage()
3792 assert( pDbPage->pBt==pBt ); in relocatePage()
3820 ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc); in relocatePage()
3832 rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0); in relocatePage()
3844 ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc); in relocatePage()
3870 static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bCommit){ in incrVacuumStep() argument
3874 assert( sqlite3_mutex_held(pBt->mutex) ); in incrVacuumStep()
3877 if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){ in incrVacuumStep()
3881 nFreeList = get4byte(&pBt->pPage1->aData[36]); in incrVacuumStep()
3886 rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage); in incrVacuumStep()
3903 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, BTALLOC_EXACT); in incrVacuumStep()
3916 rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0); in incrVacuumStep()
3934 Pgno dbSize = btreePagecount(pBt); in incrVacuumStep()
3935 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iNear, eMode); in incrVacuumStep()
3948 rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, bCommit); in incrVacuumStep()
3959 }while( iLastPg==PENDING_BYTE_PAGE(pBt) || PTRMAP_ISPAGE(pBt, iLastPg) ); in incrVacuumStep()
3960 pBt->bDoTruncate = 1; in incrVacuumStep()
3961 pBt->nPage = iLastPg; in incrVacuumStep()
3971 static Pgno finalDbSize(BtShared *pBt, Pgno nOrig, Pgno nFree){ in finalDbSize() argument
3976 nEntry = pBt->usableSize/5; in finalDbSize()
3977 nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry; in finalDbSize()
3979 if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){ in finalDbSize()
3982 while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){ in finalDbSize()
3999 BtShared *pBt = p->pBt; in sqlite3BtreeIncrVacuum() local
4002 assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE ); in sqlite3BtreeIncrVacuum()
4003 if( !pBt->autoVacuum ){ in sqlite3BtreeIncrVacuum()
4006 Pgno nOrig = btreePagecount(pBt); in sqlite3BtreeIncrVacuum()
4007 Pgno nFree = get4byte(&pBt->pPage1->aData[36]); in sqlite3BtreeIncrVacuum()
4008 Pgno nFin = finalDbSize(pBt, nOrig, nFree); in sqlite3BtreeIncrVacuum()
4013 rc = saveAllCursors(pBt, 0, 0); in sqlite3BtreeIncrVacuum()
4015 invalidateAllOverflowCache(pBt); in sqlite3BtreeIncrVacuum()
4016 rc = incrVacuumStep(pBt, nFin, nOrig, 0); in sqlite3BtreeIncrVacuum()
4019 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); in sqlite3BtreeIncrVacuum()
4020 put4byte(&pBt->pPage1->aData[28], pBt->nPage); in sqlite3BtreeIncrVacuum()
4037 BtShared *pBt; in autoVacuumCommit() local
4042 pBt = p->pBt; in autoVacuumCommit()
4043 pPager = pBt->pPager; in autoVacuumCommit()
4046 assert( sqlite3_mutex_held(pBt->mutex) ); in autoVacuumCommit()
4047 invalidateAllOverflowCache(pBt); in autoVacuumCommit()
4048 assert(pBt->autoVacuum); in autoVacuumCommit()
4049 if( !pBt->incrVacuum ){ in autoVacuumCommit()
4056 nOrig = btreePagecount(pBt); in autoVacuumCommit()
4057 if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){ in autoVacuumCommit()
4065 nFree = get4byte(&pBt->pPage1->aData[36]); in autoVacuumCommit()
4070 if( db->aDb[iDb].pBt==p ) break; in autoVacuumCommit()
4077 pBt->pageSize in autoVacuumCommit()
4088 nFin = finalDbSize(pBt, nOrig, nVac); in autoVacuumCommit()
4091 rc = saveAllCursors(pBt, 0, 0); in autoVacuumCommit()
4094 rc = incrVacuumStep(pBt, nFin, iFree, nVac==nFree); in autoVacuumCommit()
4097 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); in autoVacuumCommit()
4099 put4byte(&pBt->pPage1->aData[32], 0); in autoVacuumCommit()
4100 put4byte(&pBt->pPage1->aData[36], 0); in autoVacuumCommit()
4102 put4byte(&pBt->pPage1->aData[28], nFin); in autoVacuumCommit()
4103 pBt->bDoTruncate = 1; in autoVacuumCommit()
4104 pBt->nPage = nFin; in autoVacuumCommit()
4148 BtShared *pBt = p->pBt; in sqlite3BtreeCommitPhaseOne() local
4151 if( pBt->autoVacuum ){ in sqlite3BtreeCommitPhaseOne()
4158 if( pBt->bDoTruncate ){ in sqlite3BtreeCommitPhaseOne()
4159 sqlite3PagerTruncateImage(pBt->pPager, pBt->nPage); in sqlite3BtreeCommitPhaseOne()
4162 rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zSuperJrnl, 0); in sqlite3BtreeCommitPhaseOne()
4173 BtShared *pBt = p->pBt; in btreeEndTransaction() local
4178 pBt->bDoTruncate = 0; in btreeEndTransaction()
4193 pBt->nTransaction--; in btreeEndTransaction()
4194 if( 0==pBt->nTransaction ){ in btreeEndTransaction()
4195 pBt->inTransaction = TRANS_NONE; in btreeEndTransaction()
4202 unlockBtreeIfUnused(pBt); in btreeEndTransaction()
4245 BtShared *pBt = p->pBt; in sqlite3BtreeCommitPhaseTwo() local
4246 assert( pBt->inTransaction==TRANS_WRITE ); in sqlite3BtreeCommitPhaseTwo()
4247 assert( pBt->nTransaction>0 ); in sqlite3BtreeCommitPhaseTwo()
4248 rc = sqlite3PagerCommitPhaseTwo(pBt->pPager); in sqlite3BtreeCommitPhaseTwo()
4254 pBt->inTransaction = TRANS_READ; in sqlite3BtreeCommitPhaseTwo()
4255 btreeClearHasContent(pBt); in sqlite3BtreeCommitPhaseTwo()
4310 for(p=pBtree->pBt->pCursor; p; p=p->pNext){ in sqlite3BtreeTripAllCursors()
4335 static void btreeSetNPage(BtShared *pBt, MemPage *pPage1){ in btreeSetNPage() argument
4338 if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage); in btreeSetNPage()
4339 testcase( pBt->nPage!=(u32)nPage ); in btreeSetNPage()
4340 pBt->nPage = nPage; in btreeSetNPage()
4356 BtShared *pBt = p->pBt; in sqlite3BtreeRollback() local
4363 rc = tripCode = saveAllCursors(pBt, 0, 0); in sqlite3BtreeRollback()
4378 assert( TRANS_WRITE==pBt->inTransaction ); in sqlite3BtreeRollback()
4379 rc2 = sqlite3PagerRollback(pBt->pPager); in sqlite3BtreeRollback()
4387 if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){ in sqlite3BtreeRollback()
4388 btreeSetNPage(pBt, pPage1); in sqlite3BtreeRollback()
4391 assert( countValidCursors(pBt, 1)==0 ); in sqlite3BtreeRollback()
4392 pBt->inTransaction = TRANS_READ; in sqlite3BtreeRollback()
4393 btreeClearHasContent(pBt); in sqlite3BtreeRollback()
4421 BtShared *pBt = p->pBt; in sqlite3BtreeBeginStmt() local
4424 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); in sqlite3BtreeBeginStmt()
4427 assert( pBt->inTransaction==TRANS_WRITE ); in sqlite3BtreeBeginStmt()
4433 rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement); in sqlite3BtreeBeginStmt()
4453 BtShared *pBt = p->pBt; in sqlite3BtreeSavepoint() local
4458 rc = saveAllCursors(pBt, 0, 0); in sqlite3BtreeSavepoint()
4461 rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint); in sqlite3BtreeSavepoint()
4464 if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){ in sqlite3BtreeSavepoint()
4465 pBt->nPage = 0; in sqlite3BtreeSavepoint()
4467 rc = newDatabase(pBt); in sqlite3BtreeSavepoint()
4468 btreeSetNPage(pBt, pBt->pPage1); in sqlite3BtreeSavepoint()
4472 assert( CORRUPT_DB || pBt->nPage>0 ); in sqlite3BtreeSavepoint()
4528 BtShared *pBt = p->pBt; /* Shared b-tree handle */ in btreeCursor() local
4548 assert( pBt->pPage1 && pBt->pPage1->aData ); in btreeCursor()
4549 assert( wrFlag==0 || (pBt->btsFlags & BTS_READ_ONLY)==0 ); in btreeCursor()
4554 }else if( btreePagecount(pBt)==0 ){ in btreeCursor()
4566 pCur->pBt = pBt; in btreeCursor()
4570 for(pX=pBt->pCursor; pX; pX=pX->pNext){ in btreeCursor()
4577 pCur->pNext = pBt->pCursor; in btreeCursor()
4578 pBt->pCursor = pCur; in btreeCursor()
4582 if( pBt->pTmpSpace==0 ) return allocateTempSpace(pBt); in btreeCursor()
4646 BtShared *pBt = pCur->pBt; in sqlite3BtreeCloseCursor() local
4648 assert( pBt->pCursor!=0 ); in sqlite3BtreeCloseCursor()
4649 if( pBt->pCursor==pCur ){ in sqlite3BtreeCloseCursor()
4650 pBt->pCursor = pCur->pNext; in sqlite3BtreeCloseCursor()
4652 BtCursor *pPrev = pBt->pCursor; in sqlite3BtreeCloseCursor()
4662 unlockBtreeIfUnused(pBt); in sqlite3BtreeCloseCursor()
4665 if( (pBt->openFlags & BTREE_SINGLE) && pBt->pCursor==0 ){ in sqlite3BtreeCloseCursor()
4763 return (i64)pCur->pBt->pageSize*((i64)pCur->pPage->pgno - 1) + in sqlite3BtreeOffset()
4800 return pCur->pBt->pageSize * (sqlite3_int64)pCur->pBt->nPage; in sqlite3BtreeMaxRecordSize()
4823 BtShared *pBt, /* The database file */ in getOverflowPage() argument
4832 assert( sqlite3_mutex_held(pBt->mutex) ); in getOverflowPage()
4842 if( pBt->autoVacuum ){ in getOverflowPage()
4847 while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){ in getOverflowPage()
4851 if( iGuess<=btreePagecount(pBt) ){ in getOverflowPage()
4852 rc = ptrmapGet(pBt, iGuess, &eType, &pgno); in getOverflowPage()
4863 rc = btreeGetPage(pBt, ovfl, &pPage, (ppPage==0) ? PAGER_GET_READONLY : 0); in getOverflowPage()
4951 BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */ in accessPayload() local
4969 if( (uptr)(aPayload - pPage->aData) > (pBt->usableSize - pCur->info.nLocal) ){ in accessPayload()
4994 const u32 ovflSize = pBt->usableSize - 4; /* Bytes content per ovfl page */ in accessPayload()
5037 if( nextPage > pBt->nPage ) return SQLITE_CORRUPT_BKPT; in accessPayload()
5051 assert( pCur->pBtree->db==pBt->db ); in accessPayload()
5055 rc = getOverflowPage(pBt, nextPage, 0, &nextPage); in accessPayload()
5083 && sqlite3PagerDirectReadOk(pBt->pPager, nextPage) /* (3,4,5) */ in accessPayload()
5086 sqlite3_file *fd = sqlite3PagerFile(pBt->pPager); in accessPayload()
5091 rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1)); in accessPayload()
5092 if( rc && nextPage>pBt->nPage ) rc = SQLITE_CORRUPT_BKPT; in accessPayload()
5100 rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage, in accessPayload()
5267 return getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur, in moveToChild()
5374 rc = getAndInitPage(pCur->pBt, pCur->pgnoRoot, &pCur->pPage, in moveToRoot()
5934 if( nCell<2 || nCell/pCur->pBt->usableSize>pCur->pBt->nPage ){ in sqlite3BtreeIndexMoveto()
6240 BtShared *pBt, /* The btree */ in allocateBtreePage() argument
6254 assert( sqlite3_mutex_held(pBt->mutex) ); in allocateBtreePage()
6255 assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) ); in allocateBtreePage()
6256 pPage1 = pBt->pPage1; in allocateBtreePage()
6257 mxPage = btreePagecount(pBt); in allocateBtreePage()
6280 assert( pBt->autoVacuum ); in allocateBtreePage()
6281 rc = ptrmapGet(pBt, nearby, &eType, 0); in allocateBtreePage()
6321 rc = btreeGetUnusedPage(pBt, iTrunk, &pTrunk, 0); in allocateBtreePage()
6346 }else if( k>(u32)(pBt->usableSize/4 - 2) ){ in allocateBtreePage()
6386 rc = btreeGetUnusedPage(pBt, iNewTrunk, &pNewTrunk, 0); in allocateBtreePage()
6465 noContent = !btreeGetHasContent(pBt, *pPgno)? PAGER_GET_NOCONTENT : 0; in allocateBtreePage()
6466 rc = btreeGetUnusedPage(pBt, *pPgno, ppPage, noContent); in allocateBtreePage()
6499 int bNoContent = (0==IfNotOmitAV(pBt->bDoTruncate))? PAGER_GET_NOCONTENT:0; in allocateBtreePage()
6501 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); in allocateBtreePage()
6503 pBt->nPage++; in allocateBtreePage()
6504 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++; in allocateBtreePage()
6507 if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){ in allocateBtreePage()
6513 TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage)); in allocateBtreePage()
6514 assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) ); in allocateBtreePage()
6515 rc = btreeGetUnusedPage(pBt, pBt->nPage, &pPg, bNoContent); in allocateBtreePage()
6521 pBt->nPage++; in allocateBtreePage()
6522 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; } in allocateBtreePage()
6525 put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage); in allocateBtreePage()
6526 *pPgno = pBt->nPage; in allocateBtreePage()
6528 assert( *pPgno!=PENDING_BYTE_PAGE(pBt) ); in allocateBtreePage()
6529 rc = btreeGetUnusedPage(pBt, *pPgno, ppPage, bNoContent); in allocateBtreePage()
6539 assert( CORRUPT_DB || *pPgno!=PENDING_BYTE_PAGE(pBt) ); in allocateBtreePage()
6561 static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ in freePage2() argument
6564 MemPage *pPage1 = pBt->pPage1; /* Local reference to page 1 */ in freePage2()
6569 assert( sqlite3_mutex_held(pBt->mutex) ); in freePage2()
6573 if( iPage<2 || iPage>pBt->nPage ){ in freePage2()
6580 pPage = btreePageLookup(pBt, iPage); in freePage2()
6589 if( pBt->btsFlags & BTS_SECURE_DELETE ){ in freePage2()
6593 if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) ) in freePage2()
6598 memset(pPage->aData, 0, pPage->pBt->pageSize); in freePage2()
6605 ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc); in freePage2()
6620 if( iTrunk>btreePagecount(pBt) ){ in freePage2()
6624 rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0); in freePage2()
6630 assert( pBt->usableSize>32 ); in freePage2()
6631 if( nLeaf > (u32)pBt->usableSize/4 - 2 ){ in freePage2()
6635 if( nLeaf < (u32)pBt->usableSize/4 - 8 ){ in freePage2()
6659 if( pPage && (pBt->btsFlags & BTS_SECURE_DELETE)==0 ){ in freePage2()
6662 rc = btreeSetHasContent(pBt, iPage); in freePage2()
6675 if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){ in freePage2()
6697 *pRC = freePage2(pPage->pBt, pPage, pPage->pgno); in freePage()
6709 BtShared *pBt; in clearCellOverflow() local
6715 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in clearCellOverflow()
6724 pBt = pPage->pBt; in clearCellOverflow()
6725 assert( pBt->usableSize > 4 ); in clearCellOverflow()
6726 ovflPageSize = pBt->usableSize - 4; in clearCellOverflow()
6734 if( ovflPgno<2 || ovflPgno>btreePagecount(pBt) ){ in clearCellOverflow()
6741 rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext); in clearCellOverflow()
6745 if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) ) in clearCellOverflow()
6760 rc = freePage2(pBt, pOvfl, ovflPgno); in clearCellOverflow()
6812 BtShared *pBt; in fillInCell() local
6816 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in fillInCell()
6820 assert( pCell<pPage->aData || pCell>=&pPage->aData[pPage->pBt->pageSize] in fillInCell()
6860 n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4); in fillInCell()
6869 pBt = pPage->pBt; in fillInCell()
6905 assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize] in fillInCell()
6926 if( pBt->autoVacuum ){ in fillInCell()
6930 PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt) in fillInCell()
6934 rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0); in fillInCell()
6946 if( pBt->autoVacuum && rc==SQLITE_OK ){ in fillInCell()
6948 ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc); in fillInCell()
6965 assert( pPrior<pPage->aData || pPrior>=&pPage->aData[pBt->pageSize] in fillInCell()
6974 spaceLeft = pBt->usableSize - 4; in fillInCell()
7001 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in dropCell()
7005 assert( pPage->pBt->usableSize > (u32)(ptr-data) ); in dropCell()
7009 testcase( pc+sz==pPage->pBt->usableSize ); in dropCell()
7010 if( pc+sz > pPage->pBt->usableSize ){ in dropCell()
7023 put2byte(&data[hdr+5], pPage->pBt->usableSize); in dropCell()
7024 pPage->nFree = pPage->pBt->usableSize - pPage->hdrOffset in dropCell()
7063 assert( MX_CELL(pPage->pBt)<=10921 ); in insertCell()
7064 assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB ); in insertCell()
7067 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in insertCell()
7108 assert( idx+sz <= (int)pPage->pBt->usableSize ); in insertCell()
7129 if( pPage->pBt->autoVacuum ){ in insertCell()
7287 const int usableSize = pPg->pBt->usableSize; in rebuildPage()
7293 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager); in rebuildPage()
7441 u8 * const pEnd = &aData[pPg->pBt->usableSize]; in pageFreeArray()
7511 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager); in editPage()
7512 memcpy(pTmp, aData, pPg->pBt->usableSize); in editPage()
7582 if( SQLITE_WITHIN(pCell, aData, &aData[pPg->pBt->usableSize]) ){ in editPage()
7623 BtShared *const pBt = pPage->pBt; /* B-Tree Database */ in balance_quick() local
7628 assert( sqlite3_mutex_held(pPage->pBt->mutex) ); in balance_quick()
7640 rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0); in balance_quick()
7664 pNew->nFree = pBt->usableSize - pNew->cellOffset - 2 - szCell; in balance_quick()
7676 ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc); in balance_quick()
7730 BtShared *pBt = pPage->pBt;
7741 ptrmapGet(pBt, ovfl, &e, &n);
7746 ptrmapGet(pBt, child, &e, &n);
7752 ptrmapGet(pBt, child, &e, &n);
7779 BtShared * const pBt = pFrom->pBt; in copyNodeContent() local
7790 assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize ); in copyNodeContent()
7794 memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData); in copyNodeContent()
7866 BtShared *pBt; /* The whole database */ in balance_nonroot() local
7895 pBt = pParent->pBt; in balance_nonroot()
7896 assert( sqlite3_mutex_held(pBt->mutex) ); in balance_nonroot()
7946 rc = getAndInitPage(pBt, pgno, &apOld[i], 0, 0); in balance_nonroot()
7984 if( pBt->btsFlags & BTS_FAST_SECURE ){ in balance_nonroot()
7990 if( (iOff+szNew[i])<=(int)pBt->usableSize ){ in balance_nonroot()
8009 + pBt->pageSize; /* aSpace1 */ in balance_nonroot()
8011 assert( szScratch<=7*(int)pBt->pageSize ); in balance_nonroot()
8109 assert( sz<=pBt->maxLocal+23 ); in balance_nonroot()
8110 assert( iSpace1 <= (int)pBt->pageSize ); in balance_nonroot()
8152 usableSpace = pBt->usableSize - 12 + leafCorrection; in balance_nonroot()
8291 rc = allocateBtreePage(pBt, &pNew, &pgno, (bBulk ? 1 : pgno), 0); in balance_nonroot()
8300 ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc); in balance_nonroot()
8339 Pgno pgnoTemp = (PENDING_BYTE/pBt->pageSize)+1; in balance_nonroot()
8424 ptrmapPut(pBt, get4byte(pCell), PTRMAP_BTREE, pNew->pgno, &rc); in balance_nonroot()
8481 assert( sz<=pBt->maxLocal+23 ); in balance_nonroot()
8482 assert( iOvflSpace <= (int)pBt->pageSize ); in balance_nonroot()
8591 ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc); in balance_nonroot()
8655 BtShared *pBt = pRoot->pBt; /* The BTree */ in balance_deeper() local
8658 assert( sqlite3_mutex_held(pBt->mutex) ); in balance_deeper()
8666 rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0); in balance_deeper()
8669 ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc); in balance_deeper()
8711 for(pOther=pCur->pBt->pCursor; pOther; pOther=pOther->pNext){ in anotherValidCursor()
8745 if( pPage->nOverflow==0 && pPage->nFree*3<=(int)pCur->pBt->usableSize*2 ){ in balance()
8829 u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize); in balance()
8914 BtShared *pBt; /* Btree */ in btreeOverwriteCell() local
8934 pBt = pPage->pBt; in btreeOverwriteCell()
8935 ovflPageSize = pBt->usableSize - 4; in btreeOverwriteCell()
8937 rc = btreeGetPage(pBt, ovflPgno, &pPage, 0); in btreeOverwriteCell()
9000 BtShared *pBt = p->pBt; in sqlite3BtreeInsert() local
9019 rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur); in sqlite3BtreeInsert()
9043 && pBt->inTransaction==TRANS_WRITE in sqlite3BtreeInsert()
9044 && (pBt->btsFlags & BTS_READ_ONLY)==0 ); in sqlite3BtreeInsert()
9161 newCell = pBt->pTmpSpace; in sqlite3BtreeInsert()
9165 szNew = pBt->nPreformatSize; in sqlite3BtreeInsert()
9172 ptrmapPut(pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc); in sqlite3BtreeInsert()
9180 assert( szNew <= MX_CELL_SIZE(pBt) ); in sqlite3BtreeInsert()
9304 BtShared *pBt = pDest->pBt; in sqlite3BtreeTransferRow() local
9305 u8 *aOut = pBt->pTmpSpace; /* Pointer to next output buffer */ in sqlite3BtreeTransferRow()
9325 pBt->nPreformatSize = nIn + (aOut - pBt->pTmpSpace); in sqlite3BtreeTransferRow()
9327 Pager *pSrcPager = pSrc->pBt->pPager; in sqlite3BtreeTransferRow()
9335 pBt->nPreformatSize = nOut + (aOut - pBt->pTmpSpace); in sqlite3BtreeTransferRow()
9338 pBt->nPreformatSize += 4; in sqlite3BtreeTransferRow()
9368 nIn = pSrc->pBt->usableSize - 4; in sqlite3BtreeTransferRow()
9376 rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0); in sqlite3BtreeTransferRow()
9379 ptrmapPut(pBt, pgnoNew, PTRMAP_OVERFLOW2, pPageOut->pgno, &rc); in sqlite3BtreeTransferRow()
9387 nOut = MIN(pBt->usableSize - 4, nRem); in sqlite3BtreeTransferRow()
9418 BtShared *pBt = p->pBt; in sqlite3BtreeDelete() local
9428 assert( pBt->inTransaction==TRANS_WRITE ); in sqlite3BtreeDelete()
9429 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); in sqlite3BtreeDelete()
9476 (int)(pBt->usableSize*2/3) in sqlite3BtreeDelete()
9504 rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur); in sqlite3BtreeDelete()
9546 assert( MX_CELL_SIZE(pBt) >= nCell ); in sqlite3BtreeDelete()
9547 pTmp = pBt->pTmpSpace; in sqlite3BtreeDelete()
9574 if( pCur->pPage->nFree*3<=(int)pCur->pBt->usableSize*2 ){ in sqlite3BtreeDelete()
9627 BtShared *pBt = p->pBt; in btreeCreateTable() local
9634 assert( pBt->inTransaction==TRANS_WRITE ); in btreeCreateTable()
9635 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); in btreeCreateTable()
9638 rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); in btreeCreateTable()
9643 if( pBt->autoVacuum ){ in btreeCreateTable()
9652 invalidateAllOverflowCache(pBt); in btreeCreateTable()
9659 if( pgnoRoot>btreePagecount(pBt) ){ in btreeCreateTable()
9667 while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) || in btreeCreateTable()
9668 pgnoRoot==PENDING_BYTE_PAGE(pBt) ){ in btreeCreateTable()
9677 rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, BTALLOC_EXACT); in btreeCreateTable()
9695 rc = saveAllCursors(pBt, 0, 0); in btreeCreateTable()
9702 rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0); in btreeCreateTable()
9706 rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage); in btreeCreateTable()
9716 rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0); in btreeCreateTable()
9723 rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0); in btreeCreateTable()
9737 ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc); in btreeCreateTable()
9747 assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) ); in btreeCreateTable()
9755 rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); in btreeCreateTable()
9767 assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 ); in btreeCreateTable()
9784 BtShared *pBt, /* The BTree that contains the table */ in clearDatabasePage() argument
9796 assert( sqlite3_mutex_held(pBt->mutex) ); in clearDatabasePage()
9797 if( pgno>btreePagecount(pBt) ){ in clearDatabasePage()
9800 rc = getAndInitPage(pBt, pgno, &pPage, 0, 0); in clearDatabasePage()
9802 if( (pBt->openFlags & BTREE_SINGLE)==0 in clearDatabasePage()
9812 rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange); in clearDatabasePage()
9819 rc = clearDatabasePage(pBt, get4byte(&pPage->aData[hdr+8]), 1, pnChange); in clearDatabasePage()
9852 BtShared *pBt = p->pBt; in sqlite3BtreeClearTable() local
9856 rc = saveAllCursors(pBt, (Pgno)iTable, 0); in sqlite3BtreeClearTable()
9865 rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange); in sqlite3BtreeClearTable()
9903 BtShared *pBt = p->pBt; in btreeDropTable() local
9908 if( iTable>btreePagecount(pBt) ){ in btreeDropTable()
9914 rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0); in btreeDropTable()
9926 if( pBt->autoVacuum ){ in btreeDropTable()
9946 rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0); in btreeDropTable()
9950 rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0); in btreeDropTable()
9956 rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0); in btreeDropTable()
9971 while( maxRootPgno==PENDING_BYTE_PAGE(pBt) in btreeDropTable()
9972 || PTRMAP_ISPAGE(pBt, maxRootPgno) ){ in btreeDropTable()
9975 assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) ); in btreeDropTable()
10015 BtShared *pBt = p->pBt; in sqlite3BtreeGetMeta() local
10020 assert( pBt->pPage1 ); in sqlite3BtreeGetMeta()
10024 *pMeta = sqlite3PagerDataVersion(pBt->pPager) + p->iBDataVersion; in sqlite3BtreeGetMeta()
10026 *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]); in sqlite3BtreeGetMeta()
10033 pBt->btsFlags |= BTS_READ_ONLY; in sqlite3BtreeGetMeta()
10045 BtShared *pBt = p->pBt; in sqlite3BtreeUpdateMeta() local
10051 assert( pBt->pPage1!=0 ); in sqlite3BtreeUpdateMeta()
10052 pP1 = pBt->pPage1->aData; in sqlite3BtreeUpdateMeta()
10053 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); in sqlite3BtreeUpdateMeta()
10058 assert( pBt->autoVacuum || iMeta==0 ); in sqlite3BtreeUpdateMeta()
10060 pBt->incrVacuum = (u8)iMeta; in sqlite3BtreeUpdateMeta()
10146 return p->pBt->pPager; in sqlite3BtreePager()
10235 rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent); in checkPtrmap()
10276 if( pCheck->pBt->autoVacuum ){ in checkList()
10280 if( n>pCheck->pBt->usableSize/4-2 ){ in checkList()
10288 if( pCheck->pBt->autoVacuum ){ in checkList()
10303 if( pCheck->pBt->autoVacuum && N>0 ){ in checkList()
10408 BtShared *pBt; /* The BtShared object that owns pPage */ in checkTreePage() local
10421 pBt = pCheck->pBt; in checkTreePage()
10422 usableSize = pBt->usableSize; in checkTreePage()
10427 if( (rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0 ){ in checkTreePage()
10471 if( pBt->autoVacuum ){ in checkTreePage()
10526 if( pBt->autoVacuum ){ in checkTreePage()
10537 if( pBt->autoVacuum ){ in checkTreePage()
10676 BtShared *pBt = p->pBt; in sqlite3BtreeIntegrityCheck() local
10677 u64 savedDbFlags = pBt->db->flags; in sqlite3BtreeIntegrityCheck()
10692 assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE ); in sqlite3BtreeIntegrityCheck()
10693 VVA_ONLY( nRef = sqlite3PagerRefcount(pBt->pPager) ); in sqlite3BtreeIntegrityCheck()
10696 sCheck.pBt = pBt; in sqlite3BtreeIntegrityCheck()
10697 sCheck.pPager = pBt->pPager; in sqlite3BtreeIntegrityCheck()
10698 sCheck.nPage = btreePagecount(sCheck.pBt); in sqlite3BtreeIntegrityCheck()
10718 sCheck.heap = (u32*)sqlite3PageMalloc( pBt->pageSize ); in sqlite3BtreeIntegrityCheck()
10724 i = PENDING_BYTE_PAGE(pBt); in sqlite3BtreeIntegrityCheck()
10731 checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]), in sqlite3BtreeIntegrityCheck()
10732 get4byte(&pBt->pPage1->aData[36])); in sqlite3BtreeIntegrityCheck()
10740 if( pBt->autoVacuum ){ in sqlite3BtreeIntegrityCheck()
10744 mxInHdr = get4byte(&pBt->pPage1->aData[52]); in sqlite3BtreeIntegrityCheck()
10751 }else if( get4byte(&pBt->pPage1->aData[64])!=0 ){ in sqlite3BtreeIntegrityCheck()
10758 testcase( pBt->db->flags & SQLITE_CellSizeCk ); in sqlite3BtreeIntegrityCheck()
10759 pBt->db->flags &= ~(u64)SQLITE_CellSizeCk; in sqlite3BtreeIntegrityCheck()
10764 if( pBt->autoVacuum && aRoot[i]>1 && !bPartial ){ in sqlite3BtreeIntegrityCheck()
10770 pBt->db->flags = savedDbFlags; in sqlite3BtreeIntegrityCheck()
10785 (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){ in sqlite3BtreeIntegrityCheck()
10789 (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ in sqlite3BtreeIntegrityCheck()
10808 assert( nRef==sqlite3PagerRefcount(pBt->pPager) ); in sqlite3BtreeIntegrityCheck()
10822 assert( p->pBt->pPager!=0 ); in sqlite3BtreeGetFilename()
10823 return sqlite3PagerFilename(p->pBt->pPager, 1); in sqlite3BtreeGetFilename()
10835 assert( p->pBt->pPager!=0 ); in sqlite3BtreeGetJournalname()
10836 return sqlite3PagerJournalname(p->pBt->pPager); in sqlite3BtreeGetJournalname()
10860 BtShared *pBt = p->pBt; in sqlite3BtreeCheckpoint() local
10862 if( pBt->inTransaction!=TRANS_NONE ){ in sqlite3BtreeCheckpoint()
10865 rc = sqlite3PagerCheckpoint(pBt->pPager, p->db, eMode, pnLog, pnCkpt); in sqlite3BtreeCheckpoint()
10903 BtShared *pBt = p->pBt; in sqlite3BtreeSchema() local
10905 if( !pBt->pSchema && nBytes ){ in sqlite3BtreeSchema()
10906 pBt->pSchema = sqlite3DbMallocZero(0, nBytes); in sqlite3BtreeSchema()
10907 pBt->xFreeSchema = xFree; in sqlite3BtreeSchema()
10910 return pBt->pSchema; in sqlite3BtreeSchema()
10988 VVA_ONLY(rc =) saveAllCursors(pCsr->pBt, pCsr->pgnoRoot, pCsr); in sqlite3BtreePutData()
11001 assert( (pCsr->pBt->btsFlags & BTS_READ_ONLY)==0 in sqlite3BtreePutData()
11002 && pCsr->pBt->inTransaction==TRANS_WRITE ); in sqlite3BtreePutData()
11025 BtShared *pBt = pBtree->pBt; in sqlite3BtreeSetVersion() local
11033 pBt->btsFlags &= ~BTS_NO_WAL; in sqlite3BtreeSetVersion()
11034 if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL; in sqlite3BtreeSetVersion()
11038 u8 *aData = pBt->pPage1->aData; in sqlite3BtreeSetVersion()
11042 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); in sqlite3BtreeSetVersion()
11051 pBt->btsFlags &= ~BTS_NO_WAL; in sqlite3BtreeSetVersion()
11067 return (p->pBt->btsFlags & BTS_READ_ONLY)!=0; in sqlite3BtreeIsReadonly()
11090 return p->pBt->nRef; in sqlite3BtreeConnectionCount()