2010-02-03 11:15 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/src/rdd/dbfcdx/dbfcdx1.c
    ! do not verify FOR expression just after loading new index file
      in SIXCDX RDD. It's CL52 DBFCDX / SIX3 SIXCDX compatible behavior
      but Harbour DBFCDX and CL53 DBFCDX / COMIX verifies both KEY and
      FOR expressions when index is loaded.
    ! fixed RTE numbers to be CL53 compatible when index with wrong
      (returning wrong results) KEY or FOR expression is loaded.
This commit is contained in:
Przemyslaw Czerpak
2010-02-03 10:16:06 +00:00
parent 88bac63295
commit 18b53a611d
2 changed files with 23 additions and 0 deletions

View File

@@ -17,6 +17,15 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-02-03 11:15 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rdd/dbfcdx/dbfcdx1.c
! do not verify FOR expression just after loading new index file
in SIXCDX RDD. It's CL52 DBFCDX / SIX3 SIXCDX compatible behavior
but Harbour DBFCDX and CL53 DBFCDX / COMIX verifies both KEY and
FOR expressions when index is loaded.
! fixed RTE numbers to be CL53 compatible when index with wrong
(returning wrong results) KEY or FOR expression is loaded.
2010-02-03 03:45 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/vm/hvm.c
* harbour/src/vm/itemapi.c

View File

@@ -3563,8 +3563,19 @@ static void hb_cdxTagLoad( LPCDXTAG pTag )
{
pTag->pForItem = pTag->pIndex->pArea->dbfarea.area.valResult;
pTag->pIndex->pArea->dbfarea.area.valResult = NULL;
/* CL52 / SIXCDX when index is open evaluates only KEY expression
* and do not check the FOR one.
* CL53 / COMIX evaluates both KEY and FOR expressions.
*/
#if !defined( HB_SIXCDX )
if( hb_cdxItemType( hb_vmEvalBlockOrMacro( pTag->pForItem ) ) != 'L' )
{
hb_cdxErrorRT( pTag->pIndex->pArea, EG_DATATYPE, EDBF_INVALIDFOR,
NULL, 0, 0, NULL );
pTag->RootBlock = 0; /* To force RT error - index corrupted */
}
#endif
}
}
SELF_GOTO( ( AREAP ) pTag->pIndex->pArea, ulRecNo );
@@ -3575,6 +3586,9 @@ static void hb_cdxTagLoad( LPCDXTAG pTag )
( pTag->uiType == 'T' && pTag->uiLen != 8 ) ||
( pTag->uiType == 'L' && pTag->uiLen != 1 ) )
{
hb_cdxErrorRT( pTag->pIndex->pArea,
pTag->uiType == 'U' ? EG_DATATYPE : EG_DATAWIDTH,
EDBF_INVALIDKEY, NULL, 0, 0, NULL );
pTag->RootBlock = 0; /* To force RT error - index corrupted */
}
}