📄 database_8h-source.html
字号:
00541 00542 size_t dbFileSizeLimit;00543 00544 <span class="keywordtype">bool</span> uncommittedChanges;00545 00546 dbFile file;00547 dbSharedObject<dbMonitor> shm;00548 dbGlobalCriticalSection cs;00549 dbGlobalCriticalSection mutatorCS;00550 dbInitializationMutex initMutex;00551 dbSemaphore writeSem; 00552 dbSemaphore readSem; 00553 dbSemaphore upgradeSem; 00554 dbEvent backupCompletedEvent;00555 dbMonitor* monitor;00556 00557 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* tables;00558 00559 <span class="keywordtype">int</span>* bitmapPageAvailableSpace;00560 <span class="keywordtype">bool</span> opened;00561 00562 <span class="keywordtype">long</span> allocatedSize;00563 00564 time_t commitDelay; 00565 time_t commitTimeout;00566 time_t commitTimerStarted;00567 00568 dbMutex delayedCommitStartTimerMutex;00569 dbMutex delayedCommitStopTimerMutex;00570 dbLocalEvent delayedCommitStartTimerEvent; 00571 dbEvent delayedCommitStopTimerEvent; 00572 dbLocalEvent commitThreadSyncEvent;00573 00574 dbMutex backupMutex; 00575 dbLocalEvent backupInitEvent;00576 <span class="keywordtype">char</span>* backupFileName;00577 time_t backupPeriod;00578 <span class="keywordtype">bool</span> stopDelayedCommitThread;00579 00580 dbThread backupThread;00581 dbThread commitThread;00582 00583 <span class="keywordtype">int</span> accessCount;00584 00585 dbL2List threadContextList;00586 dbMutex threadContextListMutex;00587 00588 dbErrorHandler errorHandler;00589 <span class="keywordtype">int</span> schemeVersion;00590 dbVisitedObject* visitedChain;00591 00592 <span class="keywordtype">bool</span> confirmDeleteColumns;00593 00594 <span class="keywordtype">void</span> delayedCommit();00595 <span class="keywordtype">void</span> backupScheduler();00596 00597 <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc delayedCommitProc(<span class="keywordtype">void</span>* arg) { 00598 ((dbDatabase*)arg)->delayedCommit();00599 }00600 00601 <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc backupSchedulerProc(<span class="keywordtype">void</span>* arg) { 00602 ((dbDatabase*)arg)->backupScheduler();00603 }00604 00609 <span class="keywordtype">void</span> commit(dbDatabaseThreadContext* ctx);00610 00615 <span class="keywordtype">void</span> restoreTablesConsistency();00616 <a name="l00622"></a><a class="code" href="classdbDatabase.html#dbSubSqlb4">00622</a> <a class="code" href="classdbRecord.html">dbRecord</a>* getRow(oid_t oid) { 00623 assert(!(currIndex[oid]&(dbFreeHandleMarker|dbInternalObjectMarker)));00624 <span class="keywordflow">return</span> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]); 00625 }00626 00636 <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid, size_t newSize); 00637 <a name="l00643"></a><a class="code" href="classdbDatabase.html#dbSubSqlb6">00643</a> <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid) { 00644 <span class="keywordflow">if</span> (oid < committedIndexSize && index[0][oid] == index[1][oid]) { 00645 size_t size = getRow(oid)-><a class="code" href="classdbRecord.html#dbTableo8">size</a>;00646 size_t pageNo = oid/dbHandlesPerPage;00647 monitor->dirtyPagesMap[pageNo >> 5] |= 1 << (pageNo & 31);00648 cloneBitmap(currIndex[oid], size);00649 allocate(size, oid);00650 } 00651 <span class="keywordflow">return</span> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]); 00652 }00653 <a name="l00659"></a><a class="code" href="classdbDatabase.html#dbSubSqlb7">00659</a> byte* get(oid_t oid) { 00660 <span class="keywordflow">return</span> baseAddr + (currIndex[oid] & ~dbInternalObjectMarker); 00661 }00662 <a name="l00668"></a><a class="code" href="classdbDatabase.html#dbSubSqlb8">00668</a> byte* put(oid_t oid) { 00669 <span class="keywordflow">if</span> (oid < committedIndexSize && index[0][oid] == index[1][oid]) { 00670 offs_t offs = currIndex[oid];00671 size_t size = internalObjectSize[offs & dbInternalObjectMarker];00672 size_t pageNo = oid/dbHandlesPerPage;00673 monitor->dirtyPagesMap[pageNo >> 5] |= 1 << (pageNo & 31);00674 allocate(size, oid);00675 cloneBitmap(offs & ~dbInternalObjectMarker, size);00676 } 00677 <span class="keywordflow">return</span> baseAddr + (currIndex[oid] & ~dbInternalObjectMarker); 00678 }00679 00692 <span class="keywordtype">bool</span> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, 00693 dbExprNode* expr, dbExprNode* andExpr, 00694 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* &indexedField);00695 00707 <span class="keywordtype">bool</span> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, 00708 dbExprNode* expr, dbExprNode* andExpr);00709 00722 <span class="keywordtype">bool</span> followInverseReference(dbExprNode* expr, dbExprNode* andExpr, 00723 <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, oid_t iref);00724 00732 <span class="keywordtype">bool</span> existsInverseReference(dbExprNode* expr, <span class="keywordtype">int</span> nExistsClauses);00733 00743 <span class="keyword">static</span> <span class="keywordtype">void</span> _fastcall execute(dbExprNode* expr, 00744 dbInheritedAttribute& iattr,00745 dbSynthesizedAttribute& sattr);00746 00756 <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);00757 00762 <span class="keywordtype">void</span> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor);00763 00769 <span class="keywordtype">void</span> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>& query);00770 00776 <span class="keywordtype">void</span> traverse(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>& query);00777 00784 <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);00785 00791 <span class="keywordtype">void</span> remove(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, oid_t oid);00792 00800 offs_t allocate(size_t size, oid_t oid = 0);00801 00807 <span class="keywordtype">void</span> deallocate(offs_t pos, size_t size);00808 00814 <span class="keywordtype">void</span> extend(offs_t size);00815 00821 <span class="keywordtype">void</span> cloneBitmap(offs_t pos, size_t size);00822 00829 oid_t allocateId(<span class="keywordtype">int</span> n = 1);00830 00837 <span class="keywordtype">void</span> freeId(oid_t oid, <span class="keywordtype">int</span> n = 1);00838 00844 <span class="keywordtype">void</span> updateCursors(oid_t oid, <span class="keywordtype">bool</span> removed = <span class="keyword">false</span>);00845 00849 <span class="keywordtype">void</span> recovery();00850 00859 <span class="keywordtype">bool</span> checkVersion();00860 <a name="l00866"></a><a class="code" href="classdbDatabase.html#dbSubSqlb27">00866</a> oid_t allocateObject(dbInternalObject marker) { 00867 oid_t oid = allocateId();00868 currIndex[oid] = allocate(internalObjectSize[marker]) + marker;00869 <span class="keywordflow">return</span> oid;00870 }00871 <a name="l00878"></a><a class="code" href="classdbDatabase.html#dbSubSqlb28">00878</a> oid_t allocateRow(oid_t tableId, size_t size)00879 {00880 oid_t oid = allocateId();00881 allocateRow(tableId, oid, size);00882 <span class="keywordflow">return</span> oid;00883 }00884 00892 <span class="keywordtype">void</span> allocateRow(oid_t tableId, oid_t oid, size_t size);00893 00899 <span class="keywordtype">void</span> freeRow(oid_t tableId, oid_t oid);00900 00904 <span class="keywordtype">void</span> freeObject(oid_t oid); 00905 00909 <span class="keyword">static</span> <span class="keywordtype">void</span> deleteCompiledQuery(dbExprNode* tree); 00910 <a name="l00917"></a><a class="code" href="classdbDatabase.html#dbSubSqlx3">00917</a> <span class="keyword">enum</span> dbLockType { 00918 dbSharedLock, 00919 dbExclusiveLock,00920 dbCommitLock00921 };00922 00923 <span class="keywordtype">bool</span> beginTransaction(dbLockType);00924 <a name="l00928"></a><a class="code" href="classdbDatabase.html#dbSubSqlb33">00928</a> <span class="keywordtype">void</span> endTransaction() { 00929 endTransaction(threadContext.get());00930 }00931 00936 <span class="keywordtype">void</span> endTransaction(dbDatabaseThreadContext* ctx);00937 00942 <span class="keywordtype">void</span> initializeMetaTable();00943 00951 <span class="keywordtype">bool</span> loadScheme(<span class="keywordtype">bool</span> alter);00952 00958 <span class="keywordtype">bool</span> completeDescriptorsInitialization();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -