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>