📄 cursor_8h-source.html
字号:
00361 dbSelection selection;00362 <span class="keywordtype">bool</span> allRecords;00363 oid_t firstId;00364 oid_t lastId;00365 oid_t currId;00366 byte* record;00367 size_t limit;00368 00369 int4* bitmap; <span class="comment">// bitmap to avoid duplicates</span>00370 size_t bitmapSize;00371 <span class="keywordtype">bool</span> eliminateDuplicates;00372 <span class="keywordtype">bool</span> prefetch;00373 <span class="keywordtype">bool</span> removed; <span class="comment">// current record was removed</span>00374 <span class="keywordtype">bool</span> updateInProgress;00375 00376 <span class="keywordtype">void</span>* paramBase;00377 00378 <span class="keywordtype">void</span> checkForDuplicates();00379 00380 <span class="keywordtype">bool</span> isMarked(oid_t oid) { 00381 <span class="keywordflow">return</span> bitmap != NULL && (bitmap[oid >> 5] & (1 << (oid & 31))) != 0;00382 }00383 00384 <span class="keywordtype">void</span> mark(oid_t oid) { 00385 <span class="keywordflow">if</span> (bitmap != NULL) { 00386 bitmap[oid >> 5] |= 1 << (oid & 31);00387 }00388 } 00389 00390 <span class="keywordtype">bool</span> add(oid_t oid) { 00391 <span class="keywordflow">if</span> (selection.nRows < limit) { 00392 <span class="keywordflow">if</span> (eliminateDuplicates) { 00393 <span class="keywordflow">if</span> (bitmap[oid >> 5] & (1 << (oid & 31))) { 00394 <span class="keywordflow">return</span> <span class="keyword">true</span>;00395 }00396 bitmap[oid >> 5] |= 1 << (oid & 31);00397 } 00398 selection.add(oid);00399 <span class="keywordflow">return</span> selection.nRows < limit;00400 } 00401 <span class="keywordflow">return</span> <span class="keyword">false</span>;00402 }00403 00404 <span class="keywordtype">bool</span> gotoNext();00405 <span class="keywordtype">bool</span> gotoPrev(); 00406 <span class="keywordtype">bool</span> gotoFirst();00407 <span class="keywordtype">bool</span> gotoLast();00408 00409 <span class="keywordtype">void</span> setCurrent(<a class="code" href="classdbAnyReference.html">dbAnyReference</a> <span class="keyword">const</span>& ref);00410 00411 <span class="keywordtype">void</span> adjustReferences(size_t base, size_t size, <span class="keywordtype">long</span> shift) { 00412 <span class="keywordflow">if</span> (currId != 0) { 00413 table->columns->adjustReferences(record, base, size, shift);00414 }00415 }00416 00417 dbAnyCursor(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>& aTable, dbCursorType aType, byte* rec)00418 : table(&aTable),type(aType),defaultType(aType),00419 allRecords(false),currId(0),record(rec)00420 {00421 db = aTable.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorp10">db</a>;00422 limit = dbDefaultSelectionLimit;00423 updateInProgress = <span class="keyword">false</span>;00424 prefetch = <span class="keyword">true</span>;00425 removed = <span class="keyword">false</span>;00426 bitmap = NULL; 00427 bitmapSize = 0;00428 eliminateDuplicates = <span class="keyword">false</span>;00429 paramBase = NULL;00430 }00431 <span class="keyword">public</span>:00432 dbAnyCursor() 00433 : table(NULL),type(dbCursorViewOnly),defaultType(dbCursorViewOnly),00434 allRecords(false),currId(0),record(NULL)00435 {00436 limit = dbDefaultSelectionLimit;00437 updateInProgress = <span class="keyword">false</span>;00438 prefetch = <span class="keyword">false</span>;00439 removed = <span class="keyword">false</span>;00440 bitmap = NULL;00441 bitmapSize = 0;00442 eliminateDuplicates = <span class="keyword">false</span>;00443 db = NULL;00444 paramBase = NULL;00445 }00446 ~dbAnyCursor();00447 };00448 00449 00453 <span class="keyword">template</span><<span class="keyword">class</span> T><a name="l00454"></a><a class="code" href="classdbCursor.html">00454</a> <span class="keyword">class </span><a class="code" href="classdbCursor.html">dbCursor</a> : <span class="keyword">public</span> dbAnyCursor { 00455 <span class="keyword">protected</span>:00456 T record;00457 00458 <span class="keyword">public</span>:<a name="l00463"></a><a class="code" href="classdbCursor.html#dbCursora0">00463</a> <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(dbCursorType type = dbCursorViewOnly) 00464 : dbAnyCursor(T::dbDescriptor, type, (byte*)&record) {}00465 <a name="l00472"></a><a class="code" href="classdbCursor.html#dbCursora1">00472</a> <a class="code" href="classdbCursor.html#dbCursora0">dbCursor</a>(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, dbCursorType type = dbCursorViewOnly)00473 : dbAnyCursor(T::dbDescriptor, type, (byte*)&record)00474 {00475 db = aDb;00476 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* theTable = db-><a class="code" href="classdbDatabase.html#dbSubSqla32">lookupTable</a>(table);00477 <span class="keywordflow">if</span> (theTable != NULL) { 00478 table = theTable;00479 }00480 }00481 <a name="l00486"></a><a class="code" href="classdbCursor.html#dbCursora2">00486</a> T* <a class="code" href="classdbCursor.html#dbCursora2">get</a>() { 00487 <span class="keywordflow">return</span> currId == 0 ? (T*)NULL : &record; 00488 }00489 <a name="l00494"></a><a class="code" href="classdbCursor.html#dbCursora3">00494</a> T* <a class="code" href="classdbCursor.html#dbCursora3">next</a>() { 00495 <span class="keywordflow">if</span> (gotoNext()) { 00496 <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00497 <span class="keywordflow">return</span> &record;00498 }00499 <span class="keywordflow">return</span> NULL;00500 }00501 <a name="l00506"></a><a class="code" href="classdbCursor.html#dbCursora4">00506</a> T* <a class="code" href="classdbCursor.html#dbCursora4">prev</a>() { 00507 <span class="keywordflow">if</span> (gotoPrev()) { 00508 <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00509 <span class="keywordflow">return</span> &record;00510 }00511 <span class="keywordflow">return</span> NULL;00512 }00513 <a name="l00518"></a><a class="code" href="classdbCursor.html#dbCursora5">00518</a> T* <a class="code" href="classdbCursor.html#dbCursora5">first</a>() { 00519 <span class="keywordflow">if</span> (gotoFirst()) {00520 <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00521 <span class="keywordflow">return</span> &record;00522 }00523 <span class="keywordflow">return</span> NULL;00524 }00525 <a name="l00530"></a><a class="code" href="classdbCursor.html#dbCursora6">00530</a> T* <a class="code" href="classdbCursor.html#dbCursora6">last</a>() { 00531 <span class="keywordflow">if</span> (gotoLast()) {00532 <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a47">fetch</a>();00533 <span class="keywordflow">return</span> &record;00534 }00535 <span class="keywordflow">return</span> NULL;00536 } 00537 <a name="l00543"></a><a class="code" href="classdbCursor.html#dbCursora7">00543</a> <span class="keywordtype">int</span> <a class="code" href="classdbCursor.html#dbCursora7">seek</a>(<a class="code" href="classdbReference.html">dbReference<T></a> <span class="keyword">const</span>& ref) { 00544 <span class="keywordflow">return</span> <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a41">dbAnyCursor::seek</a>(ref.<a class="code" href="classdbAnyReference.html#dbReference_3_01Version_01_4a11">getOid</a>());00545 }00546 <a name="l00551"></a><a class="code" href="classdbCursor.html#dbCursora8">00551</a> T* <a class="code" href="classdbCursor.html#dbCursora8">operator -></a>() { 00552 assert(currId != 0);00553 <span class="keywordflow">return</span> &record;00554 }00555 <a name="l00561"></a><a class="code" href="classdbCursor.html#dbCursora9">00561</a> T* <a class="code" href="classdbCursor.html#dbCursora9">at</a>(<a class="code" href="classdbReference.html">dbReference<T></a> <span class="keyword">const</span>& ref) { 00562 setCurrent(ref);00563 <span class="keywordflow">return</span> &record;00564 }00565 <a name="l00570"></a><a class="code" href="classdbCursor.html#dbCursora10">00570</a> <span class="keywordtype">void</span> <a class="code" href="classdbCursor.html#dbCursora10">toArray</a>(<a class="code" href="classdbArray.html">dbArray</a>< <a class="code" href="classdbReference.html">dbReference<T></a> >& arr)<span class="keyword"> const </span>{ 00571 arr.resize(selection.nRows);00572 <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a20">toArrayOfOid</a>((oid_t*)arr.base());00573 }00574 <a name="l00579"></a><a class="code" href="classdbCursor.html#dbCursora11">00579</a> <a class="code" href="classdbReference.html">dbReference<T></a> <a class="code" href="classdbCursor.html#dbCursora11">currentId</a>()<span class="keyword"> const </span>{ 00580 <span class="keywordflow">return</span> <a class="code" href="classdbReference.html">dbReference<T></a>(currId);00581 }00582 <a name="l00599"></a><a class="code" href="classdbCursor.html#dbCursora12">00599</a> T* <a class="code" href="classdbCursor.html#dbCursora12">nextAvailable</a>() { 00600 <span class="keywordflow">if</span> (!removed) { 00601 <span class="keywordflow">return</span> <a class="code" href="classdbCursor.html#dbCursora3">next</a>(); 00602 } <span class="keywordflow">else</span> { 00603 removed = <span class="keyword">false</span>;00604 <span class="keywordflow">return</span> <a class="code" href="classdbCursor.html#dbCursora2">get</a>();00605 }00606 }00607 <a name="l00612"></a><a class="code" href="classdbCursor.html#dbCursora13">00612</a> <span class="keywordtype">bool</span> <a class="code" href="classdbCursor.html#dbCursora13">isInSelection</a>(<a class="code" href="classdbReference.html">dbReference<T></a>& ref) <span class="keyword">const</span> {00613 <span class="keywordflow">return</span> <a class="code" href="classdbAnyCursor.html#dbCursor_3_01Sequencer_01_4a46">dbAnyCursor::isInSelection</a>(ref.getOid());00614 }00615 };00616 00617 <span class="keyword">class </span>dbParallelQueryContext { 00618 <span class="keyword">public</span>:00619 <a class="code" href="classdbDatabase.html">dbDatabase</a>* <span class="keyword">const</span> db;00620 <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* <span class="keyword">const</span> query;00621 oid_t firstRow;00622 <a class="code" href="classdbTable.html">dbTable</a>* table;00623 dbAnyCursor* cursor;00624 dbSelection selection[dbMaxParallelSearchThreads];00625 00626 <span class="keywordtype">void</span> search(<span class="keywordtype">int</span> i); 00627 00628 dbParallelQueryContext(<a class="code" href="classdbDatabase.html">dbDatabase</a>* aDb, <a class="code" href="classdbTable.html">dbTable</a>* aTable, 00629 <a class="code" href="classdbCompiledQuery.html">dbCompiledQuery</a>* aQuery, dbAnyCursor* aCursor)00630 : db(aDb), query(aQuery), firstRow(aTable->firstRow), table(aTable), cursor(aCursor) {}00631 };00632 00633 00634 <span class="keyword">extern</span> <span class="keywordtype">char</span>* strupper(<span class="keywordtype">char</span>* s);00635 00636 <span class="keyword">extern</span> <span class="keywordtype">char</span>* strlower(<span class="keywordtype">char</span>* s);00637 00638 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Feb 12 13:04:48 2004 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.5 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -