⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!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&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div><h1>database.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; DATABASE.H &gt;----------------------------------------------------*--------*</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 &lt;&lt; (<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 &lt;&lt; dbAllocationQuantumBits;00062 <span class="keyword">const</span> size_t dbPageBits = 12;00063 <span class="keyword">const</span> size_t dbPageSize = 1 &lt;&lt; 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 &lt;&lt; dbBitmapSegmentBits;00069 <span class="keyword">const</span> size_t dbBitmapPages = 1 &lt;&lt; (dbDatabaseOffsetBits-dbBitmapSegmentBits);00070 <span class="keyword">const</span> size_t dbDirtyPageBitmapSize = 1 &lt;&lt; (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-&gt;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-&gt;<a class="code" href="classdbL2List.html#dbL2Listo1">prev</a> = <span class="keyword">this</span>;00158         elem-&gt;<a class="code" href="classdbL2List.html#dbL2Listo0">next</a> = next;00159         next = next-&gt;<a class="code" href="classdbL2List.html#dbL2Listo1">prev</a> = elem;00160     }00161     <span class="keywordtype">void</span> unlink() { 00162         next-&gt;<a class="code" href="classdbL2List.html#dbL2Listo1">prev</a> = prev;00163         prev-&gt;<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-&gt;oid = oid;00187         next = chain;00188     }00189 };00190     00191 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; 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 + -