Annotation of embedaddon/php/ext/sqlite/libsqlite/src/btree.h, revision 1.1.1.1
1.1 misho 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 195361 2005-09-07 15:11:33Z iliaa $
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_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>