2003-04-09 13:40 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>

This commit is contained in:
Alexander S.Kresin
2003-04-09 09:37:55 +00:00
parent 5482f95737
commit b9843fdace
4 changed files with 98 additions and 8 deletions

View File

@@ -8,6 +8,18 @@
2002-12-01 23:12 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2003-04-09 13:40 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
* include/hbexprb.c
* At() function is now Clipper compatible ( At( "","abc" ) ) -
borrowed from xHarbour
* source/rdd/workarea.c
! Fixed hb_waRelEval() - When the current order is zero, relation works
by GOTO istead of SEEK, as Clipper does -
borrowed from xHarbour
* source/rdd/dbfntx/dbfntx1.c
! Fix in indexing - when index expression includes fields from the child
related workarea
2003-04-08 15:40 UTC-0400 David G. Holm <dholm@jsd-llc.com>
* contrib/Makefile
! Added a build path for MSVC++.

View File

@@ -1265,6 +1265,53 @@ static HB_EXPR_FUNC( hb_compExprUseFunCall )
*/
if( pSelf->value.asFunCall.pParms )
pSelf->value.asFunCall.pParms = HB_EXPR_USE( pSelf->value.asFunCall.pParms, HB_EA_REDUCE );
#ifndef HB_C52_STRICT
if( pSelf->value.asFunCall.pFunName->ExprType == HB_ET_FUNNAME )
{
HB_EXPR_PTR pName = pSelf->value.asFunCall.pFunName;
HB_EXPR_PTR pParms = pSelf->value.asFunCall.pParms;
HB_EXPR_PTR pReduced;
USHORT usCount;
if( pParms )
{
usCount = ( USHORT ) hb_compExprListLen( pSelf->value.asFunCall.pParms );
if( usCount == 1 && pParms->value.asList.pExprList->ExprType == HB_ET_NONE )
{
--usCount;
}
}
#ifndef HB_MACRO_SUPPORT
hb_compFunCallCheck( pName->value.asSymbol, usCount );
#endif
if( ( strcmp( "AT", pName->value.asSymbol ) == 0 ) && usCount == 2 )
{
HB_EXPR_PTR pSub = pParms->value.asList.pExprList;
HB_EXPR_PTR pText = pSub->pNext;
if( pSub->ExprType == HB_ET_STRING && pText->ExprType == HB_ET_STRING )
{
if( pSub->value.asString.string[0] == '\0' )
{
pReduced = hb_compExprNewLong( 1 );
}
else
{
pReduced = hb_compExprNewLong( hb_strAt( pSub->value.asString.string, pSub->ulLength, pText->value.asString.string, pText->ulLength ) );
}
HB_EXPR_PCODE1( hb_compExprDelete, pSelf->value.asFunCall.pFunName );
HB_EXPR_PCODE1( hb_compExprDelete, pSelf->value.asFunCall.pParms );
memcpy( pSelf, pReduced, sizeof( HB_EXPR ) );
HB_XFREE( pReduced );
}
}
}
#endif
}
break;

View File

@@ -2364,7 +2364,7 @@ static void hb_ntxBufferSave( LPTAGINFO pTag, LPNTXSORTINFO pSortInfo )
static BOOL hb_ntxReadBuf( NTXAREAP pArea, BYTE* readBuffer, USHORT* numRecinBuf, LPDBORDERCONDINFO lpdbOrdCondInfo )
{
if( !lpdbOrdCondInfo || lpdbOrdCondInfo->fAll )
if( ( !lpdbOrdCondInfo || lpdbOrdCondInfo->fAll ) && !pArea->lpdbRelations )
{
if( *numRecinBuf == 10 )
*numRecinBuf = 0;
@@ -2376,7 +2376,7 @@ static BOOL hb_ntxReadBuf( NTXAREAP pArea, BYTE* readBuffer, USHORT* numRecinBuf
(*numRecinBuf) ++;
return TRUE;
}
else
else if( lpdbOrdCondInfo )
{
if( lpdbOrdCondInfo->lNextCount < 0 )
return FALSE;
@@ -2400,6 +2400,7 @@ static BOOL hb_ntxReadBuf( NTXAREAP pArea, BYTE* readBuffer, USHORT* numRecinBuf
return TRUE;
}
return TRUE;
}
/* DJGPP can sprintf a float that is almost 320 digits long */
@@ -2472,14 +2473,14 @@ static ERRCODE hb_ntxIndexCreate( LPNTXINDEX pIndex )
else
sortInfo.sortBuffer = NULL;
if( !pArea->lpdbOrdCondInfo || pArea->lpdbOrdCondInfo->fAll )
if( ( !pArea->lpdbOrdCondInfo || pArea->lpdbOrdCondInfo->fAll ) && !pArea->lpdbRelations )
{
pRecordTmp = pArea->pRecord;
fValidBuffer = pArea->fValidBuffer;
pArea->fValidBuffer = TRUE;
hb_fsSeek( pArea->hDataFile, pArea->uiHeaderLen, FS_SET );
}
else if( pArea->lpdbOrdCondInfo->fUseCurrent )
else if( pArea->lpdbRelations || pArea->lpdbOrdCondInfo->fUseCurrent )
SELF_GOTOP( ( AREAP ) pArea );
for( ulRecNo = 1; ulRecNo <= ulRecCount; ulRecNo++)
{
@@ -2587,9 +2588,11 @@ static ERRCODE hb_ntxIndexCreate( LPNTXINDEX pIndex )
hb_vmSend( 0 );
}
}
else if( pArea->lpdbRelations )
SELF_SKIP( ( AREAP ) pArea, 1 );
}
hb_ntxSortKeyEnd( pTag, &sortInfo );
if( !pArea->lpdbOrdCondInfo || pArea->lpdbOrdCondInfo->fAll )
if( ( !pArea->lpdbOrdCondInfo || pArea->lpdbOrdCondInfo->fAll ) && !pArea->lpdbRelations )
{
pArea->pRecord = pRecordTmp;
pArea->fValidBuffer = fValidBuffer;

View File

@@ -843,16 +843,44 @@ ERRCODE hb_waRelEval( AREAP pArea, LPDBRELINFO pRelInfo )
{
int iCurrArea;
PHB_ITEM pResult;
DBORDERINFO pInfo;
int iOrder;
HB_TRACE(HB_TR_DEBUG, ("hb_waRelEval(%p, %p)", pArea, pRelInfo));
iCurrArea = hb_rddGetCurrentWorkAreaNumber();
hb_rddSelectWorkAreaNumber( pRelInfo->lpaParent->uiArea );
pResult = hb_vmEvalBlock( pRelInfo->itmCobExpr );
hb_rddSelectWorkAreaNumber( iCurrArea );
if( SELF_SEEK( pArea, 0, pResult, 0 ) == SUCCESS )
return SUCCESS;
/*
* Check the current order
*/
pInfo.itmResult = hb_itemPutNI( NULL, 0 );
pInfo.itmOrder = NULL;
SELF_ORDINFO( pArea, DBOI_NUMBER, &pInfo );
iOrder = hb_itemGetNI( pInfo.itmResult );
hb_itemRelease( pInfo.itmResult );
if( iOrder != 0 )
{
if( SELF_SEEK( pArea, 0, pResult, 0 ) == SUCCESS )
return SUCCESS;
else
return FAILURE;
}
else
return FAILURE;
{
/*
* If current order equals to zero, use GOTO instead of SEEK
*/
if( SELF_GOTO( pArea, hb_itemGetNI( pResult ) ) == SUCCESS )
return SUCCESS;
else
return FAILURE;
}
}
/*