17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate ** 2001 September 15 37c478bd9Sstevel@tonic-gate ** 47c478bd9Sstevel@tonic-gate ** The author disclaims copyright to this source code. In place of 57c478bd9Sstevel@tonic-gate ** a legal notice, here is a blessing: 67c478bd9Sstevel@tonic-gate ** 77c478bd9Sstevel@tonic-gate ** May you do good and not evil. 87c478bd9Sstevel@tonic-gate ** May you find forgiveness for yourself and forgive others. 97c478bd9Sstevel@tonic-gate ** May you share freely, never taking more than you give. 107c478bd9Sstevel@tonic-gate ** 117c478bd9Sstevel@tonic-gate ************************************************************************* 127c478bd9Sstevel@tonic-gate ** This header file defines the interface that the sqlite page cache 137c478bd9Sstevel@tonic-gate ** subsystem. The page cache subsystem reads and writes a file a page 147c478bd9Sstevel@tonic-gate ** at a time and provides a journal for rollback. 157c478bd9Sstevel@tonic-gate ** 167c478bd9Sstevel@tonic-gate ** @(#) $Id: pager.h,v 1.26 2004/02/11 02:18:07 drh Exp $ 177c478bd9Sstevel@tonic-gate */ 187c478bd9Sstevel@tonic-gate 197c478bd9Sstevel@tonic-gate /* 207c478bd9Sstevel@tonic-gate ** The size of one page 217c478bd9Sstevel@tonic-gate ** 227c478bd9Sstevel@tonic-gate ** You can change this value to another (reasonable) value you want. 237c478bd9Sstevel@tonic-gate ** It need not be a power of two, though the interface to the disk 247c478bd9Sstevel@tonic-gate ** will likely be faster if it is. 257c478bd9Sstevel@tonic-gate ** 267c478bd9Sstevel@tonic-gate ** Experiments show that a page size of 1024 gives the best speed 277c478bd9Sstevel@tonic-gate ** for common usages. The speed differences for different sizes 287c478bd9Sstevel@tonic-gate ** such as 512, 2048, 4096, an so forth, is minimal. Note, however, 297c478bd9Sstevel@tonic-gate ** that changing the page size results in a completely imcompatible 307c478bd9Sstevel@tonic-gate ** file format. 317c478bd9Sstevel@tonic-gate */ 327c478bd9Sstevel@tonic-gate #ifndef SQLITE_PAGE_SIZE 337c478bd9Sstevel@tonic-gate #define SQLITE_PAGE_SIZE 1024 347c478bd9Sstevel@tonic-gate #endif 357c478bd9Sstevel@tonic-gate 367c478bd9Sstevel@tonic-gate /* 377c478bd9Sstevel@tonic-gate ** Number of extra bytes of data allocated at the end of each page and 387c478bd9Sstevel@tonic-gate ** stored on disk but not used by the higher level btree layer. Changing 397c478bd9Sstevel@tonic-gate ** this value results in a completely incompatible file format. 407c478bd9Sstevel@tonic-gate */ 417c478bd9Sstevel@tonic-gate #ifndef SQLITE_PAGE_RESERVE 427c478bd9Sstevel@tonic-gate #define SQLITE_PAGE_RESERVE 0 437c478bd9Sstevel@tonic-gate #endif 447c478bd9Sstevel@tonic-gate 457c478bd9Sstevel@tonic-gate /* 467c478bd9Sstevel@tonic-gate ** The total number of usable bytes stored on disk for each page. 477c478bd9Sstevel@tonic-gate ** The usable bytes come at the beginning of the page and the reserve 487c478bd9Sstevel@tonic-gate ** bytes come at the end. 497c478bd9Sstevel@tonic-gate */ 507c478bd9Sstevel@tonic-gate #define SQLITE_USABLE_SIZE (SQLITE_PAGE_SIZE-SQLITE_PAGE_RESERVE) 517c478bd9Sstevel@tonic-gate 527c478bd9Sstevel@tonic-gate /* 537c478bd9Sstevel@tonic-gate ** Maximum number of pages in one database. (This is a limitation of 547c478bd9Sstevel@tonic-gate ** imposed by 4GB files size limits.) 557c478bd9Sstevel@tonic-gate */ 567c478bd9Sstevel@tonic-gate #define SQLITE_MAX_PAGE 1073741823 577c478bd9Sstevel@tonic-gate 587c478bd9Sstevel@tonic-gate /* 597c478bd9Sstevel@tonic-gate ** The type used to represent a page number. The first page in a file 607c478bd9Sstevel@tonic-gate ** is called page 1. 0 is used to represent "not a page". 617c478bd9Sstevel@tonic-gate */ 627c478bd9Sstevel@tonic-gate typedef unsigned int Pgno; 637c478bd9Sstevel@tonic-gate 647c478bd9Sstevel@tonic-gate /* 657c478bd9Sstevel@tonic-gate ** Each open file is managed by a separate instance of the "Pager" structure. 667c478bd9Sstevel@tonic-gate */ 677c478bd9Sstevel@tonic-gate typedef struct Pager Pager; 687c478bd9Sstevel@tonic-gate 697c478bd9Sstevel@tonic-gate /* 707c478bd9Sstevel@tonic-gate ** See source code comments for a detailed description of the following 717c478bd9Sstevel@tonic-gate ** routines: 727c478bd9Sstevel@tonic-gate */ 737c478bd9Sstevel@tonic-gate int sqlitepager_open(Pager **ppPager, const char *zFilename, 747c478bd9Sstevel@tonic-gate int nPage, int nExtra, int useJournal); 757c478bd9Sstevel@tonic-gate void sqlitepager_set_destructor(Pager*, void(*)(void*)); 767c478bd9Sstevel@tonic-gate void sqlitepager_set_cachesize(Pager*, int); 777c478bd9Sstevel@tonic-gate int sqlitepager_close(Pager *pPager); 787c478bd9Sstevel@tonic-gate int sqlitepager_get(Pager *pPager, Pgno pgno, void **ppPage); 797c478bd9Sstevel@tonic-gate void *sqlitepager_lookup(Pager *pPager, Pgno pgno); 807c478bd9Sstevel@tonic-gate int sqlitepager_ref(void*); 817c478bd9Sstevel@tonic-gate int sqlitepager_unref(void*); 827c478bd9Sstevel@tonic-gate Pgno sqlitepager_pagenumber(void*); 837c478bd9Sstevel@tonic-gate int sqlitepager_write(void*); 847c478bd9Sstevel@tonic-gate int sqlitepager_iswriteable(void*); 857c478bd9Sstevel@tonic-gate int sqlitepager_overwrite(Pager *pPager, Pgno pgno, void*); 867c478bd9Sstevel@tonic-gate int sqlitepager_pagecount(Pager*); 877c478bd9Sstevel@tonic-gate int sqlitepager_truncate(Pager*,Pgno); 887c478bd9Sstevel@tonic-gate int sqlitepager_begin(void*); 897c478bd9Sstevel@tonic-gate int sqlitepager_commit(Pager*); 907c478bd9Sstevel@tonic-gate int sqlitepager_rollback(Pager*); 917c478bd9Sstevel@tonic-gate int sqlitepager_isreadonly(Pager*); 927c478bd9Sstevel@tonic-gate int sqlitepager_ckpt_begin(Pager*); 937c478bd9Sstevel@tonic-gate int sqlitepager_ckpt_commit(Pager*); 947c478bd9Sstevel@tonic-gate int sqlitepager_ckpt_rollback(Pager*); 957c478bd9Sstevel@tonic-gate void sqlitepager_dont_rollback(void*); 967c478bd9Sstevel@tonic-gate void sqlitepager_dont_write(Pager*, Pgno); 977c478bd9Sstevel@tonic-gate int *sqlitepager_stats(Pager*); 987c478bd9Sstevel@tonic-gate void sqlitepager_set_safety_level(Pager*,int); 997c478bd9Sstevel@tonic-gate const char *sqlitepager_filename(Pager*); 1007c478bd9Sstevel@tonic-gate int sqlitepager_rename(Pager*, const char *zNewName); 1017c478bd9Sstevel@tonic-gate void sqlitepager_set_codec(Pager*,void(*)(void*,void*,Pgno,int),void*); 1027c478bd9Sstevel@tonic-gate 1037c478bd9Sstevel@tonic-gate #ifdef SQLITE_TEST 1047c478bd9Sstevel@tonic-gate void sqlitepager_refdump(Pager*); 1057c478bd9Sstevel@tonic-gate int pager_refinfo_enable; 1067c478bd9Sstevel@tonic-gate int journal_format; 1077c478bd9Sstevel@tonic-gate #endif 108