📄 database_8h-source.html
字号:
00209 <span class="keyword">friend</span> <span class="keyword">class </span>dbFile;00210 <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00211 <span class="keyword">friend</span> <span class="keyword">class </span>GiSTdb;00212 00213 <span class="preprocessor">#ifdef HAS_TEMPLATE_FRIENDS</span>00214 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">class</span> T> 00215 <span class="keyword">friend</span> <span class="keyword">class </span>dbHArray;00216 <span class="preprocessor">#else</span>00217 <span class="preprocessor"></span> <span class="keyword">friend</span> <span class="keyword">class </span>dbAnyHArray;00218 <span class="preprocessor">#endif</span>00219 <span class="preprocessor"></span>00220 <span class="keyword">public</span>:00230 <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* databaseName, 00231 <span class="keywordtype">char</span> <span class="keyword">const</span>* fileName = NULL, 00232 time_t waitLockTimeoutMsec = INFINITE, 00233 time_t commitDelaySec = 0);00234 00238 <span class="keywordtype">void</span> close();00239 00243 <span class="keywordtype">void</span> commit();00244 00249 <span class="keywordtype">void</span> precommit();00250 00254 <span class="keywordtype">void</span> rollback();00255 00262 <span class="keywordtype">void</span> scheduleBackup(<span class="keywordtype">char</span> <span class="keyword">const</span>* fileName, time_t periodSec);00263 00268 <span class="keywordtype">void</span> attach();00269 00270 <span class="keyword">enum</span> DetachFlags { 00271 COMMIT = 1,00272 DESTROY_CONTEXT = 200273 };00278 <span class="keywordtype">void</span> detach(<span class="keywordtype">int</span> flags = COMMIT|DESTROY_CONTEXT);00279 <a name="l00283"></a><a class="code" href="classdbDatabase.html#dbSubSqla14">00283</a> <span class="keywordtype">void</span> lock() { beginTransaction(dbExclusiveLock); }00284 00293 <span class="keywordtype">bool</span> backup(<span class="keywordtype">char</span> <span class="keyword">const</span>* file, <span class="keywordtype">bool</span> compactify);00294 <a name="l00299"></a><a class="code" href="classdbDatabase.html#dbSubSqla16">00299</a> <span class="keywordtype">void</span> assign(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>& desc) { 00300 assert(((<span class="keywordtype">void</span>)<span class="stringliteral">"Table is not yet assigned to the database"</span>, 00301 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp3">tableId</a> == 0));00302 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp10">db</a> = <span class="keyword">this</span>; 00303 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp11">fixedDatabase</a> = <span class="keyword">true</span>;00304 }00305 00313 <span class="keywordtype">void</span> setConcurrency(<span class="keywordtype">unsigned</span> nThreads);00314 <a name="l00319"></a><a class="code" href="classdbDatabase.html#dbSubSqla18">00319</a> <span class="keywordtype">long</span> getAllocatedSize() { <span class="keywordflow">return</span> allocatedSize; }00320 <a name="l00325"></a><a class="code" href="classdbDatabase.html#dbSubSqla19">00325</a> <span class="keywordtype">long</span> getDatabaseSize() { <span class="keywordflow">return</span> header->size; }00326 <a name="l00331"></a><a class="code" href="classdbDatabase.html#dbSubSqla20">00331</a> <span class="keywordtype">int</span> getNumberOfReaders() { 00332 <span class="keywordflow">return</span> monitor->nReaders;00333 }00334 <a name="l00339"></a><a class="code" href="classdbDatabase.html#dbSubSqla21">00339</a> <span class="keywordtype">int</span> getNumberOfWriters() { 00340 <span class="keywordflow">return</span> monitor->nWriters;00341 }00342 <a name="l00347"></a><a class="code" href="classdbDatabase.html#dbSubSqla22">00347</a> <span class="keywordtype">int</span> getNumberOfBlockedReaders() { 00348 <span class="keywordflow">return</span> monitor->nReaders;00349 }00350 <a name="l00355"></a><a class="code" href="classdbDatabase.html#dbSubSqla23">00355</a> <span class="keywordtype">int</span> getNumberOfBlockedWriters() { 00356 <span class="keywordflow">return</span> monitor->nWriters;00357 }00358 <a name="l00363"></a><a class="code" href="classdbDatabase.html#dbSubSqla24">00363</a> <span class="keywordtype">int</span> getNumberOfUsers() { 00364 <span class="keywordflow">return</span> monitor->users;00365 }00366 <a name="l00374"></a><a class="code" href="classdbDatabase.html#dbSubSqla25">00374</a> <span class="keywordtype">void</span> allowColumnsDeletion(<span class="keywordtype">bool</span> enabled = <span class="keyword">true</span>) { 00375 confirmDeleteColumns = enabled;00376 }00377 00378 <span class="keyword">enum</span> dbErrorClass { 00379 NoError, 00380 QueryError,00381 ArithmeticError,00382 IndexOutOfRangeError,00383 DatabaseOpenError,00384 FileError,00385 OutOfMemoryError,00386 Deadlock,00387 NullReferenceError,00388 LockRevoked,00389 FileLimitExeeded,00390 InconsistentInverseReference,00391 DatabaseReadOnly00392 };00393 <span class="keyword">typedef</span> void (*dbErrorHandler)(<span class="keywordtype">int</span> error, <span class="keywordtype">char</span> <span class="keyword">const</span>* msg, <span class="keywordtype">int</span> msgarg); 00394 00400 dbErrorHandler setErrorHandler(dbErrorHandler newHandler); 00401 00409 <span class="keyword">virtual</span> <span class="keywordtype">void</span> handleError(dbErrorClass error, <span class="keywordtype">char</span> <span class="keyword">const</span>* msg = NULL, 00410 <span class="keywordtype">int</span> arg = 0); 00411 00418 <span class="keywordtype">void</span> insertRecord(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbAnyReference.html">dbAnyReference</a>* ref, 00419 <span class="keywordtype">void</span> <span class="keyword">const</span>* record);00420 <a name="l00424"></a><a class="code" href="classdbDatabase.html#dbSubSqla28">00424</a> <span class="keywordtype">bool</span> isOpen()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> opened; }00425 00429 <span class="keywordtype">int</span> getVersion();00430 <a name="l00435"></a><a class="code" href="classdbDatabase.html#dbSubSqla30">00435</a> <span class="keywordtype">void</span> setFileSizeLimit(size_t limit) { 00436 dbFileSizeLimit = limit;00437 }00438 00439 <span class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</span>00440 <span class="preprocessor"></span>00445 <span class="keyword">template</span><<span class="keyword">class</span> T><a name="l00446"></a><a class="code" href="classdbDatabase.html#dbSubSqla31">00446</a> <a class="code" href="classdbReference.html">dbReference<T></a> insert(T <span class="keyword">const</span>& record) {00447 <a class="code" href="classdbReference.html">dbReference<T></a> ref;00448 insertRecord(lookupTable(&T::dbDescriptor), &ref, &record);00449 <span class="keywordflow">return</span> ref;00450 }00451 <span class="preprocessor">#endif</span>00452 <span class="preprocessor"></span>00458 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* lookupTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00459 00460 <span class="keyword">enum</span> dbAccessType { 00461 dbReadOnly = 0,00462 dbAllAccess = 1,00463 dbConcurrentRead = 2,00464 dbConcurrentUpdate = 300465 };00477 dbDatabase(dbAccessType type = dbAllAccess,00478 size_t dbInitSize = dbDefaultInitDatabaseSize,00479 size_t dbExtensionQuantum = dbDefaultExtensionQuantum,00480 size_t dbInitIndexSize = dbDefaultInitIndexSize,00481 <span class="keywordtype">int</span> nThreads = 1 00482 <span class="comment">// Do not specify the last parameter - it is only for checking</span>00483 <span class="comment">// that application and GigaBASE library were built with the </span>00484 <span class="comment">// same compiler options (-DNO_PTHREADS is critical)</span>00485 <span class="comment">// Mismached parameters should cause linker error</span>00486 #ifdef NO_PTHREADS00487 , <span class="keywordtype">bool</span> usePthreads = <span class="keyword">false</span>00488 #endif00489 );00493 <span class="keyword">virtual</span> ~dbDatabase(); 00494 00495 <span class="keyword">const</span> dbAccessType accessType;00496 <span class="keyword">const</span> size_t initSize;00497 <span class="keyword">const</span> size_t extensionQuantum;00498 <span class="keyword">const</span> size_t initIndexSize;00499 00500 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> dbParallelScanThreshold; 00501 00502 <span class="keyword">protected</span>:00503 <span class="keyword">static</span> size_t internalObjectSize[];00504 00505 dbThreadPool threadPool;00506 00507 dbThreadContext<dbDatabaseThreadContext> threadContext;00508 00509 byte* baseAddr; <span class="comment">// base address of database file mapping</span>00510 <a class="code" href="classdbHeader.html">dbHeader</a>* header; <span class="comment">// base address of database file mapping</span>00511 offs_t* currIndex; <span class="comment">// current database object index</span>00512 offs_t* index[2];00513 <span class="keywordtype">unsigned</span> parThreads;00514 <span class="keywordtype">bool</span> modified;00515 00516 size_t currRBitmapPage; <span class="comment">//current bitmap page for allocating records</span>00517 size_t currRBitmapOffs; <span class="comment">//offset in current bitmap page for allocating</span>00518 <span class="comment">//unaligned records</span>00519 size_t currPBitmapPage; <span class="comment">//current bitmap page for allocating page objects</span>00520 size_t currPBitmapOffs; <span class="comment">//offset in current bitmap page for allocating</span>00521 <span class="comment">//page objects</span>00522 <span class="keyword">struct </span>dbLocation { 00523 offs_t pos;00524 size_t size;00525 dbLocation* next;00526 };00527 dbLocation* reservedChain;00528 00529 <span class="keywordtype">char</span>* databaseName;00530 <span class="keywordtype">int</span> databaseNameLen;00531 <span class="keywordtype">char</span>* fileName;00532 <span class="keywordtype">int</span> version;00533 00534 size_t mmapSize;00535 00536 size_t committedIndexSize;00537 size_t currIndexSize;00538 oid_t updatedRecordId;00539 00540 <span class="keywordtype">unsigned</span> dbWaitLockTimeout;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -