Annotation of embedaddon/php/ext/sqlite/libsqlite/src/btree.h, revision 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>