15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 2001 September 15 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The author disclaims copyright to this source code. In place of 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** a legal notice, here is a blessing: 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** May you do good and not evil. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** May you find forgiveness for yourself and forgive others. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** May you share freely, never taking more than you give. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************* 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** This header file defines the interface that the sqlite B-Tree file 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** subsystem. See comments in the source code for a detailed description 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** of what each interface routine does. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _BTREE_H_ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _BTREE_H_ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* TODO: This definition is just included so other modules compile. It 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** needs to be revisited. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SQLITE_N_BTREE_META 10 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** If defined as non-zero, auto-vacuum is enabled by default. Otherwise 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** it must be turned on for each database using "PRAGMA auto_vacuum = 1". 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SQLITE_DEFAULT_AUTOVACUUM 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define SQLITE_DEFAULT_AUTOVACUUM 0 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_AUTOVACUUM_NONE 0 /* Do not do auto-vacuum */ 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_AUTOVACUUM_FULL 1 /* Do full auto-vacuum */ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_AUTOVACUUM_INCR 2 /* Incremental vacuum */ 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Forward declarations of structure 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct Btree Btree; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct BtCursor BtCursor; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct BtShared BtShared; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeOpen( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *zFilename, /* Name of database file to open */ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sqlite3 *db, /* Associated database connection */ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Btree **ppBtree, /* Return open Btree* here */ 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags, /* Flags */ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int vfsFlags /* Flags passed through to VFS open */ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** following values. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** NOTE: These values must match the corresponding PAGER_ values in 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** pager.h. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_OMIT_JOURNAL 1 /* Do not create or use a rollback journal */ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_NO_READLOCK 2 /* Omit readlocks on readonly files */ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_MEMORY 4 /* This is an in-memory DB */ 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_SINGLE 8 /* The file contains at most 1 b-tree */ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_UNORDERED 16 /* Use of a hash implementation is OK */ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeClose(Btree*); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSetCacheSize(Btree*,int); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSyncDisabled(Btree*); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeGetPageSize(Btree*); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeMaxPageCount(Btree*,int); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)u32 sqlite3BtreeLastPage(Btree*); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSecureDelete(Btree*,int); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeGetReserve(Btree*); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSetAutoVacuum(Btree *, int); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeGetAutoVacuum(Btree *); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeBeginTrans(Btree*,int); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCommitPhaseTwo(Btree*, int); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCommit(Btree*); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeRollback(Btree*); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeBeginStmt(Btree*,int); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCreateTable(Btree*, int*, int flags); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeIsInTrans(Btree*); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeIsInReadTrans(Btree*); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeIsInBackup(Btree*); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void *sqlite3BtreeSchema(Btree *, int, void(*)(void *)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSchemaLocked(Btree *pBtree); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeLockTable(Btree *pBtree, int iTab, u8 isWriteLock); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSavepoint(Btree *, int, int); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char *sqlite3BtreeGetFilename(Btree *); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char *sqlite3BtreeGetJournalname(Btree *); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCopyFile(Btree *, Btree *); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeIncrVacuum(Btree *); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** of the flags shown below. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** is stored in the leaves. (BTREE_INTKEY is used for SQL tables.) With 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** anywhere - the key is the content. (BTREE_BLOBKEY is used for SQL 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** indices.) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_INTKEY 1 /* Table has only 64-bit signed integer keys */ 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_BLOBKEY 2 /* Table has keys only - no data */ 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeDropTable(Btree*, int, int*); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeClearTable(Btree*, int, int*); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void sqlite3BtreeTripAllCursors(Btree*, int); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** should be one of the following values. The integer values are assigned 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** to constants so that the offset of the corresponding field in an 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** SQLite database header may be found using the following formula: 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** offset = 36 + (idx * 4) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** For example, the free-page-count field is located at byte offset 36 of 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the database file header. The incr-vacuum-flag field is located at 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** byte offset 64 (== 36+4*7). 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_FREE_PAGE_COUNT 0 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_SCHEMA_VERSION 1 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_FILE_FORMAT 2 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_DEFAULT_CACHE_SIZE 3 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_LARGEST_ROOT_PAGE 4 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_TEXT_ENCODING 5 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_USER_VERSION 6 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BTREE_INCR_VACUUM 7 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCursor( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Btree*, /* BTree containing table to open */ 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int iTable, /* Index of root page */ 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int wrFlag, /* 1 for writing. 0 for read-only */ 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct KeyInfo*, /* First argument to compare function */ 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BtCursor *pCursor /* Space to write cursor structure */ 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCursorSize(void); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void sqlite3BtreeCursorZero(BtCursor*); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCloseCursor(BtCursor*); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeMovetoUnpacked( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BtCursor*, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnpackedRecord *pUnKey, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i64 intKey, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int bias, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *pRes 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCursorHasMoved(BtCursor*, int*); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeDelete(BtCursor*); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void *pData, int nData, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nZero, int bias, int seekResult); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeFirst(BtCursor*, int *pRes); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeLast(BtCursor*, int *pRes); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeNext(BtCursor*, int *pRes); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeEof(BtCursor*); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreePrevious(BtCursor*, int *pRes); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeKeySize(BtCursor*, i64 *pSize); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeDataSize(BtCursor*, u32 *pSize); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void sqlite3BtreeSetCachedRowid(BtCursor*, sqlite3_int64); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor*); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct Pager *sqlite3BtreePager(Btree*); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void sqlite3BtreeCacheOverflow(BtCursor *); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void sqlite3BtreeClearCursor(BtCursor *); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeSetVersion(Btree *pBt, int iVersion); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCursorIsValid(BtCursor*); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SQLITE_OMIT_BTREECOUNT 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCount(BtCursor *, i64 *); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef SQLITE_TEST 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int sqlite3BtreeCursorInfo(BtCursor*, int*, int); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void sqlite3BtreeCursorList(Btree*); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SQLITE_OMIT_WAL 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sqlite3BtreeCheckpoint(Btree*, int, int *, int *); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** If we are not using shared cache, then there is no need to 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** use mutexes to access the BtShared structures. So make the 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Enter and Leave procedures no-ops. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SQLITE_OMIT_SHARED_CACHE 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void sqlite3BtreeEnter(Btree*); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void sqlite3BtreeEnterAll(sqlite3*); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeEnter(X) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeEnterAll(X) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sqlite3BtreeSharable(Btree*); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void sqlite3BtreeLeave(Btree*); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void sqlite3BtreeEnterCursor(BtCursor*); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void sqlite3BtreeLeaveCursor(BtCursor*); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void sqlite3BtreeLeaveAll(sqlite3*); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* These routines are used inside assert() statements only. */ 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sqlite3BtreeHoldsMutex(Btree*); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sqlite3BtreeHoldsAllMutexes(sqlite3*); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sqlite3SchemaMutexHeld(sqlite3*,int,Schema*); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeSharable(X) 0 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeLeave(X) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeEnterCursor(X) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeLeaveCursor(X) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeLeaveAll(X) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeHoldsMutex(X) 1 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3BtreeHoldsAllMutexes(X) 1 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define sqlite3SchemaMutexHeld(X,Y,Z) 1 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _BTREE_H_ */ 241