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

📄 cursor_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>FastDB: cursor.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div><h1>cursor.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; CURSOR.H &gt;------------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</span>00003 <span class="comment">// (Main Memory Database Management System)                          *   /\|  *</span>00004 <span class="comment">//                                                                   *  /  \  *</span>00005 <span class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</span>00006 <span class="comment">//                          Last update: 10-Dec-98    K.A. Knizhnik  * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// Table cursor</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __CURSOR_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __CURSOR_H__</span>00013 <span class="preprocessor"></span>00014 <span class="keyword">class </span>dbOrderByNode;00015 00016 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbSelection { 00017   <span class="keyword">public</span>:00018     <span class="keyword">enum</span> { quantum = 1024 };00019     <span class="keyword">class </span>segment { 00020       <span class="keyword">public</span>:00021         segment* prev;00022         segment* next;00023         size_t   nRows;00024         oid_t    rows[quantum];00025 00026         segment(segment* after) { 00027             prev = after;00028             next = NULL;00029             nRows = 0;00030         }       00031     };00032     segment*  first;00033     segment*  last;00034     segment*  curr;00035     size_t    nRows;00036     size_t    pos;00037 00038     segment*  createNewSegment(segment* after);00039 00040     <span class="keywordtype">void</span> add(oid_t oid) {00041         <span class="keywordflow">if</span> (last == NULL) { 00042             first = last = createNewSegment(NULL);00043         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last-&gt;nRows == quantum) { 00044             last = last-&gt;next = createNewSegment(last);00045         }00046         last-&gt;rows[last-&gt;nRows++] = oid;00047         nRows += 1;00048     }00049    00050     <span class="keywordtype">void</span> sort(<a class="code" href="classdbDatabase.html">dbDatabase</a>* db, dbOrderByNode* order);00051     <span class="keyword">static</span> <span class="keywordtype">int</span> compare(<a class="code" href="classdbRecord.html">dbRecord</a>* a, <a class="code" href="classdbRecord.html">dbRecord</a>* b, dbOrderByNode* order);00052     <span class="keyword">static</span> <span class="keywordtype">int</span> compare(oid_t a, oid_t b, dbOrderByNode* order);00053 00054     <span class="keywordtype">void</span> toArray(oid_t* oids) <span class="keyword">const</span>;00055 00056     dbSelection() { 00057         nRows = 0;00058         pos = 0;00059         first = curr = last = NULL;00060     }00061     <span class="keywordtype">void</span> reverse();00062     <span class="keywordtype">void</span> reset();00063 };00064 00065 <span class="keyword">enum</span> dbCursorType { 00066     dbCursorViewOnly,00067     dbCursorForUpdate00068 };00069 <a name="l00073"></a><a class="code" href="classdbAnyCursor.html">00073</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbAnyCursor : <span class="keyword">public</span> <a class="code" href="classdbL2List.html">dbL2List</a> { 00074     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbAnyContainer.html">dbAnyContainer</a>;00075     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbDatabase.html">dbDatabase</a>;00076     <span class="keyword">friend</span> <span class="keyword">class </span>dbHashTable;00077     <span class="keyword">friend</span> <span class="keyword">class </span>dbTtreeNode;00078     <span class="keyword">friend</span> <span class="keyword">class </span>dbSubSql;00079     <span class="keyword">friend</span> <span class="keyword">class </span>dbStatement;00080     <span class="keyword">friend</span> <span class="keyword">class </span>dbServer;00081     <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00082   <span class="keyword">public</span>:<a name="l00087"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a14">00087</a>     <span class="keywordtype">int</span> getNumberOfRecords()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> selection.nRows; }00088 00092     <span class="keywordtype">void</span> remove();00093     <a name="l00098"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a16">00098</a>     <span class="keywordtype">bool</span> isEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> currId == 0; }00099 <a name="l00104"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a18">00104</a>     <span class="keywordtype">bool</span> isUpdateCursor()<span class="keyword"> const </span>{ 00105         <span class="keywordflow">return</span> type == dbCursorForUpdate;00106     }00107 <a name="l00112"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a19">00112</a>     <span class="keywordtype">bool</span> isLimitReached()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> selection.nRows &gt;= limit; }00113 00121     oid_t* toArrayOfOid(oid_t* arr) <span class="keyword">const</span>; 00122 <a name="l00133"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">00133</a>     <span class="keywordtype">int</span> select(<a class="code" href="classdbQuery.html">dbQuery</a>&amp; query, dbCursorType aType, <span class="keywordtype">void</span>* paramStruct = NULL) {00134         type = aType;00135         reset();00136         paramBase = paramStruct;00137         db-&gt;select(<span class="keyword">this</span>, query);00138         paramBase = NULL;00139         <span class="keywordflow">if</span> (gotoFirst() &amp;&amp; prefetch) { 00140             fetch();00141         }00142         <span class="keywordflow">return</span> selection.nRows;00143     } 00144     <a name="l00151"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a22">00151</a>     <span class="keywordtype">int</span> select(<a class="code" href="classdbQuery.html">dbQuery</a>&amp; query, <span class="keywordtype">void</span>* paramStruct = NULL) { 00152         <span class="keywordflow">return</span> select(query, defaultType, paramStruct);00153     }00154      <a name="l00162"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a23">00162</a>     <span class="keywordtype">int</span> select(<span class="keywordtype">char</span> <span class="keyword">const</span>* condition, dbCursorType aType, <span class="keywordtype">void</span>* paramStruct = NULL) { 00163         <a class="code" href="classdbQuery.html">dbQuery</a> query(condition);00164         <span class="keywordflow">return</span> select(query, aType, paramStruct);00165     } 00166 <a name="l00173"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a24">00173</a>     <span class="keywordtype">int</span> select(<span class="keywordtype">char</span> <span class="keyword">const</span>* condition, <span class="keywordtype">void</span>* paramStruct = NULL) { 00174         <span class="keywordflow">return</span> select(condition, defaultType, paramStruct);00175     }00176 <a name="l00182"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a25">00182</a>     <span class="keywordtype">int</span> select(dbCursorType aType) { 00183         type = aType;00184         reset();00185         db-&gt;select(<span class="keyword">this</span>); 00186         <span class="keywordflow">if</span> (gotoFirst() &amp;&amp; prefetch) { 00187             fetch();00188         }00189         <span class="keywordflow">return</span> selection.nRows;00190     } 00191 <a name="l00196"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a26">00196</a>     <span class="keywordtype">int</span> select() {00197         <span class="keywordflow">return</span> select(defaultType);00198     }00199 00206     <span class="keywordtype">int</span> selectByKey(<span class="keywordtype">char</span> <span class="keyword">const</span>* key, <span class="keywordtype">void</span> <span class="keyword">const</span>* value);00207 00215     <span class="keywordtype">int</span> selectByKeyRange(<span class="keywordtype">char</span> <span class="keyword">const</span>* key, <span class="keywordtype">void</span> <span class="keyword">const</span>* minValue, <span class="keywordtype">void</span> <span class="keyword">const</span>* maxValue);00216 <a name="l00221"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a29">00221</a>     <span class="keywordtype">void</span> update() { 00222         assert(type == dbCursorForUpdate &amp;&amp; currId != 0);00223         updateInProgress = <span class="keyword">true</span>;00224         db-&gt;update(currId, table, record);00225         updateInProgress = <span class="keyword">false</span>;00226     }00227 <a name="l00231"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a30">00231</a>     <span class="keywordtype">void</span> removeAll() {00232         assert(db != NULL);00233         db-&gt;deleteTable(table);00234         reset();00235     }00236 00240     <span class="keywordtype">void</span> removeAllSelected();00241 <a name="l00245"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a32">00245</a>     <span class="keywordtype">void</span> setSelectionLimit(size_t lim) { limit = lim; }00246     <a name="l00250"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a33">00250</a>     <span class="keywordtype">void</span> unsetSelectionLimit() { limit = dbDefaultSelectionLimit; }00251 <a name="l00258"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a34">00258</a>     <span class="keywordtype">void</span> setPrefetchMode(<span class="keywordtype">bool</span> mode) { prefetch = mode; }00259 00263     <span class="keywordtype">void</span> reset();00264 00269     <span class="keywordtype">bool</span> isLast() <span class="keyword">const</span>; 00270 00275     <span class="keywordtype">bool</span> isFirst() <span class="keyword">const</span>; 00276 00282     <span class="keywordtype">void</span> freeze();00283 00287     <span class="keywordtype">void</span> unfreeze();00288 00296     <span class="keywordtype">bool</span> skip(<span class="keywordtype">int</span> n);00297 00298 00304     <span class="keywordtype">int</span> seek(oid_t oid);00305 <a name="l00309"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a42">00309</a>     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* getTable() { <span class="keywordflow">return</span> table; }00310 00311 <a name="l00316"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a43">00316</a>     <span class="keywordtype">void</span> setTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* aTable) { 00317         table = aTable;00318         db = aTable-&gt;<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp10">db</a>;00319     }00320 <a name="l00325"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a44">00325</a>     <span class="keywordtype">void</span> setRecord(<span class="keywordtype">void</span>* rec) { 00326         record = (byte*)rec;00327     }00328 <a name="l00333"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a45">00333</a>     <span class="keywordtype">void</span>* getRecord() { 00334         <span class="keywordflow">return</span> record;00335     }00336 00341     <span class="keywordtype">bool</span> isInSelection(oid_t oid);00342 00343 <a name="l00348"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">00348</a>     <span class="keywordtype">void</span> fetch() { 00349         assert(!(db-&gt;currIndex[currId] 00350                  &amp; (dbInternalObjectMarker|dbFreeHandleMarker)));00351         table-&gt;columns-&gt;fetchRecordFields(record, 00352                                           (byte*)db-&gt;getRow(currId));00353     }00354 00355 00356   <span class="keyword">protected</span>: 00357     <a class="code" href="classdbDatabase.html">dbDatabase</a>*        db;00358     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00359     dbCursorType       type;00360     dbCursorType       defaultType;

⌨️ 快捷键说明

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