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& 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>& 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>& 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><<font class="keyword">class</font> T>01103 <a class="code" href="classdbReference.html">dbReference<T></a> insert(T <font class="keyword">const</font>& record) { 01104 <a class="code" href="classdbReference.html">dbReference<T></a> ref;01105 T::dbDescriptor.getDatabase()->insertRecord(&T::dbDescriptor, &ref, &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><<font class="keyword">class</font> T>01111 <a class="code" href="classdbReference.html">dbReference<T></a> insert(dbDatabase& db, T <font class="keyword">const</font>& record) {01112 <a class="code" href="classdbReference.html">dbReference<T></a> ref;01113 db.<a class="code" href="classdbDatabase.html#dbSubSqla18">insertRecord</a>(db.<a class="code" href="classdbDatabase.html#dbSubSqla23">lookupTable</a>(&T::dbDescriptor), &ref, &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 + -
显示快捷键?