diff --git a/harbour/ChangeLog b/harbour/ChangeLog index b9cdc01340..ce34c8cde4 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 diff --git a/harbour/src/rdd/dbfcdx/dbfcdx1.c b/harbour/src/rdd/dbfcdx/dbfcdx1.c index 6155cdfaf8..9835c2f118 100644 --- a/harbour/src/rdd/dbfcdx/dbfcdx1.c +++ b/harbour/src/rdd/dbfcdx/dbfcdx1.c @@ -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 */ } }