📄 cursor_8h-source.html
字号:
<!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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>cursor.h</h1><div class="fragment"><pre>00001 <span class="comment">//-< CURSOR.H >------------------------------------------------------*--------*</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_NAMESPACE00015 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->nRows == quantum) { 00046 last = last->next = createNewSegment(last);00047 }00048 last->rows[last->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 dbCursorForUpdate00070 };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_4a15">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_4a17">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_4a19">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_4a20">00116</a> <span class="keywordtype">bool</span> isLimitReached()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> selection.nRows >= limit || selection.nRows >= 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_4a22">00137</a> <span class="keywordtype">int</span> select(<a class="code" href="classdbQuery.html">dbQuery</a>& query, dbCursorType aType, <span class="keywordtype">void</span>* paramStruct = NULL) {00138 type = aType;00139 reset();00140 paramBase = paramStruct;00141 db->select(<span class="keyword">this</span>, query);00142 paramBase = NULL;00143 <span class="keywordflow">if</span> (gotoFirst() && 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_4a23">00155</a> <span class="keywordtype">int</span> select(<a class="code" href="classdbQuery.html">dbQuery</a>& 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_4a24">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_4a25">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_4a26">00186</a> <span class="keywordtype">int</span> select(dbCursorType aType) { 00187 type = aType;00188 reset();00189 db->select(<span class="keyword">this</span>); 00190 <span class="keywordflow">if</span> (gotoFirst() && 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_4a27">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_4a30">00225</a> <span class="keywordtype">void</span> update() { 00226 assert(type == dbCursorForUpdate && currId != 0);00227 db->update(currId, table, record);00228 }00229 <a name="l00233"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a31">00233</a> <span class="keywordtype">void</span> removeAll() {00234 assert(db != NULL);00235 db->deleteTable(table);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -