2000-09-21 15:23 GMT+3 Alexander Kresin <alex@belacy.belgorod.su>

This commit is contained in:
Alexander S.Kresin
2000-09-21 11:27:19 +00:00
parent 14341112a8
commit 7d3b4ea8bb
3 changed files with 62 additions and 25 deletions

View File

@@ -1,3 +1,8 @@
2000-09-21 15:23 GMT+3 Alexander Kresin <alex@belacy.belgorod.su>
* source/rdd/workarea.c
* source/rdd/dbcmd.c
* Relations now working for RDD ADS again
2000-09-21 12:59 GMT+3 Alexander Kresin <alex@belacy.belgorod.su>
* source/rdd/workarea.c
* source/rdd/dbcmd.c

View File

@@ -242,18 +242,29 @@ static void hb_rddCheck( void )
*/
static void hb_rddCloseAll( void )
{
int nCycl = 0;
LPAREANODE pAreaNode;
HB_TRACE(HB_TR_DEBUG, ("hb_rddCloseAll()"));
pAreaNode = s_pWorkAreas;
while( pAreaNode )
while( nCycl < 2 )
{
s_pCurrArea = pAreaNode;
pAreaNode = pAreaNode->pNext;
SELF_CLOSE( ( AREAP ) s_pCurrArea->pArea );
SELF_RELEASE( ( AREAP ) s_pCurrArea->pArea );
hb_xfree( s_pCurrArea );
pAreaNode = s_pWorkAreas;
while( pAreaNode )
{
s_pCurrArea = pAreaNode;
pAreaNode = pAreaNode->pNext;
if( ( !nCycl && ( ( AREAP ) s_pCurrArea->pArea )->lpdbRelations ) ||
( nCycl && s_pCurrArea->pArea ) )
{
SELF_CLOSE( ( AREAP ) s_pCurrArea->pArea );
SELF_RELEASE( ( AREAP ) s_pCurrArea->pArea );
// hb_xfree( s_pCurrArea->pArea );
s_pCurrArea->pArea = NULL;
}
if( nCycl == 1 )
hb_xfree( s_pCurrArea );
}
nCycl ++;
}
s_uiCurrArea = 1;
@@ -2727,7 +2738,7 @@ HB_FUNC( DBSETRELATION )
s_pArea = NULL;
if( hb_pcount() < 2 || ( !( hb_parinfo( 1 ) & HB_IT_NUMERIC ) &&
( hb_parinfo( 1 ) != HB_IT_STRING ) ) ||
( hb_parinfo( 1 ) != HB_IT_STRING ) ) ||
( hb_pcount() > 3 && !( hb_parinfo( 4 ) & HB_IT_LOGICAL ) ) )
{
hb_errRT_DBCMD( EG_ARG, EDBCMD_REL_BADPARAMETER, NULL, "DBSETRELATION" );
@@ -2888,7 +2899,7 @@ HB_FUNC( __DBARRANGE )
ulSize --;
szFieldName[ ulSize ] = 0;
}
dbSortInfo.lpdbsItem[ uiCount ].uiField =
dbSortInfo.lpdbsItem[ uiCount ].uiField =
hb_rddFieldIndex( ( AREAP ) s_pCurrArea->pArea, szFieldName );
/* Field not found */

View File

@@ -423,7 +423,7 @@ ERRCODE hb_waClose( AREAP pArea )
SELF_CLEARLOCATE( pArea );
if( pArea->uiParents > 0 )
printf( "\nTODO: hb_waClose()\n" );
printf( "\nTODO: hb_waClose() %d\n",pArea->uiParents );
( ( PHB_DYNS ) pArea->atomAlias )->hArea = 0;
return SUCCESS;
@@ -454,6 +454,9 @@ ERRCODE hb_waNewArea( AREAP pArea )
HB_TRACE(HB_TR_DEBUG, ("hb_waNewArea(%p)", pArea));
pArea->valResult = hb_itemNew( NULL );
pArea->lpdbRelations = NULL;
pArea->uiParents = 0;
return SUCCESS;
}
@@ -659,7 +662,7 @@ ERRCODE hb_waSyncChildren( AREAP pArea )
*/
ERRCODE hb_waClearRel( AREAP pArea )
{
LPDBRELINFO lpdbRelation;
LPDBRELINFO lpdbRelation, lpdbRelPrev;
HB_TRACE(HB_TR_DEBUG, ("hb_waClearRel(%p)", pArea ));
@@ -667,19 +670,18 @@ ERRCODE hb_waClearRel( AREAP pArea )
lpdbRelation = pArea->lpdbRelations;
while( lpdbRelation )
{
SELF_CHILDEND( pArea, lpdbRelation );
SELF_CHILDEND( lpdbRelation->lpaChild, lpdbRelation );
/*
if( lpdbRelation->itmCobExpr )
hb_itemRelease( lpdbRelation->itmCobExpr );
if( lpdbRelation->abKey )
hb_itemRelease( lpdbRelation->abKey );
hb_xfree( lpdbRelation );
pArea->lpdbRelations = pArea->lpdbRelations->lpdbriNext;
lpdbRelation = pArea->lpdbRelations;
*/
lpdbRelPrev = lpdbRelation;
lpdbRelation = lpdbRelation->lpdbriNext;
hb_xfree( lpdbRelPrev );
}
pArea->lpdbRelations = NULL;
return SUCCESS;
}
@@ -728,13 +730,32 @@ ERRCODE hb_waRelText( AREAP pArea, USHORT uiRelNo, void * pExpr )
/*
* Set a relation in the parent file.
*/
extern ERRCODE hb_waSetRel( AREAP pArea, LPDBRELINFO pRelInfo )
ERRCODE hb_waSetRel( AREAP pArea, LPDBRELINFO lpdbRelInf )
{
HB_TRACE(HB_TR_DEBUG, ("hb_waSetRel(%p, %p)", pArea, pRelInfo));
HB_SYMBOL_UNUSED( pArea );
HB_SYMBOL_UNUSED( pRelInfo );
LPDBRELINFO lpdbRelations;
HB_TRACE(HB_TR_DEBUG, ("hb_waSetRel(%p, %p)", pArea, pRelInfo));
lpdbRelations = pArea->lpdbRelations;
if( ! lpdbRelations )
{
pArea->lpdbRelations = ( LPDBRELINFO ) hb_xgrab( sizeof( DBRELINFO ) );
lpdbRelations = pArea->lpdbRelations;
}
else
{
while( lpdbRelations->lpdbriNext )
lpdbRelations = lpdbRelations->lpdbriNext;
lpdbRelations->lpdbriNext = ( LPDBRELINFO ) hb_xgrab( sizeof( DBRELINFO ) );
lpdbRelations = lpdbRelations->lpdbriNext;
}
lpdbRelations->lpaChild = lpdbRelInf->lpaChild;
lpdbRelations->itmCobExpr = lpdbRelInf->itmCobExpr;
lpdbRelations->abKey = lpdbRelInf->abKey;
lpdbRelations->lpdbriNext = lpdbRelInf->lpdbriNext;
hb_waChildStart( lpdbRelInf->lpaChild,lpdbRelInf );
printf( "\nTODO: hb_waSetRel()\n" );
return SUCCESS;
}