2007-09-12 11:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/include/hbrdddbf.h
  * harbour/source/rdd/dbf1.c
    + added two new members to DBFAREA structure: fModStamp and fTrigger

  * harbour/include/hbrddntx.h
  * harbour/include/hbrddcdx.h
  * harbour/contrib/bmdbfcdx/hbrddbmcdx.h
    * updated for DBFAREA structure modifications

  * harbour/contrib/libct/ctnet.c
    * use hb_stricmp() instead of stricmp()

  * harbour/include/hbrddcdx.h
  * harbour/source/rdd/dbfcdx/dbfcdx1.c
    * updated for DBFAREA structure modifications
    + added some very basic support for order temperature flags
This commit is contained in:
Przemyslaw Czerpak
2007-09-12 09:50:40 +00:00
parent 767c5d849f
commit 11aa69b7c3
8 changed files with 285 additions and 185 deletions

View File

@@ -8,6 +8,24 @@
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2007-09-12 11:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbrdddbf.h
* harbour/source/rdd/dbf1.c
+ added two new members to DBFAREA structure: fModStamp and fTrigger
* harbour/include/hbrddntx.h
* harbour/include/hbrddcdx.h
* harbour/contrib/bmdbfcdx/hbrddbmcdx.h
* updated for DBFAREA structure modifications
* harbour/contrib/libct/ctnet.c
* use hb_stricmp() instead of stricmp()
* harbour/include/hbrddcdx.h
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* updated for DBFAREA structure modifications
+ added some very basic support for order temperature flags
2007-09-12 08:29 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* source/rtl/getsys.prg
! Fix for crash in TGetList():ShowGetMsg() reported by Lorenzo.

View File

@@ -498,6 +498,7 @@ typedef struct _CDXAREA
ULONG ulRecNo; /* Current record */
BOOL fAutoInc; /* WorkArea with auto increment fields */
BOOL fHasMemo; /* WorkArea with Memo fields */
BOOL fModStamp; /* WorkArea with modification autoupdate fields */
BOOL fHasTags; /* WorkArea with MDX or CDX index */
BOOL fDataFlush; /* data was written to DBF and not commited */
BOOL fMemoFlush; /* data was written to MEMO and not commited */
@@ -513,6 +514,7 @@ typedef struct _CDXAREA
BOOL fUpdateHeader; /* Update header of file */
BOOL fFLocked; /* TRUE if file is locked */
BOOL fHeaderLocked; /* TRUE if DBF header is locked */
BOOL fTrigger; /* Execute trigger function */
LPDBRELINFO lpdbPendingRel; /* Pointer to parent rel struct */
ULONG * pLocksPos; /* List of records locked */
ULONG ulNumLocksPos; /* Number of records locked */

View File

@@ -181,7 +181,7 @@ HB_FUNC( NETPRINTER )
{
char * cPrn = hb_setGetCPtr( HB_SET_PRINTFILE ); /* query default local printer port. */
if( !cPrn || !*cPrn || stricmp( cPrn, "PRN" ) == 0 )
if( !cPrn || !*cPrn || hb_stricmp( cPrn, "PRN" ) == 0 )
cPrn = "LPT1";
hb_retl( hb_IsNetShared( cPrn ) );
}

View File

@@ -150,7 +150,7 @@ HB_EXTERN_BEGIN
#define CDX_TYPE_STRUCTURE 0x80 /* FoxPro */
/*
TODO like in SIXCDX:
SIx3 order temperature flags:
switch ( indexOpt & ( CDX_TYPE_TEMPORARY | CDX_TYPE_CUSTOM ) )
case CDX_TYPE_TEMPORARY:
PARTIAL_RYO
@@ -325,7 +325,10 @@ typedef struct _CDXTAG
BOOL UniqueKey; /* unique order flag */
BOOL Temporary; /* temporary order flag */
BOOL Custom; /* custom order flag */
BOOL Template; /* user keyadata in ordKeyAdd()/ordKeyDel() accepted */
BOOL MultiKey; /* repeated key values in custom indexes accepted */
BOOL Partial; /* order is updated only partially - missing keys possible */
BOOL ChgOnly; /* only existing key modifications are updated, no new key added */
BOOL UsrAscend; /* user settable ascending/descending order flag */
BOOL UsrUnique; /* user settable unique order flag */
@@ -496,6 +499,7 @@ typedef struct _CDXAREA
BOOL fAutoInc; /* WorkArea with auto increment fields */
BOOL fHasMemo; /* WorkArea with Memo fields */
BOOL fHasTags; /* WorkArea with MDX or CDX index */
BOOL fModStamp; /* WorkArea with modification autoupdate fields */
BOOL fDataFlush; /* data was written to DBF and not commited */
BOOL fMemoFlush; /* data was written to MEMO and not commited */
BOOL fShared; /* Shared file */
@@ -510,6 +514,7 @@ typedef struct _CDXAREA
BOOL fUpdateHeader; /* Update header of file */
BOOL fFLocked; /* TRUE if file is locked */
BOOL fHeaderLocked; /* TRUE if DBF header is locked */
BOOL fTrigger; /* Execute trigger function */
LPDBRELINFO lpdbPendingRel; /* Pointer to parent rel struct */
ULONG * pLocksPos; /* List of records locked */
ULONG ulNumLocksPos; /* Number of records locked */

View File

@@ -192,6 +192,7 @@ typedef struct _DBFAREA
BOOL fAutoInc; /* WorkArea with auto increment fields */
BOOL fHasMemo; /* WorkArea with Memo fields */
BOOL fHasTags; /* WorkArea with MDX or CDX index */
BOOL fModStamp; /* WorkArea with modification autoupdate fields */
BOOL fDataFlush; /* data was written to DBF and not commited */
BOOL fMemoFlush; /* data was written to MEMO and not commited */
BOOL fShared; /* Shared file */
@@ -206,6 +207,7 @@ typedef struct _DBFAREA
BOOL fUpdateHeader; /* Update header of file */
BOOL fFLocked; /* TRUE if file is locked */
BOOL fHeaderLocked; /* TRUE if DBF header is locked */
BOOL fTrigger; /* Execute trigger function */
LPDBRELINFO lpdbPendingRel; /* Pointer to parent rel struct */
ULONG * pLocksPos; /* List of records locked */
ULONG ulNumLocksPos; /* Number of records locked */

View File

@@ -392,6 +392,7 @@ typedef struct _NTXAREA
BOOL fAutoInc; /* WorkArea with auto increment fields */
BOOL fHasMemo; /* WorkArea with Memo fields */
BOOL fHasTags; /* WorkArea with MDX or CDX index */
BOOL fModStamp; /* WorkArea with modification autoupdate fields */
BOOL fDataFlush; /* data was written to DBF and not commited */
BOOL fMemoFlush; /* data was written to MEMO and not commited */
BOOL fShared; /* Shared file */
@@ -406,6 +407,7 @@ typedef struct _NTXAREA
BOOL fUpdateHeader; /* Update header of file */
BOOL fFLocked; /* TRUE if file is locked */
BOOL fHeaderLocked; /* TRUE if DBF header is locked */
BOOL fTrigger; /* Execute trigger function */
LPDBRELINFO lpdbPendingRel; /* Pointer to parent rel struct */
ULONG * pLocksPos; /* List of records locked */
ULONG ulNumLocksPos; /* Number of records locked */

View File

@@ -4180,7 +4180,8 @@ static ERRCODE hb_dbfReadDBHeader( DBFAREAP pArea )
}
else
{
pArea->fAutoInc = pArea->fTableEncrypted = pArea->fHasMemo = FALSE;
pArea->fAutoInc = pArea->fModStamp =
pArea->fTableEncrypted = pArea->fHasMemo = FALSE;
pArea->bTableType = DB_DBF_STD;
pArea->bMemoType = DB_MEMO_NONE;
pArea->bCryptType = DB_CRYPT_NONE;

View File

@@ -3417,14 +3417,25 @@ static void hb_cdxTagHeaderStore( LPCDXTAG pTag )
*/
pTag->TagChanged = FALSE;
pTag->OptFlags &= ~( CDX_TYPE_UNIQUE | CDX_TYPE_FORFILTER |
CDX_TYPE_TEMPORARY | CDX_TYPE_CUSTOM );
if ( pTag->UniqueKey )
pTag->OptFlags |= CDX_TYPE_UNIQUE;
if ( pTag->pForItem != NULL )
pTag->OptFlags |= CDX_TYPE_FORFILTER;
#if defined( HB_SIXCDX )
if ( pTag->Custom )
pTag->OptFlags |= CDX_TYPE_TEMPORARY | CDX_TYPE_CUSTOM;
else if ( pTag->ChgOnly )
pTag->OptFlags |= CDX_TYPE_CUSTOM;
else if ( pTag->Partial )
pTag->OptFlags |= CDX_TYPE_TEMPORARY;
#else
if ( pTag->Temporary )
pTag->OptFlags |= CDX_TYPE_TEMPORARY;
if ( pTag->Custom )
pTag->OptFlags |= CDX_TYPE_CUSTOM;
if ( pTag->pForItem != NULL )
pTag->OptFlags |= CDX_TYPE_FORFILTER;
#endif
memset( &tagHeader, 0, sizeof( CDXTAGHEADER ) );
HB_PUT_LE_UINT32( tagHeader.rootPtr, pTag->RootBlock );
@@ -3485,17 +3496,42 @@ static void hb_cdxTagLoad( LPCDXTAG pTag )
pTag->RootBlock = 0; /* To force RT error - index corrupted */
return;
}
pTag->uiLen = HB_GET_LE_UINT16( tagHeader.keySize );
pTag->MaxKeys = CDX_INT_FREESPACE / ( pTag->uiLen + 8 );
pTag->OptFlags = tagHeader.indexOpt;
pTag->UniqueKey = ( pTag->OptFlags & CDX_TYPE_UNIQUE ) != 0;
pTag->Temporary = ( pTag->OptFlags & CDX_TYPE_TEMPORARY ) != 0;
pTag->Custom = ( pTag->OptFlags & CDX_TYPE_CUSTOM ) != 0;
pTag->AscendKey = pTag->UsrAscend = ( HB_GET_LE_UINT16( tagHeader.ascendFlg ) == 0 );
pTag->UsrUnique = FALSE;
pTag->KeyExpr = ( char * ) hb_xgrab( CDX_MAXEXP + 1 );
hb_strncpyTrim( pTag->KeyExpr, ( const char * ) tagHeader.keyExpPool, CDX_MAXEXP );
pTag->uiLen = HB_GET_LE_UINT16( tagHeader.keySize );
pTag->MaxKeys = CDX_INT_FREESPACE / ( pTag->uiLen + 8 );
pTag->OptFlags = tagHeader.indexOpt;
pTag->UniqueKey = ( pTag->OptFlags & CDX_TYPE_UNIQUE ) != 0;
#if defined( HB_SIXCDX )
pTag->Temporary = FALSE;
pTag->Custom = ( pTag->OptFlags & CDX_TYPE_CUSTOM ) != 0 &&
( pTag->OptFlags & CDX_TYPE_TEMPORARY ) != 0;
pTag->ChgOnly = ( pTag->OptFlags & CDX_TYPE_CUSTOM ) != 0 &&
( pTag->OptFlags & CDX_TYPE_TEMPORARY ) == 0;
pTag->Partial = ( pTag->OptFlags & CDX_TYPE_CUSTOM ) != 0 ||
( pTag->OptFlags & CDX_TYPE_TEMPORARY ) != 0;
#if 0
/* For CDX format SIx3 really makes sth like that */
pTag->Template = hb_strnicmp( pTag->KeyExpr, "sxChar(", 7 ) == 0 ||
hb_strnicmp( pTag->KeyExpr, "sxDate(", 7 ) == 0 ||
hb_strnicmp( pTag->KeyExpr, "sxNum(", 6 ) == 0 ||
hb_strnicmp( pTag->KeyExpr, "sxLog(", 6 ) == 0 )
/* SIx3 does not support repeated key value for the same record */
pTag->MultiKey = FALSE;
#endif
pTag->Template = pTag->MultiKey = pTag->Custom;
#else
pTag->Temporary = ( pTag->OptFlags & CDX_TYPE_TEMPORARY ) != 0;
pTag->Custom = ( pTag->OptFlags & CDX_TYPE_CUSTOM ) != 0;
pTag->ChgOnly = FALSE;
pTag->Partial = pTag->Temporary || pTag->Custom;
pTag->Template = pTag->MultiKey = pTag->Custom;
#endif
pTag->AscendKey = pTag->UsrAscend = ( HB_GET_LE_UINT16( tagHeader.ascendFlg ) == 0 );
pTag->UsrUnique = FALSE;
if ( pTag->OptFlags & CDX_TYPE_STRUCTURE || ! *pTag->KeyExpr )
return;
@@ -4271,7 +4307,8 @@ static BOOL hb_cdxTagKeyAdd( LPCDXTAG pTag, LPCDXKEY pKey )
hb_cdxTagOpen( pTag );
if( hb_cdxPageSeekKey( pTag->RootPage, pKey,
pTag->UniqueKey ? CDX_IGNORE_REC_NUM : pKey->rec,
TRUE ) != 0 || ( pTag->Custom && !pTag->UniqueKey ) )
TRUE ) != 0 || ( pTag->Custom && pTag->MultiKey &&
!pTag->UniqueKey ) )
{
hb_cdxPageKeyInsert( pTag->RootPage, pKey );
pTag->curKeyState &= ~( CDX_CURKEY_RAWPOS | CDX_CURKEY_LOGPOS |
@@ -4521,6 +4558,8 @@ static LPCDXTAG hb_cdxIndexCreateTag( BOOL fStruct, LPCDXINDEX pIndex,
pTag->UniqueKey = fUniq;
pTag->UsrUnique = FALSE;
pTag->Custom = fCustom;
pTag->Template = pTag->MultiKey = pTag->Custom;
pTag->Partial = pTag->ChgOnly = FALSE;
pTag->uiType = bType;
pTag->bTrail = ( pTag->uiType == 'C' ) ? ' ' : '\0';
pTag->uiLen = uiLen;
@@ -6778,7 +6817,7 @@ static ERRCODE hb_cdxGoCold( CDXAREAP pArea )
* There is possible race condition here but not very dangerous.
* To avoid it we should Lock all index file before SUPER_GOCOLD
* but it makes other problem if two stations open the database index
* files in a differ order then they can block each other.
* files in a different order then they can block each other.
* Without changes in locking scheme we can do only one thing which
* is enough if there is only one index file: lock first index only
* before SUPER_GOCOLD
@@ -7706,79 +7745,79 @@ static ERRCODE hb_cdxOrderDestroy( CDXAREAP pArea, LPDBORDERINFO pOrderInfo )
/*
* Provides information about order management.
*/
static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrderInfo )
static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo )
{
LPCDXTAG pTag;
USHORT uiTag = 0;
HB_TRACE(HB_TR_DEBUG, ("hb_cdxOrderInfo(%p, %hu, %p)", pArea, uiIndex, pOrderInfo));
HB_TRACE(HB_TR_DEBUG, ("hb_cdxOrderInfo(%p, %hu, %p)", pArea, uiIndex, pInfo));
switch( uiIndex )
{
case DBOI_STRICTREAD:
if( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
else
pOrderInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_STRICTREAD, 0, pOrderInfo->itmResult );
pInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_STRICTREAD, 0, pInfo->itmResult );
case DBOI_OPTIMIZE:
if( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
else
pOrderInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_OPTIMIZE, 0, pOrderInfo->itmResult );
pInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_OPTIMIZE, 0, pInfo->itmResult );
case DBOI_AUTOOPEN:
if( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
else
pOrderInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_AUTOOPEN, 0, pOrderInfo->itmResult );
pInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_AUTOOPEN, 0, pInfo->itmResult );
case DBOI_AUTOORDER:
if( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
else
pOrderInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_AUTOORDER, 0, pOrderInfo->itmResult );
pInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_AUTOORDER, 0, pInfo->itmResult );
case DBOI_AUTOSHARE:
if( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
else
pOrderInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_AUTOSHARE, 0, pOrderInfo->itmResult );
pInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_AUTOSHARE, 0, pInfo->itmResult );
case DBOI_BAGEXT:
if( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
else
pOrderInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_ORDBAGEXT, 0, pOrderInfo->itmResult );
pInfo->itmResult = hb_itemNew( NULL );
return SELF_RDDINFO( SELF_RDDNODE( pArea ), RDDI_ORDBAGEXT, 0, pInfo->itmResult );
case DBOI_EVALSTEP:
pOrderInfo->itmResult = hb_itemPutNL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNL( pInfo->itmResult,
pArea->lpdbOrdCondInfo ? pArea->lpdbOrdCondInfo->lStep : 0 );
return SUCCESS;
case DBOI_KEYSINCLUDED:
pOrderInfo->itmResult = hb_itemPutNL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNL( pInfo->itmResult,
pArea->pSort ? pArea->pSort->ulTotKeys : 0 );
return SUCCESS;
case DBOI_I_TAGNAME:
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutC( pInfo->itmResult,
pArea->pSort ? pArea->pSort->pTag->szName : NULL );
return SUCCESS;
case DBOI_I_BAGNAME:
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutC( pInfo->itmResult,
pArea->pSort ? pArea->pSort->pTag->pIndex->szFileName : NULL );
return SUCCESS;
case DBOI_ISREINDEX:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
pArea->pSort ? pArea->pSort->fReindex : FALSE );
return SUCCESS;
@@ -7789,17 +7828,17 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
hb_dbfLockIdxGetData( pArea->bLockType, &ulPos, &ulPool );
if ( uiIndex == DBOI_LOCKOFFSET )
pOrderInfo->itmResult = hb_itemPutNInt( pOrderInfo->itmResult, ulPos );
pInfo->itmResult = hb_itemPutNInt( pInfo->itmResult, ulPos );
else
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, ulPool > 0 );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, ulPool > 0 );
return SUCCESS;
}
case DBOI_ORDERCOUNT:
{
LPCDXINDEX pIndex;
char *pszBag = hb_itemGetCLen( pOrderInfo->atomBagName ) > 0 ?
hb_itemGetCPtr( pOrderInfo->atomBagName ) : NULL;
char *pszBag = hb_itemGetCLen( pInfo->atomBagName ) > 0 ?
hb_itemGetCPtr( pInfo->atomBagName ) : NULL;
pIndex = pszBag ? hb_cdxFindBag( pArea, pszBag ) : pArea->lpIndexes;
while ( pIndex )
{
@@ -7811,7 +7850,7 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
}
pIndex = pszBag ? NULL : pIndex->pNext;
}
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult, uiTag );
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, uiTag );
return SUCCESS;
}
@@ -7823,7 +7862,7 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
++uiTag;
pIndex = pIndex->pNext;
}
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult, uiTag );
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, uiTag );
return SUCCESS;
}
@@ -7831,9 +7870,9 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
{
LPCDXINDEX pIndex = pArea->lpIndexes, pIndexSeek;
if( hb_itemGetCLen( pOrderInfo->atomBagName ) > 0 )
if( hb_itemGetCLen( pInfo->atomBagName ) > 0 )
pIndexSeek = hb_cdxFindBag( pArea,
hb_itemGetCPtr( pOrderInfo->atomBagName ) );
hb_itemGetCPtr( pInfo->atomBagName ) );
else
{
pTag = hb_cdxGetTagByNumber( pArea, pArea->uiTag );
@@ -7851,7 +7890,7 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
}
while ( pIndex );
}
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult,
pIndex ? uiTag : 0 );
return SUCCESS;
}
@@ -7860,9 +7899,9 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
{
LPCDXINDEX pIndex = pArea->lpIndexes, pIndexSeek;
if( hb_itemGetCLen( pOrderInfo->atomBagName ) > 0 )
if( hb_itemGetCLen( pInfo->atomBagName ) > 0 )
pIndexSeek = hb_cdxFindBag( pArea,
hb_itemGetCPtr( pOrderInfo->atomBagName ) );
hb_itemGetCPtr( pInfo->atomBagName ) );
else
{
pTag = hb_cdxGetTagByNumber( pArea, pArea->uiTag );
@@ -7886,7 +7925,7 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
}
while ( pIndex );
}
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult,
pIndex ? uiTag : 0 );
return SUCCESS;
}
@@ -7895,9 +7934,9 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
if( FAST_GOCOLD( ( AREAP ) pArea ) == FAILURE )
return FAILURE;
if( pOrderInfo->itmOrder )
if( pInfo->itmOrder )
{
pTag = hb_cdxFindTag( pArea, pOrderInfo->itmOrder, pOrderInfo->atomBagName, &uiTag );
pTag = hb_cdxFindTag( pArea, pInfo->itmOrder, pInfo->atomBagName, &uiTag );
}
else
{
@@ -7908,8 +7947,8 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
switch( uiIndex )
{
case DBOI_CONDITION:
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, ( pTag ? pTag->ForExpr : "" ) );
if ( pTag && pOrderInfo->itmNewVal && HB_IS_STRING( pOrderInfo->itmNewVal ) )
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, ( pTag ? pTag->ForExpr : "" ) );
if ( pTag && pInfo->itmNewVal && HB_IS_STRING( pInfo->itmNewVal ) )
{
if ( pTag->ForExpr != NULL )
{
@@ -7921,9 +7960,9 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
hb_vmDestroyBlockOrMacro( pTag->pForItem );
pTag->pForItem = NULL;
}
if ( hb_itemGetCLen( pOrderInfo->itmNewVal ) > 0 )
if ( hb_itemGetCLen( pInfo->itmNewVal ) > 0 )
{
char * pForExpr = hb_itemGetCPtr( pOrderInfo->itmNewVal );
char * pForExpr = hb_itemGetCPtr( pInfo->itmNewVal );
if ( SELF_COMPILE( ( AREAP ) pArea, ( BYTE *) pForExpr ) == SUCCESS )
{
@@ -7947,113 +7986,113 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
break;
case DBOI_EXPRESSION:
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, pTag ? pTag->KeyExpr : "" );
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, pTag ? pTag->KeyExpr : "" );
break;
case DBOI_POSITION:
if ( pOrderInfo->itmNewVal && HB_IS_NUMERIC( pOrderInfo->itmNewVal ) )
if ( pInfo->itmNewVal && HB_IS_NUMERIC( pInfo->itmNewVal ) )
{
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOIKeyGoto( pArea, pTag,
hb_itemGetNL( pOrderInfo->itmNewVal ), TRUE ) == SUCCESS );
hb_itemGetNL( pInfo->itmNewVal ), TRUE ) == SUCCESS );
}
else
pOrderInfo->itmResult = hb_itemPutNL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNL( pInfo->itmResult,
hb_cdxDBOIKeyNo( pArea, pTag, TRUE ) );
break;
/* TODO: is this ok? DBOI_RECNO == DBOI_KEYNORAW ? No, it isn't. */
/* case DBOI_RECNO: */
case DBOI_KEYNORAW:
if ( pOrderInfo->itmNewVal && HB_IS_NUMERIC( pOrderInfo->itmNewVal ) )
if ( pInfo->itmNewVal && HB_IS_NUMERIC( pInfo->itmNewVal ) )
{
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOIKeyGoto( pArea, pTag,
hb_itemGetNL( pOrderInfo->itmNewVal ), FALSE ) == SUCCESS );
hb_itemGetNL( pInfo->itmNewVal ), FALSE ) == SUCCESS );
}
else
pOrderInfo->itmResult = hb_itemPutNL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNL( pInfo->itmResult,
hb_cdxDBOIKeyNo( pArea, pTag, FALSE ) );
break;
case DBOI_KEYCOUNT:
pOrderInfo->itmResult = hb_itemPutNL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNL( pInfo->itmResult,
hb_cdxDBOIKeyCount( pArea, pTag, TRUE ) );
break;
case DBOI_KEYCOUNTRAW:
pOrderInfo->itmResult = hb_itemPutNL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNL( pInfo->itmResult,
hb_cdxDBOIKeyCount( pArea, pTag, FALSE ) );
break;
case DBOI_RELKEYPOS:
if ( pOrderInfo->itmNewVal && HB_IS_NUMERIC( pOrderInfo->itmNewVal ) )
if ( pInfo->itmNewVal && HB_IS_NUMERIC( pInfo->itmNewVal ) )
hb_cdxDBOISetRelKeyPos( pArea, pTag,
hb_itemGetND( pOrderInfo->itmNewVal ) );
hb_itemGetND( pInfo->itmNewVal ) );
else
pOrderInfo->itmResult = hb_itemPutND( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutND( pInfo->itmResult,
hb_cdxDBOIGetRelKeyPos( pArea, pTag ) );
break;
case DBOI_FINDREC:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOIFindRec( pArea, pTag,
hb_itemGetNL( pOrderInfo->itmNewVal ), FALSE ) );
hb_itemGetNL( pInfo->itmNewVal ), FALSE ) );
break;
case DBOI_FINDRECCONT:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOIFindRec( pArea, pTag,
hb_itemGetNL( pOrderInfo->itmNewVal ), TRUE ) );
hb_itemGetNL( pInfo->itmNewVal ), TRUE ) );
break;
case DBOI_SKIPUNIQUE:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOISkipUnique( pArea, pTag,
hb_itemGetNI( pOrderInfo->itmNewVal ) >= 0 ) == SUCCESS );
hb_itemGetNI( pInfo->itmNewVal ) >= 0 ) == SUCCESS );
break;
case DBOI_SKIPEVAL:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxDBOISkipEval( pArea, pTag, TRUE, pOrderInfo->itmNewVal ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOISkipEval( pArea, pTag, TRUE, pInfo->itmNewVal ) );
break;
case DBOI_SKIPEVALBACK:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxDBOISkipEval( pArea, pTag, FALSE, pOrderInfo->itmNewVal ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOISkipEval( pArea, pTag, FALSE, pInfo->itmNewVal ) );
break;
case DBOI_SKIPWILD:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxDBOISkipWild( pArea, pTag, TRUE, pOrderInfo->itmNewVal ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOISkipWild( pArea, pTag, TRUE, pInfo->itmNewVal ) );
break;
case DBOI_SKIPWILDBACK:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxDBOISkipWild( pArea, pTag, FALSE, pOrderInfo->itmNewVal ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOISkipWild( pArea, pTag, FALSE, pInfo->itmNewVal ) );
break;
case DBOI_SKIPREGEX:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxDBOISkipRegEx( pArea, pTag, TRUE, pOrderInfo->itmNewVal ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOISkipRegEx( pArea, pTag, TRUE, pInfo->itmNewVal ) );
break;
case DBOI_SKIPREGEXBACK:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxDBOISkipRegEx( pArea, pTag, FALSE, pOrderInfo->itmNewVal ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxDBOISkipRegEx( pArea, pTag, FALSE, pInfo->itmNewVal ) );
break;
case DBOI_SCOPEEVAL:
if ( pTag && pOrderInfo->itmNewVal &&
hb_arrayLen( pOrderInfo->itmNewVal ) == DBRMI_SIZE &&
hb_arrayGetPtr( pOrderInfo->itmNewVal, DBRMI_FUNCTION ) != NULL )
if ( pTag && pInfo->itmNewVal &&
hb_arrayLen( pInfo->itmNewVal ) == DBRMI_SIZE &&
hb_arrayGetPtr( pInfo->itmNewVal, DBRMI_FUNCTION ) != NULL )
{
pOrderInfo->itmResult = hb_itemPutNL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNL( pInfo->itmResult,
hb_cdxDBOIScopeEval( pTag, ( HB_EVALSCOPE_FUNC )
hb_arrayGetPtr( pOrderInfo->itmNewVal, DBRMI_FUNCTION ),
hb_arrayGetPtr( pOrderInfo->itmNewVal, DBRMI_PARAM ),
hb_arrayGetItemPtr( pOrderInfo->itmNewVal, DBRMI_LOVAL ),
hb_arrayGetItemPtr( pOrderInfo->itmNewVal, DBRMI_HIVAL ) ) );
hb_arrayGetPtr( pInfo->itmNewVal, DBRMI_FUNCTION ),
hb_arrayGetPtr( pInfo->itmNewVal, DBRMI_PARAM ),
hb_arrayGetItemPtr( pInfo->itmNewVal, DBRMI_LOVAL ),
hb_arrayGetItemPtr( pInfo->itmNewVal, DBRMI_HIVAL ) ) );
}
else
{
@@ -8063,50 +8102,50 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
break;
case DBOI_NAME:
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, pTag ? pTag->szName : "" );
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, pTag ? pTag->szName : "" );
break;
case DBOI_NUMBER:
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult, uiTag );
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, uiTag );
break;
case DBOI_BAGNAME:
if ( pTag )
{
PHB_FNAME pFileName = hb_fsFNameSplit( pTag->pIndex->szFileName );
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, pFileName->szName );
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, pFileName->szName );
hb_xfree( pFileName );
}
else
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, "" );
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, "" );
break;
case DBOI_FULLPATH:
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, pTag ? pTag->pIndex->szFileName : "" );
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, pTag ? pTag->pIndex->szFileName : "" );
break;
case DBOI_FILEHANDLE:
pOrderInfo->itmResult = hb_itemPutNInt( pOrderInfo->itmResult, pTag ? pTag->pIndex->hFile : FS_ERROR );
pInfo->itmResult = hb_itemPutNInt( pInfo->itmResult, pTag ? pTag->pIndex->hFile : FS_ERROR );
break;
case DBOI_ISCOND:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, pTag && pTag->ForExpr != NULL );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, pTag && pTag->ForExpr != NULL );
break;
case DBOI_ISDESC:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, pTag && !pTag->UsrAscend );
if ( pTag && pOrderInfo->itmNewVal && HB_IS_LOGICAL( pOrderInfo->itmNewVal ) )
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, pTag && !pTag->UsrAscend );
if ( pTag && pInfo->itmNewVal && HB_IS_LOGICAL( pInfo->itmNewVal ) )
{
pTag->UsrAscend = ! hb_itemGetL( pOrderInfo->itmNewVal );
pTag->UsrAscend = ! hb_itemGetL( pInfo->itmNewVal );
pTag->curKeyState &= ~( CDX_CURKEY_RAWPOS | CDX_CURKEY_LOGPOS );
}
break;
case DBOI_UNIQUE:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, ( pTag ? pTag->UniqueKey || pTag->UsrUnique : FALSE ) );
if ( pTag && pOrderInfo->itmNewVal && HB_IS_LOGICAL( pOrderInfo->itmNewVal ) && !pTag->UniqueKey )
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, ( pTag ? pTag->UniqueKey || pTag->UsrUnique : FALSE ) );
if ( pTag && pInfo->itmNewVal && HB_IS_LOGICAL( pInfo->itmNewVal ) && !pTag->UniqueKey )
{
pTag->UsrUnique = hb_itemGetL( pOrderInfo->itmNewVal );
pTag->UsrUnique = hb_itemGetL( pInfo->itmNewVal );
pTag->curKeyState &= ~( CDX_CURKEY_RAWPOS | CDX_CURKEY_LOGPOS |
CDX_CURKEY_RAWCNT | CDX_CURKEY_LOGCNT );
}
@@ -8118,24 +8157,24 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
char szType[2];
szType[0] = (char) pTag->uiType;
szType[1] = 0;
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, szType );
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, szType );
}
else
pOrderInfo->itmResult = hb_itemPutC( pOrderInfo->itmResult, "" );
pInfo->itmResult = hb_itemPutC( pInfo->itmResult, "" );
break;
case DBOI_KEYSIZE:
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult, pTag ? pTag->uiLen : 0 );
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, pTag ? pTag->uiLen : 0 );
break;
case DBOI_KEYDEC:
/* there is no fixed number of decimal places for numeric keys
in CDX format */
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult, 0 );
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, 0 );
break;
case DBOI_KEYVAL:
hb_itemClear( pOrderInfo->itmResult );
hb_itemClear( pInfo->itmResult );
if( pArea->lpdbPendingRel )
SELF_FORCEREL( ( AREAP ) pArea );
if ( pTag && pArea->fPositioned )
@@ -8147,68 +8186,68 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
hb_cdxIndexUnLockRead( pTag->pIndex );
}
if ( pTag->CurKey->rec == pArea->ulRecNo )
pOrderInfo->itmResult = hb_cdxKeyGetItem( pTag->CurKey,
pOrderInfo->itmResult, pTag, TRUE );
pInfo->itmResult = hb_cdxKeyGetItem( pTag->CurKey,
pInfo->itmResult, pTag, TRUE );
}
break;
case DBOI_SCOPETOP:
if ( pTag )
{
if ( pOrderInfo->itmResult )
hb_cdxTagGetScope( pTag, 0, pOrderInfo->itmResult );
if ( pOrderInfo->itmNewVal )
hb_cdxTagSetScope( pTag, 0, pOrderInfo->itmNewVal );
if ( pInfo->itmResult )
hb_cdxTagGetScope( pTag, 0, pInfo->itmResult );
if ( pInfo->itmNewVal )
hb_cdxTagSetScope( pTag, 0, pInfo->itmNewVal );
}
else if ( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
else if ( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
break;
case DBOI_SCOPEBOTTOM:
if ( pTag )
{
if ( pOrderInfo->itmResult )
hb_cdxTagGetScope( pTag, 1, pOrderInfo->itmResult );
if ( pOrderInfo->itmNewVal )
hb_cdxTagSetScope( pTag, 1, pOrderInfo->itmNewVal );
if ( pInfo->itmResult )
hb_cdxTagGetScope( pTag, 1, pInfo->itmResult );
if ( pInfo->itmNewVal )
hb_cdxTagSetScope( pTag, 1, pInfo->itmNewVal );
}
else if ( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
else if ( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
break;
case DBOI_SCOPESET:
if ( pTag )
{
if ( pOrderInfo->itmNewVal )
if ( pInfo->itmNewVal )
{
hb_cdxTagSetScope( pTag, 0, pOrderInfo->itmNewVal );
hb_cdxTagSetScope( pTag, 1, pOrderInfo->itmNewVal );
hb_cdxTagSetScope( pTag, 0, pInfo->itmNewVal );
hb_cdxTagSetScope( pTag, 1, pInfo->itmNewVal );
}
}
if ( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if ( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
break;
case DBOI_SCOPETOPCLEAR:
if ( pTag )
{
if ( pOrderInfo->itmResult )
hb_cdxTagGetScope( pTag, 0, pOrderInfo->itmResult );
if ( pInfo->itmResult )
hb_cdxTagGetScope( pTag, 0, pInfo->itmResult );
hb_cdxTagClearScope( pTag, 0 );
}
else if ( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
else if ( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
break;
case DBOI_SCOPEBOTTOMCLEAR:
if ( pTag )
{
if ( pOrderInfo->itmResult )
hb_cdxTagGetScope( pTag, 1, pOrderInfo->itmResult );
if ( pInfo->itmResult )
hb_cdxTagGetScope( pTag, 1, pInfo->itmResult );
hb_cdxTagClearScope( pTag, 1 );
}
else if ( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
else if ( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
break;
case DBOI_SCOPECLEAR:
@@ -8217,31 +8256,60 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
hb_cdxTagClearScope( pTag, 0 );
hb_cdxTagClearScope( pTag, 1 );
}
if ( pOrderInfo->itmResult )
hb_itemClear( pOrderInfo->itmResult );
if ( pInfo->itmResult )
hb_itemClear( pInfo->itmResult );
break;
case DBOI_CUSTOM:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, ( pTag ? pTag->Custom : FALSE ) );
if ( pOrderInfo->itmNewVal && HB_IS_LOGICAL( pOrderInfo->itmNewVal )
&& hb_itemGetL( pOrderInfo->itmNewVal ) )
if( hb_itemType( pInfo->itmNewVal ) == HB_IT_LOGICAL )
{
pTag->Custom = TRUE;
if( hb_cdxIndexLockWrite( pTag->pIndex ) )
{
if( !pTag->Template )
{
BOOL fNewVal = hb_itemGetL( pInfo->itmNewVal );
if( pTag->Custom ? ! fNewVal : fNewVal )
{
pTag->Custom = fNewVal;
pTag->Partial = TRUE;
pTag->ChgOnly = FALSE;
pTag->TagChanged = TRUE;
/* This is a hacks to emulate both SIX3 and COMIX behavior
* which should be cleaned. I intentionally not used
* HB_SIXCDX macro here [druzus]
*/
if( pTag->Custom )
pTag->Template = pTag->MultiKey = TRUE;
}
}
hb_cdxIndexUnLockWrite( pTag->pIndex );
}
}
/* Warning: it's not CL53 compatible. CL53 returns previous
* CUSTOM flag value not current one. [druzus]
*/
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, pTag && pTag->Custom );
break;
case DBOI_PARTIAL:
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, pTag && pTag->Partial );
break;
case DBOI_CHGONLY:
/* TODO: set */
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, pTag && pTag->ChgOnly );
break;
/* TODO: */
/*
case DBOI_TEMPLATE:
case DBOI_MULTIKEY:
case DBOI_PARTIAL:
case DBOI_CHGONLY:
*/
case DBOI_KEYADD:
if ( !pTag )
{
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, FALSE );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, FALSE );
}
else
{
@@ -8254,18 +8322,19 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
( pTag->pForItem &&
!hb_cdxEvalCond( pArea, pTag->pForItem, TRUE ) ) )
{
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, FALSE );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, FALSE );
}
else
{
LPCDXKEY pKey;
hb_cdxIndexLockWrite( pTag->pIndex );
if ( pOrderInfo->itmNewVal && !HB_IS_NIL( pOrderInfo->itmNewVal ) )
pKey = hb_cdxKeyPutItem( NULL, pOrderInfo->itmNewVal, pArea->ulRecNo, pTag, TRUE, TRUE );
if ( pInfo->itmNewVal && !HB_IS_NIL( pInfo->itmNewVal ) &&
pTag->Template )
pKey = hb_cdxKeyPutItem( NULL, pInfo->itmNewVal, pArea->ulRecNo, pTag, TRUE, TRUE );
else
pKey = hb_cdxKeyEval( NULL, pTag );
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxTagKeyAdd( pTag, pKey ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxTagKeyAdd( pTag, pKey ) );
hb_cdxIndexUnLockWrite( pTag->pIndex );
hb_cdxKeyFree( pKey );
}
@@ -8280,7 +8349,7 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
case DBOI_KEYDELETE:
if ( !pTag )
{
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, FALSE );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, FALSE );
}
else
{
@@ -8293,14 +8362,15 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
( pTag->pForItem &&
!hb_cdxEvalCond( pArea, pTag->pForItem, TRUE ) ) )
{
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, FALSE );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, FALSE );
}
else
{
LPCDXKEY pKey;
hb_cdxIndexLockWrite( pTag->pIndex );
if ( pOrderInfo->itmNewVal && !HB_IS_NIL( pOrderInfo->itmNewVal ) )
pKey = hb_cdxKeyPutItem( NULL, pOrderInfo->itmNewVal, pArea->ulRecNo, pTag, TRUE, TRUE );
if ( pInfo->itmNewVal && !HB_IS_NIL( pInfo->itmNewVal ) &&
pTag->Template )
pKey = hb_cdxKeyPutItem( NULL, pInfo->itmNewVal, pArea->ulRecNo, pTag, TRUE, TRUE );
else
{
if ( pTag->CurKey->rec != pArea->ulRecNo )
@@ -8311,8 +8381,8 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
else
pKey = hb_cdxKeyEval( NULL, pTag );
}
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
hb_cdxTagKeyDel( pTag, pKey ) );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
hb_cdxTagKeyDel( pTag, pKey ) );
hb_cdxIndexUnLockWrite( pTag->pIndex );
hb_cdxKeyFree( pKey );
}
@@ -8327,35 +8397,35 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
case DBOI_READLOCK:
if( pTag )
{
if( hb_itemType( pOrderInfo->itmNewVal ) == HB_IT_LOGICAL )
if( hb_itemType( pInfo->itmNewVal ) == HB_IT_LOGICAL )
{
if( hb_itemGetL( pOrderInfo->itmNewVal ) )
if( hb_itemGetL( pInfo->itmNewVal ) )
hb_cdxIndexLockRead( pTag->pIndex );
else
hb_cdxIndexUnLockRead( pTag->pIndex );
}
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
pTag->pIndex->lockRead > 0 );
}
else
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, FALSE );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, FALSE );
break;
case DBOI_WRITELOCK:
if( pTag )
{
if( hb_itemType( pOrderInfo->itmNewVal ) == HB_IT_LOGICAL )
if( hb_itemType( pInfo->itmNewVal ) == HB_IT_LOGICAL )
{
if( hb_itemGetL( pOrderInfo->itmNewVal ) )
if( hb_itemGetL( pInfo->itmNewVal ) )
hb_cdxIndexLockWrite( pTag->pIndex );
else
hb_cdxIndexUnLockWrite( pTag->pIndex );
}
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
pTag->pIndex->lockWrite > 0 );
}
else
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, FALSE );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, FALSE );
break;
case DBOI_UPDATECOUNTER:
@@ -8364,34 +8434,34 @@ static ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pO
/* refresh update counter */
if( hb_cdxIndexLockRead( pTag->pIndex ) )
hb_cdxIndexUnLockRead( pTag->pIndex );
pOrderInfo->itmResult = hb_itemPutNInt( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutNInt( pInfo->itmResult,
pTag->pIndex->ulVersion );
}
else
pOrderInfo->itmResult = hb_itemPutNI( pOrderInfo->itmResult, 0 );
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, 0 );
break;
case DBOI_SHARED:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
pTag && pTag->pIndex->fShared );
break;
case DBOI_ISREADONLY:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult,
pInfo->itmResult = hb_itemPutL( pInfo->itmResult,
pTag && pTag->pIndex->fReadonly );
break;
case DBOI_ISMULTITAG:
case DBOI_ISSORTRECNO:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, pTag != NULL );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, pTag != NULL );
break;
case DBOI_LARGEFILE:
pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, FALSE );
pInfo->itmResult = hb_itemPutL( pInfo->itmResult, FALSE );
break;
default:
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo );
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pInfo );
}
return SUCCESS;