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

📄 database_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 5 页
字号:
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&lt;dbMonitor&gt; 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&amp; 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&amp; 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)-&gt;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)-&gt;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]&amp;(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 &lt; committedIndexSize &amp;&amp; index[0][oid] == index[1][oid]) { 
01134             size_t size = getRow(oid)-&gt;<a class="code" href="classdbRecord.html#dbTablem8">size</a>;
01135             size_t pageNo = oid/dbHandlesPerPage;
01136             monitor-&gt;dirtyPagesMap[pageNo &gt;&gt; 5] |= 1 &lt;&lt; (pageNo &amp; 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] &amp; ~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 &lt; committedIndexSize &amp;&amp; index[0][oid] == index[1][oid]) { 
01159             offs_t offs = currIndex[oid];
01160             size_t size = internalObjectSize[offs &amp; dbInternalObjectMarker];
01161             size_t pageNo = oid/dbHandlesPerPage;
01162             monitor-&gt;dirtyPagesMap[pageNo &gt;&gt; 5] |= 1 &lt;&lt; (pageNo &amp; 31);
01163             allocate(size, oid);
01164             cloneBitmap(offs &amp; ~dbInternalObjectMarker, size);
01165         } 
01166         <span class="keywordflow">return</span> baseAddr + (currIndex[oid] &amp; ~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>* &amp;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>* &amp;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&amp; iattr,
01252                                   dbSynthesizedAttribute&amp; 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>&amp; 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>&amp; 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 + -