📄 database_8h-source.html
字号:
00944 <span class="comment">//page objects</span>
00945 <span class="keyword">struct </span>dbLocation {
00946 offs_t pos;
00947 size_t size;
00948 dbLocation* next;
00949 };
00950 dbLocation* reservedChain;
00951
00952 <span class="keywordtype">char</span>* databaseName;
00953 <span class="keywordtype">int</span> databaseNameLen;
00954 <span class="keywordtype">char</span>* fileName;
00955 <span class="keywordtype">int</span> version;
00956
00957 size_t committedIndexSize;
00958 size_t currIndexSize;
00959 oid_t updatedRecordId;
00960
00961 <span class="keywordtype">unsigned</span> waitLockTimeout;
00962
00963 size_t fileSizeLimit;
00964 <span class="keywordtype">bool</span> uncommittedChanges;
00965
00966 dbHashFunction hashFunction;
00967
00968 dbFile file;
00969 dbSharedObject<dbMonitor> shm;
00970 dbGlobalCriticalSection cs;
00971 dbGlobalCriticalSection mutatorCS;
00972 dbInitializationMutex initMutex;
00973 dbSemaphore writeSem;
00974 dbSemaphore readSem;
00975 dbSemaphore upgradeSem;
00976 dbEvent backupCompletedEvent;
00977 dbMonitor* monitor;
00978
00979 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* tables;
00980
00981 <span class="keywordtype">int</span>* bitmapPageAvailableSpace;
00982 <span class="keywordtype">bool</span> opened;
00983
00984 offs_t allocatedSize;
00985 offs_t deallocatedSize;
00986
00987 time_t commitDelay;
00988 time_t commitTimeout;
00989 time_t commitTimerStarted;
00990
00991 dbMutex delayedCommitStartTimerMutex;
00992 dbMutex delayedCommitStopTimerMutex;
00993 dbLocalEvent delayedCommitStartTimerEvent;
00994 dbEvent delayedCommitStopTimerEvent;
00995 dbLocalEvent commitThreadSyncEvent;
00996 <span class="keywordtype">bool</span> delayedCommitEventsOpened;
00997
00998 dbMutex backupMutex;
00999 dbLocalEvent backupInitEvent;
01000 <span class="keywordtype">char</span>* backupFileName;
01001 time_t backupPeriod;
01002 <span class="keywordtype">bool</span> stopDelayedCommitThread;
01003
01004 dbThread backupThread;
01005 dbThread commitThread;
01006
01007 <span class="keywordtype">int</span> accessCount;
01008
01009 <a class="code" href="classdbL2List.html">dbL2List</a> threadContextList;
01010 dbMutex threadContextListMutex;
01011
01012 dbErrorHandler errorHandler;
01013 <span class="keywordtype">void</span>* errorHandlerContext;
01014 <span class="keywordtype">int</span> schemeVersion;
01015 dbVisitedObject* visitedChain;
01016
01017 <span class="keywordtype">bool</span> confirmDeleteColumns;
01018
01019 <span class="keywordtype">int</span> maxClientId;
01020 <span class="keywordtype">int</span> selfId;
01021
01022 dbXmlContext* xmlContext;
01023
01024 <span class="preprocessor">#ifdef AUTO_DETECT_PROCESS_CRASH</span>
01025 <span class="preprocessor"></span> dbWatchDog selfWatchDog;
01026 <a class="code" href="classdbL2List.html">dbL2List</a> watchDogThreadContexts;
01027 dbMutex* watchDogMutex;
01028 <span class="preprocessor">#endif</span>
01029 <span class="preprocessor"></span>
01030 <span class="keywordtype">unsigned</span> parallelScanThreshold;
01031 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* tableHash[dbTableHashSize];
01032
01033 <span class="keywordtype">void</span> exportScheme(FILE* out);
01034 <span class="keywordtype">void</span> exportClass(FILE* out, <span class="keywordtype">char</span>* name, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fieldList);
01035
01036 oid_t mapId(<span class="keywordtype">long</span> id);
01037 <span class="keywordtype">bool</span> importField(<span class="keywordtype">char</span>* terminator, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, byte* rec, dbXmlScanner& scanner);
01038 <span class="keywordtype">bool</span> importRecord(<span class="keywordtype">char</span>* terminator, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fieldList, byte* rec, dbXmlScanner& scanner);
01039 <span class="keywordtype">void</span> insertRecord(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, oid_t oid, <span class="keywordtype">void</span> <span class="keyword">const</span>* record);
01040
01046 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* loadMetaTable();
01047
01048 <span class="keywordtype">void</span> cleanup(dbInitializationMutex::initializationStatus status, <span class="keywordtype">int</span> step);
01049
01050 <span class="keywordtype">void</span> delayedCommit();
01051 <span class="keywordtype">void</span> backupScheduler();
01052
01053 <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc delayedCommitProc(<span class="keywordtype">void</span>* arg) {
01054 ((dbDatabase*)arg)->delayedCommit();
01055 }
01056
01057 <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc backupSchedulerProc(<span class="keywordtype">void</span>* arg) {
01058 ((dbDatabase*)arg)->backupScheduler();
01059 }
01060
01061 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isReplicated();
01062
01063 <span class="keyword">virtual</span> <span class="keywordtype">void</span> close0();
01064
01065 <span class="preprocessor">#ifdef AUTO_DETECT_PROCESS_CRASH</span>
01066 <span class="preprocessor"></span>
01070 <span class="keywordtype">void</span> revokeLock(<span class="keywordtype">int</span> clientId);
01071
01076 <span class="keyword">static</span> <span class="keywordtype">void</span> watchDogThread(dbWatchDogContext* ctx);
01077
01081 <span class="keywordtype">void</span> startWatchDogThreads();
01082
01086 <span class="keywordtype">void</span> addLockOwner();
01087
01091 <span class="keywordtype">void</span> removeLockOwner(<span class="keywordtype">int</span> clientId);
01092 <span class="preprocessor">#endif</span>
01093 <span class="preprocessor"></span>
01098 <span class="keywordtype">void</span> commit(dbDatabaseThreadContext* ctx);
01099
01104 <span class="keywordtype">void</span> restoreTablesConsistency();
01105
<a name="l01111"></a><a class="code" href="classdbDatabase.html#dbSubSqlb14">01111</a> <a class="code" href="classdbRecord.html">dbRecord</a>* getRow(oid_t oid) {
01112 assert(!(currIndex[oid]&(dbFreeHandleMarker|dbInternalObjectMarker)));
01113 <span class="keywordflow">return</span> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]);
01114 }
01115
01125 <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid, size_t newSize);
01126
<a name="l01132"></a><a class="code" href="classdbDatabase.html#dbSubSqlb16">01132</a> <a class="code" href="classdbRecord.html">dbRecord</a>* putRow(oid_t oid) {
01133 <span class="keywordflow">if</span> (oid < committedIndexSize && index[0][oid] == index[1][oid]) {
01134 size_t size = getRow(oid)-><a class="code" href="classdbRecord.html#dbTablem8">size</a>;
01135 size_t pageNo = oid/dbHandlesPerPage;
01136 monitor->dirtyPagesMap[pageNo >> 5] |= 1 << (pageNo & 31);
01137 cloneBitmap(currIndex[oid], size);
01138 allocate(size, oid);
01139 }
01140 <span class="keywordflow">return</span> (<a class="code" href="classdbRecord.html">dbRecord</a>*)(baseAddr + currIndex[oid]);
01141 }
01142
<a name="l01148"></a><a class="code" href="classdbDatabase.html#dbSubSqlb17">01148</a> byte* get(oid_t oid) {
01149 <span class="keywordflow">return</span> baseAddr + (currIndex[oid] & ~dbInternalObjectMarker);
01150 }
01151
<a name="l01157"></a><a class="code" href="classdbDatabase.html#dbSubSqlb18">01157</a> byte* put(oid_t oid) {
01158 <span class="keywordflow">if</span> (oid < committedIndexSize && index[0][oid] == index[1][oid]) {
01159 offs_t offs = currIndex[oid];
01160 size_t size = internalObjectSize[offs & dbInternalObjectMarker];
01161 size_t pageNo = oid/dbHandlesPerPage;
01162 monitor->dirtyPagesMap[pageNo >> 5] |= 1 << (pageNo & 31);
01163 allocate(size, oid);
01164 cloneBitmap(offs & ~dbInternalObjectMarker, size);
01165 }
01166 <span class="keywordflow">return</span> baseAddr + (currIndex[oid] & ~dbInternalObjectMarker);
01167 }
01168
01182 <span class="keywordtype">bool</span> isPrefixSearch(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor,
01183 dbExprNode* expr, dbExprNode* andExpr,
01184 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* &indexedField);
01185
01199 <span class="keywordtype">bool</span> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor,
01200 dbExprNode* expr, dbExprNode* andExpr,
01201 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* &indexedField);
01202
01214 <span class="keywordtype">bool</span> isIndexApplicable(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor,
01215 dbExprNode* expr, dbExprNode* andExpr);
01216
01229 <span class="keywordtype">bool</span> followInverseReference(dbExprNode* expr, dbExprNode* andExpr,
01230 <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, oid_t iref);
01231
01239 <span class="keywordtype">bool</span> existsInverseReference(dbExprNode* expr, <span class="keywordtype">int</span> nExistsClauses);
01240
01250 <span class="keyword">static</span> <span class="keywordtype">void</span> _fastcall execute(dbExprNode* expr,
01251 dbInheritedAttribute& iattr,
01252 dbSynthesizedAttribute& sattr);
01253
01263 <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);
01264
01269 <span class="keywordtype">void</span> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor);
01270
01276 <span class="keywordtype">void</span> select(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>& query);
01277
01283 <span class="keywordtype">void</span> traverse(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>& query);
01284
01291 <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);
01292
01298 <span class="keywordtype">void</span> remove(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, oid_t oid);
01299
01307 offs_t allocate(size_t size, oid_t oid = 0);
01308
01314 <span class="keywordtype">void</span> deallocate(offs_t pos, size_t size);
01315
01321 <span class="keywordtype">void</span> extend(offs_t size);
01322
01328 <span class="keywordtype">void</span> cloneBitmap(offs_t pos, size_t size);
01329
01336 oid_t allocateId(<span class="keywordtype">int</span> n = 1);
01337
01344 <span class="keywordtype">void</span> freeId(oid_t oid, <span class="keywordtype">int</span> n = 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -