Annotation of embedaddon/sqlite3/src/pcache.h, revision 1.1
1.1 ! misho 1: /*
! 2: ** 2008 August 05
! 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 header file defines the interface that the sqlite page cache
! 13: ** subsystem.
! 14: */
! 15:
! 16: #ifndef _PCACHE_H_
! 17:
! 18: typedef struct PgHdr PgHdr;
! 19: typedef struct PCache PCache;
! 20:
! 21: /*
! 22: ** Every page in the cache is controlled by an instance of the following
! 23: ** structure.
! 24: */
! 25: struct PgHdr {
! 26: sqlite3_pcache_page *pPage; /* Pcache object page handle */
! 27: void *pData; /* Page data */
! 28: void *pExtra; /* Extra content */
! 29: PgHdr *pDirty; /* Transient list of dirty pages */
! 30: Pgno pgno; /* Page number for this page */
! 31: Pager *pPager; /* The pager this page is part of */
! 32: #ifdef SQLITE_CHECK_PAGES
! 33: u32 pageHash; /* Hash of page content */
! 34: #endif
! 35: u16 flags; /* PGHDR flags defined below */
! 36:
! 37: /**********************************************************************
! 38: ** Elements above are public. All that follows is private to pcache.c
! 39: ** and should not be accessed by other modules.
! 40: */
! 41: i16 nRef; /* Number of users of this page */
! 42: PCache *pCache; /* Cache that owns this page */
! 43:
! 44: PgHdr *pDirtyNext; /* Next element in list of dirty pages */
! 45: PgHdr *pDirtyPrev; /* Previous element in list of dirty pages */
! 46: };
! 47:
! 48: /* Bit values for PgHdr.flags */
! 49: #define PGHDR_DIRTY 0x002 /* Page has changed */
! 50: #define PGHDR_NEED_SYNC 0x004 /* Fsync the rollback journal before
! 51: ** writing this page to the database */
! 52: #define PGHDR_NEED_READ 0x008 /* Content is unread */
! 53: #define PGHDR_REUSE_UNLIKELY 0x010 /* A hint that reuse is unlikely */
! 54: #define PGHDR_DONT_WRITE 0x020 /* Do not write content to disk */
! 55:
! 56: /* Initialize and shutdown the page cache subsystem */
! 57: int sqlite3PcacheInitialize(void);
! 58: void sqlite3PcacheShutdown(void);
! 59:
! 60: /* Page cache buffer management:
! 61: ** These routines implement SQLITE_CONFIG_PAGECACHE.
! 62: */
! 63: void sqlite3PCacheBufferSetup(void *, int sz, int n);
! 64:
! 65: /* Create a new pager cache.
! 66: ** Under memory stress, invoke xStress to try to make pages clean.
! 67: ** Only clean and unpinned pages can be reclaimed.
! 68: */
! 69: void sqlite3PcacheOpen(
! 70: int szPage, /* Size of every page */
! 71: int szExtra, /* Extra space associated with each page */
! 72: int bPurgeable, /* True if pages are on backing store */
! 73: int (*xStress)(void*, PgHdr*), /* Call to try to make pages clean */
! 74: void *pStress, /* Argument to xStress */
! 75: PCache *pToInit /* Preallocated space for the PCache */
! 76: );
! 77:
! 78: /* Modify the page-size after the cache has been created. */
! 79: void sqlite3PcacheSetPageSize(PCache *, int);
! 80:
! 81: /* Return the size in bytes of a PCache object. Used to preallocate
! 82: ** storage space.
! 83: */
! 84: int sqlite3PcacheSize(void);
! 85:
! 86: /* One release per successful fetch. Page is pinned until released.
! 87: ** Reference counted.
! 88: */
! 89: int sqlite3PcacheFetch(PCache*, Pgno, int createFlag, PgHdr**);
! 90: void sqlite3PcacheRelease(PgHdr*);
! 91:
! 92: void sqlite3PcacheDrop(PgHdr*); /* Remove page from cache */
! 93: void sqlite3PcacheMakeDirty(PgHdr*); /* Make sure page is marked dirty */
! 94: void sqlite3PcacheMakeClean(PgHdr*); /* Mark a single page as clean */
! 95: void sqlite3PcacheCleanAll(PCache*); /* Mark all dirty list pages as clean */
! 96:
! 97: /* Change a page number. Used by incr-vacuum. */
! 98: void sqlite3PcacheMove(PgHdr*, Pgno);
! 99:
! 100: /* Remove all pages with pgno>x. Reset the cache if x==0 */
! 101: void sqlite3PcacheTruncate(PCache*, Pgno x);
! 102:
! 103: /* Get a list of all dirty pages in the cache, sorted by page number */
! 104: PgHdr *sqlite3PcacheDirtyList(PCache*);
! 105:
! 106: /* Reset and close the cache object */
! 107: void sqlite3PcacheClose(PCache*);
! 108:
! 109: /* Clear flags from pages of the page cache */
! 110: void sqlite3PcacheClearSyncFlags(PCache *);
! 111:
! 112: /* Discard the contents of the cache */
! 113: void sqlite3PcacheClear(PCache*);
! 114:
! 115: /* Return the total number of outstanding page references */
! 116: int sqlite3PcacheRefCount(PCache*);
! 117:
! 118: /* Increment the reference count of an existing page */
! 119: void sqlite3PcacheRef(PgHdr*);
! 120:
! 121: int sqlite3PcachePageRefcount(PgHdr*);
! 122:
! 123: /* Return the total number of pages stored in the cache */
! 124: int sqlite3PcachePagecount(PCache*);
! 125:
! 126: #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
! 127: /* Iterate through all dirty pages currently stored in the cache. This
! 128: ** interface is only available if SQLITE_CHECK_PAGES is defined when the
! 129: ** library is built.
! 130: */
! 131: void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *));
! 132: #endif
! 133:
! 134: /* Set and get the suggested cache-size for the specified pager-cache.
! 135: **
! 136: ** If no global maximum is configured, then the system attempts to limit
! 137: ** the total number of pages cached by purgeable pager-caches to the sum
! 138: ** of the suggested cache-sizes.
! 139: */
! 140: void sqlite3PcacheSetCachesize(PCache *, int);
! 141: #ifdef SQLITE_TEST
! 142: int sqlite3PcacheGetCachesize(PCache *);
! 143: #endif
! 144:
! 145: /* Free up as much memory as possible from the page cache */
! 146: void sqlite3PcacheShrink(PCache*);
! 147:
! 148: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
! 149: /* Try to return memory used by the pcache module to the main memory heap */
! 150: int sqlite3PcacheReleaseMemory(int);
! 151: #endif
! 152:
! 153: #ifdef SQLITE_TEST
! 154: void sqlite3PcacheStats(int*,int*,int*,int*);
! 155: #endif
! 156:
! 157: void sqlite3PCacheSetDefault(void);
! 158:
! 159: #endif /* _PCACHE_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>