📄 cursor_8h-source.html
字号:
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_4a33">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_4a34">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_4a35">00260</a> <span class="keywordtype">void</span> setPrefetchMode(<span class="keywordtype">bool</span> mode) { prefetch = mode; }00261 00265 <span class="keywordtype">void</span> reset();00266 00271 <span class="keywordtype">bool</span> isLast() <span class="keyword">const</span>; 00272 00277 <span class="keywordtype">bool</span> isFirst() <span class="keyword">const</span>; 00278 00284 <span class="keywordtype">void</span> freeze();00285 00289 <span class="keywordtype">void</span> unfreeze();00290 00298 <span class="keywordtype">bool</span> skip(<span class="keywordtype">int</span> n);00299 00300 00306 <span class="keywordtype">int</span> seek(oid_t oid);00307 <a name="l00311"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a43">00311</a> <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* getTable() { <span class="keywordflow">return</span> table; }00312 00313 <a name="l00318"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a44">00318</a> <span class="keywordtype">void</span> setTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* aTable) { 00319 table = aTable;00320 db = aTable-><a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a>;00321 }00322 <a name="l00327"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a45">00327</a> <span class="keywordtype">void</span> setRecord(<span class="keywordtype">void</span>* rec) { 00328 record = (byte*)rec;00329 }00330 <a name="l00335"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a46">00335</a> <span class="keywordtype">void</span>* getRecord() { 00336 <span class="keywordflow">return</span> record;00337 }00338 00343 <span class="keywordtype">bool</span> isInSelection(oid_t oid);00344 00345 <a name="l00350"></a><a class="code" href="classdbAnyCursor.html#dbCursor_3_01dbTimeSeriesBlock_3_01T_01_4_01_4a48">00350</a> <span class="keywordtype">void</span> fetch() { 00351 assert(!(db->currIndex[currId] 00352 & (dbInternalObjectMarker|dbFreeHandleMarker)));00353 table->columns->fetchRecordFields(record, 00354 (byte*)db->getRow(currId));00355 }00356 00360 <span class="keywordtype">bool</span> hasNext() <span class="keyword">const</span>;00361 00362 <span class="keyword">protected</span>: 00363 <a class="code" href="classdbDatabase.html">dbDatabase</a>* db;00364 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00365 dbCursorType type;00366 dbCursorType defaultType;00367 dbSelection selection;00368 <span class="keywordtype">bool</span> allRecords;00369 oid_t firstId;00370 oid_t lastId;00371 oid_t currId;00372 byte* record;00373 size_t limit;00374 00375 int4* bitmap; <span class="comment">// bitmap to avoid duplicates</span>00376 size_t bitmapSize;00377 <span class="keywordtype">bool</span> eliminateDuplicates;00378 <span class="keywordtype">bool</span> prefetch;00379 <span class="keywordtype">bool</span> removed; <span class="comment">// current record was removed</span>00380 <span class="keywordtype">bool</span> lastRecordWasDeleted; <span class="comment">//last record was deleted</span>00381 00382 size_t stmtLimitStart;00383 size_t stmtLimitLen;00384 size_t nSkipped;00385 00386 <span class="keywordtype">void</span>* paramBase;00387 00388 <span class="keywordtype">void</span> checkForDuplicates();00389 <span class="keywordtype">void</span> deallocateBitmap();00390 00391 <span class="keywordtype">bool</span> isMarked(oid_t oid) { 00392 <span class="keywordflow">return</span> bitmap != NULL && (bitmap[oid >> 5] & (1 << (oid & 31))) != 0;00393 }00394 00395 <span class="keywordtype">void</span> setStatementLimit(<a class="code" href="classdbQuery.html">dbQuery</a> <span class="keyword">const</span>& q) { 00396 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>;00397 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>;00398 }00399 00400 <span class="keywordtype">void</span> truncateSelection() { 00401 selection.truncate(stmtLimitStart, stmtLimitLen);00402 }00403 00404 <span class="keywordtype">void</span> mark(oid_t oid) { 00405 <span class="keywordflow">if</span> (bitmap != NULL) { 00406 bitmap[oid >> 5] |= 1 << (oid & 31);00407 }00408 } 00409 00410 <span class="keywordtype">bool</span> add(oid_t oid) { 00411 <span class="keywordflow">if</span> (selection.nRows < limit && selection.nRows < stmtLimitLen) { 00412 <span class="keywordflow">if</span> (nSkipped < stmtLimitStart) { 00413 nSkipped += 1;00414 <span class="keywordflow">return</span> <span class="keyword">true</span>;00415 }00416 <span class="keywordflow">if</span> (eliminateDuplicates) { 00417 <span class="keywordflow">if</span> (bitmap[oid >> 5] & (1 << (oid & 31))) { 00418 <span class="keywordflow">return</span> <span class="keyword">true</span>;00419 }00420 bitmap[oid >> 5] |= 1 << (oid & 31);00421 } 00422 selection.add(oid);00423 <span class="keywordflow">return</span> selection.nRows < limit;00424 } 00425 <span class="keywordflow">return</span> <span class="keyword">false</span>;00426 }00427 00428 <span class="keywordtype">bool</span> gotoNext();00429 <span class="keywordtype">bool</span> gotoPrev(); 00430 <span class="keywordtype">bool</span> gotoFirst();00431 <span class="keywordtype">bool</span> gotoLast();00432 00433 <span class="keywordtype">bool</span> moveNext();00434 <span class="keywordtype">bool</span> movePrev();00435 00436 <span class="keywordtype">void</span> setCurrent(<a class="code" href="classdbAnyReference.html">dbAnyReference</a> <span class="keyword">const</span>& ref);00437 00438 <span class="keywordtype">void</span> adjustReferences(size_t base, size_t size, <span class="keywordtype">long</span> shift) { 00439 <span class="keywordflow">if</span> (currId != 0 && record != NULL) { 00440 table-><a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn4">columns</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptora8">adjustReferences</a>(record, base, size, shift);00441 }00442 }00443 00444 dbAnyCursor(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>& aTable, dbCursorType aType, byte* rec)00445 : table(&aTable),type(aType),defaultType(aType),00446 allRecords(false),currId(0),record(rec)00447 {00448 db = aTable.<a class="code" href="classdbTableDescriptor.html#dbTableDescriptorn10">db</a>;00449 limit = dbDefaultSelectionLimit;00450 prefetch = rec != NULL;00451 removed = <span class="keyword">false</span>;00452 bitmap = NULL; 00453 bitmapSize = 0;00454 eliminateDuplicates = <span class="keyword">false</span>;00455 paramBase = NULL;00456 stmtLimitLen = dbDefaultSelectionLimit;00457 stmtLimitStart = 0;00458 nSkipped = 0;00459 }00460 <span class="keyword">public</span>:00461 dbAnyCursor() 00462 : table(NULL),type(dbCursorViewOnly),defaultType(dbCursorViewOnly),00463 allRecords(false),currId(0),record(NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -