extensions/sqlite/sqlite-source/btree.h
author Scott Ehlert <ds@alliedmods.net>
Sun Sep 14 02:58:58 2008 -0500 (2008-09-14)
changeset 2287 017a725c9d17
parent 1952 b7aa2b626807
permissions -rw-r--r--
Eliminated head for dead branch: sourcemod-1.1.0
     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$
    17 */
    18 #ifndef _BTREE_H_
    19 #define _BTREE_H_
    20 
    21 /* TODO: This definition is just included so other modules compile. It
    22 ** needs to be revisited.
    23 */
    24 #define SQLITE_N_BTREE_META 10
    25 
    26 /*
    27 ** If defined as non-zero, auto-vacuum is enabled by default. Otherwise
    28 ** it must be turned on for each database using "PRAGMA auto_vacuum = 1".
    29 */
    30 #ifndef SQLITE_DEFAULT_AUTOVACUUM
    31   #define SQLITE_DEFAULT_AUTOVACUUM 0
    32 #endif
    33 
    34 #define BTREE_AUTOVACUUM_NONE 0        /* Do not do auto-vacuum */
    35 #define BTREE_AUTOVACUUM_FULL 1        /* Do full auto-vacuum */
    36 #define BTREE_AUTOVACUUM_INCR 2        /* Incremental vacuum */
    37 
    38 /*
    39 ** Forward declarations of structure
    40 */
    41 typedef struct Btree Btree;
    42 typedef struct BtCursor BtCursor;
    43 typedef struct BtShared BtShared;
    44 typedef struct BtreeMutexArray BtreeMutexArray;
    45 
    46 /*
    47 ** This structure records all of the Btrees that need to hold
    48 ** a mutex before we enter sqlite3VdbeExec().  The Btrees are
    49 ** are placed in aBtree[] in order of aBtree[]->pBt.  That way,
    50 ** we can always lock and unlock them all quickly.
    51 */
    52 struct BtreeMutexArray {
    53   int nMutex;
    54   Btree *aBtree[SQLITE_MAX_ATTACHED+1];
    55 };
    56 
    57 
    58 int sqlite3BtreeOpen(
    59   const char *zFilename,   /* Name of database file to open */
    60   sqlite3 *db,             /* Associated database connection */
    61   Btree **,                /* Return open Btree* here */
    62   int flags,               /* Flags */
    63   int vfsFlags             /* Flags passed through to VFS open */
    64 );
    65 
    66 /* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the
    67 ** following values.
    68 **
    69 ** NOTE:  These values must match the corresponding PAGER_ values in
    70 ** pager.h.
    71 */
    72 #define BTREE_OMIT_JOURNAL  1  /* Do not use journal.  No argument */
    73 #define BTREE_NO_READLOCK   2  /* Omit readlocks on readonly files */
    74 #define BTREE_MEMORY        4  /* In-memory DB.  No argument */
    75 #define BTREE_READONLY      8  /* Open the database in read-only mode */
    76 #define BTREE_READWRITE    16  /* Open for both reading and writing */
    77 #define BTREE_CREATE       32  /* Create the database if it does not exist */
    78 
    79 /* Additional values for the 4th argument of sqlite3BtreeOpen that
    80 ** are not associated with PAGER_ values.
    81 */
    82 #define BTREE_PRIVATE      64  /* Never share with other connections */
    83 
    84 int sqlite3BtreeClose(Btree*);
    85 int sqlite3BtreeSetBusyHandler(Btree*,BusyHandler*);
    86 int sqlite3BtreeSetCacheSize(Btree*,int);
    87 int sqlite3BtreeSetSafetyLevel(Btree*,int,int);
    88 int sqlite3BtreeSyncDisabled(Btree*);
    89 int sqlite3BtreeSetPageSize(Btree*,int,int);
    90 int sqlite3BtreeGetPageSize(Btree*);
    91 int sqlite3BtreeMaxPageCount(Btree*,int);
    92 int sqlite3BtreeGetReserve(Btree*);
    93 int sqlite3BtreeSetAutoVacuum(Btree *, int);
    94 int sqlite3BtreeGetAutoVacuum(Btree *);
    95 int sqlite3BtreeBeginTrans(Btree*,int);
    96 int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster);
    97 int sqlite3BtreeCommitPhaseTwo(Btree*);
    98 int sqlite3BtreeCommit(Btree*);
    99 int sqlite3BtreeRollback(Btree*);
   100 int sqlite3BtreeBeginStmt(Btree*);
   101 int sqlite3BtreeCommitStmt(Btree*);
   102 int sqlite3BtreeRollbackStmt(Btree*);
   103 int sqlite3BtreeCreateTable(Btree*, int*, int flags);
   104 int sqlite3BtreeIsInTrans(Btree*);
   105 int sqlite3BtreeIsInStmt(Btree*);
   106 int sqlite3BtreeIsInReadTrans(Btree*);
   107 void *sqlite3BtreeSchema(Btree *, int, void(*)(void *));
   108 int sqlite3BtreeSchemaLocked(Btree *);
   109 int sqlite3BtreeLockTable(Btree *, int, u8);
   110 
   111 const char *sqlite3BtreeGetFilename(Btree *);
   112 const char *sqlite3BtreeGetDirname(Btree *);
   113 const char *sqlite3BtreeGetJournalname(Btree *);
   114 int sqlite3BtreeCopyFile(Btree *, Btree *);
   115 
   116 int sqlite3BtreeIncrVacuum(Btree *);
   117 
   118 /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR
   119 ** of the following flags:
   120 */
   121 #define BTREE_INTKEY     1    /* Table has only 64-bit signed integer keys */
   122 #define BTREE_ZERODATA   2    /* Table has keys only - no data */
   123 #define BTREE_LEAFDATA   4    /* Data stored in leaves only.  Implies INTKEY */
   124 
   125 int sqlite3BtreeDropTable(Btree*, int, int*);
   126 int sqlite3BtreeClearTable(Btree*, int);
   127 int sqlite3BtreeGetMeta(Btree*, int idx, u32 *pValue);
   128 int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value);
   129 void sqlite3BtreeTripAllCursors(Btree*, int);
   130 
   131 int sqlite3BtreeCursor(
   132   Btree*,                              /* BTree containing table to open */
   133   int iTable,                          /* Index of root page */
   134   int wrFlag,                          /* 1 for writing.  0 for read-only */
   135   int(*)(void*,int,const void*,int,const void*),  /* Key comparison function */
   136   void*,                               /* First argument to compare function */
   137   BtCursor **ppCursor                  /* Returned cursor */
   138 );
   139 
   140 int sqlite3BtreeCloseCursor(BtCursor*);
   141 int sqlite3BtreeMoveto(BtCursor*,const void *pKey,i64 nKey,int bias,int *pRes);
   142 int sqlite3BtreeDelete(BtCursor*);
   143 int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey,
   144                                   const void *pData, int nData,
   145                                   int nZero, int bias);
   146 int sqlite3BtreeFirst(BtCursor*, int *pRes);
   147 int sqlite3BtreeLast(BtCursor*, int *pRes);
   148 int sqlite3BtreeNext(BtCursor*, int *pRes);
   149 int sqlite3BtreeEof(BtCursor*);
   150 int sqlite3BtreeFlags(BtCursor*);
   151 int sqlite3BtreePrevious(BtCursor*, int *pRes);
   152 int sqlite3BtreeKeySize(BtCursor*, i64 *pSize);
   153 int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*);
   154 sqlite3 *sqlite3BtreeCursorDb(const BtCursor*);
   155 const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt);
   156 const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt);
   157 int sqlite3BtreeDataSize(BtCursor*, u32 *pSize);
   158 int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*);
   159 
   160 char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*);
   161 struct Pager *sqlite3BtreePager(Btree*);
   162 
   163 int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);
   164 void sqlite3BtreeCacheOverflow(BtCursor *);
   165 
   166 #ifdef SQLITE_TEST
   167 int sqlite3BtreeCursorInfo(BtCursor*, int*, int);
   168 void sqlite3BtreeCursorList(Btree*);
   169 int sqlite3BtreePageDump(Btree*, int, int recursive);
   170 #endif
   171 
   172 /*
   173 ** If we are not using shared cache, then there is no need to
   174 ** use mutexes to access the BtShared structures.  So make the
   175 ** Enter and Leave procedures no-ops.
   176 */
   177 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE
   178   void sqlite3BtreeEnter(Btree*);
   179   void sqlite3BtreeLeave(Btree*);
   180   int sqlite3BtreeHoldsMutex(Btree*);
   181   void sqlite3BtreeEnterCursor(BtCursor*);
   182   void sqlite3BtreeLeaveCursor(BtCursor*);
   183   void sqlite3BtreeEnterAll(sqlite3*);
   184   void sqlite3BtreeLeaveAll(sqlite3*);
   185   int sqlite3BtreeHoldsAllMutexes(sqlite3*);
   186   void sqlite3BtreeMutexArrayEnter(BtreeMutexArray*);
   187   void sqlite3BtreeMutexArrayLeave(BtreeMutexArray*);
   188   void sqlite3BtreeMutexArrayInsert(BtreeMutexArray*, Btree*);
   189 #else
   190 # define sqlite3BtreeEnter(X)
   191 # define sqlite3BtreeLeave(X)
   192 # define sqlite3BtreeHoldsMutex(X) 1
   193 # define sqlite3BtreeEnterCursor(X)
   194 # define sqlite3BtreeLeaveCursor(X)
   195 # define sqlite3BtreeEnterAll(X)
   196 # define sqlite3BtreeLeaveAll(X)
   197 # define sqlite3BtreeHoldsAllMutexes(X) 1
   198 # define sqlite3BtreeMutexArrayEnter(X)
   199 # define sqlite3BtreeMutexArrayLeave(X)
   200 # define sqlite3BtreeMutexArrayInsert(X,Y)
   201 #endif
   202 
   203 
   204 #endif /* _BTREE_H_ */