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

📄 database_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>database.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center><hr><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 00018 BEGIN_FASTDB_NAMESPACE00019 00023 <span class="preprocessor">#ifdef DISKLESS_CONFIGURATION</span>00024 <span class="preprocessor"></span><span class="comment">// In diskless confiuration database can not be reallocated</span>00025 <span class="keyword">const</span> size_t dbDefaultInitDatabaseSize = 32*1024*1024;00026 <span class="preprocessor">#else</span>00027 <span class="preprocessor"></span><span class="keyword">const</span> size_t dbDefaultInitDatabaseSize = 1024*1024;00028 <span class="preprocessor">#endif</span>00029 <span class="preprocessor"></span>00033 <span class="keyword">const</span> size_t dbDefaultInitIndexSize = 512*1024;00034 00038 <span class="keyword">const</span> size_t dbDefaultExtensionQuantum = 4*1024*1024;00039 00043 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> dbMaxParallelSearchThreads = 64;00044 00048 <span class="keyword">enum</span> dbInternalObject { 00049     dbTableRow, 00050     dbPageObjectMarker,00051     dbTtreeMarker,00052     dbTtreeNodeMarker,00053     dbHashTableMarker,00054     dbHashTableItemMarker,00055     dbRtreeMarker,00056     dbRtreePageMarker,00057     00058     dbInternalObjectMarker = 7 <span class="comment">// mask for internals object markers</span>00059 };00060     00061 <span class="keyword">const</span> offs_t dbFreeHandleMarker = (offs_t)1 &lt;&lt; (<span class="keyword">sizeof</span>(offs_t)*8 - 1); 00062 00063 <span class="keyword">const</span> size_t dbAllocationQuantumBits = 4;00064 <span class="keyword">const</span> size_t dbAllocationQuantum = 1 &lt;&lt; dbAllocationQuantumBits;00065 <span class="keyword">const</span> size_t dbPageBits = 12;00066 <span class="keyword">const</span> size_t dbPageSize = 1 &lt;&lt; dbPageBits;00067 <span class="keyword">const</span> size_t dbIdsPerPage = dbPageSize / <span class="keyword">sizeof</span>(oid_t);00068 <span class="keyword">const</span> size_t dbHandlesPerPage = dbPageSize / <span class="keyword">sizeof</span>(offs_t);00069 <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>00070 <span class="keyword">const</span> size_t dbBitmapSegmentBits = dbPageBits + 3 + dbAllocationQuantumBits;00071 <span class="keyword">const</span> size_t dbBitmapSegmentSize = 1 &lt;&lt; dbBitmapSegmentBits;00072 <span class="keyword">const</span> size_t dbBitmapPages = 1 &lt;&lt; (dbDatabaseOffsetBits-dbBitmapSegmentBits);00073 <span class="keyword">const</span> size_t dbDirtyPageBitmapSize = 1 &lt;&lt; (dbDatabaseOidBits-dbPageBits+dbHandleBits-3);00074 <span class="keyword">const</span> size_t dbDefaultSelectionLimit = 2000000000;00075 00076 <span class="keyword">const</span> <span class="keywordtype">int</span>    dbBMsearchThreshold = 512;00077 00078 <span class="keyword">const</span> <span class="keywordtype">char</span>   dbMatchAnyOneChar = <span class="charliteral">'_'</span>;00079 <span class="keyword">const</span> <span class="keywordtype">char</span>   dbMatchAnySubstring = <span class="charliteral">'%'</span>;00080 00081 <span class="keyword">const</span> <span class="keywordtype">int</span>    dbMaxReaders = 64; <span class="comment">// maximal number of readers concurrently accessing the database</span>00082 00086 <span class="keyword">enum</span> dbPredefinedIds { 00087     dbInvalidId,00088     dbMetaTableId, 00089     dbBitmapId,00090     dbFirstUserId = dbBitmapId + dbBitmapPages00091 };00092 <a name="l00096"></a><a class="code" href="classdbHeader.html">00096</a> <span class="keyword">class </span><a class="code" href="classdbHeader.html">dbHeader</a> { 00097   <span class="keyword">public</span>:00098     offs_t size;  <span class="comment">// database file size</span>00099     int4   curr;  <span class="comment">// current root</span>00100     int4   dirty; <span class="comment">// database was not closed normally</span>00101     int4   initialized; <span class="comment">// database is initilaized</span>00102     int4   pad;00103     <span class="keyword">struct </span>{ 00104         offs_t index;           <span class="comment">// offset to object index</span>00105         offs_t shadowIndex;     <span class="comment">// offset to shadow index</span>00106         oid_t  indexSize;       <span class="comment">// size of object index</span>00107         oid_t  shadowIndexSize; <span class="comment">// size of object index</span>00108         oid_t  indexUsed;       <span class="comment">// used part of the index   </span>00109         oid_t  freeList;        <span class="comment">// L1 list of free descriptors</span>00110     } root[2];00111     00112     int4 majorVersion;00113     int4 minorVersion;00114     int4 mode;00115 00116     <span class="keyword">enum</span> { 00117         MODE_OID_64        = 0x01,00118         MODE_OFFS_64       = 0x02,00119         MODE_AUTOINCREMENT = 0x04,00120         MODE_RECTANGLE_DIM = 0x0800121     };    00122 00123     <span class="keywordtype">int</span> getVersion() { 00124         <span class="keywordflow">return</span> majorVersion*100 + minorVersion;00125     }00126     00127     <span class="keywordtype">bool</span> isCompatible();00128     <span class="keyword">static</span> <span class="keywordtype">int</span> getCurrentMode();00129 };00130 00131 <span class="keyword">union  </span>dbSynthesizedAttribute;00132 <span class="keyword">struct </span>dbInheritedAttribute;00133 <span class="keyword">class </span>dbDatabaseThreadContext;00134 <span class="keyword">class </span><a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>;00135 <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00136 <span class="keyword">class </span>dbExprNode;00137 00138 <span class="keyword">struct </span>dbMemoryStatistic { 00139     offs_t used;00140     offs_t free;00141     offs_t nHoles;00142     offs_t minHoleSize;00143     offs_t maxHoleSize;00144     size_t nHolesOfSize[dbDatabaseOffsetBits];00145 };00146 00147 00148 <span class="keyword">class </span>dbMonitor { 00149   <span class="keyword">public</span>:00150     sharedsem_t sem;00151     sharedsem_t mutatorSem;00152     <span class="keywordtype">int</span>  nReaders;00153     <span class="keywordtype">int</span>  nWriters;00154     <span class="keywordtype">int</span>  nConcurrentWriters;00155     <span class="keywordtype">int</span>  nWaitReaders;00156     <span class="keywordtype">int</span>  nWaitWriters;00157     <span class="keywordtype">int</span>  waitForUpgrade;00158     <span class="keywordtype">int</span>  forceCommitCount;00159     <span class="keywordtype">int</span>  backupInProgress;00160     <span class="keywordtype">int</span>  uncommittedChanges;00161 00162     <span class="keywordtype">int</span>  curr;             <span class="comment">// copy of header-&gt;root, used to allow read access </span>00163                            <span class="comment">// to the database during transaction commit</span>00164 00165     <span class="keywordtype">int</span>  commitInProgress;00166     <span class="keywordtype">int</span>  concurrentTransId;00167 00168     <span class="keywordtype">unsigned</span> lastDeadlockRecoveryTime;00169 00170     <span class="keywordtype">int</span>  version; 00171     <span class="keywordtype">int</span>  users;  00172 00173     dbProcessId ownerPid;00174 00175     dbDatabaseThreadContext*  delayedCommitContext;     <span class="comment">// save context of delayed transaction</span>00176 00177     int4 dirtyPagesMap[dbDirtyPageBitmapSize/4];00178 00179     <span class="keywordtype">int</span>  sharedLockOwner[dbMaxReaders];00180     <span class="keywordtype">int</span>  exclusiveLockOwner;00181     <span class="keywordtype">int</span>  clientId;00182     <span class="keywordtype">int</span>  upgradeId;00183 00184     <span class="keywordtype">int</span>  modified;00185 };00186 <a name="l00190"></a><a class="code" href="classdbL2List.html">00190</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY <a class="code" href="classdbL2List.html">dbL2List</a> { 00191   <span class="keyword">public</span>:00192     <a class="code" href="classdbL2List.html">dbL2List</a>* next; 00193     <a class="code" href="classdbL2List.html">dbL2List</a>* prev; 00194 00195     <span class="keywordtype">void</span> link(<a class="code" href="classdbL2List.html">dbL2List</a>* elem) { 00196         elem-&gt;<a class="code" href="classdbL2List.html#dbL2Listm1">prev</a> = <span class="keyword">this</span>;00197         elem-&gt;<a class="code" href="classdbL2List.html#dbL2Listm0">next</a> = next;00198         next = next-&gt;<a class="code" href="classdbL2List.html#dbL2Listm1">prev</a> = elem;00199     }00200     <span class="keywordtype">void</span> unlink() { 00201         next-&gt;<a class="code" href="classdbL2List.html#dbL2Listm1">prev</a> = prev;00202         prev-&gt;<a class="code" href="classdbL2List.html#dbL2Listm0">next</a> = next;00203         next = prev = <span class="keyword">this</span>;00204     }00205     <span class="keywordtype">bool</span> isEmpty() { 00206         <span class="keywordflow">return</span> next == <span class="keyword">this</span>;00207     }00208     <span class="keywordtype">void</span> reset() { 00209         next = prev = <span class="keyword">this</span>;00210     }        00211     <a class="code" href="classdbL2List.html">dbL2List</a>() { 00212         next = prev = <span class="keyword">this</span>;00213     }00214     ~<a class="code" href="classdbL2List.html">dbL2List</a>() { 00215         unlink();00216     }00217 };00218 00219 <span class="keyword">class </span>dbVisitedObject {00220   <span class="keyword">public</span>: 00221     dbVisitedObject* next;00222     oid_t            oid;00223 00224     dbVisitedObject(oid_t oid, dbVisitedObject* chain) {         00225         this-&gt;oid = oid;00226         next = chain;00227     }00228 };00229     00230 <span class="preprocessor">#ifdef AUTO_DETECT_PROCESS_CRASH</span>00231 <span class="preprocessor"></span><span class="keyword">struct </span>dbWatchDogContext : <a class="code" href="classdbL2List.html">dbL2List</a> { 00232     dbThread    thread;00233     dbWatchDog  watchDog;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -