| OLD | NEW |
| (Empty) |
| 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 ** @(#) $Id: pager.h,v 1.104 2009/07/24 19:01:19 drh Exp $ | |
| 17 */ | |
| 18 | |
| 19 #ifndef _PAGER_H_ | |
| 20 #define _PAGER_H_ | |
| 21 | |
| 22 /* | |
| 23 ** Default maximum size for persistent journal files. A negative | |
| 24 ** value means no limit. This value may be overridden using the | |
| 25 ** sqlite3PagerJournalSizeLimit() API. See also "PRAGMA journal_size_limit". | |
| 26 */ | |
| 27 #ifndef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT | |
| 28 #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT -1 | |
| 29 #endif | |
| 30 | |
| 31 /* | |
| 32 ** The type used to represent a page number. The first page in a file | |
| 33 ** is called page 1. 0 is used to represent "not a page". | |
| 34 */ | |
| 35 typedef u32 Pgno; | |
| 36 | |
| 37 /* | |
| 38 ** Each open file is managed by a separate instance of the "Pager" structure. | |
| 39 */ | |
| 40 typedef struct Pager Pager; | |
| 41 | |
| 42 /* | |
| 43 ** Handle type for pages. | |
| 44 */ | |
| 45 typedef struct PgHdr DbPage; | |
| 46 | |
| 47 /* | |
| 48 ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is | |
| 49 ** reserved for working around a windows/posix incompatibility). It is | |
| 50 ** used in the journal to signify that the remainder of the journal file | |
| 51 ** is devoted to storing a master journal name - there are no more pages to | |
| 52 ** roll back. See comments for function writeMasterJournal() in pager.c | |
| 53 ** for details. | |
| 54 */ | |
| 55 #define PAGER_MJ_PGNO(x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1)) | |
| 56 | |
| 57 /* | |
| 58 ** Allowed values for the flags parameter to sqlite3PagerOpen(). | |
| 59 ** | |
| 60 ** NOTE: These values must match the corresponding BTREE_ values in btree.h. | |
| 61 */ | |
| 62 #define PAGER_OMIT_JOURNAL 0x0001 /* Do not use a rollback journal */ | |
| 63 #define PAGER_NO_READLOCK 0x0002 /* Omit readlocks on readonly files */ | |
| 64 | |
| 65 /* | |
| 66 ** Valid values for the second argument to sqlite3PagerLockingMode(). | |
| 67 */ | |
| 68 #define PAGER_LOCKINGMODE_QUERY -1 | |
| 69 #define PAGER_LOCKINGMODE_NORMAL 0 | |
| 70 #define PAGER_LOCKINGMODE_EXCLUSIVE 1 | |
| 71 | |
| 72 /* | |
| 73 ** Valid values for the second argument to sqlite3PagerJournalMode(). | |
| 74 */ | |
| 75 #define PAGER_JOURNALMODE_QUERY -1 | |
| 76 #define PAGER_JOURNALMODE_DELETE 0 /* Commit by deleting journal file */ | |
| 77 #define PAGER_JOURNALMODE_PERSIST 1 /* Commit by zeroing journal header */ | |
| 78 #define PAGER_JOURNALMODE_OFF 2 /* Journal omitted. */ | |
| 79 #define PAGER_JOURNALMODE_TRUNCATE 3 /* Commit by truncating journal */ | |
| 80 #define PAGER_JOURNALMODE_MEMORY 4 /* In-memory journal file */ | |
| 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*, u16*, int); | |
| 104 int sqlite3PagerMaxPageCount(Pager*, int); | |
| 105 void sqlite3PagerSetCachesize(Pager*, int); | |
| 106 void sqlite3PagerSetSafetyLevel(Pager*,int,int); | |
| 107 int sqlite3PagerLockingMode(Pager *, int); | |
| 108 int sqlite3PagerJournalMode(Pager *, int); | |
| 109 i64 sqlite3PagerJournalSizeLimit(Pager *, i64); | |
| 110 sqlite3_backup **sqlite3PagerBackupPtr(Pager*); | |
| 111 | |
| 112 /* Functions used to obtain and release page references. */ | |
| 113 int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag); | |
| 114 #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0) | |
| 115 DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno); | |
| 116 void sqlite3PagerRef(DbPage*); | |
| 117 void sqlite3PagerUnref(DbPage*); | |
| 118 | |
| 119 /* Operations on page references. */ | |
| 120 int sqlite3PagerWrite(DbPage*); | |
| 121 void sqlite3PagerDontWrite(DbPage*); | |
| 122 int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int); | |
| 123 int sqlite3PagerPageRefcount(DbPage*); | |
| 124 void *sqlite3PagerGetData(DbPage *); | |
| 125 void *sqlite3PagerGetExtra(DbPage *); | |
| 126 | |
| 127 /* Functions used to manage pager transactions and savepoints. */ | |
| 128 int sqlite3PagerPagecount(Pager*, int*); | |
| 129 int sqlite3PagerBegin(Pager*, int exFlag, int); | |
| 130 int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int); | |
| 131 int sqlite3PagerSync(Pager *pPager); | |
| 132 int sqlite3PagerCommitPhaseTwo(Pager*); | |
| 133 int sqlite3PagerRollback(Pager*); | |
| 134 int sqlite3PagerOpenSavepoint(Pager *pPager, int n); | |
| 135 int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint); | |
| 136 int sqlite3PagerSharedLock(Pager *pPager); | |
| 137 | |
| 138 /* Functions used to query pager state and configuration. */ | |
| 139 u8 sqlite3PagerIsreadonly(Pager*); | |
| 140 int sqlite3PagerRefcount(Pager*); | |
| 141 const char *sqlite3PagerFilename(Pager*); | |
| 142 const sqlite3_vfs *sqlite3PagerVfs(Pager*); | |
| 143 sqlite3_file *sqlite3PagerFile(Pager*); | |
| 144 const char *sqlite3PagerJournalname(Pager*); | |
| 145 int sqlite3PagerNosync(Pager*); | |
| 146 /* This function is for preload-cache.patch for Chromium: */ | |
| 147 int sqlite3PagerLoadall(Pager*); | |
| 148 void *sqlite3PagerTempSpace(Pager*); | |
| 149 int sqlite3PagerIsMemdb(Pager*); | |
| 150 | |
| 151 /* Functions used to truncate the database file. */ | |
| 152 void sqlite3PagerTruncateImage(Pager*,Pgno); | |
| 153 | |
| 154 /* Functions to support testing and debugging. */ | |
| 155 #if !defined(NDEBUG) || defined(SQLITE_TEST) | |
| 156 Pgno sqlite3PagerPagenumber(DbPage*); | |
| 157 int sqlite3PagerIswriteable(DbPage*); | |
| 158 #endif | |
| 159 #ifdef SQLITE_TEST | |
| 160 int *sqlite3PagerStats(Pager*); | |
| 161 void sqlite3PagerRefdump(Pager*); | |
| 162 void disable_simulated_io_errors(void); | |
| 163 void enable_simulated_io_errors(void); | |
| 164 #else | |
| 165 # define disable_simulated_io_errors() | |
| 166 # define enable_simulated_io_errors() | |
| 167 #endif | |
| 168 | |
| 169 #endif /* _PAGER_H_ */ | |
| OLD | NEW |