📄 database_8h-source.html
字号:
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<dbMonitor> 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)->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)->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]&(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 < committedIndexSize && index[0][oid] == index[1][oid]) { 00806 size_t size = getRow(oid)-><a class="code" href="classdbRecord.html#dbTablem8">size</a>;00807 size_t pageNo = oid/dbHandlesPerPage;00808 monitor->dirtyPagesMap[pageNo >> 5] |= 1 << (pageNo & 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] & ~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 < committedIndexSize && index[0][oid] == index[1][oid]) { 00831 offs_t offs = currIndex[oid];00832 size_t size = internalObjectSize[offs & dbInternalObjectMarker];00833 size_t pageNo = oid/dbHandlesPerPage;00834 monitor->dirtyPagesMap[pageNo >> 5] |= 1 << (pageNo & 31);00835 allocate(size, oid);00836 cloneBitmap(offs & ~dbInternalObjectMarker, size);00837 } 00838 <span class="keywordflow">return</span> baseAddr + (currIndex[oid] & ~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>* &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>* &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& iattr,00924 dbSynthesizedAttribute& 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>& 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>& 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 + -