From 061ae91293d35fe0ffda6af55da7d10cb8675d7e Mon Sep 17 00:00:00 2001 From: Brian Hays Date: Wed, 13 Jun 2001 07:00:51 +0000 Subject: [PATCH] 2001-06-12 11:59 UTC-0800 Brian Hays --- harbour/ChangeLog | 11 +++++++ harbour/contrib/rdd_ads/ads1.c | 4 ++- harbour/source/rdd/dbcmd.c | 60 +++++++++++++++++++++------------- 3 files changed, 52 insertions(+), 23 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 94a3b6eda1..a6b0824fef 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,14 @@ +2001-06-12 11:59 UTC-0800 Brian Hays + + * contrib/rdd_ads/ads1.c + * fixed subIndexing. + + * source/rdd/dbcmd.c + * Fixed __dbLocate. + When it skipped to EOF, it didn't exit immediately and + evaluated the FOR condition on the phantom record. If it passed that + test, Found() was set to True even at EOF! + 2001-06-12 19:10 UTC-0400 David G. Holm * source/rtl/net.c diff --git a/harbour/contrib/rdd_ads/ads1.c b/harbour/contrib/rdd_ads/ads1.c index 1bf2f773b0..4b64e6d5f3 100644 --- a/harbour/contrib/rdd_ads/ads1.c +++ b/harbour/contrib/rdd_ads/ads1.c @@ -1479,6 +1479,7 @@ static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) PHB_ITEM pExprItem = pOrderInfo->abExpr; UNSIGNED16 pus16 = 0; UNSIGNED8 pucWhile[ (ADS_MAX_KEY_LENGTH * 2) + 3 ]; + UNSIGNED16 pusLen = ADS_MAX_KEY_LENGTH; HB_TRACE(HB_TR_DEBUG, ("adsOrderCreate(%p, %p)", pArea, pOrderInfo)); @@ -1508,7 +1509,8 @@ static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) secondary bags before creating temp indexes with USECURRENT */ AdsGetKeyType(pArea->hOrdCurrent, &pus16); - strcpy(pucWhile, (UCHAR*)hb_itemGetCPtr( pExprItem ) ); + AdsGetIndexExpr( pArea->hOrdCurrent, pucWhile, &pusLen); + pucWhile[pusLen] = 0; if ( pus16 == ADS_STRING ) /* add quotation marks around the key */ { strcat(pucWhile, "<=\""); diff --git a/harbour/source/rdd/dbcmd.c b/harbour/source/rdd/dbcmd.c index aa9d1a5cdd..2a5efffd62 100644 --- a/harbour/source/rdd/dbcmd.c +++ b/harbour/source/rdd/dbcmd.c @@ -1388,12 +1388,13 @@ HB_FUNC( __DBLOCATE ) return; } + ( ( AREAP ) s_pCurrArea->pArea )->fFound = FALSE; memset( &pScopeInfo, 0, sizeof( DBSCOPEINFO ) ); - pFor = hb_param( 1, HB_IT_BLOCK ); - pWhile = hb_param( 2, HB_IT_BLOCK ); - pNext = hb_param( 3, HB_IT_NUMERIC ); - pRecord = hb_param( 4, HB_IT_NUMERIC ); - pRest = hb_param( 5, HB_IT_LOGICAL ); + pFor = hb_param( 1, HB_IT_BLOCK ); + pWhile = hb_param( 2, HB_IT_BLOCK ); + pNext = hb_param( 3, HB_IT_NUMERIC ); + pRecord = hb_param( 4, HB_IT_NUMERIC ); + pRest = hb_param( 5, HB_IT_LOGICAL ); pNewRest = NULL; if( pWhile ) { @@ -1445,14 +1446,19 @@ HB_FUNC( __DBLOCATE ) while( !( ( AREAP ) s_pCurrArea->pArea )->fEof && lNext-- > 0 && bWhile && !bFor ) { SELF_SKIP( ( AREAP ) s_pCurrArea->pArea, 1 ); - if( hb_itemType( pWhile ) == HB_IT_BLOCK ) - bWhile = hb_itemGetL( hb_vmEvalBlock( pWhile ) ); + if( ( ( AREAP ) s_pCurrArea->pArea )->fEof ) + bFor = FALSE; else - bWhile = TRUE; - if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) - bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); - else - bFor = hb_itemGetL( pNewFor ); + { + if( hb_itemType( pWhile ) == HB_IT_BLOCK ) + bWhile = hb_itemGetL( hb_vmEvalBlock( pWhile ) ); + else + bWhile = TRUE; + if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) + bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); + else + bFor = hb_itemGetL( pNewFor ); + } } ( ( AREAP ) s_pCurrArea->pArea )->fFound = bFor; } @@ -1471,14 +1477,19 @@ HB_FUNC( __DBLOCATE ) while( !( ( AREAP ) s_pCurrArea->pArea )->fEof && bWhile && !bFor ) { SELF_SKIP( ( AREAP ) s_pCurrArea->pArea, 1 ); - if( hb_itemType( pWhile ) == HB_IT_BLOCK ) - bWhile = hb_itemGetL( hb_vmEvalBlock( pWhile ) ); + if( ( ( AREAP ) s_pCurrArea->pArea )->fEof ) + bFor = FALSE; else - bWhile = TRUE; - if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) - bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); - else - bFor = hb_itemGetL( pNewFor ); + { + if( hb_itemType( pWhile ) == HB_IT_BLOCK ) + bWhile = hb_itemGetL( hb_vmEvalBlock( pWhile ) ); + else + bWhile = TRUE; + if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) + bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); + else + bFor = hb_itemGetL( pNewFor ); + } } ( ( AREAP ) s_pCurrArea->pArea )->fFound = bFor; } @@ -1494,10 +1505,15 @@ HB_FUNC( __DBLOCATE ) while( !( ( AREAP ) s_pCurrArea->pArea )->fEof && !bFor ) { SELF_SKIP( ( AREAP ) s_pCurrArea->pArea, 1 ); - if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) - bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); + if( ( ( AREAP ) s_pCurrArea->pArea )->fEof ) + bFor = FALSE; else - bFor = hb_itemGetL( pNewFor ); + { + if( hb_itemType( pNewFor ) == HB_IT_BLOCK ) + bFor = hb_itemGetL( hb_vmEvalBlock( pNewFor ) ); + else + bFor = hb_itemGetL( pNewFor ); + } } ( ( AREAP ) s_pCurrArea->pArea )->fFound = bFor; }