source: trunk/src/3rdparty/sqlite/btree.h@ 205

Last change on this file since 205 was 205, checked in by rudi, 14 years ago

Added SQLite 2.8.17 sources. This allows to build at least one of the sql drivers / plugins.

File size: 6.5 KB
Line 
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*/
24typedef struct Btree Btree;
25typedef struct BtCursor BtCursor;
26typedef struct BtOps BtOps;
27typedef 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*/
40struct 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*/
70struct 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
97int sqliteBtreeOpen(const char *zFilename, int mode, int nPg, Btree **ppBtree);
98int 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))
152int btree_native_byte_order;
153#endif /* SQLITE_TEST */
154
155
156#endif /* _BTREE_H_ */
Note: See TracBrowser for help on using the repository browser.