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

📄 database_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00209     <span class="keyword">friend</span> <span class="keyword">class </span>dbFile;00210     <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00211     <span class="keyword">friend</span> <span class="keyword">class </span>GiSTdb;00212 00213 <span class="preprocessor">#ifdef HAS_TEMPLATE_FRIENDS</span>00214 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; 00215     <span class="keyword">friend</span> <span class="keyword">class </span>dbHArray;00216 <span class="preprocessor">#else</span>00217 <span class="preprocessor"></span>    <span class="keyword">friend</span> <span class="keyword">class </span>dbAnyHArray;00218 <span class="preprocessor">#endif</span>00219 <span class="preprocessor"></span>00220   <span class="keyword">public</span>:00230     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* databaseName, 00231               <span class="keywordtype">char</span> <span class="keyword">const</span>* fileName = NULL, 00232               time_t waitLockTimeoutMsec = INFINITE, 00233               time_t commitDelaySec = 0);00234 00238     <span class="keywordtype">void</span> close();00239 00243     <span class="keywordtype">void</span> commit();00244 00249     <span class="keywordtype">void</span> precommit();00250     00254     <span class="keywordtype">void</span> rollback();00255 00262     <span class="keywordtype">void</span> scheduleBackup(<span class="keywordtype">char</span> <span class="keyword">const</span>* fileName, time_t periodSec);00263     00268     <span class="keywordtype">void</span> attach();00269     00270     <span class="keyword">enum</span> DetachFlags { 00271         COMMIT          = 1,00272         DESTROY_CONTEXT = 200273     };00278     <span class="keywordtype">void</span> detach(<span class="keywordtype">int</span> flags = COMMIT|DESTROY_CONTEXT);00279 <a name="l00283"></a><a class="code" href="classdbDatabase.html#dbSubSqla14">00283</a>     <span class="keywordtype">void</span> lock() { beginTransaction(dbExclusiveLock); }00284 00293     <span class="keywordtype">bool</span> backup(<span class="keywordtype">char</span> <span class="keyword">const</span>* file, <span class="keywordtype">bool</span> compactify);00294     <a name="l00299"></a><a class="code" href="classdbDatabase.html#dbSubSqla16">00299</a>     <span class="keywordtype">void</span> assign(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>&amp; desc) { 00300         assert(((<span class="keywordtype">void</span>)<span class="stringliteral">"Table is not yet assigned to the database"</span>, 00301                 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp3">tableId</a> == 0));00302         desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp10">db</a> = <span class="keyword">this</span>; 00303         desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp11">fixedDatabase</a> = <span class="keyword">true</span>;00304     }00305 00313     <span class="keywordtype">void</span> setConcurrency(<span class="keywordtype">unsigned</span> nThreads);00314 <a name="l00319"></a><a class="code" href="classdbDatabase.html#dbSubSqla18">00319</a>     <span class="keywordtype">long</span> getAllocatedSize() { <span class="keywordflow">return</span> allocatedSize; }00320 <a name="l00325"></a><a class="code" href="classdbDatabase.html#dbSubSqla19">00325</a>     <span class="keywordtype">long</span> getDatabaseSize() { <span class="keywordflow">return</span> header-&gt;size; }00326 <a name="l00331"></a><a class="code" href="classdbDatabase.html#dbSubSqla20">00331</a>     <span class="keywordtype">int</span> getNumberOfReaders() { 00332         <span class="keywordflow">return</span> monitor-&gt;nReaders;00333     }00334 <a name="l00339"></a><a class="code" href="classdbDatabase.html#dbSubSqla21">00339</a>     <span class="keywordtype">int</span> getNumberOfWriters() { 00340         <span class="keywordflow">return</span> monitor-&gt;nWriters;00341     }00342 <a name="l00347"></a><a class="code" href="classdbDatabase.html#dbSubSqla22">00347</a>     <span class="keywordtype">int</span> getNumberOfBlockedReaders() { 00348         <span class="keywordflow">return</span> monitor-&gt;nReaders;00349     }00350 <a name="l00355"></a><a class="code" href="classdbDatabase.html#dbSubSqla23">00355</a>     <span class="keywordtype">int</span> getNumberOfBlockedWriters() { 00356         <span class="keywordflow">return</span> monitor-&gt;nWriters;00357     }00358 <a name="l00363"></a><a class="code" href="classdbDatabase.html#dbSubSqla24">00363</a>     <span class="keywordtype">int</span> getNumberOfUsers() { 00364         <span class="keywordflow">return</span> monitor-&gt;users;00365     }00366 <a name="l00374"></a><a class="code" href="classdbDatabase.html#dbSubSqla25">00374</a>     <span class="keywordtype">void</span> allowColumnsDeletion(<span class="keywordtype">bool</span> enabled = <span class="keyword">true</span>) { 00375         confirmDeleteColumns = enabled;00376     }00377 00378     <span class="keyword">enum</span> dbErrorClass { 00379         NoError, 00380         QueryError,00381         ArithmeticError,00382         IndexOutOfRangeError,00383         DatabaseOpenError,00384         FileError,00385         OutOfMemoryError,00386         Deadlock,00387         NullReferenceError,00388         LockRevoked,00389         FileLimitExeeded,00390         InconsistentInverseReference,00391         DatabaseReadOnly00392     };00393     <span class="keyword">typedef</span> void (*dbErrorHandler)(<span class="keywordtype">int</span> error, <span class="keywordtype">char</span> <span class="keyword">const</span>* msg, <span class="keywordtype">int</span> msgarg); 00394 00400     dbErrorHandler setErrorHandler(dbErrorHandler newHandler);        00401 00409     <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleError(dbErrorClass error, <span class="keywordtype">char</span> <span class="keyword">const</span>* msg = NULL, 00410                              <span class="keywordtype">int</span> arg = 0); 00411 00418     <span class="keywordtype">void</span> insertRecord(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbAnyReference.html">dbAnyReference</a>* ref, 00419                       <span class="keywordtype">void</span> <span class="keyword">const</span>* record);00420 <a name="l00424"></a><a class="code" href="classdbDatabase.html#dbSubSqla28">00424</a>     <span class="keywordtype">bool</span> isOpen()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> opened; }00425 00429     <span class="keywordtype">int</span>  getVersion();00430 <a name="l00435"></a><a class="code" href="classdbDatabase.html#dbSubSqla30">00435</a>     <span class="keywordtype">void</span> setFileSizeLimit(size_t limit) { 00436         dbFileSizeLimit = limit;00437     }00438 00439 <span class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</span>00440 <span class="preprocessor"></span>00445     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l00446"></a><a class="code" href="classdbDatabase.html#dbSubSqla31">00446</a>     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> insert(T <span class="keyword">const</span>&amp; record) {00447         <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> ref;00448         insertRecord(lookupTable(&amp;T::dbDescriptor), &amp;ref, &amp;record);00449         <span class="keywordflow">return</span> ref;00450     }00451 <span class="preprocessor">#endif</span>00452 <span class="preprocessor"></span>00458     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* lookupTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00459 00460     <span class="keyword">enum</span> dbAccessType { 00461         dbReadOnly         = 0,00462         dbAllAccess        = 1,00463         dbConcurrentRead   = 2,00464         dbConcurrentUpdate = 300465     };00477     dbDatabase(dbAccessType type = dbAllAccess,00478                size_t dbInitSize = dbDefaultInitDatabaseSize,00479                size_t dbExtensionQuantum = dbDefaultExtensionQuantum,00480                size_t dbInitIndexSize = dbDefaultInitIndexSize,00481                <span class="keywordtype">int</span> nThreads = 1 00482                <span class="comment">// Do not specify the last parameter - it is only for checking</span>00483                <span class="comment">// that application and GigaBASE library were built with the </span>00484                <span class="comment">// same compiler options (-DNO_PTHREADS is critical)</span>00485                <span class="comment">// Mismached parameters should cause linker error</span>00486 #ifdef NO_PTHREADS00487                , <span class="keywordtype">bool</span> usePthreads = <span class="keyword">false</span>00488 #endif00489                );00493     <span class="keyword">virtual</span> ~dbDatabase(); 00494 00495     <span class="keyword">const</span> dbAccessType accessType;00496     <span class="keyword">const</span> size_t initSize;00497     <span class="keyword">const</span> size_t extensionQuantum;00498     <span class="keyword">const</span> size_t initIndexSize;00499 00500     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> dbParallelScanThreshold; 00501 00502   <span class="keyword">protected</span>:00503     <span class="keyword">static</span> size_t internalObjectSize[];00504 00505     dbThreadPool threadPool;00506 00507     dbThreadContext&lt;dbDatabaseThreadContext&gt; threadContext;00508 00509     byte*     baseAddr;         <span class="comment">// base address of database file mapping</span>00510     <a class="code" href="classdbHeader.html">dbHeader</a>* header;           <span class="comment">// base address of database file mapping</span>00511     offs_t*   currIndex;        <span class="comment">// current database object index</span>00512     offs_t*   index[2];00513     <span class="keywordtype">unsigned</span>  parThreads;00514     <span class="keywordtype">bool</span>      modified;00515 00516     size_t    currRBitmapPage;  <span class="comment">//current bitmap page for allocating records</span>00517     size_t    currRBitmapOffs;  <span class="comment">//offset in current bitmap page for allocating</span>00518                                 <span class="comment">//unaligned records</span>00519     size_t    currPBitmapPage;  <span class="comment">//current bitmap page for allocating page objects</span>00520     size_t    currPBitmapOffs;  <span class="comment">//offset in current bitmap page for allocating</span>00521                                 <span class="comment">//page objects</span>00522     <span class="keyword">struct </span>dbLocation { 00523         offs_t      pos;00524         size_t      size;00525         dbLocation* next;00526     };00527     dbLocation* reservedChain;00528     00529     <span class="keywordtype">char</span>*     databaseName;00530     <span class="keywordtype">int</span>       databaseNameLen;00531     <span class="keywordtype">char</span>*     fileName;00532     <span class="keywordtype">int</span>       version;00533 00534     size_t    mmapSize;00535     00536     size_t    committedIndexSize;00537     size_t    currIndexSize;00538     oid_t     updatedRecordId;00539 00540     <span class="keywordtype">unsigned</span>  dbWaitLockTimeout;

⌨️ 快捷键说明

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