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

📄 database_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00636         dbLocation* next;00637     };00638     dbLocation* reservedChain;00639     00640     <span class="keywordtype">char</span>*     databaseName;00641     <span class="keywordtype">int</span>       databaseNameLen;00642     <span class="keywordtype">char</span>*     fileName;00643     <span class="keywordtype">int</span>       version;00644 00645     size_t    mmapSize;00646     00647     size_t    committedIndexSize;00648     size_t    currIndexSize;00649     oid_t     updatedRecordId;00650 00651     <span class="keywordtype">unsigned</span>  dbWaitLockTimeout;00652 00653     size_t    dbFileSizeLimit;00654 00655     <span class="keywordtype">bool</span>      uncommittedChanges;00656 00657     dbFile                    file;00658     dbSharedObject&lt;dbMonitor&gt; shm;00659     dbGlobalCriticalSection   cs;00660     dbGlobalCriticalSection   mutatorCS;00661     dbInitializationMutex     initMutex;00662     dbSemaphore               writeSem; 00663     dbSemaphore               readSem; 00664     dbSemaphore               upgradeSem; 00665     dbEvent                   backupCompletedEvent;00666     dbMonitor*                monitor;00667 00668     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>*        tables;00669 00670     <span class="keywordtype">int</span>*                      bitmapPageAvailableSpace;00671     <span class="keywordtype">bool</span>                      opened;00672 00673     <span class="keywordtype">long</span>                      allocatedSize;00674     00675     time_t                    commitDelay;     00676     time_t                    commitTimeout;00677     time_t                    commitTimerStarted;00678     00679     dbMutex                   delayedCommitStartTimerMutex;00680     dbMutex                   delayedCommitStopTimerMutex;00681     dbLocalEvent              delayedCommitStartTimerEvent; 00682     dbEvent                   delayedCommitStopTimerEvent; 00683     dbLocalEvent              commitThreadSyncEvent;00684     <span class="keywordtype">bool</span>                      delayedCommitEventsOpened;00685 00686     dbMutex                   backupMutex;    00687     dbLocalEvent              backupInitEvent;00688     <span class="keywordtype">char</span>*                     backupFileName;00689     time_t                    backupPeriod;00690     <span class="keywordtype">bool</span>                      stopDelayedCommitThread;00691 00692     dbThread                  backupThread;00693     dbThread                  commitThread;00694  00695     <span class="keywordtype">int</span>                       accessCount;00696 00697     <a class="code" href="classdbL2List.html">dbL2List</a>                  threadContextList;00698     dbMutex                   threadContextListMutex;00699 00700     dbErrorHandler            errorHandler;00701     <span class="keywordtype">void</span>*                     errorHandlerContext;00702     <span class="keywordtype">int</span>                       schemeVersion;00703     dbVisitedObject*          visitedChain;00704 00705     <span class="keywordtype">bool</span>                      confirmDeleteColumns;00706 00707     <span class="keywordtype">int</span>                       maxClientId;00708     <span class="keywordtype">int</span>                       selfId;00709 <span class="preprocessor">#ifdef AUTO_DETECT_PROCESS_CRASH</span>00710 <span class="preprocessor"></span>    dbWatchDog                selfWatchDog;00711     <a class="code" href="classdbL2List.html">dbL2List</a>                  watchDogThreadContexts;00712     dbMutex*                  watchDogMutex;00713 <span class="preprocessor">#endif</span>00714 <span class="preprocessor"></span>    00720     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* loadMetaTable();00721 00722     <span class="keywordtype">void</span> cleanup(dbInitializationMutex::initializationStatus status, <span class="keywordtype">int</span> step);00723 00724     <span class="keywordtype">void</span> delayedCommit();00725     <span class="keywordtype">void</span> backupScheduler();00726 00727     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc delayedCommitProc(<span class="keywordtype">void</span>* arg) { 00728         ((dbDatabase*)arg)-&gt;delayedCommit();00729     }00730 00731     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc backupSchedulerProc(<span class="keywordtype">void</span>* arg) { 00732         ((dbDatabase*)arg)-&gt;backupScheduler();00733     }00734 00735     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isReplicated();00736 00737 <span class="preprocessor">#ifdef AUTO_DETECT_PROCESS_CRASH</span>00738 <span class="preprocessor"></span>00742     <span class="keywordtype">void</span> revokeLock(<span class="keywordtype">int</span> clientId);00743 00748     <span class="keyword">static</span> <span class="keywordtype">void</span> watchDogThread(dbWatchDogContext* ctx);00749 00753     <span class="keywordtype">void</span> startWatchDogThreads();00754     00758     <span class="keywordtype">void</span> addLockOwner();00759 00763     <span class="keywordtype">void</span> removeLockOwner(<span class="keywordtype">int</span> clientId);00764 <span class="preprocessor">#endif</span>00765 <span class="preprocessor"></span>00770     <span class="keywordtype">void</span> commit(dbDatabaseThreadContext* ctx);00771 00776     <span class="keywordtype">void</span> restoreTablesConsistency();00777 <a name="l00783"></a><a class="code" href="classdbDatabase.html#dbSubSqlb7">00783</a>     <a class="code" href="classdbRecord.html">dbRecord</a>* getRow(oid_t oid) { 00784         assert(!(currIndex[oid]&amp;(dbFreeHandleMarker|dbInternalObjectMarker)));00785         <span class="keywordflow">return</span> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]); 00786     }00787 00797     <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid, size_t newSize); 00798 <a name="l00804"></a><a class="code" href="classdbDatabase.html#dbSubSqlb9">00804</a>     <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid) { 00805         <span class="keywordflow">if</span> (oid &lt; committedIndexSize &amp;&amp; index[0][oid] == index[1][oid]) { 00806             size_t size = getRow(oid)-&gt;<a class="code" href="classdbRecord.html#dbTablem8">size</a>;00807             size_t pageNo = oid/dbHandlesPerPage;00808             monitor-&gt;dirtyPagesMap[pageNo &gt;&gt; 5] |= 1 &lt;&lt; (pageNo &amp; 31);00809             cloneBitmap(currIndex[oid], size);00810             allocate(size, oid);00811         } 00812         <span class="keywordflow">return</span> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]); 00813     }00814 <a name="l00820"></a><a class="code" href="classdbDatabase.html#dbSubSqlb10">00820</a>     byte* get(oid_t oid) { 00821         <span class="keywordflow">return</span> baseAddr + (currIndex[oid] &amp; ~dbInternalObjectMarker); 00822     }00823 <a name="l00829"></a><a class="code" href="classdbDatabase.html#dbSubSqlb11">00829</a>     byte* put(oid_t oid) { 00830         <span class="keywordflow">if</span> (oid &lt; committedIndexSize &amp;&amp; index[0][oid] == index[1][oid]) { 00831             offs_t offs = currIndex[oid];00832             size_t size = internalObjectSize[offs &amp; dbInternalObjectMarker];00833             size_t pageNo = oid/dbHandlesPerPage;00834             monitor-&gt;dirtyPagesMap[pageNo &gt;&gt; 5] |= 1 &lt;&lt; (pageNo &amp; 31);00835             allocate(size, oid);00836             cloneBitmap(offs &amp; ~dbInternalObjectMarker, size);00837         } 00838         <span class="keywordflow">return</span> baseAddr + (currIndex[oid] &amp; ~dbInternalObjectMarker); 00839     }00840     00854     <span class="keywordtype">bool</span> isPrefixSearch(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, 00855                         dbExprNode* expr, dbExprNode* andExpr, 00856                         <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* &amp;indexedField);00857 00871     <span class="keywordtype">bool</span> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, 00872                            dbExprNode* expr, dbExprNode* andExpr, 00873                            <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* &amp;indexedField);00874 00886     <span class="keywordtype">bool</span> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, 00887                            dbExprNode* expr, dbExprNode* andExpr);00888 00901     <span class="keywordtype">bool</span> followInverseReference(dbExprNode* expr, dbExprNode* andExpr, 00902                                 <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, oid_t iref);00903 00911     <span class="keywordtype">bool</span> existsInverseReference(dbExprNode* expr, <span class="keywordtype">int</span> nExistsClauses);00912 00922     <span class="keyword">static</span> <span class="keywordtype">void</span> _fastcall execute(dbExprNode* expr, 00923                                   dbInheritedAttribute&amp; iattr,00924                                   dbSynthesizedAttribute&amp; sattr);00925 00935     <span class="keywordtype">bool</span> evaluate(dbExprNode* expr, oid_t oid, <a class="code" href="classdbTable.html">dbTable</a>* table, <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor);00936 00941     <span class="keywordtype">void</span> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor);00942 00948     <span class="keywordtype">void</span> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>&amp; query);00949 00955     <span class="keywordtype">void</span> traverse(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>&amp; query);00956 00963     <span class="keywordtype">void</span> update(oid_t oid, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <span class="keywordtype">void</span> <span class="keyword">const</span>* record);00964     00970     <span class="keywordtype">void</span> remove(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, oid_t oid);00971 00979     offs_t allocate(size_t size, oid_t oid = 0);00980 00986     <span class="keywordtype">void</span> deallocate(offs_t pos, size_t size);00987 00993     <span class="keywordtype">void</span> extend(offs_t size);00994 01000     <span class="keywordtype">void</span> cloneBitmap(offs_t pos, size_t size);01001 01008     oid_t allocateId(<span class="keywordtype">int</span> n = 1);01009 01016     <span class="keywordtype">void</span> freeId(oid_t oid, <span class="keywordtype">int</span> n = 1);01017 01023     <span class="keywordtype">void</span> updateCursors(oid_t oid, <span class="keywordtype">bool</span> removed = <span class="keyword">false</span>);01024     01028     <span class="keywordtype">void</span> recovery();01029 01038     <span class="keywordtype">bool</span> checkVersion();01039 <a name="l01045"></a><a class="code" href="classdbDatabase.html#dbSubSqlb31">01045</a>     oid_t allocateObject(dbInternalObject marker) {01046         oid_t oid = allocateId();01047         offs_t pos = allocate(internalObjectSize[marker]) + marker;01048         currIndex[oid] = pos;01049         <span class="keywordflow">return</span> oid;01050     }01051 <a name="l01058"></a><a class="code" href="classdbDatabase.html#dbSubSqlb32">01058</a>     oid_t allocateRow(oid_t tableId, size_t size)01059     {01060         oid_t oid = allocateId();01061         allocateRow(tableId, oid, size);01062         <span class="keywordflow">return</span> oid;01063     }01064     01072     <span class="keywordtype">void</span> allocateRow(oid_t tableId, oid_t oid, size_t size);01073 01079     <span class="keywordtype">void</span> freeRow(oid_t tableId, oid_t oid);01080 01084     <span class="keywordtype">void</span> freeObject(oid_t oid); 01085     

⌨️ 快捷键说明

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