static HB_ERRCODE sqlbaseChildSync( SQLBASEAREAP pArea, LPDBRELINFO pRelInfo ) { if( SELF_GOCOLD( ( AREAP ) pArea ) != HB_SUCCESS ) return HB_FAILURE; pArea->lpdbPendingRel = pRelInfo; if( pArea->lpdbRelations ) return SELF_SYNCCHILDREN( ( AREAP ) pArea ); return HB_SUCCESS; }
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; }