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

📄 cursor_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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.18 -->
<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 <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 BEGIN_FASTDB_NAMESPACE
00015 
00016 <span class="keyword">class </span>dbOrderByNode;
00017 
00018 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbSelection { 
00019   <span class="keyword">public</span>:
00020     <span class="keyword">enum</span> { quantum = 1024 };
00021     <span class="keyword">class </span>segment { 
00022       <span class="keyword">public</span>:
00023         segment* prev;
00024         segment* next;
00025         size_t   nRows;
00026         oid_t    rows[quantum];
00027 
00028         segment(segment* after) { 
00029             prev = after;
00030             next = NULL;
00031             nRows = 0;
00032         }       
00033     };
00034     segment*  first;
00035     segment*  last;
00036     segment*  curr;
00037     size_t    nRows;
00038     size_t    pos;
00039 
00040     segment*  createNewSegment(segment* after);
00041 
00042     <span class="keywordtype">void</span> add(oid_t oid) {
00043         <span class="keywordflow">if</span> (last == NULL) { 
00044             first = last = createNewSegment(NULL);
00045         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last-&gt;nRows == quantum) { 
00046             last = last-&gt;next = createNewSegment(last);
00047         }
00048         last-&gt;rows[last-&gt;nRows++] = oid;
00049         nRows += 1;
00050     }
00051    
00052     <span class="keywordtype">void</span> sort(<a class="code" href="classdbDatabase.html">dbDatabase</a>* db, dbOrderByNode* order);
00053     <span class="keyword">static</span> <span class="keywordtype">int</span> compare(oid_t a, oid_t b, dbOrderByNode* order);
00054 
00055     <span class="keywordtype">void</span> toArray(oid_t* oids) <span class="keyword">const</span>;
00056     <span class="keywordtype">void</span> truncate(size_t from, size_t length);
00057 
00058     dbSelection() { 
00059         nRows = 0;
00060         pos = 0;
00061         first = curr = last = NULL;
00062     }
00063     <span class="keywordtype">void</span> reverse();
00064     <span class="keywordtype">void</span> reset();
00065 };
00066 
00067 <span class="keyword">enum</span> dbCursorType { 
00068     dbCursorViewOnly,
00069     dbCursorForUpdate
00070 };
00071 
<a name="l00075"></a><a class="code" href="classdbAnyCursor.html">00075</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbAnyCursor : <span class="keyword">public</span> <a class="code" href="classdbL2List.html">dbL2List</a> { 
00076     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbAnyContainer.html">dbAnyContainer</a>;
00077     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbDatabase.html">dbDatabase</a>;
00078     <span class="keyword">friend</span> <span class="keyword">class </span>dbHashTable;
00079     <span class="keyword">friend</span> <span class="keyword">class </span>dbTtreeNode;
00080     <span class="keyword">friend</span> <span class="keyword">class </span>dbRtreePage;
00081     <span class="keyword">friend</span> <span class="keyword">class </span>dbSubSql;
00082     <span class="keyword">friend</span> <span class="keyword">class </span>dbStatement;
00083     <span class="keyword">friend</span> <span class="keyword">class </span>dbServer;
00084     <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;
00085     <span class="keyword">friend</span> <span class="keyword">class </span>JniResultSet;
00086   <span class="keyword">public</span>:
<a name="l00091"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a13">00091</a>     <span class="keywordtype">int</span> getNumberOfRecords()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (int)selection.nRows; }
00092 
00096     <span class="keywordtype">void</span> remove();
00097     
<a name="l00102"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a15">00102</a>     <span class="keywordtype">bool</span> isEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> currId == 0; }
00103 
<a name="l00108"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a17">00108</a>     <span class="keywordtype">bool</span> isUpdateCursor()<span class="keyword"> const </span>{ 
00109         <span class="keywordflow">return</span> type == dbCursorForUpdate;
00110     }
00111 
<a name="l00116"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a18">00116</a>     <span class="keywordtype">bool</span> isLimitReached()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> selection.nRows &gt;= limit || selection.nRows &gt;= stmtLimitLen; }
00117 
00125     oid_t* toArrayOfOid(oid_t* arr) <span class="keyword">const</span>; 
00126 
<a name="l00137"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a20">00137</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) {
00138         type = aType;
00139         reset();
00140         paramBase = paramStruct;
00141         db-&gt;select(<span class="keyword">this</span>, query);
00142         paramBase = NULL;
00143         <span class="keywordflow">if</span> (gotoFirst() &amp;&amp; prefetch) { 
00144             fetch();
00145         }
00146         <span class="keywordflow">return</span> (int)selection.nRows;
00147     } 
00148     
<a name="l00155"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a21">00155</a>     <span class="keywordtype">int</span> select(<a class="code" href="classdbQuery.html">dbQuery</a>&amp; query, <span class="keywordtype">void</span>* paramStruct = NULL) { 
00156         <span class="keywordflow">return</span> select(query, defaultType, paramStruct);
00157     }
00158      
<a name="l00166"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a22">00166</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) { 
00167         <a class="code" href="classdbQuery.html">dbQuery</a> query(condition);
00168         <span class="keywordflow">return</span> select(query, aType, paramStruct);
00169     } 
00170 
<a name="l00177"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a23">00177</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) { 
00178         <span class="keywordflow">return</span> select(condition, defaultType, paramStruct);
00179     }
00180 
<a name="l00186"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a24">00186</a>     <span class="keywordtype">int</span> select(dbCursorType aType) { 
00187         type = aType;
00188         reset();
00189         db-&gt;select(<span class="keyword">this</span>); 
00190         <span class="keywordflow">if</span> (gotoFirst() &amp;&amp; prefetch) { 
00191             fetch();
00192         }
00193         <span class="keywordflow">return</span> (int)selection.nRows;
00194     } 
00195 
<a name="l00200"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a25">00200</a>     <span class="keywordtype">int</span> select() {
00201         <span class="keywordflow">return</span> select(defaultType);
00202     }
00203 
00210     <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);
00211 
00219     <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);
00220 
<a name="l00225"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a28">00225</a>     <span class="keywordtype">void</span> update() { 
00226         assert(type == dbCursorForUpdate &amp;&amp; currId != 0);
00227         db-&gt;update(currId, table, record);
00228     }
00229 
<a name="l00233"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a29">00233</a>     <span class="keywordtype">void</span> removeAll() {
00234         assert(db != NULL);
00235         db-&gt;deleteTable(table);
00236         reset();
00237     }
00238 
00242     <span class="keywordtype">void</span> removeAllSelected();
00243 
<a name="l00247"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a31">00247</a>     <span class="keywordtype">void</span> setSelectionLimit(size_t lim) { limit = lim; }
00248     
<a name="l00252"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a32">00252</a>     <span class="keywordtype">void</span> unsetSelectionLimit() { limit = dbDefaultSelectionLimit; }
00253 
<a name="l00260"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a33">00260</a>     <span class="keywordtype">void</span> setPrefetchMode(<span class="keywordtype">bool</span> mode) { prefetch = mode; }
00261 
00262 
<a name="l00267"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a34">00267</a>     <span class="keywordtype">void</span> enableCheckForDuplicates(<span class="keywordtype">bool</span> enabled) {
00268         checkForDuplicatedIsEnabled = enabled;
00269     }
00270         
00271 
00275     <span class="keywordtype">void</span> reset();
00276 
00281     <span class="keywordtype">bool</span> isLast() <span class="keyword">const</span>; 
00282 
00287     <span class="keywordtype">bool</span> isFirst() <span class="keyword">const</span>; 
00288 
00294     <span class="keywordtype">void</span> freeze();
00295 
00299     <span class="keywordtype">void</span> unfreeze();
00300 
00308     <span class="keywordtype">bool</span> skip(<span class="keywordtype">int</span> n);
00309 
00310 
00316     <span class="keywordtype">int</span> seek(oid_t oid);
00317 
<a name="l00321"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a42">00321</a>     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* getTable() { <span class="keywordflow">return</span> table; }
00322 
00323 
<a name="l00328"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a43">00328</a>     <span class="keywordtype">void</span> setTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* aTable) { 
00329         table = aTable;
00330         db = aTable-&gt;<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a>;
00331     }
00332 
<a name="l00337"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a44">00337</a>     <span class="keywordtype">void</span> setRecord(<span class="keywordtype">void</span>* rec) { 
00338         record = (byte*)rec;
00339     }
00340 
<a name="l00345"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a45">00345</a>     <span class="keywordtype">void</span>* getRecord() { 
00346         <span class="keywordflow">return</span> record;
00347     }
00348 
00353     <span class="keywordtype">bool</span> isInSelection(oid_t oid);
00354 
00355 
<a name="l00360"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a47">00360</a>     <span class="keywordtype">void</span> fetch() { 
00361         assert(!(db-&gt;currIndex[currId] 
00362                  &amp; (dbInternalObjectMarker|dbFreeHandleMarker)));
00363         table-&gt;columns-&gt;fetchRecordFields(record, 
00364                                           (byte*)db-&gt;getRow(currId));
00365     }
00366 
00370     <span class="keywordtype">bool</span> hasNext() <span class="keyword">const</span>;
00371     
00372   <span class="keyword">protected</span>: 
00373     <a class="code" href="classdbDatabase.html">dbDatabase</a>*        db;
00374     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;
00375     dbCursorType       type;
00376     dbCursorType       defaultType;
00377     dbSelection        selection;
00378     <span class="keywordtype">bool</span>               allRecords;
00379     oid_t              firstId;
00380     oid_t              lastId;
00381     oid_t              currId;
00382     byte*              record;

⌨️ 快捷键说明

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