static HB_ERRCODE sqlbaseSkip( SQLBASEAREAP pArea, HB_LONG lToSkip ) { HB_ERRCODE errCode; if( pArea->lpdbPendingRel ) { if( SELF_FORCEREL( ( AREAP ) pArea ) != HB_SUCCESS ) return HB_FAILURE; } pArea->area.fTop = pArea->area.fBottom = HB_FALSE; if( lToSkip == 0 || hb_setGetDeleted() || pArea->area.dbfi.itmCobExpr || pArea->area.dbfi.fFilter ) return SUPER_SKIP( ( AREAP ) pArea, lToSkip ); errCode = SELF_SKIPRAW( ( AREAP ) pArea, lToSkip ); /* Move first record and set Bof flag */ if( errCode == HB_SUCCESS && pArea->area.fBof && lToSkip < 0 ) { errCode = SELF_GOTOP( ( AREAP ) pArea ); pArea->area.fBof = HB_TRUE; } if( lToSkip < 0 ) pArea->area.fEof = HB_FALSE; else /* if( lToSkip > 0 ) */ pArea->area.fBof = HB_FALSE; return errCode; }
static HB_ERRCODE adsxSkip( ADSXAREAP pArea, HB_LONG lToSkip ) { PMIXKEY pKey; HB_ULONG ulKeyPos; HB_ERRCODE errCode = HB_SUCCESS; if( ! pArea->pTagCurrent || lToSkip == 0 ) return SUPER_SKIP( ( AREAP ) pArea, lToSkip ); /* resolve any pending relations */ if( pArea->adsarea.lpdbPendingRel ) SELF_FORCEREL( ( AREAP ) pArea ); pArea->adsarea.area.fTop = pArea->adsarea.area.fBottom = HB_FALSE; if( lToSkip > 0 ) { if( ! pArea->adsarea.fPositioned ) { errCode = SELF_GOTO( ( AREAP ) pArea, pArea->adsarea.ulRecNo ); } else { pArea->adsarea.area.fEof = HB_FALSE; } pKey = mixKeyEval( pArea->pTagCurrent, pArea ); if( mixFindKey( pArea->pTagCurrent, pKey, &ulKeyPos ) && pArea->pTagCurrent->ulRecCount > ( HB_ULONG ) lToSkip && ulKeyPos < pArea->pTagCurrent->ulRecCount - ( HB_ULONG ) lToSkip ) { if( SELF_GOTO( ( AREAP ) pArea, pArea->pTagCurrent->pKeys[ ulKeyPos + lToSkip ]->rec ) == HB_FAILURE ) errCode = HB_FAILURE; pArea->adsarea.fPositioned = HB_TRUE; pArea->adsarea.area.fEof = HB_FALSE; } else { SELF_GOTO( ( AREAP ) pArea, 0 ); pArea->adsarea.fPositioned = HB_FALSE; pArea->adsarea.area.fEof = HB_TRUE; } mixKeyFree( pKey ); pArea->adsarea.area.fBof = HB_FALSE; } else { if( ! pArea->adsarea.fPositioned ) { errCode = SELF_GOBOTTOM( ( AREAP ) pArea ); pArea->adsarea.area.fBottom = HB_FALSE; ++lToSkip; } else { pArea->adsarea.area.fBof = HB_FALSE; } pKey = mixKeyEval( pArea->pTagCurrent, pArea ); if( mixFindKey( pArea->pTagCurrent, pKey, &ulKeyPos ) && pArea->pTagCurrent->ulRecCount >= ( HB_ULONG ) ( -lToSkip ) && ulKeyPos >= ( HB_ULONG ) ( -lToSkip ) ) { if( SELF_GOTO( ( AREAP ) pArea, pArea->pTagCurrent->pKeys[ ulKeyPos + lToSkip ]->rec ) == HB_FAILURE ) errCode = HB_FAILURE; pArea->adsarea.area.fBof = HB_FALSE; } else { SELF_GOTOP( ( AREAP ) pArea ); pArea->adsarea.area.fBof = HB_TRUE; } mixKeyFree( pKey ); pArea->adsarea.area.fEof = HB_FALSE; } /* Force relational movement in child WorkAreas */ if( pArea->adsarea.area.lpdbRelations ) SELF_SYNCCHILDREN( ( AREAP ) pArea ); return errCode; }