📄 database_8h-source.html
字号:
00531
00536 <span class="keywordtype">void</span> precommit();
00537
00541 <span class="keywordtype">void</span> rollback();
00542
00549 <span class="keywordtype">void</span> scheduleBackup(<span class="keywordtype">char</span> <span class="keyword">const</span>* fileName, time_t periodSec);
00550
00555 <span class="keywordtype">void</span> attach();
00556
00562 <span class="keywordtype">void</span> attach(dbDatabaseThreadContext* ctx);
00563
00564
00565 <span class="keyword">enum</span> DetachFlags {
00566 COMMIT = 1,
00567 DESTROY_CONTEXT = 2
00568 };
00573 <span class="keywordtype">void</span> detach(<span class="keywordtype">int</span> flags = COMMIT|DESTROY_CONTEXT);
00574
00575 <span class="keyword">enum</span> dbLockType {
00576 dbSharedLock,
00577 dbExclusiveLock,
00578 dbCommitLock
00579 };
00580
<a name="l00584"></a><a class="code" href="classdbDatabase.html#dbSubSqla16">00584</a> <span class="keywordtype">void</span> lock(dbLockType lock = dbExclusiveLock) { beginTransaction(lock); }
00585
00594 <span class="keywordtype">bool</span> backup(<span class="keywordtype">char</span> <span class="keyword">const</span>* file, <span class="keywordtype">bool</span> compactify);
00595
00605 <span class="keywordtype">bool</span> backup(dbFile* file, <span class="keywordtype">bool</span> compactify);
00606
<a name="l00611"></a><a class="code" href="classdbDatabase.html#dbSubSqla19">00611</a> <span class="keywordtype">void</span> assign(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>& desc) {
00612 assert(((<span class="keywordtype">void</span>)<span class="stringliteral">"Table is not yet assigned to the database"</span>,
00613 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn3">tableId</a> == 0));
00614 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a> = <span class="keyword">this</span>;
00615 desc.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn11">fixedDatabase</a> = <span class="keyword">true</span>;
00616 }
00617
00625 <span class="keywordtype">void</span> setConcurrency(<span class="keywordtype">unsigned</span> nThreads);
00626
<a name="l00631"></a><a class="code" href="classdbDatabase.html#dbSubSqla21">00631</a> <span class="keywordtype">long</span> getAllocatedSize() { <span class="keywordflow">return</span> allocatedSize; }
00632
<a name="l00637"></a><a class="code" href="classdbDatabase.html#dbSubSqla22">00637</a> <span class="keywordtype">long</span> getDatabaseSize() { <span class="keywordflow">return</span> header->size; }
00638
<a name="l00643"></a><a class="code" href="classdbDatabase.html#dbSubSqla23">00643</a> <span class="keywordtype">int</span> getNumberOfReaders() {
00644 <span class="keywordflow">return</span> monitor->nReaders;
00645 }
00646
<a name="l00651"></a><a class="code" href="classdbDatabase.html#dbSubSqla24">00651</a> <span class="keywordtype">int</span> getNumberOfWriters() {
00652 <span class="keywordflow">return</span> monitor->nWriters;
00653 }
00654
<a name="l00659"></a><a class="code" href="classdbDatabase.html#dbSubSqla25">00659</a> <span class="keywordtype">int</span> getNumberOfBlockedReaders() {
00660 <span class="keywordflow">return</span> monitor->nReaders;
00661 }
00662
<a name="l00667"></a><a class="code" href="classdbDatabase.html#dbSubSqla26">00667</a> <span class="keywordtype">int</span> getNumberOfBlockedWriters() {
00668 <span class="keywordflow">return</span> monitor->nWriters;
00669 }
00670
<a name="l00675"></a><a class="code" href="classdbDatabase.html#dbSubSqla27">00675</a> <span class="keywordtype">int</span> getNumberOfUsers() {
00676 <span class="keywordflow">return</span> monitor->users;
00677 }
00678
<a name="l00686"></a><a class="code" href="classdbDatabase.html#dbSubSqla28">00686</a> <span class="keywordtype">void</span> allowColumnsDeletion(<span class="keywordtype">bool</span> enabled = <span class="keyword">true</span>) {
00687 confirmDeleteColumns = enabled;
00688 }
00689
00697 <span class="keywordtype">bool</span> prepareQuery(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, <a class="code" href="classdbQuery.html">dbQuery</a>& query);
00698
00699 <span class="keyword">enum</span> dbErrorClass {
00700 NoError,
00701 QueryError,
00702 ArithmeticError,
00703 IndexOutOfRangeError,
00704 DatabaseOpenError,
00705 FileError,
00706 OutOfMemoryError,
00707 Deadlock,
00708 NullReferenceError,
00709 LockRevoked,
00710 FileLimitExeeded,
00711 InconsistentInverseReference,
00712 DatabaseReadOnly,
00713 AssertionFailed
00714 };
00715 <span class="keyword">static</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* <span class="keyword">const</span> errorMessage[];
00716 <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);
00717
00723 dbErrorHandler setErrorHandler(dbErrorHandler newHandler, <span class="keywordtype">void</span>* errorHandlerContext = NULL);
00724
00732 <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,
00733 <span class="keywordtype">int</span> arg = 0);
00734
00743 <span class="keyword">virtual</span> <span class="keywordtype">void</span> formatErrorMessage(<span class="keywordtype">char</span>* buf, size_t bufSize, dbErrorClass error, <span class="keywordtype">char</span> <span class="keyword">const</span>* msg = NULL, <span class="keywordtype">int</span> arg = 0);
00744
00748 <span class="keyword">virtual</span> <span class="keywordtype">void</span> fatalError();
00749
00756 <span class="keywordtype">void</span> insertRecord(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbAnyReference.html">dbAnyReference</a>* ref,
00757 <span class="keywordtype">void</span> <span class="keyword">const</span>* record);
00758
<a name="l00762"></a><a class="code" href="classdbDatabase.html#dbSubSqla34">00762</a> <span class="keywordtype">bool</span> isOpen()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> opened; }
00763
00764
00768 <span class="keywordtype">bool</span> isCommitted();
00769
00773 <span class="keywordtype">bool</span> isAttached();
00774
00778 <span class="keywordtype">bool</span> isUpdateTransaction();
00779
00783 <span class="keywordtype">int</span> getVersion();
00784
<a name="l00789"></a><a class="code" href="classdbDatabase.html#dbSubSqla39">00789</a> <span class="keywordtype">void</span> setFileSizeLimit(size_t limit) {
00790 fileSizeLimit = limit;
00791 }
00792
00793 <span class="preprocessor">#ifdef FUZZY_CHECKPOINT</span>
00794 <span class="preprocessor"></span>
00799 <span class="keywordtype">void</span> setFuzzyCheckpointBuffer(size_t nPages) {
00800 file.setCheckpointBufferSize(nPages);
00801 }
00802 <span class="preprocessor">#endif</span>
00803 <span class="preprocessor"></span>
00804 <span class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</span>
00805 <span class="preprocessor"></span>
00810 <span class="keyword">template</span><<span class="keyword">class</span> T>
<a name="l00811"></a><a class="code" href="classdbDatabase.html#dbSubSqla40">00811</a> <a class="code" href="classdbReference.html">dbReference<T></a> insert(T <span class="keyword">const</span>& record) {
00812 <a class="code" href="classdbReference.html">dbReference<T></a> ref;
00813 insertRecord(lookupTable(&T::dbDescriptor), &ref, &record);
00814 <span class="keywordflow">return</span> ref;
00815 }
00816 <span class="preprocessor">#endif</span>
00817 <span class="preprocessor"></span>
00823 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* lookupTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);
00824
00829 <span class="keywordtype">void</span> getMemoryStatistic(dbMemoryStatistic& stat);
00830
<a name="l00835"></a><a class="code" href="classdbDatabase.html#dbSubSqla43">00835</a> <span class="keywordtype">int</span> getNumberOfProceededTransactions() {
00836 <span class="keywordflow">return</span> monitor->concurrentTransId - 1;
00837 }
00838
<a name="l00844"></a><a class="code" href="classdbDatabase.html#dbDatabasea39">00844</a> <span class="keywordtype">bool</span> isValidOid(oid_t oid) {
00845 <span class="keywordflow">if</span> (oid < dbFirstUserId || oid >= currIndexSize) {
00846 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00847 }
00848 <span class="keywordflow">return</span> !(currIndex[oid]&(dbFreeHandleMarker|dbInternalObjectMarker));
00849 }
00850
00855 <span class="keywordtype">void</span> exportDatabaseToXml(FILE* out);
00856
00862 <span class="keywordtype">bool</span> importDatabaseFromXml(FILE* in);
00863
<a name="l00871"></a><a class="code" href="classdbDatabase.html#dbSubSqla46">00871</a> <span class="keywordtype">void</span> setFixedSizeAllocator(size_t minSize, size_t maxSize, size_t quantum, size_t bufSize) {
00872 fixedSizeAllocator.init(minSize, maxSize, quantum, bufSize);
00873 }
00874
00875 <span class="keyword">enum</span> dbThreadMode {
00876 dbNotUsePthreads,
00877 dbUsePthreads
00878 };
00879
00880 <span class="keyword">enum</span> dbReplicationMode {
00881 dbReplicated,
00882 dbStandalone
00883 };
00884
00896 dbDatabase(dbAccessType type = dbAllAccess,
00897 size_t dbInitSize = dbDefaultInitDatabaseSize,
00898 size_t dbExtensionQuantum = dbDefaultExtensionQuantum,
00899 size_t dbInitIndexSize = dbDefaultInitIndexSize,
00900 <span class="keywordtype">int</span> nThreads = 1
00901 <span class="comment">// Do not specify the following parameter - them are used only for checking</span>
00902 <span class="comment">// that application and FastDB library were built with the </span>
00903 <span class="comment">// same compiler options (-DNO_PTHREADS and -REPPLICATION_SUPPORT)</span>
00904 <span class="comment">// Mismached parameters should cause linker error</span>
00905 #ifdef NO_PTHREADS
00906 , dbThreadMode threadMode = dbNotUsePthreads
00907 #endif
00908 #ifdef REPLICATION_SUPPORT
00909 , dbReplicationMode replicationMode = dbReplicated
00910 #endif
00911 );
00915 <span class="keyword">virtual</span> ~dbDatabase();
00916
00917 dbAccessType accessType;
00918 size_t initSize;
00919 size_t extensionQuantum;
00920 size_t initIndexSize;
00921 offs_t freeSpaceReuseThreshold;
00922
00923 <span class="keyword">protected</span>:
00924 <span class="keyword">static</span> size_t internalObjectSize[];
00925
00926 dbThreadPool threadPool;
00927
00928 FixedSizeAllocator fixedSizeAllocator;
00929
00930 dbThreadContext<dbDatabaseThreadContext> threadContext;
00931
00932 byte* baseAddr; <span class="comment">// base address of database file mapping</span>
00933 <a class="code" href="classdbHeader.html">dbHeader</a>* header; <span class="comment">// database header information</span>
00934 offs_t* currIndex; <span class="comment">// current database object index</span>
00935 offs_t* index[2];
00936 <span class="keywordtype">unsigned</span> parThreads;
00937 <span class="keywordtype">bool</span> modified;
00938
00939 size_t currRBitmapPage; <span class="comment">//current bitmap page for allocating records</span>
00940 size_t currRBitmapOffs; <span class="comment">//offset in current bitmap page for allocating</span>
00941 <span class="comment">//unaligned records</span>
00942 size_t currPBitmapPage; <span class="comment">//current bitmap page for allocating page objects</span>
00943 size_t currPBitmapOffs; <span class="comment">//offset in current bitmap page for allocating</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -