📄 database_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>FastDB: database.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a></div><h1>database.h</h1><div class="fragment"><pre>00001 <span class="comment">//-< DATABASE.H >----------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB Version 1.0 (c) 1999 GARRET * ? *</span>00003 <span class="comment">// (Main Memory Database Management System) * /\| *</span>00004 <span class="comment">// * / \ *</span>00005 <span class="comment">// Created: 20-Nov-98 K.A. Knizhnik * / [] \ *</span>00006 <span class="comment">// Last update: 23-Dec-98 K.A. Knizhnik * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// Database management</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __DATABASE_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __DATABASE_H__</span>00013 <span class="preprocessor"></span>00014 <span class="preprocessor">#include "class.h"</span>00015 <span class="preprocessor">#include "reference.h"</span>00016 <span class="preprocessor">#include "file.h"</span>00017 00021 <span class="preprocessor">#ifdef DISKLESS_CONFIGURATION</span>00022 <span class="preprocessor"></span><span class="comment">// In diskless confiuration database can not be reallocated</span>00023 <span class="keyword">const</span> size_t dbDefaultInitDatabaseSize = 32*1024*1024;00024 <span class="preprocessor">#else</span>00025 <span class="preprocessor"></span><span class="keyword">const</span> size_t dbDefaultInitDatabaseSize = 1024*1024;00026 <span class="preprocessor">#endif</span>00027 <span class="preprocessor"></span>00031 <span class="keyword">const</span> size_t dbDefaultInitIndexSize = 512*1024;00032 00036 <span class="keyword">const</span> size_t dbDefaultExtensionQuantum = 4*1024*1024;00037 00041 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> dbMaxParallelSearchThreads = 64;00042 00046 <span class="keyword">enum</span> dbInternalObject { 00047 dbTableRow, 00048 dbPageObjectMarker,00049 dbTtreeMarker,00050 dbTtreeNodeMarker,00051 dbHashTableMarker,00052 dbHashTableItemMarker,00053 dbHArrayPageMarker,00054 00055 dbInternalObjectMarker = 7 <span class="comment">// mask for internals object markers</span>00056 };00057 00058 <span class="keyword">const</span> offs_t dbFreeHandleMarker = (offs_t)1 << (<span class="keyword">sizeof</span>(offs_t)*8 - 1); 00059 00060 <span class="keyword">const</span> size_t dbAllocationQuantumBits = 4;00061 <span class="keyword">const</span> size_t dbAllocationQuantum = 1 << dbAllocationQuantumBits;00062 <span class="keyword">const</span> size_t dbPageBits = 12;00063 <span class="keyword">const</span> size_t dbPageSize = 1 << dbPageBits;00064 <span class="keyword">const</span> size_t dbIdsPerPage = dbPageSize / <span class="keyword">sizeof</span>(oid_t);00065 <span class="keyword">const</span> size_t dbHandlesPerPage = dbPageSize / <span class="keyword">sizeof</span>(offs_t);00066 <span class="keyword">const</span> size_t dbHandleBits = 1 + <span class="keyword">sizeof</span>(offs_t)/4; <span class="comment">// log(sizeof(offs_t))</span>00067 <span class="keyword">const</span> size_t dbBitmapSegmentBits = dbPageBits + 3 + dbAllocationQuantumBits;00068 <span class="keyword">const</span> size_t dbBitmapSegmentSize = 1 << dbBitmapSegmentBits;00069 <span class="keyword">const</span> size_t dbBitmapPages = 1 << (dbDatabaseOffsetBits-dbBitmapSegmentBits);00070 <span class="keyword">const</span> size_t dbDirtyPageBitmapSize = 1 << (dbDatabaseOidBits-dbPageBits+dbHandleBits-3);00071 <span class="keyword">const</span> size_t dbDefaultSelectionLimit = 2000000000;00072 00073 <span class="keyword">const</span> <span class="keywordtype">int</span> dbBMsearchThreshold = 512;00074 00075 <span class="keyword">const</span> <span class="keywordtype">char</span> dbMatchAnyOneChar = <span class="charliteral">'_'</span>;00076 <span class="keyword">const</span> <span class="keywordtype">char</span> dbMatchAnySubstring = <span class="charliteral">'%'</span>;00077 00081 <span class="keyword">enum</span> dbPredefinedIds { 00082 dbInvalidId,00083 dbMetaTableId, 00084 dbBitmapId,00085 dbFirstUserId = dbBitmapId + dbBitmapPages00086 };00087 <a name="l00091"></a><a class="code" href="classdbHeader.html">00091</a> <span class="keyword">class </span><a class="code" href="classdbHeader.html">dbHeader</a> { 00092 <span class="keyword">public</span>:00093 offs_t size; <span class="comment">// database file size</span>00094 int4 curr; <span class="comment">// current root</span>00095 int4 dirty; <span class="comment">// database was not closed normally</span>00096 int4 initialized; <span class="comment">// database is initilaized</span>00097 <span class="keyword">struct </span>{ 00098 offs_t index; <span class="comment">// offset to object index</span>00099 offs_t shadowIndex; <span class="comment">// offset to shadow index</span>00100 oid_t indexSize; <span class="comment">// size of object index</span>00101 oid_t shadowIndexSize; <span class="comment">// size of object index</span>00102 oid_t indexUsed; <span class="comment">// used part of the index </span>00103 oid_t freeList; <span class="comment">// L1 list of free descriptors</span>00104 } root[2];00105 00106 int4 majorVersion;00107 int4 minorVersion;00108 };00109 00110 <span class="keyword">union </span>dbSynthesizedAttribute;00111 <span class="keyword">struct </span>dbInheritedAttribute;00112 <span class="keyword">class </span>dbDatabaseThreadContext;00113 <span class="keyword">class </span><a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>;00114 <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00115 <span class="keyword">class </span>dbExprNode;00116 00117 <span class="keyword">class </span>dbMonitor { 00118 <span class="keyword">public</span>:00119 sharedsem_t sem;00120 sharedsem_t mutatorSem;00121 <span class="keywordtype">int</span> nReaders;00122 <span class="keywordtype">int</span> nWriters;00123 <span class="keywordtype">int</span> nWaitReaders;00124 <span class="keywordtype">int</span> nWaitWriters;00125 <span class="keywordtype">int</span> waitForUpgrade;00126 <span class="keywordtype">int</span> forceCommitCount;00127 <span class="keywordtype">int</span> backupInProgress;00128 <span class="keywordtype">int</span> uncommittedChanges;00129 00130 <span class="keywordtype">int</span> curr; <span class="comment">// copy of header->root, used to allow read access </span>00131 <span class="comment">// to the database during transaction commit</span>00132 00133 <span class="keywordtype">int</span> commitInProgress;00134 <span class="keywordtype">int</span> concurrentTransId;00135 00136 <span class="keywordtype">unsigned</span> lastDeadlockRecoveryTime;00137 00138 <span class="keywordtype">int</span> version; 00139 <span class="keywordtype">int</span> users; 00140 00141 dbProcessId ownerPid;00142 00143 dbDatabaseThreadContext* delayedCommitContext; <span class="comment">// save context of delayed transaction</span>00144 00145 int4 dirtyPagesMap[dbDirtyPageBitmapSize/4];00146 };00147 <a name="l00151"></a><a class="code" href="classdbL2List.html">00151</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbL2List { 00152 <span class="keyword">public</span>:00153 dbL2List* next; 00154 dbL2List* prev; 00155 00156 <span class="keywordtype">void</span> link(dbL2List* elem) { 00157 elem-><a class="code" href="classdbL2List.html#dbL2Listo1">prev</a> = <span class="keyword">this</span>;00158 elem-><a class="code" href="classdbL2List.html#dbL2Listo0">next</a> = next;00159 next = next-><a class="code" href="classdbL2List.html#dbL2Listo1">prev</a> = elem;00160 }00161 <span class="keywordtype">void</span> unlink() { 00162 next-><a class="code" href="classdbL2List.html#dbL2Listo1">prev</a> = prev;00163 prev-><a class="code" href="classdbL2List.html#dbL2Listo0">next</a> = next;00164 next = prev = <span class="keyword">this</span>;00165 }00166 <span class="keywordtype">bool</span> isEmpty() { 00167 <span class="keywordflow">return</span> next == <span class="keyword">this</span>;00168 }00169 <span class="keywordtype">void</span> reset() { 00170 next = prev = <span class="keyword">this</span>;00171 } 00172 dbL2List() { 00173 next = prev = <span class="keyword">this</span>;00174 }00175 ~dbL2List() { 00176 unlink();00177 }00178 };00179 00180 <span class="keyword">class </span>dbVisitedObject {00181 <span class="keyword">public</span>: 00182 dbVisitedObject* next;00183 oid_t oid;00184 00185 dbVisitedObject(oid_t oid, dbVisitedObject* chain) { 00186 this->oid = oid;00187 next = chain;00188 }00189 };00190 00191 <span class="keyword">template</span><<span class="keyword">class</span> T> 00192 <span class="keyword">class </span>dbHArray;00193 <a name="l00197"></a><a class="code" href="classdbDatabase.html">00197</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbDatabase { 00198 <span class="keyword">friend</span> <span class="keyword">class </span>dbSelection;00199 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>;00200 <span class="keyword">friend</span> <span class="keyword">class </span>dbHashTable;00201 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00202 <span class="keyword">friend</span> <span class="keyword">class </span>dbTtree;00203 <span class="keyword">friend</span> <span class="keyword">class </span>dbTtreeNode;00204 <span class="keyword">friend</span> <span class="keyword">class </span>dbParallelQueryContext; 00205 <span class="keyword">friend</span> <span class="keyword">class </span>dbServer;00206 <span class="keyword">friend</span> <span class="keyword">class </span>dbColumnBinding;00207 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbUserFunctionArgument.html">dbUserFunctionArgument</a>;00208 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbAnyContainer.html">dbAnyContainer</a>;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -