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>