File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / src / pager.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:17 2012 UTC (12 years, 8 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: /*
    2: ** 2001 September 15
    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.  The page cache subsystem reads and writes a file a page
   14: ** at a time and provides a journal for rollback.
   15: */
   16: 
   17: #ifndef _PAGER_H_
   18: #define _PAGER_H_
   19: 
   20: /*
   21: ** Default maximum size for persistent journal files. A negative 
   22: ** value means no limit. This value may be overridden using the 
   23: ** sqlite3PagerJournalSizeLimit() API. See also "PRAGMA journal_size_limit".
   24: */
   25: #ifndef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
   26:   #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT -1
   27: #endif
   28: 
   29: /*
   30: ** The type used to represent a page number.  The first page in a file
   31: ** is called page 1.  0 is used to represent "not a page".
   32: */
   33: typedef u32 Pgno;
   34: 
   35: /*
   36: ** Each open file is managed by a separate instance of the "Pager" structure.
   37: */
   38: typedef struct Pager Pager;
   39: 
   40: /*
   41: ** Handle type for pages.
   42: */
   43: typedef struct PgHdr DbPage;
   44: 
   45: /*
   46: ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is
   47: ** reserved for working around a windows/posix incompatibility). It is
   48: ** used in the journal to signify that the remainder of the journal file 
   49: ** is devoted to storing a master journal name - there are no more pages to
   50: ** roll back. See comments for function writeMasterJournal() in pager.c 
   51: ** for details.
   52: */
   53: #define PAGER_MJ_PGNO(x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1))
   54: 
   55: /*
   56: ** Allowed values for the flags parameter to sqlite3PagerOpen().
   57: **
   58: ** NOTE: These values must match the corresponding BTREE_ values in btree.h.
   59: */
   60: #define PAGER_OMIT_JOURNAL  0x0001    /* Do not use a rollback journal */
   61: #define PAGER_NO_READLOCK   0x0002    /* Omit readlocks on readonly files */
   62: #define PAGER_MEMORY        0x0004    /* In-memory database */
   63: 
   64: /*
   65: ** Valid values for the second argument to sqlite3PagerLockingMode().
   66: */
   67: #define PAGER_LOCKINGMODE_QUERY      -1
   68: #define PAGER_LOCKINGMODE_NORMAL      0
   69: #define PAGER_LOCKINGMODE_EXCLUSIVE   1
   70: 
   71: /*
   72: ** Numeric constants that encode the journalmode.  
   73: */
   74: #define PAGER_JOURNALMODE_QUERY     (-1)  /* Query the value of journalmode */
   75: #define PAGER_JOURNALMODE_DELETE      0   /* Commit by deleting journal file */
   76: #define PAGER_JOURNALMODE_PERSIST     1   /* Commit by zeroing journal header */
   77: #define PAGER_JOURNALMODE_OFF         2   /* Journal omitted.  */
   78: #define PAGER_JOURNALMODE_TRUNCATE    3   /* Commit by truncating journal */
   79: #define PAGER_JOURNALMODE_MEMORY      4   /* In-memory journal file */
   80: #define PAGER_JOURNALMODE_WAL         5   /* Use write-ahead logging */
   81: 
   82: /*
   83: ** The remainder of this file contains the declarations of the functions
   84: ** that make up the Pager sub-system API. See source code comments for 
   85: ** a detailed description of each routine.
   86: */
   87: 
   88: /* Open and close a Pager connection. */ 
   89: int sqlite3PagerOpen(
   90:   sqlite3_vfs*,
   91:   Pager **ppPager,
   92:   const char*,
   93:   int,
   94:   int,
   95:   int,
   96:   void(*)(DbPage*)
   97: );
   98: int sqlite3PagerClose(Pager *pPager);
   99: int sqlite3PagerReadFileheader(Pager*, int, unsigned char*);
  100: 
  101: /* Functions used to configure a Pager object. */
  102: void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *);
  103: int sqlite3PagerSetPagesize(Pager*, u32*, int);
  104: int sqlite3PagerMaxPageCount(Pager*, int);
  105: void sqlite3PagerSetCachesize(Pager*, int);
  106: void sqlite3PagerShrink(Pager*);
  107: void sqlite3PagerSetSafetyLevel(Pager*,int,int,int);
  108: int sqlite3PagerLockingMode(Pager *, int);
  109: int sqlite3PagerSetJournalMode(Pager *, int);
  110: int sqlite3PagerGetJournalMode(Pager*);
  111: int sqlite3PagerOkToChangeJournalMode(Pager*);
  112: i64 sqlite3PagerJournalSizeLimit(Pager *, i64);
  113: sqlite3_backup **sqlite3PagerBackupPtr(Pager*);
  114: 
  115: /* Functions used to obtain and release page references. */ 
  116: int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag);
  117: #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0)
  118: DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
  119: void sqlite3PagerRef(DbPage*);
  120: void sqlite3PagerUnref(DbPage*);
  121: 
  122: /* Operations on page references. */
  123: int sqlite3PagerWrite(DbPage*);
  124: void sqlite3PagerDontWrite(DbPage*);
  125: int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int);
  126: int sqlite3PagerPageRefcount(DbPage*);
  127: void *sqlite3PagerGetData(DbPage *); 
  128: void *sqlite3PagerGetExtra(DbPage *); 
  129: 
  130: /* Functions used to manage pager transactions and savepoints. */
  131: void sqlite3PagerPagecount(Pager*, int*);
  132: int sqlite3PagerBegin(Pager*, int exFlag, int);
  133: int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int);
  134: int sqlite3PagerExclusiveLock(Pager*);
  135: int sqlite3PagerSync(Pager *pPager);
  136: int sqlite3PagerCommitPhaseTwo(Pager*);
  137: int sqlite3PagerRollback(Pager*);
  138: int sqlite3PagerOpenSavepoint(Pager *pPager, int n);
  139: int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint);
  140: int sqlite3PagerSharedLock(Pager *pPager);
  141: 
  142: int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*);
  143: int sqlite3PagerWalSupported(Pager *pPager);
  144: int sqlite3PagerWalCallback(Pager *pPager);
  145: int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen);
  146: int sqlite3PagerCloseWal(Pager *pPager);
  147: 
  148: /* Functions used to query pager state and configuration. */
  149: u8 sqlite3PagerIsreadonly(Pager*);
  150: int sqlite3PagerRefcount(Pager*);
  151: int sqlite3PagerMemUsed(Pager*);
  152: const char *sqlite3PagerFilename(Pager*);
  153: const sqlite3_vfs *sqlite3PagerVfs(Pager*);
  154: sqlite3_file *sqlite3PagerFile(Pager*);
  155: const char *sqlite3PagerJournalname(Pager*);
  156: int sqlite3PagerNosync(Pager*);
  157: void *sqlite3PagerTempSpace(Pager*);
  158: int sqlite3PagerIsMemdb(Pager*);
  159: void sqlite3PagerCacheStat(Pager *, int, int, int *);
  160: void sqlite3PagerClearCache(Pager *);
  161: 
  162: /* Functions used to truncate the database file. */
  163: void sqlite3PagerTruncateImage(Pager*,Pgno);
  164: 
  165: #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
  166: void *sqlite3PagerCodec(DbPage *);
  167: #endif
  168: 
  169: /* Functions to support testing and debugging. */
  170: #if !defined(NDEBUG) || defined(SQLITE_TEST)
  171:   Pgno sqlite3PagerPagenumber(DbPage*);
  172:   int sqlite3PagerIswriteable(DbPage*);
  173: #endif
  174: #ifdef SQLITE_TEST
  175:   int *sqlite3PagerStats(Pager*);
  176:   void sqlite3PagerRefdump(Pager*);
  177:   void disable_simulated_io_errors(void);
  178:   void enable_simulated_io_errors(void);
  179: #else
  180: # define disable_simulated_io_errors()
  181: # define enable_simulated_io_errors()
  182: #endif
  183: 
  184: #endif /* _PAGER_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>