diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 49e0ede646..cf1f14898d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,15 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2002-11-18 14:55 UTC+0300 Alexander Kresin + * include/hbrddapi.c + * source/rdd/dbcmd.c + * source/rdd/workarea.c + * source/rdd/dbfntx/dbfntx1.c + * source/pp/pptable.c + * contrib/rdd_ads/ads1.c + * WHILE clause implemented for ADS RDD + 2002-11-15 14:30 UTC+0300 Alexander Kresin * include/hbcdpapi.c * source/rtl/cdpapi.c diff --git a/harbour/contrib/rdd_ads/ads1.c b/harbour/contrib/rdd_ads/ads1.c index 098429c194..fbcb21cba9 100644 --- a/harbour/contrib/rdd_ads/ads1.c +++ b/harbour/contrib/rdd_ads/ads1.c @@ -1989,6 +1989,17 @@ static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo ) { hTableOrIndex = pArea->hTable; } + if( pArea->lpdbOrdCondInfo && pArea->lpdbOrdCondInfo->abWhile ) + { + if( pucWhile[0] ) + { + strcat( (char * ) pucWhile, ".AND.("); + strcat( (char * ) pucWhile, (char * ) pArea->lpdbOrdCondInfo->abWhile ); + strcat( (char * ) pucWhile, ")"); + } + else + strcat( (char * ) pucWhile, (char * ) pArea->lpdbOrdCondInfo->abWhile ); + } if ( pArea->lpdbOrdCondInfo ) { diff --git a/harbour/include/hbapirdd.h b/harbour/include/hbapirdd.h index b7e424048e..ec56d66369 100644 --- a/harbour/include/hbapirdd.h +++ b/harbour/include/hbapirdd.h @@ -186,6 +186,7 @@ typedef struct _DBORDERCONDINFO { BOOL fActive; BYTE * abFor; + BYTE * abWhile; PHB_ITEM itmCobFor; PHB_ITEM itmCobWhile; PHB_ITEM itmCobEval; diff --git a/harbour/source/pp/pptable.c b/harbour/source/pp/pptable.c index 5d55f32df6..b2fdd68caf 100644 --- a/harbour/source/pp/pptable.c +++ b/harbour/source/pp/pptable.c @@ -400,14 +400,14 @@ void hb_pp_Table( void ) "CLOSE DATABASES ; CLOSE FORMAT ; CLEAR MEMORY ; CLEAR GETS ; SET ALTERNATE OFF ; SET ALTERNATE TO",&sC___228 }; #ifdef HB_EXTENSION static COMMANDS sC___230 = {0,"INDEX","ON \1A00 [TAG \1B40 ] TO \1C40 [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>] [\1O20 USECURRENT>] [\1P20 ADDITIVE>] [\1R20 CUSTOM>] [\1S20 NOOPTIMIZE>] [\1T20 MEMORY>]", - "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50], [\1T50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___229 }; + "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50], \1F20, [\1T50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___229 }; static COMMANDS sC___231 = {0,"INDEX","ON \1A00 TAG \1B40 [TO \1C40] [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>] [\1O20 USECURRENT>] [\1P20 ADDITIVE>] [\1R20 CUSTOM>] [\1S20 NOOPTIMIZE>] [\1T20 MEMORY>]", - "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50], [\1T50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___230 }; + "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50], \1F20, [\1T50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___230 }; #else static COMMANDS sC___230 = {0,"INDEX","ON \1A00 [TAG \1B40 ] TO \1C40 [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>] [\1O20 USECURRENT>] [\1P20 ADDITIVE>] [\1R20 CUSTOM>] [\1S20 NOOPTIMIZE>]", - "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___229 }; + "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50], \1F20 ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___229 }; static COMMANDS sC___231 = {0,"INDEX","ON \1A00 TAG \1B40 [TO \1C40] [FOR \1D00] [\1E20ALL>] [WHILE \1F00] [NEXT \1G00] [RECORD \1H00] [\1I20REST>] [EVAL \1J00] [EVERY \1K00] [\1L20 UNIQUE>] [\1M20 ASCENDING>] [\1N20 DESCENDING>] [\1O20 USECURRENT>] [\1P20 ADDITIVE>] [\1R20 CUSTOM>] [\1S20 NOOPTIMIZE>]", - "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50] ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___230 }; + "ordCondSet( \1D20, \1D40, [\1E50], \1F40, \1J40, \1K00, RECNO(), \1G00, \1H00, [\1I50], [\1N50],, [\1P50], [\1O50], [\1R50], [\1S50], \1F20 ) ; ordCreate(\1C30, \1B30, \1A20, \1A40, [\1L50] )",&sC___230 }; #endif static COMMANDS sC___232 = {0,"INDEX","ON \1A00 TO \1B40 [\1C20 UNIQUE>]", "dbCreateIndex( \1B30, \1A20, \1A40, if( \1C50, .t., NIL ) )",&sC___231 }; diff --git a/harbour/source/rdd/dbcmd.c b/harbour/source/rdd/dbcmd.c index f8537f380b..289b43e648 100644 --- a/harbour/source/rdd/dbcmd.c +++ b/harbour/source/rdd/dbcmd.c @@ -2359,6 +2359,14 @@ HB_FUNC( ORDCONDSET ) else lpdbOrdCondInfo->abFor = NULL; + if( ISCHAR( 17 ) && ( ulLen = hb_parclen( 17 ) ) > 0 ) + { + lpdbOrdCondInfo->abWhile = ( BYTE * ) hb_xgrab( ulLen + 1 ); + strcpy( ( char * ) lpdbOrdCondInfo->abWhile, hb_parc( 17 ) ); + } + else + lpdbOrdCondInfo->abWhile = NULL; + pItem = hb_param( 2, HB_IT_BLOCK ); if( pItem ) { diff --git a/harbour/source/rdd/dbfntx/dbfntx1.c b/harbour/source/rdd/dbfntx/dbfntx1.c index d1969d044d..718166e1b7 100644 --- a/harbour/source/rdd/dbfntx/dbfntx1.c +++ b/harbour/source/rdd/dbfntx/dbfntx1.c @@ -3401,7 +3401,7 @@ static ERRCODE ntxOrderCondition( NTXAREAP area, LPDBORDERCONDINFO pOrdCondInfo { #ifdef HB_EXTENSION if( pOrdCondInfo ) - pOrdCondInfo->fNoOptimize = hb_parl( 17 ); + pOrdCondInfo->fNoOptimize = hb_parl( 18 ); #endif return SUPER_ORDSETCOND( ( AREAP ) area, pOrdCondInfo ); } diff --git a/harbour/source/rdd/workarea.c b/harbour/source/rdd/workarea.c index e33d635742..2bcb77ce7c 100644 --- a/harbour/source/rdd/workarea.c +++ b/harbour/source/rdd/workarea.c @@ -574,6 +574,8 @@ ERRCODE hb_waOrderCondition( AREAP pArea, LPDBORDERCONDINFO param ) { if( pArea->lpdbOrdCondInfo->abFor ) hb_xfree( pArea->lpdbOrdCondInfo->abFor ); + if( pArea->lpdbOrdCondInfo->abWhile ) + hb_xfree( pArea->lpdbOrdCondInfo->abWhile ); if( pArea->lpdbOrdCondInfo->itmCobFor ) { hb_itemRelease( pArea->lpdbOrdCondInfo->itmCobFor );