📄 btree.h
字号:
/*** 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,v 1.36 2004/02/10 02:57:59 drh Exp $*/#ifndef _BTREE_H_#define _BTREE_H_/*** Forward declarations of structure*/typedef struct Btree Btree;typedef struct BtCursor BtCursor;typedef struct BtOps BtOps;typedef struct BtCursorOps BtCursorOps;/*** An instance of the following structure contains pointers to all** methods against an open BTree. Alternative BTree implementations** (examples: file based versus in-memory) can be created by substituting** different methods. Users of the BTree cannot tell the difference.**** In C++ we could do this by defining a virtual base class and then** creating subclasses for each different implementation. But this is** C not C++ so we have to be a little more explicit.*/struct BtOps { int (*Close)(Btree*); int (*SetCacheSize)(Btree*, int); int (*SetSafetyLevel)(Btree*, int); int (*BeginTrans)(Btree*); int (*Commit)(Btree*); int (*Rollback)(Btree*); int (*BeginCkpt)(Btree*); int (*CommitCkpt)(Btree*); int (*RollbackCkpt)(Btree*); int (*CreateTable)(Btree*, int*); int (*CreateIndex)(Btree*, int*); int (*DropTable)(Btree*, int); int (*ClearTable)(Btree*, int); int (*Cursor)(Btree*, int iTable, int wrFlag, BtCursor **ppCur); int (*GetMeta)(Btree*, int*); int (*UpdateMeta)(Btree*, int*); char *(*IntegrityCheck)(Btree*, int*, int); const char *(*GetFilename)(Btree*); int (*Copyfile)(Btree*,Btree*); struct Pager *(*Pager)(Btree*);#ifdef SQLITE_TEST int (*PageDump)(Btree*, int, int);#endif};/*** An instance of this structure defines all of the methods that can** be executed against a cursor.*/struct BtCursorOps { int (*Moveto)(BtCursor*, const void *pKey, int nKey, int *pRes); int (*Delete)(BtCursor*); int (*Insert)(BtCursor*, const void *pKey, int nKey, const void *pData, int nData); int (*First)(BtCursor*, int *pRes); int (*Last)(BtCursor*, int *pRes); int (*Next)(BtCursor*, int *pRes); int (*Previous)(BtCursor*, int *pRes); int (*KeySize)(BtCursor*, int *pSize); int (*Key)(BtCursor*, int offset, int amt, char *zBuf); int (*KeyCompare)(BtCursor*, const void *pKey, int nKey, int nIgnore, int *pRes); int (*DataSize)(BtCursor*, int *pSize); int (*Data)(BtCursor*, int offset, int amt, char *zBuf); int (*CloseCursor)(BtCursor*);#ifdef SQLITE_TEST int (*CursorDump)(BtCursor*, int*);#endif};/*** The number of 4-byte "meta" values contained on the first page of each** database file.*/#define SQLITE_N_BTREE_META 10int sqliteBtreeOpen(const char *zFilename, int mode, int nPg, Btree **ppBtree);int sqliteRbtreeOpen(const char *zFilename, int mode, int nPg, Btree **ppBtree);#define btOps(pBt) (*((BtOps **)(pBt)))#define btCOps(pCur) (*((BtCursorOps **)(pCur)))#define sqliteBtreeClose(pBt) (btOps(pBt)->Close(pBt))#define sqliteBtreeSetCacheSize(pBt, sz) (btOps(pBt)->SetCacheSize(pBt, sz))#define sqliteBtreeSetSafetyLevel(pBt, sl) (btOps(pBt)->SetSafetyLevel(pBt, sl))#define sqliteBtreeBeginTrans(pBt) (btOps(pBt)->BeginTrans(pBt))#define sqliteBtreeCommit(pBt) (btOps(pBt)->Commit(pBt))#define sqliteBtreeRollback(pBt) (btOps(pBt)->Rollback(pBt))#define sqliteBtreeBeginCkpt(pBt) (btOps(pBt)->BeginCkpt(pBt))#define sqliteBtreeCommitCkpt(pBt) (btOps(pBt)->CommitCkpt(pBt))#define sqliteBtreeRollbackCkpt(pBt) (btOps(pBt)->RollbackCkpt(pBt))#define sqliteBtreeCreateTable(pBt,piTable)\ (btOps(pBt)->CreateTable(pBt,piTable))#define sqliteBtreeCreateIndex(pBt, piIndex)\ (btOps(pBt)->CreateIndex(pBt, piIndex))#define sqliteBtreeDropTable(pBt, iTable) (btOps(pBt)->DropTable(pBt, iTable))#define sqliteBtreeClearTable(pBt, iTable)\ (btOps(pBt)->ClearTable(pBt, iTable))#define sqliteBtreeCursor(pBt, iTable, wrFlag, ppCur)\ (btOps(pBt)->Cursor(pBt, iTable, wrFlag, ppCur))#define sqliteBtreeMoveto(pCur, pKey, nKey, pRes)\ (btCOps(pCur)->Moveto(pCur, pKey, nKey, pRes))#define sqliteBtreeDelete(pCur) (btCOps(pCur)->Delete(pCur))#define sqliteBtreeInsert(pCur, pKey, nKey, pData, nData) \ (btCOps(pCur)->Insert(pCur, pKey, nKey, pData, nData))#define sqliteBtreeFirst(pCur, pRes) (btCOps(pCur)->First(pCur, pRes))#define sqliteBtreeLast(pCur, pRes) (btCOps(pCur)->Last(pCur, pRes))#define sqliteBtreeNext(pCur, pRes) (btCOps(pCur)->Next(pCur, pRes))#define sqliteBtreePrevious(pCur, pRes) (btCOps(pCur)->Previous(pCur, pRes))#define sqliteBtreeKeySize(pCur, pSize) (btCOps(pCur)->KeySize(pCur, pSize) )#define sqliteBtreeKey(pCur, offset, amt, zBuf)\ (btCOps(pCur)->Key(pCur, offset, amt, zBuf))#define sqliteBtreeKeyCompare(pCur, pKey, nKey, nIgnore, pRes)\ (btCOps(pCur)->KeyCompare(pCur, pKey, nKey, nIgnore, pRes))#define sqliteBtreeDataSize(pCur, pSize) (btCOps(pCur)->DataSize(pCur, pSize))#define sqliteBtreeData(pCur, offset, amt, zBuf)\ (btCOps(pCur)->Data(pCur, offset, amt, zBuf))#define sqliteBtreeCloseCursor(pCur) (btCOps(pCur)->CloseCursor(pCur))#define sqliteBtreeGetMeta(pBt, aMeta) (btOps(pBt)->GetMeta(pBt, aMeta))#define sqliteBtreeUpdateMeta(pBt, aMeta) (btOps(pBt)->UpdateMeta(pBt, aMeta))#define sqliteBtreeIntegrityCheck(pBt, aRoot, nRoot)\ (btOps(pBt)->IntegrityCheck(pBt, aRoot, nRoot))#define sqliteBtreeGetFilename(pBt) (btOps(pBt)->GetFilename(pBt))#define sqliteBtreeCopyFile(pBt1, pBt2) (btOps(pBt1)->Copyfile(pBt1, pBt2))#define sqliteBtreePager(pBt) (btOps(pBt)->Pager(pBt))#ifdef SQLITE_TEST#define sqliteBtreePageDump(pBt, pgno, recursive)\ (btOps(pBt)->PageDump(pBt, pgno, recursive))#define sqliteBtreeCursorDump(pCur, aResult)\ (btCOps(pCur)->CursorDump(pCur, aResult))int btree_native_byte_order;#endif /* SQLITE_TEST */#endif /* _BTREE_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -