monotone

monotone Mtn Source Tree

Root/sqlite/btree.h

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.1 2003/08/05 23:03:07 graydon 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#ifdef SQLITE_TEST
61 int (*PageDump)(Btree*, int, int);
62 struct Pager *(*Pager)(Btree*);
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
146#ifdef SQLITE_TEST
147#define sqliteBtreePageDump(pBt, pgno, recursive)\
148 (btOps(pBt)->PageDump(pBt, pgno, recursive))
149#define sqliteBtreeCursorDump(pCur, aResult)\
150 (btCOps(pCur)->CursorDump(pCur, aResult))
151#define sqliteBtreePager(pBt) (btOps(pBt)->Pager(pBt))
152int btree_native_byte_order;
153#endif /* SQLITE_TEST */
154
155
156#endif /* _BTREE_H_ */

Archive Download this file

Branches

Tags

Quick Links:     www.monotone.ca    -     Downloads    -     Documentation    -     Wiki    -     Code Forge    -     Build Status