[205] | 1 | /*
|
---|
| 2 | ** 2001 September 15
|
---|
| 3 | **
|
---|
| 4 | ** The author disclaims copyright to this source code. In place of
|
---|
| 5 | ** a legal notice, here is a blessing:
|
---|
| 6 | **
|
---|
| 7 | ** May you do good and not evil.
|
---|
| 8 | ** May you find forgiveness for yourself and forgive others.
|
---|
| 9 | ** May you share freely, never taking more than you give.
|
---|
| 10 | **
|
---|
| 11 | *************************************************************************
|
---|
| 12 | ** This header file defines the interface that the sqlite B-Tree file
|
---|
| 13 | ** subsystem. See comments in the source code for a detailed description
|
---|
| 14 | ** of what each interface routine does.
|
---|
| 15 | **
|
---|
| 16 | ** @(#) $Id: btree.h,v 1.36 2004/02/10 02:57:59 drh Exp $
|
---|
| 17 | */
|
---|
| 18 | #ifndef _BTREE_H_
|
---|
| 19 | #define _BTREE_H_
|
---|
| 20 |
|
---|
| 21 | /*
|
---|
| 22 | ** Forward declarations of structure
|
---|
| 23 | */
|
---|
| 24 | typedef struct Btree Btree;
|
---|
| 25 | typedef struct BtCursor BtCursor;
|
---|
| 26 | typedef struct BtOps BtOps;
|
---|
| 27 | typedef struct BtCursorOps BtCursorOps;
|
---|
| 28 |
|
---|
| 29 |
|
---|
| 30 | /*
|
---|
| 31 | ** An instance of the following structure contains pointers to all
|
---|
| 32 | ** methods against an open BTree. Alternative BTree implementations
|
---|
| 33 | ** (examples: file based versus in-memory) can be created by substituting
|
---|
| 34 | ** different methods. Users of the BTree cannot tell the difference.
|
---|
| 35 | **
|
---|
| 36 | ** In C++ we could do this by defining a virtual base class and then
|
---|
| 37 | ** creating subclasses for each different implementation. But this is
|
---|
| 38 | ** C not C++ so we have to be a little more explicit.
|
---|
| 39 | */
|
---|
| 40 | struct BtOps {
|
---|
| 41 | int (*Close)(Btree*);
|
---|
| 42 | int (*SetCacheSize)(Btree*, int);
|
---|
| 43 | int (*SetSafetyLevel)(Btree*, int);
|
---|
| 44 | int (*BeginTrans)(Btree*);
|
---|
| 45 | int (*Commit)(Btree*);
|
---|
| 46 | int (*Rollback)(Btree*);
|
---|
| 47 | int (*BeginCkpt)(Btree*);
|
---|
| 48 | int (*CommitCkpt)(Btree*);
|
---|
| 49 | int (*RollbackCkpt)(Btree*);
|
---|
| 50 | int (*CreateTable)(Btree*, int*);
|
---|
| 51 | int (*CreateIndex)(Btree*, int*);
|
---|
| 52 | int (*DropTable)(Btree*, int);
|
---|
| 53 | int (*ClearTable)(Btree*, int);
|
---|
| 54 | int (*Cursor)(Btree*, int iTable, int wrFlag, BtCursor **ppCur);
|
---|
| 55 | int (*GetMeta)(Btree*, int*);
|
---|
| 56 | int (*UpdateMeta)(Btree*, int*);
|
---|
| 57 | char *(*IntegrityCheck)(Btree*, int*, int);
|
---|
| 58 | const char *(*GetFilename)(Btree*);
|
---|
| 59 | int (*Copyfile)(Btree*,Btree*);
|
---|
| 60 | struct Pager *(*Pager)(Btree*);
|
---|
| 61 | #ifdef SQLITE_TEST
|
---|
| 62 | int (*PageDump)(Btree*, int, int);
|
---|
| 63 | #endif
|
---|
| 64 | };
|
---|
| 65 |
|
---|
| 66 | /*
|
---|
| 67 | ** An instance of this structure defines all of the methods that can
|
---|
| 68 | ** be executed against a cursor.
|
---|
| 69 | */
|
---|
| 70 | struct BtCursorOps {
|
---|
| 71 | int (*Moveto)(BtCursor*, const void *pKey, int nKey, int *pRes);
|
---|
| 72 | int (*Delete)(BtCursor*);
|
---|
| 73 | int (*Insert)(BtCursor*, const void *pKey, int nKey,
|
---|
| 74 | const void *pData, int nData);
|
---|
| 75 | int (*First)(BtCursor*, int *pRes);
|
---|
| 76 | int (*Last)(BtCursor*, int *pRes);
|
---|
| 77 | int (*Next)(BtCursor*, int *pRes);
|
---|
| 78 | int (*Previous)(BtCursor*, int *pRes);
|
---|
| 79 | int (*KeySize)(BtCursor*, int *pSize);
|
---|
| 80 | int (*Key)(BtCursor*, int offset, int amt, char *zBuf);
|
---|
| 81 | int (*KeyCompare)(BtCursor*, const void *pKey, int nKey,
|
---|
| 82 | int nIgnore, int *pRes);
|
---|
| 83 | int (*DataSize)(BtCursor*, int *pSize);
|
---|
| 84 | int (*Data)(BtCursor*, int offset, int amt, char *zBuf);
|
---|
| 85 | int (*CloseCursor)(BtCursor*);
|
---|
| 86 | #ifdef SQLITE_TEST
|
---|
| 87 | int (*CursorDump)(BtCursor*, int*);
|
---|
| 88 | #endif
|
---|
| 89 | };
|
---|
| 90 |
|
---|
| 91 | /*
|
---|
| 92 | ** The number of 4-byte "meta" values contained on the first page of each
|
---|
| 93 | ** database file.
|
---|
| 94 | */
|
---|
| 95 | #define SQLITE_N_BTREE_META 10
|
---|
| 96 |
|
---|
| 97 | int sqliteBtreeOpen(const char *zFilename, int mode, int nPg, Btree **ppBtree);
|
---|
| 98 | int sqliteRbtreeOpen(const char *zFilename, int mode, int nPg, Btree **ppBtree);
|
---|
| 99 |
|
---|
| 100 | #define btOps(pBt) (*((BtOps **)(pBt)))
|
---|
| 101 | #define btCOps(pCur) (*((BtCursorOps **)(pCur)))
|
---|
| 102 |
|
---|
| 103 | #define sqliteBtreeClose(pBt) (btOps(pBt)->Close(pBt))
|
---|
| 104 | #define sqliteBtreeSetCacheSize(pBt, sz) (btOps(pBt)->SetCacheSize(pBt, sz))
|
---|
| 105 | #define sqliteBtreeSetSafetyLevel(pBt, sl) (btOps(pBt)->SetSafetyLevel(pBt, sl))
|
---|
| 106 | #define sqliteBtreeBeginTrans(pBt) (btOps(pBt)->BeginTrans(pBt))
|
---|
| 107 | #define sqliteBtreeCommit(pBt) (btOps(pBt)->Commit(pBt))
|
---|
| 108 | #define sqliteBtreeRollback(pBt) (btOps(pBt)->Rollback(pBt))
|
---|
| 109 | #define sqliteBtreeBeginCkpt(pBt) (btOps(pBt)->BeginCkpt(pBt))
|
---|
| 110 | #define sqliteBtreeCommitCkpt(pBt) (btOps(pBt)->CommitCkpt(pBt))
|
---|
| 111 | #define sqliteBtreeRollbackCkpt(pBt) (btOps(pBt)->RollbackCkpt(pBt))
|
---|
| 112 | #define sqliteBtreeCreateTable(pBt,piTable)\
|
---|
| 113 | (btOps(pBt)->CreateTable(pBt,piTable))
|
---|
| 114 | #define sqliteBtreeCreateIndex(pBt, piIndex)\
|
---|
| 115 | (btOps(pBt)->CreateIndex(pBt, piIndex))
|
---|
| 116 | #define sqliteBtreeDropTable(pBt, iTable) (btOps(pBt)->DropTable(pBt, iTable))
|
---|
| 117 | #define sqliteBtreeClearTable(pBt, iTable)\
|
---|
| 118 | (btOps(pBt)->ClearTable(pBt, iTable))
|
---|
| 119 | #define sqliteBtreeCursor(pBt, iTable, wrFlag, ppCur)\
|
---|
| 120 | (btOps(pBt)->Cursor(pBt, iTable, wrFlag, ppCur))
|
---|
| 121 | #define sqliteBtreeMoveto(pCur, pKey, nKey, pRes)\
|
---|
| 122 | (btCOps(pCur)->Moveto(pCur, pKey, nKey, pRes))
|
---|
| 123 | #define sqliteBtreeDelete(pCur) (btCOps(pCur)->Delete(pCur))
|
---|
| 124 | #define sqliteBtreeInsert(pCur, pKey, nKey, pData, nData) \
|
---|
| 125 | (btCOps(pCur)->Insert(pCur, pKey, nKey, pData, nData))
|
---|
| 126 | #define sqliteBtreeFirst(pCur, pRes) (btCOps(pCur)->First(pCur, pRes))
|
---|
| 127 | #define sqliteBtreeLast(pCur, pRes) (btCOps(pCur)->Last(pCur, pRes))
|
---|
| 128 | #define sqliteBtreeNext(pCur, pRes) (btCOps(pCur)->Next(pCur, pRes))
|
---|
| 129 | #define sqliteBtreePrevious(pCur, pRes) (btCOps(pCur)->Previous(pCur, pRes))
|
---|
| 130 | #define sqliteBtreeKeySize(pCur, pSize) (btCOps(pCur)->KeySize(pCur, pSize) )
|
---|
| 131 | #define sqliteBtreeKey(pCur, offset, amt, zBuf)\
|
---|
| 132 | (btCOps(pCur)->Key(pCur, offset, amt, zBuf))
|
---|
| 133 | #define sqliteBtreeKeyCompare(pCur, pKey, nKey, nIgnore, pRes)\
|
---|
| 134 | (btCOps(pCur)->KeyCompare(pCur, pKey, nKey, nIgnore, pRes))
|
---|
| 135 | #define sqliteBtreeDataSize(pCur, pSize) (btCOps(pCur)->DataSize(pCur, pSize))
|
---|
| 136 | #define sqliteBtreeData(pCur, offset, amt, zBuf)\
|
---|
| 137 | (btCOps(pCur)->Data(pCur, offset, amt, zBuf))
|
---|
| 138 | #define sqliteBtreeCloseCursor(pCur) (btCOps(pCur)->CloseCursor(pCur))
|
---|
| 139 | #define sqliteBtreeGetMeta(pBt, aMeta) (btOps(pBt)->GetMeta(pBt, aMeta))
|
---|
| 140 | #define sqliteBtreeUpdateMeta(pBt, aMeta) (btOps(pBt)->UpdateMeta(pBt, aMeta))
|
---|
| 141 | #define sqliteBtreeIntegrityCheck(pBt, aRoot, nRoot)\
|
---|
| 142 | (btOps(pBt)->IntegrityCheck(pBt, aRoot, nRoot))
|
---|
| 143 | #define sqliteBtreeGetFilename(pBt) (btOps(pBt)->GetFilename(pBt))
|
---|
| 144 | #define sqliteBtreeCopyFile(pBt1, pBt2) (btOps(pBt1)->Copyfile(pBt1, pBt2))
|
---|
| 145 | #define sqliteBtreePager(pBt) (btOps(pBt)->Pager(pBt))
|
---|
| 146 |
|
---|
| 147 | #ifdef SQLITE_TEST
|
---|
| 148 | #define sqliteBtreePageDump(pBt, pgno, recursive)\
|
---|
| 149 | (btOps(pBt)->PageDump(pBt, pgno, recursive))
|
---|
| 150 | #define sqliteBtreeCursorDump(pCur, aResult)\
|
---|
| 151 | (btCOps(pCur)->CursorDump(pCur, aResult))
|
---|
| 152 | int btree_native_byte_order;
|
---|
| 153 | #endif /* SQLITE_TEST */
|
---|
| 154 |
|
---|
| 155 |
|
---|
| 156 | #endif /* _BTREE_H_ */
|
---|