2006-09-07 01:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/rdd/dbcmd.c
    ! always initialize all members in RDD structures to avoid GPF when
      some RDD will try to access uninitialized data

  * harbour/source/rdd/usrrdd/usrrdd.c
    ! added some additional validation in RDD structures <-> item conversions
This commit is contained in:
Przemyslaw Czerpak
2006-09-06 23:55:31 +00:00
parent 95732edd48
commit 2a268eef9e
3 changed files with 256 additions and 144 deletions

View File

@@ -8,6 +8,14 @@
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
! fixed GPF in __CLSINSTSUPER() class function generate HVM exception
% do not inherit unaccessible inline blocks
* some other minor optimization, fixes and code cleanups
* harbour/source/rdd/usrrdd/usrrdd.c
! fixed HB_TRACE message
* harbour/source/rtl/errorapi.c
! generate internal error if ErrorNew() function does not return an object
2006-09-07 16:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

View File

@@ -2624,9 +2624,8 @@ HB_FUNC( INDEXORD )
if( pArea )
{
DBORDERINFO pInfo;
memset( &pInfo, 0, sizeof( DBORDERINFO ) );
pInfo.itmResult = hb_itemPutNI( NULL, 0 );
pInfo.itmOrder = NULL;
pInfo.atomBagName = NULL;
SELF_ORDINFO( pArea, DBOI_NUMBER, &pInfo );
hb_retni( hb_itemGetNI( pInfo.itmResult ) );
hb_itemRelease( pInfo.itmResult );
@@ -2700,8 +2699,7 @@ HB_FUNC( ORDBAGEXT )
DBORDERINFO pInfo;
AREAP pArea = HB_CURRENT_WA;
pInfo.itmOrder = NULL;
pInfo.atomBagName = NULL;
memset( &pInfo, 0, sizeof( DBORDERINFO ) );
pInfo.itmResult = hb_itemPutC( NULL, "" );
if( !pArea )
{
@@ -2734,23 +2732,24 @@ HB_FUNC( ORDBAGNAME )
if( pArea )
{
if( ISNUM(1) || ISNIL(1) )
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_ANY );
if( pOrderInfo.itmOrder && !HB_IS_STRING( pOrderInfo.itmOrder ) )
{
if( hb_parni(1) == 0 || ISNIL(1) ) /* if NIL or ask for 0, use current order */
pOrderInfo.itmOrder = NULL;
if( HB_IS_NIL( pOrderInfo.itmOrder ) )
pOrderInfo.itmOrder = NULL;
else if( HB_IS_NUMERIC( pOrderInfo.itmOrder ) )
{
if( hb_itemGetNI( pOrderInfo.itmOrder ) == 0 )
pOrderInfo.itmOrder = NULL;
}
else
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
}
else
{
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
{
hb_errRT_DBCMD( EG_ARG, EDBCMD_REL_BADPARAMETER, NULL, "ORDBAGNAME" );
return;
}
}
pOrderInfo.atomBagName = NULL;
pOrderInfo.itmResult = hb_itemPutC( NULL, "" );
SELF_ORDINFO( pArea, DBOI_BAGNAME, &pOrderInfo );
hb_itemReturn( pOrderInfo.itmResult );
@@ -2844,8 +2843,11 @@ HB_FUNC( ORDCREATE )
if( pArea )
{
dbOrderInfo.lpdbOrdCondInfo = pArea->lpdbOrdCondInfo;
dbOrderInfo.abBagName = ( BYTE * ) hb_parcx( 1 );
dbOrderInfo.atomBagName = ( BYTE * ) hb_parcx( 2 );
dbOrderInfo.itmOrder = NULL;
dbOrderInfo.fUnique = ISLOG( 5 ) ? hb_parl( 5 ) : hb_set.HB_SET_UNIQUE;
dbOrderInfo.abExpr = hb_param( 3, HB_IT_STRING );
if( ( ( dbOrderInfo.abBagName == NULL || strlen( ( char * ) dbOrderInfo.abBagName ) == 0 ) &&
( dbOrderInfo.atomBagName == NULL || strlen( ( char * ) dbOrderInfo.atomBagName ) == 0 ) ) ||
@@ -2855,14 +2857,6 @@ HB_FUNC( ORDCREATE )
return;
}
dbOrderInfo.itmCobExpr = hb_param( 4, HB_IT_BLOCK );
if( ISLOG( 5 ) )
{
dbOrderInfo.fUnique = hb_parl( 5 );
}
else
{
dbOrderInfo.fUnique = hb_set.HB_SET_UNIQUE;
}
dbConstrInfo.abConstrName = ( BYTE * ) hb_parc( 6 );
dbConstrInfo.abTargetName = ( BYTE * ) hb_parc( 7 );
@@ -2877,8 +2871,6 @@ HB_FUNC( ORDCREATE )
dbOrderInfo.lpdbConstraintInfo = NULL;
}
dbOrderInfo.lpdbOrdCondInfo = pArea->lpdbOrdCondInfo;
SELF_ORDCREATE( pArea, &dbOrderInfo );
}
else
@@ -2893,7 +2885,7 @@ HB_FUNC( ORDBAGCLEAR )
if( pArea )
{
pOrderInfo.itmOrder = NULL;
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.atomBagName = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.atomBagName )
pOrderInfo.atomBagName = hb_param( 1, HB_IT_NUMERIC );
@@ -2911,6 +2903,7 @@ HB_FUNC( ORDDESTROY )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -2929,26 +2922,27 @@ HB_FUNC( ORDFOR )
if( pArea )
{
if ( ISNUM(1) || ISNIL(1) )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_ANY );
if( pOrderInfo.itmOrder && !HB_IS_STRING( pOrderInfo.itmOrder ) )
{
if ( hb_parni(1) == 0 || ISNIL(1) ) /* if NIL or ask for 0, use current order */
pOrderInfo.itmOrder = NULL;
if( HB_IS_NIL( pOrderInfo.itmOrder ) )
pOrderInfo.itmOrder = NULL;
else if( HB_IS_NUMERIC( pOrderInfo.itmOrder ) )
{
if( hb_itemGetNI( pOrderInfo.itmOrder ) == 0 )
pOrderInfo.itmOrder = NULL;
}
else
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
}
else
{
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
{
hb_errRT_DBCMD( EG_ARG, EDBCMD_REL_BADPARAMETER, NULL, "ORDFOR" );
return;
}
}
pOrderInfo.atomBagName = hb_param( 2, HB_IT_STRING );
pOrderInfo.itmNewVal = hb_param( 3, HB_IT_STRING );
pOrderInfo.itmResult = hb_itemPutC( NULL, "" );
pOrderInfo.itmCobExpr = NULL;
pOrderInfo.fAllTags = FALSE;
SELF_ORDINFO( pArea, DBOI_CONDITION, &pOrderInfo );
hb_itemReturn( pOrderInfo.itmResult );
hb_itemRelease( pOrderInfo.itmResult );
@@ -2965,23 +2959,23 @@ HB_FUNC( ORDKEY )
if( pArea )
{
if ( ISNUM(1) || ISNIL(1) )
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_ANY );
if( pOrderInfo.itmOrder && !HB_IS_STRING( pOrderInfo.itmOrder ) )
{
if ( hb_parni(1) == 0 || ISNIL(1) ) /* if NIL or ask for 0, use current order */
if( HB_IS_NIL( pOrderInfo.itmOrder ) )
pOrderInfo.itmOrder = NULL;
else if( HB_IS_NUMERIC( pOrderInfo.itmOrder ) )
{
if( hb_itemGetNI( pOrderInfo.itmOrder ) == 0 )
pOrderInfo.itmOrder = NULL;
}
else
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
}
else
{
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
{
hb_errRT_DBCMD( EG_ARG, EDBCMD_REL_BADPARAMETER, NULL, "ORDKEY" );
return;
}
}
pOrderInfo.atomBagName = hb_param( 2, HB_IT_STRING );
pOrderInfo.itmResult = hb_itemPutC( NULL, "" );
SELF_ORDINFO( pArea, DBOI_EXPRESSION, &pOrderInfo );
@@ -3001,6 +2995,7 @@ HB_FUNC( ORDKEYCOUNT )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3025,6 +3020,7 @@ HB_FUNC( ORDKEYNO )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3048,8 +3044,7 @@ HB_FUNC( ORDKEYGOTO )
if( pArea )
{
pOrderInfo.itmOrder = NULL;
pOrderInfo.atomBagName = NULL;
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmNewVal = hb_param( 1 , HB_IT_NUMERIC );
pOrderInfo.itmResult = hb_itemPutL( NULL, FALSE );
SELF_ORDINFO( pArea, DBOI_POSITION, &pOrderInfo );
@@ -3068,8 +3063,7 @@ HB_FUNC( ORDKEYRELPOS )
if( pArea )
{
pOrderInfo.itmOrder = NULL;
pOrderInfo.atomBagName = NULL;
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmNewVal = hb_param( 1 , HB_IT_NUMERIC );
pOrderInfo.itmResult = hb_itemPutNI( NULL, 0 );
SELF_ORDINFO( pArea, DBOI_RELKEYPOS, &pOrderInfo );
@@ -3088,8 +3082,7 @@ HB_FUNC( ORDFINDREC )
if( pArea )
{
pOrderInfo.itmOrder = NULL;
pOrderInfo.atomBagName = NULL;
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmNewVal = hb_param( 1 , HB_IT_NUMERIC );
pOrderInfo.itmResult = hb_itemPutL( NULL, FALSE );
SELF_ORDINFO( pArea, hb_parl( 2 ) ? DBOI_FINDRECCONT :
@@ -3120,8 +3113,7 @@ HB_FUNC( ORDSKIPUNIQUE )
if( pArea )
{
pOrderInfo.itmOrder = NULL;
pOrderInfo.atomBagName = NULL;
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmNewVal = hb_param( 1, HB_IT_ANY );
pOrderInfo.itmResult = hb_itemPutL( NULL, FALSE );
SELF_ORDINFO( pArea, DBOI_SKIPUNIQUE, &pOrderInfo );
@@ -3140,8 +3132,7 @@ HB_FUNC( ORDKEYVAL )
if( pArea )
{
pOrderInfo.itmOrder = NULL;
pOrderInfo.atomBagName = NULL;
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmResult = hb_itemNew( NULL );
SELF_ORDINFO( pArea, DBOI_KEYVAL, &pOrderInfo );
hb_itemReturn( pOrderInfo.itmResult );
@@ -3159,6 +3150,7 @@ HB_FUNC( ORDKEYADD )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3182,6 +3174,7 @@ HB_FUNC( ORDKEYDEL )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3205,6 +3198,7 @@ HB_FUNC( ORDDESCEND )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3228,6 +3222,7 @@ HB_FUNC( ORDISUNIQUE )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3251,6 +3246,7 @@ HB_FUNC( ORDCUSTOM )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pOrderInfo.itmOrder )
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3274,7 +3270,7 @@ HB_FUNC( ORDCOUNT )
if( pArea )
{
pOrderInfo.itmOrder = NULL;
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.atomBagName = hb_param( 1, HB_IT_STRING );
pOrderInfo.itmResult = hb_itemPutNI( NULL, 0 );
SELF_ORDINFO( pArea, DBOI_ORDERCOUNT, &pOrderInfo );
@@ -3356,6 +3352,7 @@ HB_FUNC( ORDLISTADD )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.atomBagName = hb_param( 1, HB_IT_STRING );
pOrderInfo.itmOrder = hb_param( 2, HB_IT_STRING );
if( !pOrderInfo.atomBagName )
@@ -3404,17 +3401,22 @@ HB_FUNC( ORDNAME )
if( pArea )
{
if( ISNUM(1) || ISNIL(1) )
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_ANY );
if( pOrderInfo.itmOrder )
{
if( hb_parni( 1 ) == 0 ) /* if NIL or ask for 0, use current order */
if( HB_IS_NIL( pOrderInfo.itmOrder ) )
pOrderInfo.itmOrder = NULL;
else if( HB_IS_NUMERIC( pOrderInfo.itmOrder ) )
{
if( hb_itemGetNI( pOrderInfo.itmOrder ) == 0 )
pOrderInfo.itmOrder = NULL;
}
else
pOrderInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
}
else
{
hb_errRT_DBCMD( EG_ARG, EDBCMD_REL_BADPARAMETER, NULL, "ORDNAME" );
return;
{
hb_errRT_DBCMD( EG_ARG, EDBCMD_REL_BADPARAMETER, NULL, "ORDNAME" );
return;
}
}
pOrderInfo.atomBagName = hb_param( 2, HB_IT_STRING );
@@ -3435,6 +3437,7 @@ HB_FUNC( ORDNUMBER )
if( pArea )
{
memset( &pOrderInfo, 0, sizeof( DBORDERINFO ) );
pOrderInfo.itmOrder = hb_param( 1, HB_IT_STRING );
pOrderInfo.atomBagName = hb_param( 2, HB_IT_STRING );
if( !pOrderInfo.itmOrder && ! ISNIL( 1 ) )
@@ -3459,6 +3462,7 @@ HB_FUNC( ORDSETFOCUS )
if( pArea )
{
memset( &pInfo, 0, sizeof( DBORDERINFO ) );
pInfo.itmOrder = hb_param( 1, HB_IT_STRING );
if( !pInfo.itmOrder )
pInfo.itmOrder = hb_param( 1, HB_IT_NUMERIC );
@@ -3693,10 +3697,8 @@ HB_FUNC( ORDSCOPE )
USHORT uiAction;
int iScope = hb_parni( 1 );
pInfo.itmOrder = NULL;
pInfo.atomBagName = NULL;
memset( &pInfo, 0, sizeof( DBORDERINFO ) );
pInfo.itmResult = hb_itemNew( NULL );
pInfo.itmNewVal = NULL;
if ( iScope == 2 )
{
if ( hb_pcount() > 1 && !ISNIL( 2 ) )
@@ -3997,6 +3999,8 @@ HB_FUNC( DBORDERINFO )
pOrderInfo.itmNewVal = hb_param( 4 , HB_IT_ANY );
pOrderInfo.itmResult = hb_itemNew( NULL );
pOrderInfo.itmCobExpr = NULL;
pOrderInfo.fAllTags = FALSE;
SELF_ORDINFO( pArea, hb_itemGetNI( pType ), &pOrderInfo );
hb_itemReturn( pOrderInfo.itmResult );
hb_itemRelease( pOrderInfo.itmResult );

View File

@@ -184,12 +184,33 @@ static AREAP hb_usrGetAreaPointer( int iArea )
* RDD structures conversions
*/
static PHB_ITEM hb_usrArrayGet( PHB_ITEM pArray, ULONG ulPos, HB_TYPE uiType )
{
PHB_ITEM pItem = hb_arrayGetItemPtr( pArray, ulPos );
if( pItem && ( hb_itemType( pItem ) & uiType ) != 0 )
return pItem;
else
return NULL;
}
static char * hb_usrArrayGetC( PHB_ITEM pArray, ULONG ulPos )
{
PHB_ITEM pItem = hb_arrayGetItemPtr( pArray, ulPos );
if( pItem && HB_IS_STRING( pItem ) )
return hb_itemGetCPtr( pItem );
else
return NULL;
}
static PHB_ITEM hb_usrFieldInfoToItem( LPDBFIELDINFO pFieldInfo )
{
PHB_ITEM pItem;
pItem = hb_itemArrayNew( UR_FI_SIZE );
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_FI_NAME ), ( char * ) pFieldInfo->atomName );
if( pFieldInfo->atomName )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_FI_NAME ), ( char * ) pFieldInfo->atomName );
hb_itemPutNI( hb_arrayGetItemPtr( pItem, UR_FI_TYPE ), pFieldInfo->uiType );
hb_itemPutNI( hb_arrayGetItemPtr( pItem, UR_FI_TYPEEXT ), pFieldInfo->uiTypeExtended );
hb_itemPutNI( hb_arrayGetItemPtr( pItem, UR_FI_LEN ), pFieldInfo->uiLen );
@@ -202,7 +223,7 @@ static BOOL hb_usrItemToFieldInfo( PHB_ITEM pItem, LPDBFIELDINFO pFieldInfo )
{
if( pItem && hb_arrayLen( pItem ) == UR_FI_SIZE )
{
pFieldInfo->atomName = ( BYTE * ) hb_arrayGetCPtr( pItem, UR_FI_NAME );
pFieldInfo->atomName = ( BYTE * ) hb_usrArrayGetC( pItem, UR_FI_NAME );
pFieldInfo->uiType = hb_arrayGetNI( pItem, UR_FI_TYPE );
pFieldInfo->uiTypeExtended = hb_arrayGetNI( pItem, UR_FI_TYPEEXT );
pFieldInfo->uiLen = hb_arrayGetNI( pItem, UR_FI_LEN );
@@ -218,14 +239,17 @@ static PHB_ITEM hb_usrOpenInfoToItem( LPDBOPENINFO pOpenInfo )
pItem = hb_itemArrayNew( UR_OI_SIZE );
hb_itemPutNI( hb_arrayGetItemPtr( pItem, UR_OI_AREA ), pOpenInfo->uiArea );
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_OI_NAME ), ( char * ) pOpenInfo->abName );
if( pOpenInfo->abName )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_OI_NAME ), ( char * ) pOpenInfo->abName );
if( pOpenInfo->atomAlias )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_OI_ALIAS ), ( char * ) pOpenInfo->atomAlias );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_OI_SHARED ), pOpenInfo->fShared );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_OI_READONLY ), pOpenInfo->fReadonly );
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_OI_CDPID ), ( char * ) pOpenInfo->cdpId );
if( pOpenInfo->cdpId )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_OI_CDPID ), ( char * ) pOpenInfo->cdpId );
hb_itemPutNL( hb_arrayGetItemPtr( pItem, UR_OI_CONNECT ), pOpenInfo->ulConnection );
hb_itemPutPtr( hb_arrayGetItemPtr( pItem, UR_OI_HEADER ), pOpenInfo->lpdbHeader );
if( pOpenInfo->lpdbHeader )
hb_itemPutPtr( hb_arrayGetItemPtr( pItem, UR_OI_HEADER ), pOpenInfo->lpdbHeader );
return pItem;
}
@@ -235,14 +259,11 @@ static BOOL hb_usrItemToOpenInfo( PHB_ITEM pItem, LPDBOPENINFO pOpenInfo )
if( pItem && hb_arrayLen( pItem ) == UR_OI_SIZE )
{
pOpenInfo->uiArea = hb_arrayGetNI( pItem, UR_OI_AREA );
pOpenInfo->abName = ( BYTE * ) hb_arrayGetCPtr( pItem, UR_OI_NAME );
if( HB_IS_STRING( hb_arrayGetItemPtr( pItem, UR_OI_ALIAS ) ) )
pOpenInfo->atomAlias = ( BYTE * ) hb_arrayGetCPtr( pItem, UR_OI_ALIAS );
else
pOpenInfo->atomAlias = NULL;
pOpenInfo->abName = ( BYTE * ) hb_usrArrayGetC( pItem, UR_OI_NAME );
pOpenInfo->atomAlias = ( BYTE * ) hb_usrArrayGetC( pItem, UR_OI_ALIAS );
pOpenInfo->fShared = hb_arrayGetL( pItem, UR_OI_SHARED );
pOpenInfo->fReadonly = hb_arrayGetL( pItem, UR_OI_READONLY );
pOpenInfo->cdpId = ( BYTE * ) hb_arrayGetCPtr( pItem, UR_OI_CDPID );
pOpenInfo->cdpId = ( BYTE * ) hb_usrArrayGetC( pItem, UR_OI_CDPID );
pOpenInfo->ulConnection = hb_arrayGetNL( pItem, UR_OI_CONNECT );
pOpenInfo->lpdbHeader = hb_arrayGetPtr( pItem, UR_OI_HEADER );
return TRUE;
@@ -255,8 +276,10 @@ static PHB_ITEM hb_usrFilterInfoToItem( LPDBFILTERINFO pFilterInfo )
PHB_ITEM pItem;
pItem = hb_itemArrayNew( UR_FRI_SIZE );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_FRI_BEXPR ), pFilterInfo->itmCobExpr );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_FRI_CEXPR ), pFilterInfo->abFilterText );
if( pFilterInfo->itmCobExpr )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_FRI_BEXPR ), pFilterInfo->itmCobExpr );
if( pFilterInfo->abFilterText )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_FRI_CEXPR ), pFilterInfo->abFilterText );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_FRI_ACTIVE ), pFilterInfo->fFilter );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_FRI_OPTIMIZED ), pFilterInfo->fOptimized );
hb_itemPutPtr( hb_arrayGetItemPtr( pItem, UR_FRI_CARGO ), pFilterInfo->lpvCargo );
@@ -268,8 +291,8 @@ static BOOL hb_usrItemToFilterInfo( PHB_ITEM pItem, LPDBFILTERINFO pFilterInfo )
{
if( pItem && hb_arrayLen( pItem ) == UR_FRI_SIZE )
{
pFilterInfo->itmCobExpr = hb_arrayGetItemPtr( pItem, UR_FRI_BEXPR );
pFilterInfo->abFilterText = hb_arrayGetItemPtr( pItem, UR_FRI_CEXPR );
pFilterInfo->itmCobExpr = hb_usrArrayGet( pItem, UR_FRI_BEXPR, HB_IT_ANY );
pFilterInfo->abFilterText = hb_usrArrayGet( pItem, UR_FRI_CEXPR, HB_IT_ANY );
pFilterInfo->fFilter = hb_arrayGetL( pItem, UR_FRI_ACTIVE );
pFilterInfo->fOptimized = hb_arrayGetL( pItem, UR_FRI_OPTIMIZED );
pFilterInfo->lpvCargo = hb_arrayGetPtr( pItem, UR_FRI_CARGO );
@@ -283,8 +306,10 @@ static PHB_ITEM hb_usrRelInfoToItem( LPDBRELINFO pRelInfo )
PHB_ITEM pItem;
pItem = hb_itemArrayNew( UR_RI_SIZE );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_RI_BEXPR ), pRelInfo->itmCobExpr );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_RI_CEXPR ), pRelInfo->abKey );
if( pRelInfo->itmCobExpr )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_RI_BEXPR ), pRelInfo->itmCobExpr );
if( pRelInfo->abKey )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_RI_CEXPR ), pRelInfo->abKey );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_RI_SCOPED ), pRelInfo->isScoped );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_RI_OPTIMIZED ), pRelInfo->isOptimized );
hb_itemPutNI( hb_arrayGetItemPtr( pItem, UR_RI_PARENT ), pRelInfo->lpaParent->uiArea );
@@ -298,8 +323,8 @@ static BOOL hb_usrItemToRelInfo( PHB_ITEM pItem, LPDBRELINFO pRelInfo )
{
if( pItem && hb_arrayLen( pItem ) == UR_RI_SIZE )
{
pRelInfo->itmCobExpr = hb_arrayGetItemPtr( pItem, UR_RI_BEXPR );
pRelInfo->abKey = hb_arrayGetItemPtr( pItem, UR_RI_CEXPR );
pRelInfo->itmCobExpr = hb_usrArrayGet( pItem, UR_RI_BEXPR, HB_IT_ANY );
pRelInfo->abKey = hb_usrArrayGet( pItem, UR_RI_CEXPR, HB_IT_ANY );
pRelInfo->isScoped = hb_arrayGetL( pItem, UR_RI_SCOPED );
pRelInfo->isOptimized = hb_arrayGetL( pItem, UR_RI_OPTIMIZED );
pRelInfo->lpaParent = hb_usrGetAreaPointer( hb_arrayGetNI( pItem, UR_RI_PARENT ) );
@@ -327,7 +352,7 @@ static BOOL hb_usrItemToLockInfo( PHB_ITEM pItem, LPDBLOCKINFO pLockInfo )
{
if( pItem && hb_arrayLen( pItem ) == UR_LI_SIZE )
{
pLockInfo->itmRecID = hb_arrayGetItemPtr( pItem, UR_LI_RECORD );
pLockInfo->itmRecID = hb_usrArrayGet( pItem, UR_LI_RECORD, HB_IT_ANY );
pLockInfo->uiMethod = hb_arrayGetNI( pItem, UR_LI_METHOD );
pLockInfo->fResult = hb_arrayGetL( pItem, UR_LI_RESULT );
return TRUE;
@@ -340,13 +365,20 @@ static PHB_ITEM hb_usrScopeInfoToItem( LPDBSCOPEINFO pScopeInfo )
PHB_ITEM pItem;
pItem = hb_itemArrayNew( UR_SI_SIZE );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_BFOR ), pScopeInfo->itmCobFor );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_CFOR ), pScopeInfo->lpstrFor );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_BWHILE ), pScopeInfo->itmCobWhile );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_CWHILE ), pScopeInfo->lpstrWhile );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_NEXT ), pScopeInfo->lNext );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_RECORD ), pScopeInfo->itmRecID );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_REST ), pScopeInfo->fRest );
if( pScopeInfo->itmCobFor )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_BFOR ), pScopeInfo->itmCobFor );
if( pScopeInfo->lpstrFor )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_CFOR ), pScopeInfo->lpstrFor );
if( pScopeInfo->itmCobWhile )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_BWHILE ), pScopeInfo->itmCobWhile );
if( pScopeInfo->lpstrWhile )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_CWHILE ), pScopeInfo->lpstrWhile );
if( pScopeInfo->lNext )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_NEXT ), pScopeInfo->lNext );
if( pScopeInfo->itmRecID )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_RECORD ), pScopeInfo->itmRecID );
if( pScopeInfo->fRest )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_SI_REST ), pScopeInfo->fRest );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_SI_IGNOREFILTER ), pScopeInfo->fIgnoreFilter );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_SI_INCLUDEDELETED ), pScopeInfo->fIncludeDeleted );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_SI_LAST ), pScopeInfo->fLast );
@@ -361,13 +393,13 @@ static BOOL hb_usrItemToScopeInfo( PHB_ITEM pItem, LPDBSCOPEINFO pScopeInfo )
{
if( pItem && hb_arrayLen( pItem ) == UR_SI_SIZE )
{
pScopeInfo->itmCobFor = hb_arrayGetItemPtr( pItem, UR_SI_BFOR );
pScopeInfo->lpstrFor = hb_arrayGetItemPtr( pItem, UR_SI_CFOR );
pScopeInfo->itmCobWhile = hb_arrayGetItemPtr( pItem, UR_SI_BWHILE );
pScopeInfo->lpstrWhile = hb_arrayGetItemPtr( pItem, UR_SI_CWHILE );
pScopeInfo->lNext = hb_arrayGetItemPtr( pItem, UR_SI_NEXT );
pScopeInfo->itmRecID = hb_arrayGetItemPtr( pItem, UR_SI_RECORD );
pScopeInfo->fRest = hb_arrayGetItemPtr( pItem, UR_SI_REST );
pScopeInfo->itmCobFor = hb_usrArrayGet( pItem, UR_SI_BFOR, HB_IT_ANY );
pScopeInfo->lpstrFor = hb_usrArrayGet( pItem, UR_SI_CFOR, HB_IT_ANY );
pScopeInfo->itmCobWhile = hb_usrArrayGet( pItem, UR_SI_BWHILE, HB_IT_ANY );
pScopeInfo->lpstrWhile = hb_usrArrayGet( pItem, UR_SI_CWHILE, HB_IT_ANY );
pScopeInfo->lNext = hb_usrArrayGet( pItem, UR_SI_NEXT, HB_IT_ANY );
pScopeInfo->itmRecID = hb_usrArrayGet( pItem, UR_SI_RECORD, HB_IT_ANY );
pScopeInfo->fRest = hb_usrArrayGet( pItem, UR_SI_REST, HB_IT_ANY );
pScopeInfo->fIgnoreFilter = hb_arrayGetL( pItem, UR_SI_IGNOREFILTER );
pScopeInfo->fIncludeDeleted = hb_arrayGetL( pItem, UR_SI_INCLUDEDELETED );
pScopeInfo->fLast = hb_arrayGetL( pItem, UR_SI_LAST );
@@ -385,8 +417,10 @@ static PHB_ITEM hb_usrEvalInfoToItem( LPDBEVALINFO pEvalInfo )
pScope = hb_usrScopeInfoToItem( &pEvalInfo->dbsci );
pItem = hb_itemArrayNew( UR_EI_SIZE );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_EI_BLOCK ), pEvalInfo->itmBlock );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_EI_CEXPR ), pEvalInfo->abBlock );
if( pEvalInfo->itmBlock )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_EI_BLOCK ), pEvalInfo->itmBlock );
if( pEvalInfo->abBlock )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_EI_CEXPR ), pEvalInfo->abBlock );
hb_itemMove( hb_arrayGetItemPtr( pItem, UR_EI_SCOPE ), pScope );
hb_itemRelease( pScope );
@@ -397,8 +431,8 @@ static BOOL hb_usrItemToEvalInfo( PHB_ITEM pItem, LPDBEVALINFO pEvalInfo )
{
if( pItem && hb_arrayLen( pItem ) == UR_EI_SIZE )
{
pEvalInfo->itmBlock = hb_arrayGetItemPtr( pItem, UR_EI_BLOCK );
pEvalInfo->abBlock = hb_arrayGetItemPtr( pItem, UR_EI_CEXPR );
pEvalInfo->itmBlock = hb_usrArrayGet( pItem, UR_EI_BLOCK, HB_IT_ANY );
pEvalInfo->abBlock = hb_usrArrayGet( pItem, UR_EI_CEXPR, HB_IT_ANY );
return hb_usrItemToScopeInfo( hb_arrayGetItemPtr( pItem, UR_EI_SCOPE ),
&pEvalInfo->dbsci );
}
@@ -557,11 +591,16 @@ static PHB_ITEM hb_usrOrderInfoToItem( LPDBORDERINFO pOrderInfo )
PHB_ITEM pItem;
pItem = hb_itemArrayNew( UR_ORI_SIZE );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_BAG ), pOrderInfo->atomBagName );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_TAG ), pOrderInfo->itmOrder );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_BLOCK ), pOrderInfo->itmCobExpr );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_RESULT ), pOrderInfo->itmResult );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_NEWVAL ), pOrderInfo->itmNewVal );
if( pOrderInfo->atomBagName )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_BAG ), pOrderInfo->atomBagName );
if( pOrderInfo->itmOrder )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_TAG ), pOrderInfo->itmOrder );
if( pOrderInfo->itmCobExpr )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_BLOCK ), pOrderInfo->itmCobExpr );
if( pOrderInfo->itmResult )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_RESULT ), pOrderInfo->itmResult );
if( pOrderInfo->itmNewVal )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORI_NEWVAL ), pOrderInfo->itmNewVal );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_ORI_ALLTAGS ), pOrderInfo->fAllTags );
return pItem;
@@ -571,11 +610,11 @@ static BOOL hb_usrItemToOrderInfo( PHB_ITEM pItem, LPDBORDERINFO pOrderInfo )
{
if( pItem && hb_arrayLen( pItem ) == UR_ORI_SIZE )
{
pOrderInfo->atomBagName = hb_arrayGetItemPtr( pItem, UR_ORI_BAG );
pOrderInfo->itmOrder = hb_arrayGetItemPtr( pItem, UR_ORI_TAG );
pOrderInfo->itmCobExpr = hb_arrayGetItemPtr( pItem, UR_ORI_BLOCK );
pOrderInfo->itmResult = hb_arrayGetItemPtr( pItem, UR_ORI_RESULT );
pOrderInfo->itmNewVal = hb_arrayGetItemPtr( pItem, UR_ORI_NEWVAL );
pOrderInfo->atomBagName = hb_usrArrayGet( pItem, UR_ORI_BAG, HB_IT_ANY );
pOrderInfo->itmOrder = hb_usrArrayGet( pItem, UR_ORI_TAG, HB_IT_ANY );
pOrderInfo->itmCobExpr = hb_usrArrayGet( pItem, UR_ORI_BLOCK, HB_IT_ANY );
pOrderInfo->itmResult = hb_usrArrayGet( pItem, UR_ORI_RESULT, HB_IT_ANY );
pOrderInfo->itmNewVal = hb_usrArrayGet( pItem, UR_ORI_NEWVAL, HB_IT_ANY );
pOrderInfo->fAllTags = hb_arrayGetL( pItem, UR_ORI_ALLTAGS );
return TRUE;
}
@@ -588,15 +627,22 @@ static PHB_ITEM hb_usrOrderCondInfoToItem( LPDBORDERCONDINFO pOrderCondInfo )
pItem = hb_itemArrayNew( UR_ORC_SIZE );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_ORC_ACTIVE ), pOrderCondInfo->fActive );
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORC_CFOR ), ( char * ) pOrderCondInfo->abFor );
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORC_CWHILE ), ( char * ) pOrderCondInfo->abWhile );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_BFOR ), pOrderCondInfo->itmCobFor );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_BWHILE ), pOrderCondInfo->itmCobWhile );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_BEVAL ), pOrderCondInfo->itmCobEval );
if( pOrderCondInfo->abFor )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORC_CFOR ), ( char * ) pOrderCondInfo->abFor );
if( pOrderCondInfo->abWhile )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORC_CWHILE ), ( char * ) pOrderCondInfo->abWhile );
if( pOrderCondInfo->itmCobFor )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_BFOR ), pOrderCondInfo->itmCobFor );
if( pOrderCondInfo->itmCobWhile )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_BWHILE ), pOrderCondInfo->itmCobWhile );
if( pOrderCondInfo->itmCobEval )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_BEVAL ), pOrderCondInfo->itmCobEval );
hb_itemPutNL( hb_arrayGetItemPtr( pItem, UR_ORC_STEP ), pOrderCondInfo->lStep );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_STARTREC ), pOrderCondInfo->itmStartRecID );
if( pOrderCondInfo->itmStartRecID )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_STARTREC ), pOrderCondInfo->itmStartRecID );
hb_itemPutNL( hb_arrayGetItemPtr( pItem, UR_ORC_NEXT ), pOrderCondInfo->lNextCount );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_RECORD ), pOrderCondInfo->itmRecID );
if( pOrderCondInfo->itmRecID )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORC_RECORD ), pOrderCondInfo->itmRecID );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_ORC_REST ), pOrderCondInfo->fRest );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_ORC_DESCEND ), pOrderCondInfo->fDescending );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_ORC_SCOPED ), pOrderCondInfo->fScoped );
@@ -620,15 +666,15 @@ static BOOL hb_usrItemToOrderCondInfo( PHB_ITEM pItem,
if( pItem && hb_arrayLen( pItem ) == UR_ORC_SIZE )
{
pOrderCondInfo->fActive = hb_arrayGetL( pItem, UR_ORC_ACTIVE );
pOrderCondInfo->abFor = ( BYTE * ) hb_arrayGetC( pItem, UR_ORC_CFOR );
pOrderCondInfo->abWhile = ( BYTE * ) hb_arrayGetC( pItem, UR_ORC_CWHILE );
pOrderCondInfo->itmCobFor = hb_arrayGetItemPtr( pItem, UR_ORC_BFOR );
pOrderCondInfo->itmCobWhile = hb_arrayGetItemPtr( pItem, UR_ORC_BWHILE );
pOrderCondInfo->itmCobEval = hb_arrayGetItemPtr( pItem, UR_ORC_BEVAL );
pOrderCondInfo->abFor = ( BYTE * ) hb_usrArrayGetC( pItem, UR_ORC_CFOR );
pOrderCondInfo->abWhile = ( BYTE * ) hb_usrArrayGetC( pItem, UR_ORC_CWHILE );
pOrderCondInfo->itmCobFor = hb_usrArrayGet( pItem, UR_ORC_BFOR, HB_IT_ANY );
pOrderCondInfo->itmCobWhile = hb_usrArrayGet( pItem, UR_ORC_BWHILE, HB_IT_ANY );
pOrderCondInfo->itmCobEval = hb_usrArrayGet( pItem, UR_ORC_BEVAL, HB_IT_ANY );
pOrderCondInfo->lStep = hb_arrayGetNL( pItem, UR_ORC_STEP );
pOrderCondInfo->itmStartRecID = hb_arrayGetItemPtr( pItem, UR_ORC_STARTREC );
pOrderCondInfo->itmStartRecID = hb_usrArrayGet( pItem, UR_ORC_STARTREC, HB_IT_ANY );
pOrderCondInfo->lNextCount = hb_arrayGetNL( pItem, UR_ORC_NEXT );
pOrderCondInfo->itmRecID = hb_arrayGetItemPtr( pItem, UR_ORC_RECORD );
pOrderCondInfo->itmRecID = hb_usrArrayGet( pItem, UR_ORC_RECORD, HB_IT_ANY );
pOrderCondInfo->fRest = hb_arrayGetL( pItem, UR_ORC_REST );
pOrderCondInfo->fDescending = hb_arrayGetL( pItem, UR_ORC_DESCEND );
pOrderCondInfo->fScoped = hb_arrayGetL( pItem, UR_ORC_SCOPED );
@@ -647,6 +693,43 @@ static BOOL hb_usrItemToOrderCondInfo( PHB_ITEM pItem,
return FALSE;
}
static void hb_usrOrderCondFree( LPDBORDERCONDINFO pOrderCondInfo )
{
if( pOrderCondInfo->abFor )
hb_xfree( pOrderCondInfo->abFor );
if( pOrderCondInfo->abWhile )
hb_xfree( pOrderCondInfo->abWhile );
if( pOrderCondInfo->itmCobFor )
hb_itemRelease( pOrderCondInfo->itmCobFor );
if( pOrderCondInfo->itmCobWhile )
hb_itemRelease( pOrderCondInfo->itmCobWhile );
if( pOrderCondInfo->itmCobEval )
hb_itemRelease( pOrderCondInfo->itmCobEval );
if( pOrderCondInfo->itmStartRecID )
hb_itemRelease( pOrderCondInfo->itmStartRecID );
if( pOrderCondInfo->itmRecID )
hb_itemRelease( pOrderCondInfo->itmRecID );
hb_xfree( pOrderCondInfo );
}
static void hb_usrOrderCondClone( LPDBORDERCONDINFO pOrderCondInfo )
{
if( pOrderCondInfo->abFor )
pOrderCondInfo->abFor = ( BYTE * ) hb_strdup( ( char * ) pOrderCondInfo->abFor );
if( pOrderCondInfo->abWhile )
pOrderCondInfo->abWhile = ( BYTE * ) hb_strdup( ( char * ) pOrderCondInfo->abWhile );
if( pOrderCondInfo->itmCobFor )
pOrderCondInfo->itmCobFor = hb_itemNew( pOrderCondInfo->itmCobFor );
if( pOrderCondInfo->itmCobWhile )
pOrderCondInfo->itmCobWhile = hb_itemNew( pOrderCondInfo->itmCobWhile );
if( pOrderCondInfo->itmCobEval )
pOrderCondInfo->itmCobEval = hb_itemNew( pOrderCondInfo->itmCobEval );
if( pOrderCondInfo->itmStartRecID )
pOrderCondInfo->itmStartRecID = hb_itemNew( pOrderCondInfo->itmStartRecID );
if( pOrderCondInfo->itmRecID )
pOrderCondInfo->itmRecID = hb_itemNew( pOrderCondInfo->itmRecID );
}
static PHB_ITEM hb_usrOrderCreateInfoToItem( LPDBORDERCREATEINFO pOrderCreateInfo )
{
PHB_ITEM pItem, pCond;
@@ -658,12 +741,17 @@ static PHB_ITEM hb_usrOrderCreateInfoToItem( LPDBORDERCREATEINFO pOrderCreateInf
hb_arraySet( pItem, UR_ORCR_CONDINFO, pCond );
hb_itemRelease( pCond );
}
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORCR_BAGNAME ), ( char * ) pOrderCreateInfo->abBagName );
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORCR_TAGNAME ), ( char * ) pOrderCreateInfo->atomBagName );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORCR_ORDER ), pOrderCreateInfo->itmOrder );
if( pOrderCreateInfo->abBagName )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORCR_BAGNAME ), ( char * ) pOrderCreateInfo->abBagName );
if( pOrderCreateInfo->atomBagName )
hb_itemPutC( hb_arrayGetItemPtr( pItem, UR_ORCR_TAGNAME ), ( char * ) pOrderCreateInfo->atomBagName );
if( pOrderCreateInfo->itmOrder )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORCR_ORDER ), pOrderCreateInfo->itmOrder );
hb_itemPutL( hb_arrayGetItemPtr( pItem, UR_ORCR_UNIQUE ), pOrderCreateInfo->fUnique );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORCR_BKEY ), pOrderCreateInfo->itmCobExpr );
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORCR_CKEY ), pOrderCreateInfo->abExpr );
if( pOrderCreateInfo->itmCobExpr )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORCR_BKEY ), pOrderCreateInfo->itmCobExpr );
if( pOrderCreateInfo->abExpr )
hb_itemCopy( hb_arrayGetItemPtr( pItem, UR_ORCR_CKEY ), pOrderCreateInfo->abExpr );
return pItem;
}
@@ -690,12 +778,13 @@ static BOOL hb_usrItemToOrderCreateInfo( PHB_ITEM pItem,
{
pOrderCreateInfo->lpdbOrdCondInfo = NULL;
}
pOrderCreateInfo->abBagName = ( BYTE * ) hb_arrayGetC( pItem, UR_ORCR_BAGNAME );
pOrderCreateInfo->atomBagName = ( BYTE * ) hb_arrayGetC( pItem, UR_ORCR_TAGNAME );
pOrderCreateInfo->itmOrder = hb_arrayGetItemPtr( pItem, UR_ORCR_ORDER );
pOrderCreateInfo->abBagName = ( BYTE * ) hb_usrArrayGetC( pItem, UR_ORCR_BAGNAME );
pOrderCreateInfo->atomBagName = ( BYTE * ) hb_usrArrayGetC( pItem, UR_ORCR_TAGNAME );
pOrderCreateInfo->itmOrder = hb_usrArrayGet( pItem, UR_ORCR_ORDER, HB_IT_ANY );
pOrderCreateInfo->fUnique = hb_arrayGetL( pItem, UR_ORCR_UNIQUE );
pOrderCreateInfo->itmCobExpr = hb_arrayGetItemPtr( pItem, UR_ORCR_BKEY );
pOrderCreateInfo->abExpr = hb_arrayGetItemPtr( pItem, UR_ORCR_CKEY );
pOrderCreateInfo->itmCobExpr = hb_usrArrayGet( pItem, UR_ORCR_BKEY, HB_IT_ANY );
pOrderCreateInfo->abExpr = hb_usrArrayGet( pItem, UR_ORCR_CKEY, HB_IT_ANY );
return TRUE;
}
@@ -2082,6 +2171,7 @@ static ERRCODE hb_usrOrderCondition( AREAP pArea, LPDBORDERCONDINFO pOrderCondIn
PHB_ITEM pItem = hb_usrOrderCondInfoToItem( pOrderCondInfo );
hb_vmPush( pItem );
hb_itemRelease( pItem );
hb_usrOrderCondFree( pOrderCondInfo );
}
else
{
@@ -3894,17 +3984,27 @@ HB_FUNC_UR_SUPER( ORDSETCOND )
if( pArea )
{
DBORDERCONDINFO dbOrderCondInfo;
PHB_ITEM pItem = hb_param( 2, HB_IT_ARRAY );
PHB_ITEM pItem = hb_param( 2, HB_IT_ANY );
if( hb_usrItemToOrderCondInfo( pItem, &dbOrderCondInfo ) )
if( pItem && HB_IS_NIL( pItem ) )
{
hb_retni( SUPER_ORDSETCOND( pArea, &dbOrderCondInfo ) );
hb_retni( SUPER_ORDSETCOND( pArea, NULL ) );
}
else
{
hb_usrErrorRT( pArea, EG_ARG, EDBCMD_NOVAR );
hb_retni( FAILURE );
LPDBORDERCONDINFO lpdbOrderCondInfo = ( LPDBORDERCONDINFO )
hb_xgrab( sizeof( DBORDERCONDINFO ) );
if( hb_usrItemToOrderCondInfo( pItem, lpdbOrderCondInfo ) )
{
hb_usrOrderCondClone( lpdbOrderCondInfo );
hb_retni( SUPER_ORDSETCOND( pArea, lpdbOrderCondInfo ) );
}
else
{
hb_xfree( lpdbOrderCondInfo );
hb_usrErrorRT( pArea, EG_ARG, EDBCMD_NOVAR );
hb_retni( FAILURE );
}
}
}
}