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

📄 cursor_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00383     size_t             limit;
00384 
00385     int4*              bitmap; <span class="comment">// bitmap to avoid duplicates</span>
00386     size_t             bitmapSize;
00387     <span class="keywordtype">bool</span>               eliminateDuplicates;
00388     <span class="keywordtype">bool</span>               checkForDuplicatedIsEnabled;
00389     <span class="keywordtype">bool</span>               prefetch;
00390     <span class="keywordtype">bool</span>               removed; <span class="comment">// current record was removed</span>
00391     <span class="keywordtype">bool</span>               lastRecordWasDeleted; <span class="comment">//last record was deleted</span>
00392 
00393     size_t             stmtLimitStart;
00394     size_t             stmtLimitLen;
00395     size_t             nSkipped;
00396 
00397     <span class="keywordtype">void</span>*              paramBase;
00398     
00399     <span class="keywordtype">void</span> checkForDuplicates();
00400     <span class="keywordtype">void</span> deallocateBitmap();
00401 
00402     <span class="keywordtype">bool</span> isMarked(oid_t oid) { 
00403         <span class="keywordflow">return</span> bitmap != NULL &amp;&amp; (bitmap[oid &gt;&gt; 5] &amp; (1 &lt;&lt; (oid &amp; 31))) != 0;
00404     }
00405 
00406     <span class="keywordtype">void</span> setStatementLimit(<a class="code" href="classdbQuery.html">dbQuery</a> <span class="keyword">const</span>&amp; q) { 
00407         stmtLimitStart = q.<a class="code" href="classdbCompiledQuery.html#dbQuerym8">stmtLimitStartPtr</a> != NULL ? (nat4)*q.<a class="code" href="classdbCompiledQuery.html#dbQuerym8">stmtLimitStartPtr</a> : q.<a class="code" href="classdbCompiledQuery.html#dbQuerym6">stmtLimitStart</a>;
00408         stmtLimitLen = q.<a class="code" href="classdbCompiledQuery.html#dbQuerym9">stmtLimitLenPtr</a> != NULL ? (nat4)*q.<a class="code" href="classdbCompiledQuery.html#dbQuerym9">stmtLimitLenPtr</a> : q.<a class="code" href="classdbCompiledQuery.html#dbQuerym7">stmtLimitLen</a>;
00409     }
00410 
00411     <span class="keywordtype">void</span> truncateSelection() { 
00412         selection.truncate(stmtLimitStart, stmtLimitLen);
00413     }
00414 
00415     <span class="keywordtype">void</span> mark(oid_t oid) { 
00416         <span class="keywordflow">if</span> (bitmap != NULL) { 
00417             bitmap[oid &gt;&gt; 5] |= 1 &lt;&lt; (oid &amp; 31);
00418         }
00419     }    
00420 
00421     <span class="keywordtype">bool</span> add(oid_t oid) { 
00422         <span class="keywordflow">if</span> (selection.nRows &lt; limit &amp;&amp; selection.nRows &lt; stmtLimitLen) { 
00423             <span class="keywordflow">if</span> (nSkipped &lt; stmtLimitStart) { 
00424                 nSkipped += 1;
00425                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
00426             }
00427             <span class="keywordflow">if</span> (eliminateDuplicates) { 
00428                 <span class="keywordflow">if</span> (bitmap[oid &gt;&gt; 5] &amp; (1 &lt;&lt; (oid &amp; 31))) { 
00429                     <span class="keywordflow">return</span> <span class="keyword">true</span>;
00430                 }
00431                 bitmap[oid &gt;&gt; 5] |= 1 &lt;&lt; (oid &amp; 31);
00432             } 
00433             selection.add(oid);
00434             <span class="keywordflow">return</span> selection.nRows &lt; limit;
00435         } 
00436         <span class="keywordflow">return</span> <span class="keyword">false</span>;
00437     }
00438 
00439     byte* fetchNext();
00440     byte* fetchPrev();
00441 
00442     <span class="keywordtype">bool</span> gotoNext();
00443     <span class="keywordtype">bool</span> gotoPrev(); 
00444     <span class="keywordtype">bool</span> gotoFirst();
00445     <span class="keywordtype">bool</span> gotoLast();
00446     
00447     <span class="keywordtype">bool</span> moveNext();
00448     <span class="keywordtype">bool</span> movePrev();
00449 
00450     <span class="keywordtype">void</span> setCurrent(<a class="code" href="classdbAnyReference.html">dbAnyReference</a> <span class="keyword">const</span>&amp; ref);
00451 
00452     <span class="keywordtype">void</span> adjustReferences(size_t base, size_t size, <span class="keywordtype">long</span> shift) { 
00453         <span class="keywordflow">if</span> (currId != 0 &amp;&amp; record != NULL) { 
00454             table-&gt;<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn4">columns</a>-&gt;<a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora8">adjustReferences</a>(record, base, size, shift);
00455         }
00456     }
00457 
00458     dbAnyCursor(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>&amp; aTable, dbCursorType aType, byte* rec)
00459     : table(&amp;aTable),type(aType),defaultType(aType),
00460       allRecords(false),currId(0),record(rec)
00461     {
00462         db = aTable.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a>;
00463         limit = dbDefaultSelectionLimit;
00464         prefetch = rec != NULL;
00465         removed = <span class="keyword">false</span>;
00466         bitmap = NULL; 
00467         bitmapSize = 0;
00468         eliminateDuplicates = <span class="keyword">false</span>;
00469         checkForDuplicatedIsEnabled = <span class="keyword">true</span>;
00470         paramBase = NULL;
00471         stmtLimitLen = dbDefaultSelectionLimit;
00472         stmtLimitStart = 0;
00473         nSkipped = 0;
00474     }
00475   <span class="keyword">public</span>:
00476     dbAnyCursor() 
00477     : table(NULL),type(dbCursorViewOnly),defaultType(dbCursorViewOnly),
00478           allRecords(false),currId(0),record(NULL)
00479     {
00480         limit = dbDefaultSelectionLimit;
00481         prefetch = <span class="keyword">false</span>;
00482         removed = <span class="keyword">false</span>;
00483         bitmap = NULL;
00484         bitmapSize = 0;
00485         eliminateDuplicates = <span class="keyword">false</span>;
00486         checkForDuplicatedIsEnabled = <span class="keyword">true</span>;
00487         db = NULL;
00488         paramBase = NULL;
00489         stmtLimitLen = dbDefaultSelectionLimit;
00490         stmtLimitStart = 0;
00491         nSkipped = 0;
00492     }
00493     ~dbAnyCursor();
00494 };
00495 
00496 
00500 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
<a name="l00501"></a><a class="code" href="classdbCursor.html">00501</a> <span class="keyword">class </span><a class="code" href="classdbCursor.html">dbCursor</a> : <span class="keyword">public</span> dbAnyCursor { 
00502   <span class="keyword">private</span>:
00503     <span class="comment">// Itis not possible to copy cursors</span>
00504     <a class="code" href="classdbCursor.html">dbCursor&lt;T&gt;</a> operator = (<a class="code" href="classdbCursor.html">dbCursor&lt;T&gt;</a> <span class="keyword">const</span>&amp; src) { 
00505         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00506     } 
00507 
00508   <span class="keyword">protected</span>:
00509     T record;
00510     
00511   <span class="keyword">public</span>:
<a name="l00516"></a><a class="code" href="classdbCursor.html#dbCursora0">00516</a>     <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(dbCursorType type = dbCursorViewOnly) 
00517         : dbAnyCursor(T::dbDescriptor, type, (byte*)&amp;record) {}
00518 
<a name="l00525"></a><a class="code" href="classdbCursor.html#dbCursora1">00525</a>     <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, dbCursorType type = dbCursorViewOnly)
00526         : dbAnyCursor(T::dbDescriptor, type, (byte*)&amp;record)
00527     {
00528         db = aDb;
00529         <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* theTable = db-&gt;<a class="code" href="classdbDatabase.html#dbSubSqla41">lookupTable</a>(table);
00530         <span class="keywordflow">if</span> (theTable != NULL) { 
00531             table = theTable;
00532         }
00533     }
00534 
<a name="l00539"></a><a class="code" href="classdbCursor.html#dbCursora2">00539</a>     T* <a class="code" href="classdbCursor.html#dbCursora2">get</a>() { 
00540         <span class="keywordflow">return</span> currId == 0 ? (T*)NULL : &amp;record; 
00541     }
00542     
<a name="l00547"></a><a class="code" href="classdbCursor.html#dbCursora3">00547</a>     T* <a class="code" href="classdbCursor.html#dbCursora3">next</a>() {
00548         <span class="keywordflow">return</span> (T*)fetchNext();
00549     }
00550 
<a name="l00555"></a><a class="code" href="classdbCursor.html#dbCursora4">00555</a>     T* <a class="code" href="classdbCursor.html#dbCursora4">prev</a>() { 
00556         <span class="keywordflow">return</span> (T*)fetchPrev();
00557     }
00558 
<a name="l00563"></a><a class="code" href="classdbCursor.html#dbCursora5">00563</a>     T* <a class="code" href="classdbCursor.html#dbCursora5">first</a>() { 
00564         <span class="keywordflow">if</span> (gotoFirst()) {
00565             <a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a47">fetch</a>();
00566             <span class="keywordflow">return</span> &amp;record;
00567         }
00568         <span class="keywordflow">return</span> NULL;
00569     }
00570 
<a name="l00575"></a><a class="code" href="classdbCursor.html#dbCursora6">00575</a>     T* <a class="code" href="classdbCursor.html#dbCursora6">last</a>() { 
00576         <span class="keywordflow">if</span> (gotoLast()) {
00577             <a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a47">fetch</a>();
00578             <span class="keywordflow">return</span> &amp;record;
00579         }
00580         <span class="keywordflow">return</span> NULL;
00581     }    
00582     
<a name="l00588"></a><a class="code" href="classdbCursor.html#dbCursora7">00588</a>     <span class="keywordtype">int</span> <a class="code" href="classdbCursor.html#dbCursora7">seek</a>(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <span class="keyword">const</span>&amp; ref) { 
00589         <span class="keywordflow">return</span> <a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a41">dbAnyCursor::seek</a>(ref.<a class="code" href="classdbAnyReference.html#dbReferencea13">getOid</a>());
00590     }
00591 
<a name="l00596"></a><a class="code" href="classdbCursor.html#dbCursora8">00596</a>     T* <a class="code" href="classdbCursor.html#dbCursora8">operator -&gt;</a>() { 
00597         assert(currId != 0);
00598         <span class="keywordflow">return</span> &amp;record;
00599     }
00600 
<a name="l00606"></a><a class="code" href="classdbCursor.html#dbCursora9">00606</a>     T* <a class="code" href="classdbCursor.html#dbCursora9">at</a>(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <span class="keyword">const</span>&amp; ref) { 
00607         setCurrent(ref);
00608         <span class="keywordflow">return</span> &amp;record;
00609     }
00610     
<a name="l00615"></a><a class="code" href="classdbCursor.html#dbCursora10">00615</a>     <span class="keywordtype">void</span> <a class="code" href="classdbCursor.html#dbCursora10">toArray</a>(<a class="code" href="classdbArray.html">dbArray</a>&lt; <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> &gt;&amp; arr)<span class="keyword"> const </span>{ 
00616         arr.resize(selection.nRows);
00617         <a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a19">toArrayOfOid</a>((oid_t*)arr.base());
00618     }
00619 
<a name="l00624"></a><a class="code" href="classdbCursor.html#dbCursora11">00624</a>     <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <a class="code" href="classdbCursor.html#dbCursora11">currentId</a>()<span class="keyword"> const </span>{ 
00625         <span class="keywordflow">return</span> <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a>(currId);
00626     }
00627 
<a name="l00632"></a><a class="code" href="classdbCursor.html#dbCursora12">00632</a>     <span class="keywordtype">bool</span> <a class="code" href="classdbCursor.html#dbCursora12">isInSelection</a>(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a>&amp; ref) {
00633         <span class="keywordflow">return</span> <a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a46">dbAnyCursor::isInSelection</a>(ref.<a class="code" href="classdbAnyReference.html#dbReferencea13">getOid</a>());
00634     }
00635 };
00636 
00637 <span class="keyword">class </span>dbParallelQueryContext { 
00638   <span class="keyword">public</span>:
00639     <a class="code" href="classdbDatabase.html">dbDatabase</a>* <span class="keyword">const</span>      db;
00640     <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* <span class="keyword">const</span> query;
00641     oid_t                  firstRow;
00642     <a class="code" href="classdbTable.html">dbTable</a>*               table;
00643     dbAnyCursor*           cursor;
00644     dbSelection            selection[dbMaxParallelSearchThreads];
00645 
00646     <span class="keywordtype">void</span> search(<span class="keywordtype">int</span> i); 
00647 
00648     dbParallelQueryContext(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, <a class="code" href="classdbTable.html">dbTable</a>* aTable, 
00649                            <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* aQuery, dbAnyCursor* aCursor)
00650       : db(aDb), query(aQuery), firstRow(aTable-&gt;firstRow), table(aTable), cursor(aCursor) {}
00651 };
00652 
00653 
00654 <span class="keyword">extern</span> <span class="keywordtype">char</span>* strupper(<span class="keywordtype">char</span>* s);
00655 
00656 <span class="keyword">extern</span> <span class="keywordtype">char</span>* strlower(<span class="keywordtype">char</span>* s);
00657 
00658 END_FASTDB_NAMESPACE
00659 
00660 <span class="preprocessor">#endif</span>
</pre></div><hr><address style="align: right;"><small>Generated on Thu Feb 14 12:42:30 2008 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.18 </small></address>
</body>
</html>

⌨️ 快捷键说明

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