database_8h-source.html

来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 674 行 · 第 1/3 页

HTML
674
字号
00721 00727     <font class="keywordtype">void</font> deallocate(offs_t pos, size_t size);00728 00734     <font class="keywordtype">void</font> extend(offs_t size);00735 00741     <font class="keywordtype">void</font> cloneBitmap(offs_t pos, size_t size);00742 00749     oid_t allocateId(<font class="keywordtype">int</font> n = 1);00750 00757     <font class="keywordtype">void</font> freeId(oid_t oid, <font class="keywordtype">int</font> n = 1);00758 00763     <font class="keywordtype">void</font> updateCursors(oid_t oid);00764     00768     <font class="keywordtype">void</font> recovery();00769 00778     <font class="keywordtype">bool</font> checkVersion();00779 <a name="l00785"></a><a class="code" href="classdbDatabase.html#dbSubSqlb27">00785</a>     oid_t allocateObject(dbInternalObject marker) { 00786         oid_t oid = allocateId();00787         currIndex[oid] = allocate(internalObjectSize[marker]) + marker;00788         <font class="keywordflow">return</font> oid;00789     }00790 00797     oid_t allocateRow(oid_t tableId, size_t size);00798 00804     <font class="keywordtype">void</font> freeRow(oid_t tableId, oid_t oid);00805 00809     <font class="keywordtype">void</font> freeObject(oid_t oid); 00810     00814     <font class="keyword">static</font> <font class="keywordtype">void</font> deleteCompiledQuery(dbExprNode* tree); 00815 <a name="l00822"></a><a class="code" href="classdbDatabase.html#dbSubSqlt3">00822</a>     <font class="keyword">enum</font> dbLockType { 00823         dbSharedLock, 00824         dbExclusiveLock,00825         dbCommitLock00826     };00827 00828     <font class="keywordtype">bool</font> beginTransaction(dbLockType);00829 <a name="l00833"></a><a class="code" href="classdbDatabase.html#dbSubSqlb32">00833</a>     <font class="keywordtype">void</font> endTransaction() { 00834         endTransaction(threadContext.get());00835     }00836     00841     <font class="keywordtype">void</font> endTransaction(dbDatabaseThreadContext* ctx);00842 00847     <font class="keywordtype">void</font> initializeMetaTable();00848     00856     <font class="keywordtype">bool</font> loadScheme(<font class="keywordtype">bool</font> alter);00857 00863     <font class="keywordtype">bool</font> completeDescriptorsInitialization();00864 00870     <font class="keywordtype">void</font> reformatTable(oid_t tableId, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00871 00879     <font class="keywordtype">bool</font> addIndices(<font class="keywordtype">bool</font> alter, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00880 00886     oid_t addNewTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00887 00893     <font class="keywordtype">void</font> updateTableDescriptor(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, oid_t tableId);00894 00903     <font class="keywordtype">void</font> insertInverseReference(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, 00904                                 oid_t reverseId, oid_t targetId);00905 00911     <font class="keywordtype">void</font> removeInverseReferences(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, oid_t oid);00912 00921     <font class="keywordtype">void</font> removeInverseReference(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, 00922                                 oid_t reverseId, oid_t targetId);00923 00928     <font class="keywordtype">void</font> deleteTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00929 00934     <font class="keywordtype">void</font> dropTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00935 00940     <font class="keywordtype">void</font> createIndex(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);00941 00946     <font class="keywordtype">void</font> createHashTable(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);00947 00952     <font class="keywordtype">void</font> dropIndex(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);00953 00958     <font class="keywordtype">void</font> dropHashTable(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);00959 00965     <font class="keywordtype">void</font> linkTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, oid_t tableId);00966 00971     <font class="keywordtype">void</font> unlinkTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table);00972 00979     <font class="keywordtype">bool</font> wasReserved(offs_t pos, size_t size);00980 00989     <font class="keywordtype">void</font> reserveLocation(dbLocation&amp; location, offs_t pos, size_t size);00990 00995     <font class="keywordtype">void</font> commitLocation();00996 01002     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* findTable(<font class="keywordtype">char</font> <font class="keyword">const</font>* name);01003     01010     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* findTableByName(<font class="keywordtype">char</font> <font class="keyword">const</font>* name);01011 };01012 01013 01014 <font class="preprocessor">#ifdef REPLICATION_SUPPORT</font>01015 <font class="preprocessor"></font>01016 <font class="preprocessor">#include "sockio.h"</font>01017 01018 <font class="keyword">class </font>dbConnection { 01019  <font class="keyword">public</font>:01020     socket_t*    reqSock;01021     socket_t*    respSock;01022     dbLocalEvent statusEvent;01023     dbLocalEvent readyEvent;01024     dbLocalEvent useEvent;01025     dbMutex      writeCS;01026     <font class="keywordtype">int</font>          useCount;01027     <font class="keywordtype">int</font>          waitUseEventFlag;01028     <font class="keywordtype">int</font>          waitStatusEventFlag;01029     <font class="keywordtype">int</font>          status;01030 01031     dbConnection() { 01032         readyEvent.open();01033         useEvent.open();01034         statusEvent.open();01035         useCount = 0;01036         waitUseEventFlag = 0;01037         waitStatusEventFlag = 0;01038         status = 0;01039         reqSock = respSock = NULL;01040     }01041     ~dbConnection() { 01042         readyEvent.close();01043         useEvent.close();01044         statusEvent.close();01045         <font class="keyword">delete</font> reqSock;01046         <font class="keyword">delete</font> respSock;01047     }01048 };01049 01050 <font class="keyword">class </font>dbReplicatedDatabase : <font class="keyword">public</font> dbDatabase {01051     <font class="keyword">friend</font> <font class="keyword">class </font>dbFile;01052   <font class="keyword">protected</font>:01053     <font class="keywordtype">char</font>**        serverURL;01054     <font class="keywordtype">int</font>           nServers;01055     <font class="keywordtype">int</font>           id;01056     dbConnection* con;01057 01058     <font class="keyword">enum</font> NodeStatus { 01059         ST_OFFLINE,  <font class="comment">// node is not available </font>01060         ST_ONLINE,   <font class="comment">// node is available </font>01061         ST_ACTIVE,   <font class="comment">// primary node is running, replicating changes</font>01062         ST_STANDBY,  <font class="comment">// standby node receives changes from primary node</font>01063         ST_RECOVERED <font class="comment">// node is recovered after the fault</font>01064     };01065     01066     dbLocalEvent  startEvent;01067     dbMutex       startCS;01068     fd_set        inputSD;01069     <font class="keywordtype">int</font>           nInputSD;01070 01071     <font class="keywordtype">int</font>           activeNodeId;01072     dbMutex       sockCS;01073     socket_t*     acceptSock;01074     dbThread      readerThread;01075 01076     <font class="keyword">static</font> <font class="keywordtype">void</font> thread_proc dbReplicatedDatabase::startReader(<font class="keywordtype">void</font>* arg);01077 01078     <font class="keywordtype">void</font> reader();01079 01080   <font class="keyword">public</font>:01081     <font class="keywordtype">void</font> deleteConnection(<font class="keywordtype">int</font> nodeId);01082     <font class="keywordtype">void</font> lockConnection(<font class="keywordtype">int</font> nodeId);01083     <font class="keywordtype">void</font> unlockConnection(<font class="keywordtype">int</font> nodeId);01084     <font class="keywordtype">void</font> changeActiveNode();01085     <font class="keywordtype">void</font> addConnection(<font class="keywordtype">int</font> nodeId, socket_t* s);01086     <font class="keywordtype">bool</font> writeReq(<font class="keywordtype">int</font> nodeId, ReplicationRequest <font class="keyword">const</font>&amp; hdr, 01087                   <font class="keywordtype">void</font>* body = NULL, size_t bodySize = 0);01088     <font class="keywordtype">bool</font> writeResp(<font class="keywordtype">int</font> nodeId, ReplicationRequest <font class="keyword">const</font>&amp; hdr);01089 01090     <font class="keywordtype">bool</font> <a class="code" href="classdbDatabase.html#dbSubSqla3">open</a>(<font class="keywordtype">char</font> <font class="keyword">const</font>* databaseName, <font class="keywordtype">char</font> <font class="keyword">const</font>* fileName,01091               <font class="keywordtype">int</font> id, <font class="keywordtype">char</font>* servers[], <font class="keywordtype">int</font> nServers);01092     <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classdbDatabase.html#dbSubSqla4">close</a>();01093 01094     <font class="keyword">static</font> <font class="keywordtype">int</font> dbPollInterval;01095     <font class="keyword">static</font> <font class="keywordtype">int</font> dbWaitReadyTimeout;01096     <font class="keyword">static</font> <font class="keywordtype">int</font> dbWaitStatusTimeout;01097     <font class="keyword">static</font> <font class="keywordtype">int</font> dbRecoveryConnectionAttempts;01098     <font class="keyword">static</font> <font class="keywordtype">int</font> dbStartupConnectionAttempts;01099 };01100 <font class="preprocessor">#endif</font>01101 <font class="preprocessor"></font>01102 <font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;01103 <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> insert(T <font class="keyword">const</font>&amp; record) { 01104     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> ref;01105     T::dbDescriptor.getDatabase()-&gt;insertRecord(&amp;T::dbDescriptor, &amp;ref, &amp;record);01106     <font class="keywordflow">return</font> ref;01107 }01108 01109 <font class="preprocessor">#ifdef NO_MEMBER_TEMPLATES</font>01110 <font class="preprocessor"></font><font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;01111 <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> insert(dbDatabase&amp; db, T <font class="keyword">const</font>&amp; record) {01112     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> ref;01113     db.<a class="code" href="classdbDatabase.html#dbSubSqla18">insertRecord</a>(db.<a class="code" href="classdbDatabase.html#dbSubSqla23">lookupTable</a>(&amp;T::dbDescriptor), &amp;ref, &amp;record);01114     <font class="keywordflow">return</font> ref;01115 }01116 <font class="preprocessor">#endif</font>01117 <font class="preprocessor"></font><a name="l01121"></a><a class="code" href="classdbSearchContext.html">01121</a> <font class="keyword">class </font><a class="code" href="classdbSearchContext.html">dbSearchContext</a> { 01122   <font class="keyword">public</font>:01123     dbDatabase*     db;01124     dbExprNode*     condition;01125     <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>*    cursor;01126     <font class="keywordtype">char</font>*           firstKey;01127     <font class="keywordtype">int</font>             firstKeyInclusion;01128     <font class="keywordtype">char</font>*           lastKey;01129     <font class="keywordtype">int</font>             lastKeyInclusion;01130     <font class="keywordtype">int</font>             type;01131     <font class="keywordtype">int</font>             sizeofType;01132     dbUDTComparator comparator;01133     <font class="keywordtype">int</font>             offs;01134     <font class="keywordtype">int</font>             probes;01135 };01136 01137 01138 <font class="preprocessor">#endif</font></pre></div><hr><address align="right"><small>Generated on Fri Nov 15 21:06:28 2002 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.15 </small></address></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?