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

📄 database_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 5 页
字号:
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>&amp; 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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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>&amp; 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>&lt;<span class="keyword">class</span> T&gt;
<a name="l00811"></a><a class="code" href="classdbDatabase.html#dbSubSqla40">00811</a>     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> insert(T <span class="keyword">const</span>&amp; record) {
00812         <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> ref;
00813         insertRecord(lookupTable(&amp;T::dbDescriptor), &amp;ref, &amp;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&amp; 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-&gt;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 &lt; dbFirstUserId || oid &gt;= currIndexSize) {
00846             <span class="keywordflow">return</span> <span class="keyword">false</span>;
00847         }
00848         <span class="keywordflow">return</span> !(currIndex[oid]&amp;(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&lt;dbDatabaseThreadContext&gt; 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 + -