xref: /titanic_52/usr/src/lib/libsqlite/src/pager.h (revision c5c4113dfcabb1eed3d4bdf7609de5170027a794)
1*c5c4113dSnw141292 
2*c5c4113dSnw141292 #pragma ident	"%Z%%M%	%I%	%E% SMI"
3*c5c4113dSnw141292 
4*c5c4113dSnw141292 /*
5*c5c4113dSnw141292 ** 2001 September 15
6*c5c4113dSnw141292 **
7*c5c4113dSnw141292 ** The author disclaims copyright to this source code.  In place of
8*c5c4113dSnw141292 ** a legal notice, here is a blessing:
9*c5c4113dSnw141292 **
10*c5c4113dSnw141292 **    May you do good and not evil.
11*c5c4113dSnw141292 **    May you find forgiveness for yourself and forgive others.
12*c5c4113dSnw141292 **    May you share freely, never taking more than you give.
13*c5c4113dSnw141292 **
14*c5c4113dSnw141292 *************************************************************************
15*c5c4113dSnw141292 ** This header file defines the interface that the sqlite page cache
16*c5c4113dSnw141292 ** subsystem.  The page cache subsystem reads and writes a file a page
17*c5c4113dSnw141292 ** at a time and provides a journal for rollback.
18*c5c4113dSnw141292 **
19*c5c4113dSnw141292 ** @(#) $Id: pager.h,v 1.26 2004/02/11 02:18:07 drh Exp $
20*c5c4113dSnw141292 */
21*c5c4113dSnw141292 
22*c5c4113dSnw141292 /*
23*c5c4113dSnw141292 ** The size of one page
24*c5c4113dSnw141292 **
25*c5c4113dSnw141292 ** You can change this value to another (reasonable) value you want.
26*c5c4113dSnw141292 ** It need not be a power of two, though the interface to the disk
27*c5c4113dSnw141292 ** will likely be faster if it is.
28*c5c4113dSnw141292 **
29*c5c4113dSnw141292 ** Experiments show that a page size of 1024 gives the best speed
30*c5c4113dSnw141292 ** for common usages.  The speed differences for different sizes
31*c5c4113dSnw141292 ** such as 512, 2048, 4096, an so forth, is minimal.  Note, however,
32*c5c4113dSnw141292 ** that changing the page size results in a completely imcompatible
33*c5c4113dSnw141292 ** file format.
34*c5c4113dSnw141292 */
35*c5c4113dSnw141292 #ifndef SQLITE_PAGE_SIZE
36*c5c4113dSnw141292 #define SQLITE_PAGE_SIZE 1024
37*c5c4113dSnw141292 #endif
38*c5c4113dSnw141292 
39*c5c4113dSnw141292 /*
40*c5c4113dSnw141292 ** Number of extra bytes of data allocated at the end of each page and
41*c5c4113dSnw141292 ** stored on disk but not used by the higher level btree layer.  Changing
42*c5c4113dSnw141292 ** this value results in a completely incompatible file format.
43*c5c4113dSnw141292 */
44*c5c4113dSnw141292 #ifndef SQLITE_PAGE_RESERVE
45*c5c4113dSnw141292 #define SQLITE_PAGE_RESERVE 0
46*c5c4113dSnw141292 #endif
47*c5c4113dSnw141292 
48*c5c4113dSnw141292 /*
49*c5c4113dSnw141292 ** The total number of usable bytes stored on disk for each page.
50*c5c4113dSnw141292 ** The usable bytes come at the beginning of the page and the reserve
51*c5c4113dSnw141292 ** bytes come at the end.
52*c5c4113dSnw141292 */
53*c5c4113dSnw141292 #define SQLITE_USABLE_SIZE (SQLITE_PAGE_SIZE-SQLITE_PAGE_RESERVE)
54*c5c4113dSnw141292 
55*c5c4113dSnw141292 /*
56*c5c4113dSnw141292 ** Maximum number of pages in one database.  (This is a limitation of
57*c5c4113dSnw141292 ** imposed by 4GB files size limits.)
58*c5c4113dSnw141292 */
59*c5c4113dSnw141292 #define SQLITE_MAX_PAGE 1073741823
60*c5c4113dSnw141292 
61*c5c4113dSnw141292 /*
62*c5c4113dSnw141292 ** The type used to represent a page number.  The first page in a file
63*c5c4113dSnw141292 ** is called page 1.  0 is used to represent "not a page".
64*c5c4113dSnw141292 */
65*c5c4113dSnw141292 typedef unsigned int Pgno;
66*c5c4113dSnw141292 
67*c5c4113dSnw141292 /*
68*c5c4113dSnw141292 ** Each open file is managed by a separate instance of the "Pager" structure.
69*c5c4113dSnw141292 */
70*c5c4113dSnw141292 typedef struct Pager Pager;
71*c5c4113dSnw141292 
72*c5c4113dSnw141292 /*
73*c5c4113dSnw141292 ** See source code comments for a detailed description of the following
74*c5c4113dSnw141292 ** routines:
75*c5c4113dSnw141292 */
76*c5c4113dSnw141292 int sqlitepager_open(Pager **ppPager, const char *zFilename,
77*c5c4113dSnw141292                      int nPage, int nExtra, int useJournal);
78*c5c4113dSnw141292 void sqlitepager_set_destructor(Pager*, void(*)(void*));
79*c5c4113dSnw141292 void sqlitepager_set_cachesize(Pager*, int);
80*c5c4113dSnw141292 int sqlitepager_close(Pager *pPager);
81*c5c4113dSnw141292 int sqlitepager_get(Pager *pPager, Pgno pgno, void **ppPage);
82*c5c4113dSnw141292 void *sqlitepager_lookup(Pager *pPager, Pgno pgno);
83*c5c4113dSnw141292 int sqlitepager_ref(void*);
84*c5c4113dSnw141292 int sqlitepager_unref(void*);
85*c5c4113dSnw141292 Pgno sqlitepager_pagenumber(void*);
86*c5c4113dSnw141292 int sqlitepager_write(void*);
87*c5c4113dSnw141292 int sqlitepager_iswriteable(void*);
88*c5c4113dSnw141292 int sqlitepager_overwrite(Pager *pPager, Pgno pgno, void*);
89*c5c4113dSnw141292 int sqlitepager_pagecount(Pager*);
90*c5c4113dSnw141292 int sqlitepager_truncate(Pager*,Pgno);
91*c5c4113dSnw141292 int sqlitepager_begin(void*);
92*c5c4113dSnw141292 int sqlitepager_commit(Pager*);
93*c5c4113dSnw141292 int sqlitepager_rollback(Pager*);
94*c5c4113dSnw141292 int sqlitepager_isreadonly(Pager*);
95*c5c4113dSnw141292 int sqlitepager_ckpt_begin(Pager*);
96*c5c4113dSnw141292 int sqlitepager_ckpt_commit(Pager*);
97*c5c4113dSnw141292 int sqlitepager_ckpt_rollback(Pager*);
98*c5c4113dSnw141292 void sqlitepager_dont_rollback(void*);
99*c5c4113dSnw141292 void sqlitepager_dont_write(Pager*, Pgno);
100*c5c4113dSnw141292 int *sqlitepager_stats(Pager*);
101*c5c4113dSnw141292 void sqlitepager_set_safety_level(Pager*,int);
102*c5c4113dSnw141292 const char *sqlitepager_filename(Pager*);
103*c5c4113dSnw141292 int sqlitepager_rename(Pager*, const char *zNewName);
104*c5c4113dSnw141292 void sqlitepager_set_codec(Pager*,void(*)(void*,void*,Pgno,int),void*);
105*c5c4113dSnw141292 
106*c5c4113dSnw141292 #ifdef SQLITE_TEST
107*c5c4113dSnw141292 void sqlitepager_refdump(Pager*);
108*c5c4113dSnw141292 int pager_refinfo_enable;
109*c5c4113dSnw141292 int journal_format;
110*c5c4113dSnw141292 #endif
111