/*+ −
** 2001 September 15+ −
**+ −
** The author disclaims copyright to this source code. In place of+ −
** a legal notice, here is a blessing:+ −
**+ −
** May you do good and not evil.+ −
** May you find forgiveness for yourself and forgive others.+ −
** May you share freely, never taking more than you give.+ −
**+ −
*************************************************************************+ −
** This header file defines the interface that the sqlite B-Tree file+ −
** subsystem. See comments in the source code for a detailed description+ −
** of what each interface routine does.+ −
**+ −
** @(#) $Id: btree.h 1282 2008-11-13 09:31:33Z LarsPson $+ −
*/+ −
#ifndef _BTREE_H_+ −
#define _BTREE_H_+ −
+ −
/* TODO: This definition is just included so other modules compile. It+ −
** needs to be revisited.+ −
*/+ −
#define SQLITE_N_BTREE_META 10+ −
+ −
/*+ −
** If defined as non-zero, auto-vacuum is enabled by default. Otherwise+ −
** it must be turned on for each database using "PRAGMA auto_vacuum = 1".+ −
*/+ −
#ifndef SQLITE_DEFAULT_AUTOVACUUM+ −
#define SQLITE_DEFAULT_AUTOVACUUM 0+ −
#endif+ −
+ −
#define BTREE_AUTOVACUUM_NONE 0 /* Do not do auto-vacuum */+ −
#define BTREE_AUTOVACUUM_FULL 1 /* Do full auto-vacuum */+ −
#define BTREE_AUTOVACUUM_INCR 2 /* Incremental vacuum */+ −
+ −
/*+ −
** Forward declarations of structure+ −
*/+ −
typedef struct Btree Btree;+ −
typedef struct BtCursor BtCursor;+ −
typedef struct BtShared BtShared;+ −
typedef struct BtreeMutexArray BtreeMutexArray;+ −
+ −
/*+ −
** This structure records all of the Btrees that need to hold+ −
** a mutex before we enter sqlite3VdbeExec(). The Btrees are+ −
** are placed in aBtree[] in order of aBtree[]->pBt. That way,+ −
** we can always lock and unlock them all quickly.+ −
*/+ −
struct BtreeMutexArray {+ −
int nMutex;+ −
Btree *aBtree[SQLITE_MAX_ATTACHED+1];+ −
};+ −
+ −
+ −
int sqlite3BtreeOpen(+ −
const char *zFilename, /* Name of database file to open */+ −
sqlite3 *db, /* Associated database connection */+ −
Btree **, /* Return open Btree* here */+ −
int flags, /* Flags */+ −
int vfsFlags /* Flags passed through to VFS open */+ −
);+ −
+ −
/* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the+ −
** following values.+ −
**+ −
** NOTE: These values must match the corresponding PAGER_ values in+ −
** pager.h.+ −
*/+ −
#define BTREE_OMIT_JOURNAL 1 /* Do not use journal. No argument */+ −
#define BTREE_NO_READLOCK 2 /* Omit readlocks on readonly files */+ −
#define BTREE_MEMORY 4 /* In-memory DB. No argument */+ −
#define BTREE_READONLY 8 /* Open the database in read-only mode */+ −
#define BTREE_READWRITE 16 /* Open for both reading and writing */+ −
#define BTREE_CREATE 32 /* Create the database if it does not exist */+ −
+ −
/* Additional values for the 4th argument of sqlite3BtreeOpen that+ −
** are not associated with PAGER_ values.+ −
*/+ −
#define BTREE_PRIVATE 64 /* Never share with other connections */+ −
+ −
int sqlite3BtreeClose(Btree*);+ −
int sqlite3BtreeSetCacheSize(Btree*,int);+ −
int sqlite3BtreeSetSafetyLevel(Btree*,int,int);+ −
int sqlite3BtreeSyncDisabled(Btree*);+ −
int sqlite3BtreeSetPageSize(Btree*,int,int);+ −
int sqlite3BtreeGetPageSize(Btree*);+ −
int sqlite3BtreeMaxPageCount(Btree*,int);+ −
int sqlite3BtreeGetReserve(Btree*);+ −
int sqlite3BtreeSetAutoVacuum(Btree *, int);+ −
int sqlite3BtreeGetAutoVacuum(Btree *);+ −
int sqlite3BtreeBeginTrans(Btree*,int);+ −
int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster);+ −
int sqlite3BtreeCommitPhaseTwo(Btree*);+ −
int sqlite3BtreeCommit(Btree*);+ −
int sqlite3BtreeRollback(Btree*);+ −
int sqlite3BtreeBeginStmt(Btree*);+ −
int sqlite3BtreeCommitStmt(Btree*);+ −
int sqlite3BtreeRollbackStmt(Btree*);+ −
int sqlite3BtreeCreateTable(Btree*, int*, int flags);+ −
int sqlite3BtreeIsInTrans(Btree*);+ −
int sqlite3BtreeIsInStmt(Btree*);+ −
int sqlite3BtreeIsInReadTrans(Btree*);+ −
void *sqlite3BtreeSchema(Btree *, int, void(*)(void *));+ −
int sqlite3BtreeSchemaLocked(Btree *);+ −
int sqlite3BtreeLockTable(Btree *, int, u8);+ −
+ −
const char *sqlite3BtreeGetFilename(Btree *);+ −
const char *sqlite3BtreeGetDirname(Btree *);+ −
const char *sqlite3BtreeGetJournalname(Btree *);+ −
int sqlite3BtreeCopyFile(Btree *, Btree *);+ −
+ −
int sqlite3BtreeIncrVacuum(Btree *);+ −
+ −
/* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR+ −
** of the following flags:+ −
*/+ −
#define BTREE_INTKEY 1 /* Table has only 64-bit signed integer keys */+ −
#define BTREE_ZERODATA 2 /* Table has keys only - no data */+ −
#define BTREE_LEAFDATA 4 /* Data stored in leaves only. Implies INTKEY */+ −
+ −
int sqlite3BtreeDropTable(Btree*, int, int*);+ −
int sqlite3BtreeClearTable(Btree*, int);+ −
int sqlite3BtreeGetMeta(Btree*, int idx, u32 *pValue);+ −
int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value);+ −
void sqlite3BtreeTripAllCursors(Btree*, int);+ −
+ −
int sqlite3BtreeCursor(+ −
Btree*, /* BTree containing table to open */+ −
int iTable, /* Index of root page */+ −
int wrFlag, /* 1 for writing. 0 for read-only */+ −
int(*)(void*,int,const void*,int,const void*), /* Key comparison function */+ −
void*, /* First argument to compare function */+ −
BtCursor **ppCursor /* Returned cursor */+ −
);+ −
+ −
int sqlite3BtreeCloseCursor(BtCursor*);+ −
int sqlite3BtreeMoveto(BtCursor*,const void *pKey,i64 nKey,int bias,int *pRes);+ −
int sqlite3BtreeDelete(BtCursor*);+ −
int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey,+ −
const void *pData, int nData,+ −
int nZero, int bias);+ −
int sqlite3BtreeFirst(BtCursor*, int *pRes);+ −
int sqlite3BtreeLast(BtCursor*, int *pRes);+ −
int sqlite3BtreeNext(BtCursor*, int *pRes);+ −
int sqlite3BtreeEof(BtCursor*);+ −
int sqlite3BtreeFlags(BtCursor*);+ −
int sqlite3BtreePrevious(BtCursor*, int *pRes);+ −
int sqlite3BtreeKeySize(BtCursor*, i64 *pSize);+ −
int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*);+ −
sqlite3 *sqlite3BtreeCursorDb(const BtCursor*);+ −
const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt);+ −
const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt);+ −
int sqlite3BtreeDataSize(BtCursor*, u32 *pSize);+ −
int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*);+ −
+ −
char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*);+ −
struct Pager *sqlite3BtreePager(Btree*);+ −
+ −
int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);+ −
void sqlite3BtreeCacheOverflow(BtCursor *);+ −
+ −
#ifdef SQLITE_TEST+ −
int sqlite3BtreeCursorInfo(BtCursor*, int*, int);+ −
void sqlite3BtreeCursorList(Btree*);+ −
int sqlite3BtreePageDump(Btree*, int, int recursive);+ −
#endif+ −
+ −
/*+ −
** If we are not using shared cache, then there is no need to+ −
** use mutexes to access the BtShared structures. So make the+ −
** Enter and Leave procedures no-ops.+ −
*/+ −
#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE+ −
void sqlite3BtreeEnter(Btree*);+ −
void sqlite3BtreeLeave(Btree*);+ −
int sqlite3BtreeHoldsMutex(Btree*);+ −
void sqlite3BtreeEnterCursor(BtCursor*);+ −
void sqlite3BtreeLeaveCursor(BtCursor*);+ −
void sqlite3BtreeEnterAll(sqlite3*);+ −
void sqlite3BtreeLeaveAll(sqlite3*);+ −
int sqlite3BtreeHoldsAllMutexes(sqlite3*);+ −
void sqlite3BtreeMutexArrayEnter(BtreeMutexArray*);+ −
void sqlite3BtreeMutexArrayLeave(BtreeMutexArray*);+ −
void sqlite3BtreeMutexArrayInsert(BtreeMutexArray*, Btree*);+ −
#else+ −
# define sqlite3BtreeEnter(X)+ −
# define sqlite3BtreeLeave(X)+ −
# define sqlite3BtreeHoldsMutex(X) 1+ −
# define sqlite3BtreeEnterCursor(X)+ −
# define sqlite3BtreeLeaveCursor(X)+ −
# define sqlite3BtreeEnterAll(X)+ −
# define sqlite3BtreeLeaveAll(X)+ −
# define sqlite3BtreeHoldsAllMutexes(X) 1+ −
# define sqlite3BtreeMutexArrayEnter(X)+ −
# define sqlite3BtreeMutexArrayLeave(X)+ −
# define sqlite3BtreeMutexArrayInsert(X,Y)+ −
#endif+ −
+ −
+ −
#endif /* _BTREE_H_ */+ −