database_8h-source.html

来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 674 行 · 第 1/3 页

HTML
674
字号
00311 00317     dbErrorHandler setErrorHandler(dbErrorHandler newHandler);        00318 00326     <font class="keyword">virtual</font> <font class="keywordtype">void</font> handleError(dbErrorClass error, <font class="keywordtype">char</font> <font class="keyword">const</font>* msg = NULL, 00327                              <font class="keywordtype">int</font> arg = 0); 00328 00335     <font class="keywordtype">void</font> insertRecord(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbAnyReference.html">dbAnyReference</a>* ref, 00336                       <font class="keywordtype">void</font> <font class="keyword">const</font>* record);00337 <a name="l00341"></a><a class="code" href="classdbDatabase.html#dbSubSqla19">00341</a>     <font class="keywordtype">bool</font> isOpen()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> opened; }00342 00346     <font class="keywordtype">int</font>  getVersion();00347 <a name="l00352"></a><a class="code" href="classdbDatabase.html#dbSubSqla21">00352</a>     <font class="keywordtype">void</font> setFileSizeLimit(size_t limit) { 00353         dbFileSizeLimit = limit;00354     }00355 00356 <font class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</font>00357 <font class="preprocessor"></font>00362     <font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;<a name="l00363"></a><a class="code" href="classdbDatabase.html#dbSubSqla22">00363</a>     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> insert(T <font class="keyword">const</font>&amp; record) {00364         <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> ref;00365         insertRecord(lookupTable(&amp;T::dbDescriptor), &amp;ref, &amp;record);00366         <font class="keywordflow">return</font> ref;00367     }00368 <font class="preprocessor">#endif</font>00369 <font class="preprocessor"></font>00375     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* lookupTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00376 00377     <font class="keyword">enum</font> dbAccessType { 00378         dbReadOnly         = 0,00379         dbAllAccess        = 1,00380         dbConcurrentRead   = 2,00381         dbConcurrentUpdate = 300382     };00394     dbDatabase(dbAccessType type = dbAllAccess,00395                size_t dbInitSize = dbDefaultInitDatabaseSize,00396                size_t dbExtensionQuantum = dbDefaultExtensionQuantum,00397                size_t dbInitIndexSize = dbDefaultInitIndexSize,00398                <font class="keywordtype">int</font> nThreads = 1 00399                <font class="comment">// Do not specify the last parameter - it is only for checking</font>00400                <font class="comment">// that application and GigaBASE library were built with the </font>00401                <font class="comment">// same compiler options (-DNO_PTHREADS is critical)</font>00402                <font class="comment">// Mismached parameters should cause linker error</font>00403 #ifdef NO_PTHREADS00404                , <font class="keywordtype">bool</font> usePthreads = <font class="keyword">false</font>00405 #endif00406                );00410     <font class="keyword">virtual</font> ~dbDatabase(); 00411 00417     <font class="keyword">static</font> <font class="keywordtype">void</font> cleanup();00418     00419     <font class="keyword">const</font> dbAccessType accessType;00420     <font class="keyword">const</font> size_t initSize;00421     <font class="keyword">const</font> size_t extensionQuantum;00422     <font class="keyword">const</font> size_t initIndexSize;00423 00424     <font class="keyword">static</font> <font class="keywordtype">unsigned</font> dbParallelScanThreshold; 00425 00426   <font class="keyword">protected</font>:00427     <font class="keyword">static</font> size_t internalObjectSize[];00428 00429     dbThreadPool threadPool;00430 00431     dbThreadContext&lt;dbDatabaseThreadContext&gt; threadContext;00432 00433     byte*     baseAddr;         <font class="comment">// base address of database file mapping</font>00434     <a class="code" href="classdbHeader.html">dbHeader</a>* header;           <font class="comment">// base address of database file mapping</font>00435     offs_t*   currIndex;        <font class="comment">// current database object index</font>00436     offs_t*   index[2];00437     <font class="keywordtype">unsigned</font>  parThreads;00438     <font class="keywordtype">bool</font>      modified;00439 00440     size_t    currRBitmapPage;  <font class="comment">//current bitmap page for allocating records</font>00441     size_t    currRBitmapOffs;  <font class="comment">//offset in current bitmap page for allocating</font>00442                                 <font class="comment">//unaligned records</font>00443     size_t    currPBitmapPage;  <font class="comment">//current bitmap page for allocating page objects</font>00444     size_t    currPBitmapOffs;  <font class="comment">//offset in current bitmap page for allocating</font>00445                                 <font class="comment">//page objects</font>00446     <font class="keyword">struct </font>dbLocation { 00447         offs_t      pos;00448         size_t      size;00449         dbLocation* next;00450     };00451     dbLocation* reservedChain;00452     00453     <font class="keywordtype">char</font>*     databaseName;00454     <font class="keywordtype">int</font>       databaseNameLen;00455     <font class="keywordtype">char</font>*     fileName;00456     <font class="keywordtype">int</font>       version;00457 00458     size_t    mmapSize;00459     00460     size_t    committedIndexSize;00461     size_t    currIndexSize;00462     oid_t     updatedRecordId;00463 00464     <font class="keywordtype">unsigned</font>  dbWaitLockTimeout;00465 00466     size_t    dbFileSizeLimit;00467 00468     <font class="keywordtype">bool</font>      uncommittedChanges;00469 00470     dbFile                    file;00471     dbSharedObject&lt;dbMonitor&gt; shm;00472     dbGlobalCriticalSection   cs;00473     dbGlobalCriticalSection   mutatorCS;00474     dbInitializationMutex     initMutex;00475     dbSemaphore               writeSem; 00476     dbSemaphore               readSem; 00477     dbSemaphore               upgradeSem; 00478     dbEvent                   backupCompletedEvent;00479     dbMonitor*                monitor;00480 00481     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>*        tables;00482 00483     <font class="keywordtype">int</font>*                      bitmapPageAvailableSpace;00484     <font class="keywordtype">bool</font>                      opened;00485 00486     <font class="keywordtype">long</font>                      allocatedSize;00487     00488     time_t                    commitDelay;     00489     time_t                    commitTimeout;00490     time_t                    commitTimerStarted;00491     00492     dbMutex                   delayedCommitStartTimerMutex;00493     dbMutex                   delayedCommitStopTimerMutex;00494     dbLocalEvent              delayedCommitStartTimerEvent; 00495     dbEvent                   delayedCommitStopTimerEvent; 00496     dbLocalEvent              commitThreadSyncEvent;00497 00498     dbMutex                   backupMutex;    00499     dbLocalEvent              backupInitEvent;00500     <font class="keywordtype">char</font>*                     backupFileName;00501     time_t                    backupPeriod;00502     <font class="keywordtype">bool</font>                      stopDelayedCommitThread;00503 00504     dbThread                  backupThread;00505     dbThread                  commitThread;00506  00507     <font class="keywordtype">int</font>                       accessCount;00508 00509     <a class="code" href="classdbL2List.html">dbL2List</a>                  threadContextList;00510     dbMutex                   threadContextListMutex;00511 00512     dbErrorHandler            errorHandler;00513 00514     <font class="keywordtype">void</font> delayedCommit();00515     <font class="keywordtype">void</font> backupScheduler();00516 00517     <font class="keyword">static</font> <font class="keywordtype">void</font> thread_proc delayedCommitProc(<font class="keywordtype">void</font>* arg) { 00518         ((dbDatabase*)arg)-&gt;delayedCommit();00519     }00520 00521     <font class="keyword">static</font> <font class="keywordtype">void</font> thread_proc backupSchedulerProc(<font class="keywordtype">void</font>* arg) { 00522         ((dbDatabase*)arg)-&gt;backupScheduler();00523     }00524 00529     <font class="keywordtype">void</font> commit(dbDatabaseThreadContext* ctx);00530 00535     <font class="keywordtype">void</font> restoreTablesConsistency();00536 <a name="l00542"></a><a class="code" href="classdbDatabase.html#dbSubSqlb4">00542</a>     <a class="code" href="classdbRecord.html">dbRecord</a>* getRow(oid_t oid) { 00543         assert(!(currIndex[oid]&amp;(dbFreeHandleMarker|dbInternalObjectMarker)));00544         <font class="keywordflow">return</font> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]); 00545     }00546 00556     <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid, size_t newSize); 00557 <a name="l00563"></a><a class="code" href="classdbDatabase.html#dbSubSqlb6">00563</a>     <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid) { 00564         <font class="keywordflow">if</font> (oid &lt; committedIndexSize &amp;&amp; index[0][oid] == index[1][oid]) { 00565             size_t size = getRow(oid)-&gt;<a class="code" href="classdbRecord.html#dbTablem7">size</a>;00566             size_t pageNo = oid/dbHandlesPerPage;00567             monitor-&gt;dirtyPagesMap[pageNo &gt;&gt; 5] |= 1 &lt;&lt; (pageNo &amp; 31);00568             cloneBitmap(currIndex[oid], size);00569             allocate(size, oid);00570         } 00571         <font class="keywordflow">return</font> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]); 00572     }00573 <a name="l00579"></a><a class="code" href="classdbDatabase.html#dbSubSqlb7">00579</a>     byte* get(oid_t oid) { 00580         <font class="keywordflow">return</font> baseAddr + (currIndex[oid] &amp; ~dbInternalObjectMarker); 00581     }00582 <a name="l00588"></a><a class="code" href="classdbDatabase.html#dbSubSqlb8">00588</a>     byte* put(oid_t oid) { 00589         <font class="keywordflow">if</font> (oid &lt; committedIndexSize &amp;&amp; index[0][oid] == index[1][oid]) { 00590             offs_t offs = currIndex[oid];00591             size_t size = internalObjectSize[offs &amp; dbInternalObjectMarker];00592             size_t pageNo = oid/dbHandlesPerPage;00593             monitor-&gt;dirtyPagesMap[pageNo &gt;&gt; 5] |= 1 &lt;&lt; (pageNo &amp; 31);00594             allocate(size, oid);00595             cloneBitmap(offs &amp; ~dbInternalObjectMarker, size);00596         } 00597         <font class="keywordflow">return</font> baseAddr + (currIndex[oid] &amp; ~dbInternalObjectMarker); 00598     }00599     00612     <font class="keywordtype">bool</font> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, 00613                            dbExprNode* expr, dbExprNode* andExpr, 00614                            <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* &amp;indexedField);00615 00627     <font class="keywordtype">bool</font> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, 00628                            dbExprNode* expr, dbExprNode* andExpr);00629 00642     <font class="keywordtype">bool</font> followInverseReference(dbExprNode* expr, dbExprNode* andExpr, 00643                                 <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, oid_t iref);00644 00652     <font class="keywordtype">bool</font> existsInverseReference(dbExprNode* expr, <font class="keywordtype">int</font> nExistsClauses);00653 00663     <font class="keyword">static</font> <font class="keywordtype">void</font> _fastcall execute(dbExprNode* expr, 00664                                   dbInheritedAttribute&amp; iattr,00665                                   dbSynthesizedAttribute&amp; sattr);00666 00676     <font class="keywordtype">bool</font> evaluate(dbExprNode* expr, oid_t oid, <a class="code" href="classdbTable.html">dbTable</a>* table, <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor);00677 00682     <font class="keywordtype">void</font> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor);00683 00689     <font class="keywordtype">void</font> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>&amp; query);00690 00696     <font class="keywordtype">void</font> traverse(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>&amp; query);00697 00704     <font class="keywordtype">void</font> update(oid_t oid, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <font class="keywordtype">void</font> <font class="keyword">const</font>* record);00705     00711     <font class="keywordtype">void</font> remove(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, oid_t oid);00712 00720     offs_t allocate(size_t size, oid_t oid = 0);

⌨️ 快捷键说明

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