cursor_8h-source.html

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

HTML
400
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>cursor.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.15 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center><hr><h1>cursor.h</h1><div class="fragment"><pre>00001 <font class="comment">//-&lt; CURSOR.H &gt;------------------------------------------------------*--------*</font>00002 <font class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</font>00003 <font class="comment">// (Main Memory Database Management System)                          *   /\|  *</font>00004 <font class="comment">//                                                                   *  /  \  *</font>00005 <font class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</font>00006 <font class="comment">//                          Last update: 10-Dec-98    K.A. Knizhnik  * GARRET *</font>00007 <font class="comment">//-------------------------------------------------------------------*--------*</font>00008 <font class="comment">// Table cursor</font>00009 <font class="comment">//-------------------------------------------------------------------*--------*</font>00010 00011 <font class="preprocessor">#ifndef __CURSOR_H__</font>00012 <font class="preprocessor"></font><font class="preprocessor">#define __CURSOR_H__</font>00013 <font class="preprocessor"></font>00014 <font class="keyword">class </font>dbOrderByNode;00015 00016 <font class="keyword">class </font>FASTDB_DLL_ENTRY dbSelection { 00017   <font class="keyword">public</font>:00018     <font class="keyword">enum</font> { quantum = 1024 };00019     <font class="keyword">class </font>segment { 00020       <font class="keyword">public</font>: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     <font class="keywordtype">void</font> add(oid_t oid) { 00039         <font class="keywordflow">if</font> (last == NULL) { 00040             first = last = <font class="keyword">new</font> segment(NULL);00041         } <font class="keywordflow">else</font> <font class="keywordflow">if</font> (last-&gt;nRows == quantum) { 00042             last = last-&gt;next = <font class="keyword">new</font> segment(last);00043         }00044         last-&gt;rows[last-&gt;nRows++] = oid;00045         nRows += 1;00046     }00047     00048     <font class="keywordtype">void</font> sort(<a class="code" href="classdbDatabase.html">dbDatabase</a>* db, dbOrderByNode* order);00049     <font class="keyword">static</font> <font class="keywordtype">int</font> compare(<a class="code" href="classdbRecord.html">dbRecord</a>* a, <a class="code" href="classdbRecord.html">dbRecord</a>* b, dbOrderByNode* order);00050 00051     <font class="keywordtype">void</font> toArray(oid_t* oids);00052 00053     dbSelection() { 00054         nRows = 0;00055         pos = 0;00056         first = curr = last = NULL;00057     }00058     <font class="keywordtype">void</font> reverse();00059     <font class="keywordtype">void</font> reset();00060 };00061 00062 <font class="keyword">enum</font> dbCursorType { 00063     dbCursorViewOnly,00064     dbCursorForUpdate00065 };00066 <a name="l00070"></a><a class="code" href="classdbAnyCursor.html">00070</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY dbAnyCursor : <font class="keyword">public</font> <a class="code" href="classdbL2List.html">dbL2List</a> { 00071     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbAnyContainer.html">dbAnyContainer</a>;00072     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbDatabase.html">dbDatabase</a>;00073     <font class="keyword">friend</font> <font class="keyword">class </font>dbHashTable;00074     <font class="keyword">friend</font> <font class="keyword">class </font>dbTtreeNode;00075     <font class="keyword">friend</font> <font class="keyword">class </font>dbSubSql;00076     <font class="keyword">friend</font> <font class="keyword">class </font>dbStatement;00077     <font class="keyword">friend</font> <font class="keyword">class </font>dbServer;00078     <font class="keyword">friend</font> <font class="keyword">class </font>dbCLI;00079   <font class="keyword">public</font>:<a name="l00084"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a12">00084</a>     <font class="keywordtype">int</font> getNumberOfRecords() { <font class="keywordflow">return</font> selection.nRows; }00085 00089     <font class="keywordtype">void</font> remove();00090     <a name="l00095"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a14">00095</a>     <font class="keywordtype">bool</font> isEmpty() { <font class="keywordflow">return</font> currId == 0; }00096 <a name="l00101"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a15">00101</a>     <font class="keywordtype">bool</font> isLimitReached() { <font class="keywordflow">return</font> selection.nRows &gt;= limit; }00102 00110     oid_t* toArrayOfOid(oid_t* arr); 00111 <a name="l00122"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a17">00122</a>     <font class="keywordtype">int</font> select(<a class="code" href="classdbQuery.html">dbQuery</a>&amp; query, dbCursorType aType, <font class="keywordtype">void</font>* paramStruct = NULL) {00123         type = aType;00124         reset();00125         paramBase = paramStruct;00126         db-&gt;select(<font class="keyword">this</font>, query);00127         paramBase = NULL;00128         <font class="keywordflow">if</font> (gotoFirst() &amp;&amp; prefetch) { 00129             fetch();00130         }00131         <font class="keywordflow">return</font> selection.nRows;00132     } 00133     <a name="l00140"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a18">00140</a>     <font class="keywordtype">int</font> select(<a class="code" href="classdbQuery.html">dbQuery</a>&amp; query, <font class="keywordtype">void</font>* paramStruct = NULL) { 00141         <font class="keywordflow">return</font> select(query, defaultType, paramStruct);00142     }00143      <a name="l00151"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a19">00151</a>     <font class="keywordtype">int</font> select(<font class="keywordtype">char</font> <font class="keyword">const</font>* condition, dbCursorType aType, <font class="keywordtype">void</font>* paramStruct = NULL) { 00152         <a class="code" href="classdbQuery.html">dbQuery</a> query(condition);00153         <font class="keywordflow">return</font> select(query, aType, paramStruct);00154     } 00155 <a name="l00162"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a20">00162</a>     <font class="keywordtype">int</font> select(<font class="keywordtype">char</font> <font class="keyword">const</font>* condition, <font class="keywordtype">void</font>* paramStruct = NULL) { 00163         <font class="keywordflow">return</font> select(condition, defaultType, paramStruct);00164     }00165 <a name="l00171"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a21">00171</a>     <font class="keywordtype">int</font> select(dbCursorType aType) { 00172         type = aType;00173         reset();00174         db-&gt;select(<font class="keyword">this</font>); 00175         <font class="keywordflow">if</font> (gotoFirst() &amp;&amp; prefetch) { 00176             fetch();00177         }00178         <font class="keywordflow">return</font> selection.nRows;00179     } 00180 <a name="l00185"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a22">00185</a>     <font class="keywordtype">int</font> select() {00186         <font class="keywordflow">return</font> select(defaultType);00187     }00188 <a name="l00193"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a23">00193</a>     <font class="keywordtype">void</font> update() { 00194         assert(type == dbCursorForUpdate &amp;&amp; currId != 0);00195         updateInProgress = <font class="keyword">true</font>;00196         db-&gt;update(currId, table, record);00197         updateInProgress = <font class="keyword">false</font>;00198     }00199 <a name="l00203"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a24">00203</a>     <font class="keywordtype">void</font> removeAll() {00204         assert(db != NULL);00205         db-&gt;deleteTable(table);00206         reset();00207     }00208 00212     <font class="keywordtype">void</font> removeAllSelected();00213 <a name="l00217"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a26">00217</a>     <font class="keywordtype">void</font> setSelectionLimit(size_t lim) { limit = lim; }00218     <a name="l00222"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a27">00222</a>     <font class="keywordtype">void</font> unsetSelectionLimit() { limit = dbDefaultSelectionLimit; }00223 <a name="l00230"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a28">00230</a>     <font class="keywordtype">void</font> setPrefetchMode(<font class="keywordtype">bool</font> mode) { prefetch = mode; }00231 00235     <font class="keywordtype">void</font> reset();00236 00241     <font class="keywordtype">bool</font> isLast(); 00242 00247     <font class="keywordtype">bool</font> isFirst(); 00248 00254     <font class="keywordtype">void</font> freeze();00255 00259     <font class="keywordtype">void</font> unfreeze();00260 <a name="l00264"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a34">00264</a>     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* getTable() { <font class="keywordflow">return</font> table; }00265 00266   <font class="keyword">protected</font>: 00267     <a class="code" href="classdbDatabase.html">dbDatabase</a>*        db;00268     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00269     dbCursorType       type;00270     dbCursorType       defaultType;00271     dbSelection        selection;00272     <font class="keywordtype">bool</font>               allRecords;00273     oid_t              firstId;00274     oid_t              lastId;00275     oid_t              currId;00276     byte*              record;00277     size_t             limit;00278 00279     int4*              bitmap; <font class="comment">// bitmap to avoid duplicates</font>00280     size_t             bitmapSize;00281     <font class="keywordtype">bool</font>               eliminateDuplicates;00282     <font class="keywordtype">bool</font>               prefetch;00283     <font class="keywordtype">bool</font>               removed; <font class="comment">// current record was removed</font>00284     <font class="keywordtype">bool</font>               updateInProgress;00285 00286     <font class="keywordtype">void</font>*              paramBase;00287     00288     <font class="keywordtype">void</font> checkForDuplicates() { 00289         <font class="keywordflow">if</font> (!eliminateDuplicates &amp;&amp; limit &gt; 1) { 00290             eliminateDuplicates = <font class="keyword">true</font>;00291             size_t size = (db-&gt;<a class="code" href="classdbDatabase.html#dbSubSqln19">currIndexSize</a> + 31) / 32;00292             <font class="keywordflow">if</font> (size &gt; bitmapSize) { 00293                 <font class="keyword">delete</font>[] bitmap;00294                 bitmap = <font class="keyword">new</font> int4[size];00295                 bitmapSize = size;00296             }00297             memset(bitmap, 0, size*4);00298         }00299     }

⌨️ 快捷键说明

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