| 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 SQLITE_PAGER_H | 
| 18 | #define  | 
| 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  ; | 
| 39 |  | 
| 40 | /* | 
| 41 | ** Handle type for pages. | 
| 42 | */ | 
| 43 | typedef struct PgHdr DbPage; | 
| 44 |  | 
| 45 | /* | 
| 46 | ** Page number PAGER_SJ_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 super-journal name - there are no more pages to | 
| 50 | ** roll back. See comments for function writeSuperJournal() in pager.c  | 
| 51 | ** for details. | 
| 52 | */ | 
| 53 | #define (x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1)) | 
| 54 | #define (x)          ((x)->lckPgno) | 
| 55 |  | 
| 56 | /* | 
| 57 | ** Allowed values for the flags parameter to sqlite3PagerOpen(). | 
| 58 | ** | 
| 59 | ** NOTE: These values must match the corresponding BTREE_ values in btree.h. | 
| 60 | */ | 
| 61 | #define   0x0001    /* Do not use a rollback journal */ | 
| 62 | #define         0x0002    /* In-memory database */ | 
| 63 |  | 
| 64 | /* | 
| 65 | ** Valid values for the second argument to sqlite3PagerLockingMode(). | 
| 66 | */ | 
| 67 | #define       -1 | 
| 68 | #define       0 | 
| 69 | #define    1 | 
| 70 |  | 
| 71 | /* | 
| 72 | ** Numeric constants that encode the journalmode. | 
| 73 | ** | 
| 74 | ** The numeric values encoded here (other than PAGER_JOURNALMODE_QUERY) | 
| 75 | ** are exposed in the API via the "PRAGMA journal_mode" command and | 
| 76 | ** therefore cannot be changed without a compatibility break. | 
| 77 | */ | 
| 78 | #define      (-1)  /* Query the value of journalmode */ | 
| 79 | #define       0   /* Commit by deleting journal file */ | 
| 80 | #define      1   /* Commit by zeroing journal header */ | 
| 81 | #define          2   /* Journal omitted.  */ | 
| 82 | #define     3   /* Commit by truncating journal */ | 
| 83 | #define       4   /* In-memory journal file */ | 
| 84 | #define          5   /* Use write-ahead logging */ | 
| 85 |  | 
| 86 | /* | 
| 87 | ** Flags that make up the mask passed to sqlite3PagerGet(). | 
| 88 | */ | 
| 89 | #define      0x01  /* Do not load data from disk */ | 
| 90 | #define       0x02  /* Read-only page is acceptable */ | 
| 91 |  | 
| 92 | /* | 
| 93 | ** Flags for sqlite3PagerSetFlags() | 
| 94 | ** | 
| 95 | ** Value constraints (enforced via assert()): | 
| 96 | **    PAGER_FULLFSYNC      == SQLITE_FullFSync | 
| 97 | **    PAGER_CKPT_FULLFSYNC == SQLITE_CkptFullFSync | 
| 98 | **    PAGER_CACHE_SPILL    == SQLITE_CacheSpill | 
| 99 | */ | 
| 100 | #define        0x01  /* PRAGMA synchronous=OFF */ | 
| 101 | #define     0x02  /* PRAGMA synchronous=NORMAL */ | 
| 102 | #define       0x03  /* PRAGMA synchronous=FULL */ | 
| 103 | #define      0x04  /* PRAGMA synchronous=EXTRA */ | 
| 104 | #define       0x07  /* Mask for four values above */ | 
| 105 | #define              0x08  /* PRAGMA fullfsync=ON */ | 
| 106 | #define         0x10  /* PRAGMA checkpoint_fullfsync=ON */ | 
| 107 | #define             0x20  /* PRAGMA cache_spill=ON */ | 
| 108 | #define             0x38  /* All above except SYNCHRONOUS */ | 
| 109 |  | 
| 110 | /* | 
| 111 | ** The remainder of this file contains the declarations of the functions | 
| 112 | ** that make up the Pager sub-system API. See source code comments for  | 
| 113 | ** a detailed description of each routine. | 
| 114 | */ | 
| 115 |  | 
| 116 | /* Open and close a Pager connection. */  | 
| 117 | int ( | 
| 118 |   sqlite3_vfs*, | 
| 119 |   Pager **, | 
| 120 |   const char*, | 
| 121 |   int, | 
| 122 |   int, | 
| 123 |   int, | 
| 124 |   void(*)(DbPage*) | 
| 125 | ); | 
| 126 | int (Pager *, sqlite3*); | 
| 127 | int (Pager*, int, unsigned char*); | 
| 128 |  | 
| 129 | /* Functions used to configure a Pager object. */ | 
| 130 | void sqlite3PagerSetBusyHandler(Pager*, int(*)(void *), void *); | 
| 131 | int (Pager*, u32*, int); | 
| 132 | Pgno (Pager*, Pgno); | 
| 133 | void (Pager*, int); | 
| 134 | int (Pager*, int); | 
| 135 | void (Pager *, sqlite3_int64); | 
| 136 | void (Pager*); | 
| 137 | void (Pager*,unsigned); | 
| 138 | int (Pager *, int); | 
| 139 | int (Pager *, int); | 
| 140 | int (Pager*); | 
| 141 | int (Pager*); | 
| 142 | i64 (Pager *, i64); | 
| 143 | sqlite3_backup **(Pager*); | 
| 144 | int (Pager*); | 
| 145 |  | 
| 146 | /* Functions used to obtain and release page references. */  | 
| 147 | int (Pager *, Pgno pgno, DbPage **ppPage, int clrFlag); | 
| 148 | DbPage *(Pager *, Pgno pgno); | 
| 149 | void (DbPage*); | 
| 150 | void (DbPage*); | 
| 151 | void (DbPage*); | 
| 152 | void (DbPage*); | 
| 153 |  | 
| 154 | /* Operations on page references. */ | 
| 155 | int (DbPage*); | 
| 156 | void (DbPage*); | 
| 157 | int (Pager*,DbPage*,Pgno,int); | 
| 158 | int (DbPage*); | 
| 159 | void *(DbPage *);  | 
| 160 | void *(DbPage *);  | 
| 161 |  | 
| 162 | /* Functions used to manage pager transactions and savepoints. */ | 
| 163 | void (Pager*, int*); | 
| 164 | int (Pager*, int exFlag, int); | 
| 165 | int (Pager*,const char *zSuper, int); | 
| 166 | int (Pager*); | 
| 167 | int (Pager *, const char *zSuper); | 
| 168 | int (Pager*); | 
| 169 | int (Pager*); | 
| 170 | int (Pager *, int n); | 
| 171 | int (Pager *, int op, int iSavepoint); | 
| 172 | int (Pager *); | 
| 173 |  | 
| 174 | #ifndef SQLITE_OMIT_WAL | 
| 175 |   int (Pager *, sqlite3*, int, int*, int*); | 
| 176 |   int (Pager *); | 
| 177 |   int (Pager *); | 
| 178 |   int (Pager *, int *pisOpen); | 
| 179 |   int (Pager *, sqlite3*); | 
| 180 | # ifdef SQLITE_ENABLE_SNAPSHOT | 
| 181 |   int sqlite3PagerSnapshotGet(Pager*, sqlite3_snapshot **ppSnapshot); | 
| 182 |   int sqlite3PagerSnapshotOpen(Pager*, sqlite3_snapshot *pSnapshot); | 
| 183 |   int sqlite3PagerSnapshotRecover(Pager *pPager); | 
| 184 |   int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pSnapshot); | 
| 185 |   void sqlite3PagerSnapshotUnlock(Pager *pPager); | 
| 186 | # endif | 
| 187 | #endif | 
| 188 |  | 
| 189 | #if !defined(SQLITE_OMIT_WAL) && defined(SQLITE_ENABLE_SETLK_TIMEOUT) | 
| 190 |   int sqlite3PagerWalWriteLock(Pager*, int); | 
| 191 |   void sqlite3PagerWalDb(Pager*, sqlite3*); | 
| 192 | #else | 
| 193 | # define (y,z) SQLITE_OK | 
| 194 | # define (x,y) | 
| 195 | #endif | 
| 196 |  | 
| 197 | #ifdef SQLITE_DIRECT_OVERFLOW_READ | 
| 198 |   int sqlite3PagerDirectReadOk(Pager *pPager, Pgno pgno); | 
| 199 | #endif | 
| 200 |  | 
| 201 | #ifdef SQLITE_ENABLE_ZIPVFS | 
| 202 |   int sqlite3PagerWalFramesize(Pager *pPager); | 
| 203 | #endif | 
| 204 |  | 
| 205 | /* Functions used to query pager state and configuration. */ | 
| 206 | u8 (Pager*); | 
| 207 | u32 (Pager*); | 
| 208 | #ifdef SQLITE_DEBUG | 
| 209 |   int (Pager*); | 
| 210 | #endif | 
| 211 | int (Pager*); | 
| 212 | const char *(const Pager*, int); | 
| 213 | sqlite3_vfs *(Pager*); | 
| 214 | sqlite3_file *(Pager*); | 
| 215 | sqlite3_file *(Pager*); | 
| 216 | const char *(Pager*); | 
| 217 | void *(Pager*); | 
| 218 | int (Pager*); | 
| 219 | void (Pager *, int, int, int *); | 
| 220 | void (Pager*); | 
| 221 | int sqlite3SectorSize(sqlite3_file *); | 
| 222 |  | 
| 223 | /* Functions used to truncate the database file. */ | 
| 224 | void (Pager*,Pgno); | 
| 225 |  | 
| 226 | void (DbPage*, Pgno, u16); | 
| 227 |  | 
| 228 | /* Functions to support testing and debugging. */ | 
| 229 | #if !defined(NDEBUG) || defined(SQLITE_TEST) | 
| 230 |   Pgno (DbPage*); | 
| 231 |   int (DbPage*); | 
| 232 | #endif | 
| 233 | #ifdef SQLITE_TEST | 
| 234 |   int *sqlite3PagerStats(Pager*); | 
| 235 |   void sqlite3PagerRefdump(Pager*); | 
| 236 |   void disable_simulated_io_errors(void); | 
| 237 |   void enable_simulated_io_errors(void); | 
| 238 | #else | 
| 239 | # define disable_simulated_io_errors() | 
| 240 | # define enable_simulated_io_errors() | 
| 241 | #endif | 
| 242 |  | 
| 243 | #endif /* SQLITE_PAGER_H */ | 
| 244 |  |