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 | |
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_MEMORY 0x0002 /* In-memory database */ | |
62 | |
63 /* | |
64 ** Valid values for the second argument to sqlite3PagerLockingMode(). | |
65 */ | |
66 #define PAGER_LOCKINGMODE_QUERY -1 | |
67 #define PAGER_LOCKINGMODE_NORMAL 0 | |
68 #define PAGER_LOCKINGMODE_EXCLUSIVE 1 | |
69 | |
70 /* | |
71 ** Numeric constants that encode the journalmode. | |
72 */ | |
73 #define PAGER_JOURNALMODE_QUERY (-1) /* Query the value of journalmode */ | |
74 #define PAGER_JOURNALMODE_DELETE 0 /* Commit by deleting journal file */ | |
75 #define PAGER_JOURNALMODE_PERSIST 1 /* Commit by zeroing journal header */ | |
76 #define PAGER_JOURNALMODE_OFF 2 /* Journal omitted. */ | |
77 #define PAGER_JOURNALMODE_TRUNCATE 3 /* Commit by truncating journal */ | |
78 #define PAGER_JOURNALMODE_MEMORY 4 /* In-memory journal file */ | |
79 #define PAGER_JOURNALMODE_WAL 5 /* Use write-ahead logging */ | |
80 | |
81 /* | |
82 ** Flags that make up the mask passed to sqlite3PagerAcquire(). | |
83 */ | |
84 #define PAGER_GET_NOCONTENT 0x01 /* Do not load data from disk */ | |
85 #define PAGER_GET_READONLY 0x02 /* Read-only page is acceptable */ | |
86 | |
87 /* | |
88 ** Flags for sqlite3PagerSetFlags() | |
89 */ | |
90 #define PAGER_SYNCHRONOUS_OFF 0x01 /* PRAGMA synchronous=OFF */ | |
91 #define PAGER_SYNCHRONOUS_NORMAL 0x02 /* PRAGMA synchronous=NORMAL */ | |
92 #define PAGER_SYNCHRONOUS_FULL 0x03 /* PRAGMA synchronous=FULL */ | |
93 #define PAGER_SYNCHRONOUS_MASK 0x03 /* Mask for three values above */ | |
94 #define PAGER_FULLFSYNC 0x04 /* PRAGMA fullfsync=ON */ | |
95 #define PAGER_CKPT_FULLFSYNC 0x08 /* PRAGMA checkpoint_fullfsync=ON */ | |
96 #define PAGER_CACHESPILL 0x10 /* PRAGMA cache_spill=ON */ | |
97 #define PAGER_FLAGS_MASK 0x1c /* All above except SYNCHRONOUS */ | |
98 | |
99 /* | |
100 ** The remainder of this file contains the declarations of the functions | |
101 ** that make up the Pager sub-system API. See source code comments for | |
102 ** a detailed description of each routine. | |
103 */ | |
104 | |
105 /* Open and close a Pager connection. */ | |
106 int sqlite3PagerOpen( | |
107 sqlite3_vfs*, | |
108 Pager **ppPager, | |
109 const char*, | |
110 int, | |
111 int, | |
112 int, | |
113 void(*)(DbPage*) | |
114 ); | |
115 int sqlite3PagerClose(Pager *pPager); | |
116 int sqlite3PagerReadFileheader(Pager*, int, unsigned char*); | |
117 | |
118 /* Functions used to configure a Pager object. */ | |
119 void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *); | |
120 int sqlite3PagerSetPagesize(Pager*, u32*, int); | |
121 int sqlite3PagerMaxPageCount(Pager*, int); | |
122 void sqlite3PagerSetCachesize(Pager*, int); | |
123 void sqlite3PagerSetMmapLimit(Pager *, sqlite3_int64); | |
124 void sqlite3PagerShrink(Pager*); | |
125 void sqlite3PagerSetFlags(Pager*,unsigned); | |
126 int sqlite3PagerLockingMode(Pager *, int); | |
127 int sqlite3PagerSetJournalMode(Pager *, int); | |
128 int sqlite3PagerGetJournalMode(Pager*); | |
129 int sqlite3PagerOkToChangeJournalMode(Pager*); | |
130 i64 sqlite3PagerJournalSizeLimit(Pager *, i64); | |
131 sqlite3_backup **sqlite3PagerBackupPtr(Pager*); | |
132 | |
133 /* Functions used to obtain and release page references. */ | |
134 int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag); | |
135 #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0) | |
136 DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno); | |
137 void sqlite3PagerRef(DbPage*); | |
138 void sqlite3PagerUnref(DbPage*); | |
139 void sqlite3PagerUnrefNotNull(DbPage*); | |
140 | |
141 /* Operations on page references. */ | |
142 int sqlite3PagerWrite(DbPage*); | |
143 void sqlite3PagerDontWrite(DbPage*); | |
144 int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int); | |
145 int sqlite3PagerPageRefcount(DbPage*); | |
146 void *sqlite3PagerGetData(DbPage *); | |
147 void *sqlite3PagerGetExtra(DbPage *); | |
148 | |
149 /* Functions used to manage pager transactions and savepoints. */ | |
150 void sqlite3PagerPagecount(Pager*, int*); | |
151 int sqlite3PagerBegin(Pager*, int exFlag, int); | |
152 int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int); | |
153 int sqlite3PagerExclusiveLock(Pager*); | |
154 int sqlite3PagerSync(Pager *pPager, const char *zMaster); | |
155 int sqlite3PagerCommitPhaseTwo(Pager*); | |
156 int sqlite3PagerRollback(Pager*); | |
157 int sqlite3PagerOpenSavepoint(Pager *pPager, int n); | |
158 int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint); | |
159 int sqlite3PagerSharedLock(Pager *pPager); | |
160 | |
161 #ifndef SQLITE_OMIT_WAL | |
162 int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*); | |
163 int sqlite3PagerWalSupported(Pager *pPager); | |
164 int sqlite3PagerWalCallback(Pager *pPager); | |
165 int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen); | |
166 int sqlite3PagerCloseWal(Pager *pPager); | |
167 #endif | |
168 | |
169 #ifdef SQLITE_ENABLE_ZIPVFS | |
170 int sqlite3PagerWalFramesize(Pager *pPager); | |
171 #endif | |
172 | |
173 /* Functions used to query pager state and configuration. */ | |
174 u8 sqlite3PagerIsreadonly(Pager*); | |
175 int sqlite3PagerRefcount(Pager*); | |
176 int sqlite3PagerMemUsed(Pager*); | |
177 const char *sqlite3PagerFilename(Pager*, int); | |
178 const sqlite3_vfs *sqlite3PagerVfs(Pager*); | |
179 sqlite3_file *sqlite3PagerFile(Pager*); | |
180 const char *sqlite3PagerJournalname(Pager*); | |
181 int sqlite3PagerNosync(Pager*); | |
182 void *sqlite3PagerTempSpace(Pager*); | |
183 int sqlite3PagerIsMemdb(Pager*); | |
184 void sqlite3PagerCacheStat(Pager *, int, int, int *); | |
185 void sqlite3PagerClearCache(Pager *); | |
186 int sqlite3SectorSize(sqlite3_file *); | |
187 | |
188 /* Functions used to truncate the database file. */ | |
189 void sqlite3PagerTruncateImage(Pager*,Pgno); | |
190 | |
191 #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL) | |
192 void *sqlite3PagerCodec(DbPage *); | |
193 #endif | |
194 | |
195 /* Functions to support testing and debugging. */ | |
196 #if !defined(NDEBUG) || defined(SQLITE_TEST) | |
197 Pgno sqlite3PagerPagenumber(DbPage*); | |
198 int sqlite3PagerIswriteable(DbPage*); | |
199 #endif | |
200 #ifdef SQLITE_TEST | |
201 int *sqlite3PagerStats(Pager*); | |
202 void sqlite3PagerRefdump(Pager*); | |
203 void disable_simulated_io_errors(void); | |
204 void enable_simulated_io_errors(void); | |
205 #else | |
206 # define disable_simulated_io_errors() | |
207 # define enable_simulated_io_errors() | |
208 #endif | |
209 | |
210 #endif /* _PAGER_H_ */ | |
OLD | NEW |