📄 database_8h-source.html
字号:
00234 <span class="keywordtype">int</span> clientId;00235 <a class="code" href="classdbDatabase.html">dbDatabase</a>* db;00236 dbMutex* mutex;00237 };00238 <span class="preprocessor">#endif</span>00239 <span class="preprocessor"></span>00240 <span class="keyword">template</span><<span class="keyword">class</span> T> 00241 <span class="keyword">class </span>dbHArray;00242 <a name="l00246"></a><a class="code" href="classdbDatabase.html">00246</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbDatabase { 00247 <span class="keyword">friend</span> <span class="keyword">class </span>dbSelection;00248 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>;00249 <span class="keyword">friend</span> <span class="keyword">class </span>dbHashTable;00250 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00251 <span class="keyword">friend</span> <span class="keyword">class </span>dbTtree;00252 <span class="keyword">friend</span> <span class="keyword">class </span>dbTtreeNode;00253 <span class="keyword">friend</span> <span class="keyword">class </span>dbRtree;00254 <span class="keyword">friend</span> <span class="keyword">class </span>dbRtreePage;00255 <span class="keyword">friend</span> <span class="keyword">class </span>dbParallelQueryContext; 00256 <span class="keyword">friend</span> <span class="keyword">class </span>dbServer;00257 <span class="keyword">friend</span> <span class="keyword">class </span>dbColumnBinding;00258 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbUserFunctionArgument.html">dbUserFunctionArgument</a>;00259 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbAnyContainer.html">dbAnyContainer</a>;00260 <span class="keyword">friend</span> <span class="keyword">class </span>dbFile;00261 <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00262 <span class="keyword">friend</span> <span class="keyword">class </span>GiSTdb;00263 00264 <span class="preprocessor">#ifdef HAS_TEMPLATE_FRIENDS</span>00265 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">class</span> T> 00266 <span class="keyword">friend</span> <span class="keyword">class </span>dbHArray;00267 <span class="preprocessor">#else</span>00268 <span class="preprocessor"></span> <span class="keyword">friend</span> <span class="keyword">class </span>dbAnyHArray;00269 <span class="preprocessor">#endif</span>00270 <span class="preprocessor"></span>00271 <span class="keyword">public</span>:00281 <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* databaseName, 00282 <span class="keywordtype">char</span> <span class="keyword">const</span>* fileName = NULL, 00283 time_t waitLockTimeoutMsec = INFINITE, 00284 time_t commitDelaySec = 0);00285 00289 <span class="keywordtype">void</span> close();00290 00294 <span class="keywordtype">void</span> commit();00295 00300 <span class="keywordtype">void</span> precommit();00301 00305 <span class="keywordtype">void</span> rollback();00306 00313 <span class="keywordtype">void</span> scheduleBackup(<span class="keywordtype">char</span> <span class="keyword">const</span>* fileName, time_t periodSec);00314 00319 <span class="keywordtype">void</span> attach();00320 00326 <span class="keywordtype">void</span> attach(dbDatabaseThreadContext* ctx);00327 00328 <span class="keyword">enum</span> DetachFlags { 00329 COMMIT = 1,00330 DESTROY_CONTEXT = 200331 };00336 <span class="keywordtype">void</span> detach(<span class="keywordtype">int</span> flags = COMMIT|DESTROY_CONTEXT);00337 <a name="l00341"></a><a class="code" href="classdbDatabase.html#dbSubSqla15">00341</a> <span class="keywordtype">void</span> lock() { beginTransaction(dbExclusiveLock); }00342 00351 <span class="keywordtype">bool</span> backup(<span class="keywordtype">char</span> <span class="keyword">const</span>* file, <span class="keywordtype">bool</span> compactify);00352 00362 <span class="keywordtype">bool</span> backup(dbFile* file, <span class="keywordtype">bool</span> compactify);00363 <a name="l00368"></a><a class="code" href="classdbDatabase.html#dbSubSqla18">00368</a> <span class="keywordtype">void</span> assign(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>& desc) { 00369 assert(((<span class="keywordtype">void</span>)<span class="stringliteral">"Table is not yet assigned to the database"</span>, 00370 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn3">tableId</a> == 0));00371 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a> = <span class="keyword">this</span>; 00372 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn11">fixedDatabase</a> = <span class="keyword">true</span>;00373 }00374 00382 <span class="keywordtype">void</span> setConcurrency(<span class="keywordtype">unsigned</span> nThreads);00383 <a name="l00388"></a><a class="code" href="classdbDatabase.html#dbSubSqla20">00388</a> <span class="keywordtype">long</span> getAllocatedSize() { <span class="keywordflow">return</span> allocatedSize; }00389 <a name="l00394"></a><a class="code" href="classdbDatabase.html#dbSubSqla21">00394</a> <span class="keywordtype">long</span> getDatabaseSize() { <span class="keywordflow">return</span> header->size; }00395 <a name="l00400"></a><a class="code" href="classdbDatabase.html#dbSubSqla22">00400</a> <span class="keywordtype">int</span> getNumberOfReaders() { 00401 <span class="keywordflow">return</span> monitor->nReaders;00402 }00403 <a name="l00408"></a><a class="code" href="classdbDatabase.html#dbSubSqla23">00408</a> <span class="keywordtype">int</span> getNumberOfWriters() { 00409 <span class="keywordflow">return</span> monitor->nWriters;00410 }00411 <a name="l00416"></a><a class="code" href="classdbDatabase.html#dbSubSqla24">00416</a> <span class="keywordtype">int</span> getNumberOfBlockedReaders() { 00417 <span class="keywordflow">return</span> monitor->nReaders;00418 }00419 <a name="l00424"></a><a class="code" href="classdbDatabase.html#dbSubSqla25">00424</a> <span class="keywordtype">int</span> getNumberOfBlockedWriters() { 00425 <span class="keywordflow">return</span> monitor->nWriters;00426 }00427 <a name="l00432"></a><a class="code" href="classdbDatabase.html#dbSubSqla26">00432</a> <span class="keywordtype">int</span> getNumberOfUsers() { 00433 <span class="keywordflow">return</span> monitor->users;00434 }00435 <a name="l00443"></a><a class="code" href="classdbDatabase.html#dbSubSqla27">00443</a> <span class="keywordtype">void</span> allowColumnsDeletion(<span class="keywordtype">bool</span> enabled = <span class="keyword">true</span>) { 00444 confirmDeleteColumns = enabled;00445 }00446 00454 <span class="keywordtype">bool</span> prepareQuery(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>& query);00455 00456 <span class="keyword">enum</span> dbErrorClass { 00457 NoError, 00458 QueryError,00459 ArithmeticError,00460 IndexOutOfRangeError,00461 DatabaseOpenError,00462 FileError,00463 OutOfMemoryError,00464 Deadlock,00465 NullReferenceError,00466 LockRevoked,00467 FileLimitExeeded,00468 InconsistentInverseReference,00469 DatabaseReadOnly00470 };00471 <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, <span class="keywordtype">void</span>* context); 00472 00478 dbErrorHandler setErrorHandler(dbErrorHandler newHandler, <span class="keywordtype">void</span>* errorHandlerContext = NULL);00479 00487 <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, 00488 <span class="keywordtype">int</span> arg = 0); 00489 00496 <span class="keywordtype">void</span> insertRecord(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbAnyReference.html">dbAnyReference</a>* ref, 00497 <span class="keywordtype">void</span> <span class="keyword">const</span>* record);00498 <a name="l00502"></a><a class="code" href="classdbDatabase.html#dbSubSqla31">00502</a> <span class="keywordtype">bool</span> isOpen()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> opened; }00503 00504 00508 <span class="keywordtype">bool</span> isCommitted();00509 00513 <span class="keywordtype">bool</span> isAttached();00514 00518 <span class="keywordtype">bool</span> isUpdateTransaction();00519 00523 <span class="keywordtype">int</span> getVersion();00524 <a name="l00529"></a><a class="code" href="classdbDatabase.html#dbSubSqla36">00529</a> <span class="keywordtype">void</span> setFileSizeLimit(size_t limit) { 00530 dbFileSizeLimit = limit;00531 }00532 00533 <span class="preprocessor">#ifdef FUZZY_CHECKPOINT</span>00534 <span class="preprocessor"></span>00539 <span class="keywordtype">void</span> setFuzzyCheckpointBuffer(size_t nPages) { 00540 file.setCheckpointBufferSize(nPages);00541 }00542 <span class="preprocessor">#endif</span>00543 <span class="preprocessor"></span>00544 <span class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</span>00545 <span class="preprocessor"></span>00550 <span class="keyword">template</span><<span class="keyword">class</span> T><a name="l00551"></a><a class="code" href="classdbDatabase.html#dbSubSqla37">00551</a> <a class="code" href="classdbReference.html">dbReference<T></a> insert(T <span class="keyword">const</span>& record) {00552 <a class="code" href="classdbReference.html">dbReference<T></a> ref;00553 insertRecord(lookupTable(&T::dbDescriptor), &ref, &record);00554 <span class="keywordflow">return</span> ref;00555 }00556 <span class="preprocessor">#endif</span>00557 <span class="preprocessor"></span>00563 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* lookupTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00564 00569 <span class="keywordtype">void</span> getMemoryStatistic(dbMemoryStatistic& stat);00570 00571 <span class="keyword">enum</span> dbAccessType { 00572 dbReadOnly,00573 dbAllAccess,00574 dbConcurrentRead,00575 dbConcurrentUpdate00576 };00588 dbDatabase(dbAccessType type = dbAllAccess,00589 size_t dbInitSize = dbDefaultInitDatabaseSize,00590 size_t dbExtensionQuantum = dbDefaultExtensionQuantum,00591 size_t dbInitIndexSize = dbDefaultInitIndexSize,00592 <span class="keywordtype">int</span> nThreads = 1 00593 <span class="comment">// Do not specify the last parameter - it is only for checking</span>00594 <span class="comment">// that application and FastDB library were built with the </span>00595 <span class="comment">// same compiler options (-DNO_PTHREADS is critical)</span>00596 <span class="comment">// Mismached parameters should cause linker error</span>00597 #ifdef NO_PTHREADS00598 , <span class="keywordtype">bool</span> usePthreads = <span class="keyword">false</span>00599 #endif00600 );00604 <span class="keyword">virtual</span> ~dbDatabase(); 00605 00606 <span class="keyword">const</span> dbAccessType accessType;00607 <span class="keyword">const</span> size_t initSize;00608 <span class="keyword">const</span> size_t extensionQuantum;00609 <span class="keyword">const</span> size_t initIndexSize;00610 00611 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> dbParallelScanThreshold; 00612 00613 <span class="keyword">protected</span>:00614 <span class="keyword">static</span> size_t internalObjectSize[];00615 00616 dbThreadPool threadPool;00617 00618 dbThreadContext<dbDatabaseThreadContext> threadContext;00619 00620 byte* baseAddr; <span class="comment">// base address of database file mapping</span>00621 <a class="code" href="classdbHeader.html">dbHeader</a>* header; <span class="comment">// database header information</span>00622 offs_t* currIndex; <span class="comment">// current database object index</span>00623 offs_t* index[2];00624 <span class="keywordtype">unsigned</span> parThreads;00625 <span class="keywordtype">bool</span> modified;00626 00627 size_t currRBitmapPage; <span class="comment">//current bitmap page for allocating records</span>00628 size_t currRBitmapOffs; <span class="comment">//offset in current bitmap page for allocating</span>00629 <span class="comment">//unaligned records</span>00630 size_t currPBitmapPage; <span class="comment">//current bitmap page for allocating page objects</span>00631 size_t currPBitmapOffs; <span class="comment">//offset in current bitmap page for allocating</span>00632 <span class="comment">//page objects</span>00633 <span class="keyword">struct </span>dbLocation { 00634 offs_t pos;00635 size_t size;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -