2000-01-22 18:00 UTC-0800 Brian Hays <bhays@abacuslaw.com>
This commit is contained in:
@@ -1,3 +1,43 @@
|
||||
2000-01-22 18:00 UTC-0800 Brian Hays <bhays@abacuslaw.com>
|
||||
* contrib/rdd_ads/ads1.c
|
||||
! integrated AOF creation into dbSetFilter if SET OPTIMIZE is on.
|
||||
|
||||
AdsCreateIndex():
|
||||
* fixed bug to set focus to the new order
|
||||
+ added USECURRENT support for subindexing. Since ADS by default does NOT
|
||||
obey the scope like COMIX, I create a While expression from the index
|
||||
key and scope expression (if there is one).
|
||||
NOTE:
|
||||
if the new tag/file already exists AND a bagname specifies a
|
||||
non-structural bag, it does not subindex!
|
||||
All records get added to the index.
|
||||
The app needs to see if it's there already and delete it.
|
||||
(Temp tags created with USECURRENT to the structural index are
|
||||
always created correctly.)
|
||||
|
||||
* contrib/rdd_ads/adsfunc.c
|
||||
* ADSCustomizeAOF( [<nRecno | aRecNos>] [, <nType>] ) --> nSuccess
|
||||
Added support for default values (add current record to bitmap if no
|
||||
parameters are passed) and for an array of record numbers to be
|
||||
passed so up to 16,383 records can be set or cleared with one call to the
|
||||
server.
|
||||
Now returns 0 for success, otherwise the ADS error code.
|
||||
|
||||
+ added AdsIsIndexed() to quickly return if currently indexed vs. natural order
|
||||
I hope to remove this if we agree to make it an rdd func
|
||||
|
||||
* harbour/contrib/rdd_ads/doc/en/adsfuncs.txt
|
||||
|
||||
ord.ch and hbapirdd.h
|
||||
added constants for DBOI_OPTLEVEL return values
|
||||
#define DBOI_OPTIMIZED_NONE 0
|
||||
#define DBOI_OPTIMIZED_PART 1
|
||||
#define DBOI_OPTIMIZED_FULL 2
|
||||
|
||||
hb_api.txt
|
||||
hb_apiit.txt
|
||||
added text for hb_param and hb_itemParam
|
||||
|
||||
2001-01-22 13:15 UTC-0500 David G. Holm <dholm@jsd-llc.com>
|
||||
+ doc/en/gtslang.txt
|
||||
+ New file provided by Marek Paliwoda <paliwoda@inetia.pl>
|
||||
|
||||
@@ -270,17 +270,17 @@ static BOOL strcmpNoCase( char * s1, char * s2, int n )
|
||||
*/
|
||||
|
||||
#define adsBof NULL
|
||||
//ERRCODE adsBof( ADSAREAP pArea, BOOL * pBof )
|
||||
//{
|
||||
// HB_TRACE(HB_TR_DEBUG, ("adsBof(%p, %p)", pArea, pBof));
|
||||
/*ERRCODE adsBof( ADSAREAP pArea, BOOL * pBof )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsBof(%p, %p)", pArea, pBof));
|
||||
|
||||
// if( pArea->uiParents )
|
||||
// {
|
||||
// AdsAtBOF( pArea->hTable, (UNSIGNED16 *)&(pArea->fBof) );
|
||||
// *pBof = pArea->fBof;
|
||||
// }
|
||||
// return SUPER_BOF( (AREAP)pArea, pBof );
|
||||
//}
|
||||
if( pArea->uiParents )
|
||||
{
|
||||
AdsAtBOF( pArea->hTable, (UNSIGNED16 *)&(pArea->fBof) );
|
||||
*pBof = pArea->fBof;
|
||||
}
|
||||
return SUPER_BOF( (AREAP)pArea, pBof );
|
||||
}*/
|
||||
|
||||
ERRCODE adsEof( ADSAREAP pArea, BOOL * pEof )
|
||||
{
|
||||
@@ -987,7 +987,6 @@ static ERRCODE adsCreate( ADSAREAP pArea, LPDBOPENINFO pCreateInfo)
|
||||
adsLockType, adsRights,
|
||||
hb_set.HB_SET_MBLOCKSIZE,
|
||||
ucfieldDefs, &hTable);
|
||||
|
||||
hb_xfree(ucfieldDefs);
|
||||
if( uRetVal != AE_SUCCESS )
|
||||
{
|
||||
@@ -1100,14 +1099,12 @@ static ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo )
|
||||
pArea->hOrdCurrent = 0;
|
||||
|
||||
|
||||
//HB_TRACE(HB_TR_ALWAYS, ("\n\nadsOpen(%p) pOpenInfo->abName(%s) pOpenInfo->fShared(%d) pOpenInfo->fReadonly(%d)",
|
||||
// pArea, pOpenInfo->abName, (int)pOpenInfo->fShared, (int)pOpenInfo->fReadonly ));
|
||||
|
||||
ulRetVal = AdsOpenTable ( 0, pOpenInfo->abName, NULL,
|
||||
adsFileType, adsCharType, adsLockType, adsRights,
|
||||
( (pOpenInfo->fShared) ? ADS_SHARED : ADS_EXCLUSIVE ) |
|
||||
( (pOpenInfo->fReadonly) ? ADS_READONLY : ADS_DEFAULT ),
|
||||
&hTable);
|
||||
|
||||
if( ulRetVal != AE_SUCCESS )
|
||||
{
|
||||
commonError( pArea, EG_OPEN, ( USHORT ) ulRetVal, ( char * ) pOpenInfo->abName );
|
||||
@@ -1356,9 +1353,13 @@ static ERRCODE adsOrderListRebuild( ADSAREAP pArea )
|
||||
static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
{
|
||||
ADSHANDLE phIndex;
|
||||
ADSHANDLE hTableOrIndex ;
|
||||
UNSIGNED32 ulRetVal;
|
||||
UNSIGNED32 ulOptions = ADS_DEFAULT;
|
||||
PHB_ITEM pItem = pOrderInfo->abExpr;
|
||||
PHB_ITEM pExprItem = pOrderInfo->abExpr;
|
||||
UNSIGNED16 pus16 = 0;
|
||||
UNSIGNED8 pucWhile[ (ADS_MAX_KEY_LENGTH * 2) + 3 ];
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsOrderCreate(%p, %p)", pArea, pOrderInfo));
|
||||
|
||||
if( !pOrderInfo->abBagName || *(pOrderInfo->abBagName) == '\0' )
|
||||
@@ -1369,15 +1370,56 @@ static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
ulOptions = ADS_COMPOUND;
|
||||
}
|
||||
|
||||
ulRetVal = AdsCreateIndex( pArea->hTable, pOrderInfo->abBagName,
|
||||
pOrderInfo->atomBagName, (UCHAR*)hb_itemGetCPtr( pItem ),
|
||||
( pArea->lpdbOrdCondInfo && pArea->lpdbOrdCondInfo->abFor )? (UCHAR*)pArea->lpdbOrdCondInfo->abFor:(UCHAR*)"",
|
||||
(UCHAR*)"", ulOptions, &phIndex);
|
||||
pucWhile[0] = 0;
|
||||
if ( pArea->lpdbOrdCondInfo && pArea->lpdbOrdCondInfo->fUseCurrent && pArea->hOrdCurrent )
|
||||
{
|
||||
UNSIGNED8 pucScope[ ADS_MAX_KEY_LENGTH+1 ];
|
||||
UNSIGNED16 pusBufLen = ADS_MAX_KEY_LENGTH;
|
||||
/*
|
||||
ADS subIndex does not obey scope, so create a While expression
|
||||
from the index key and scope expression if there is one.
|
||||
*/
|
||||
ulRetVal = AdsGetScope( pArea->hOrdCurrent, ADS_BOTTOM, pucScope, &pusBufLen );
|
||||
if ( ulRetVal == AE_SUCCESS && pusBufLen)
|
||||
{
|
||||
/* TODO:
|
||||
if tag/file exists AND a bagname specifies a non-structural bag, it does not subindex!
|
||||
Have to see if it's there already and delete it! For now, warn users to delete
|
||||
secondary bags before creating temp indexes with USECURRENT
|
||||
*/
|
||||
AdsGetKeyType(pArea->hOrdCurrent, &pus16);
|
||||
strcpy(pucWhile, (UCHAR*)hb_itemGetCPtr( pExprItem ) );
|
||||
if ( pus16 == ADS_STRING ) /* add quotation marks around the key */
|
||||
{
|
||||
strcat(pucWhile, "<=\"");
|
||||
strcat(pucWhile, pucScope );
|
||||
strcat(pucWhile, "\"" );
|
||||
}
|
||||
else
|
||||
{
|
||||
strcat(pucWhile, "<=");
|
||||
strcat(pucWhile, pucScope );
|
||||
}
|
||||
}
|
||||
hTableOrIndex = pArea->hOrdCurrent;
|
||||
}
|
||||
else
|
||||
{
|
||||
hTableOrIndex = pArea->hTable;
|
||||
}
|
||||
|
||||
ulRetVal = AdsCreateIndex( hTableOrIndex, pOrderInfo->abBagName,
|
||||
pOrderInfo->atomBagName, (UCHAR*)hb_itemGetCPtr( pExprItem ),
|
||||
( pArea->lpdbOrdCondInfo && pArea->lpdbOrdCondInfo->abFor ) ? (UCHAR*)pArea->lpdbOrdCondInfo->abFor : (UCHAR*)"",
|
||||
pucWhile, ulOptions, &phIndex);
|
||||
|
||||
if ( ulRetVal != AE_SUCCESS )
|
||||
{
|
||||
commonError( pArea, EG_CREATE, ( USHORT ) ulRetVal, (char*) pOrderInfo->abBagName );
|
||||
return FAILURE;
|
||||
}
|
||||
}else
|
||||
pArea->hOrdCurrent = phIndex;
|
||||
|
||||
return adsGoTop( pArea );
|
||||
}
|
||||
|
||||
@@ -1501,7 +1543,7 @@ static ERRCODE adsOrderInfo( ADSAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrde
|
||||
case DBOI_RECNO : /* TODO: OR IS THIS JUST RECNO?? */
|
||||
case DBOI_KEYNORAW :
|
||||
if( phIndex )
|
||||
AdsGetKeyNum ( phIndex, ADS_IGNOREFILTERS, &pul32);
|
||||
AdsGetKeyNum ( phIndex, ADS_RESPECTSCOPES, &pul32);
|
||||
else
|
||||
AdsGetRecordNum ( pArea->hTable, ADS_IGNOREFILTERS, &pul32);
|
||||
hb_itemPutNL(pOrderInfo->itmResult, pul32);
|
||||
@@ -1557,8 +1599,8 @@ static ERRCODE adsOrderInfo( ADSAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrde
|
||||
hb_itemPutNL(pOrderInfo->itmResult, pul32);
|
||||
break;
|
||||
|
||||
case DBOI_KEYCOUNTRAW : /* ignore filter or scope */
|
||||
AdsGetRecordCount( (phIndex ? phIndex : pArea->hTable), ADS_IGNOREFILTERS, &pul32);
|
||||
case DBOI_KEYCOUNTRAW : /* ignore filter but RESPECT SCOPE */
|
||||
AdsGetRecordCount( (phIndex ? phIndex : pArea->hTable), ADS_RESPECTSCOPES, &pul32);
|
||||
hb_itemPutNL(pOrderInfo->itmResult, pul32);
|
||||
break;
|
||||
|
||||
@@ -1593,18 +1635,18 @@ static ERRCODE adsOrderInfo( ADSAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrde
|
||||
AdsGetAOFOptLevel( pArea->hTable, &pus16, NULL, NULL );
|
||||
switch( pus16 )
|
||||
{
|
||||
case ADS_OPTIMIZED_FULL:
|
||||
hb_itemPutNI(pOrderInfo->itmResult, 2);
|
||||
case ADS_OPTIMIZED_FULL: /* ADS values are different from Harbour */
|
||||
hb_itemPutNI(pOrderInfo->itmResult, DBOI_OPTIMIZED_FULL);
|
||||
break;
|
||||
case ADS_OPTIMIZED_PART:
|
||||
hb_itemPutNI(pOrderInfo->itmResult, 1);
|
||||
hb_itemPutNI(pOrderInfo->itmResult, DBOI_OPTIMIZED_PART);
|
||||
break;
|
||||
default:
|
||||
hb_itemPutNI(pOrderInfo->itmResult, 0);
|
||||
hb_itemPutNI(pOrderInfo->itmResult, DBOI_OPTIMIZED_NONE);
|
||||
}
|
||||
break;
|
||||
|
||||
/* Unsupported:
|
||||
/* Unsupported TODO:
|
||||
|
||||
DBOI_FILEHANDLE
|
||||
DBOI_FULLPATH
|
||||
@@ -1616,6 +1658,7 @@ DBOI_KEYADD
|
||||
DBOI_KEYDELETE
|
||||
DBOI_KEYSINCLUDED
|
||||
DBOI_SKIPUNIQUE
|
||||
// these are really global settings:
|
||||
DBOI_STRICTREAD
|
||||
DBOI_OPTIMIZE
|
||||
DBOI_AUTOORDER
|
||||
@@ -1639,9 +1682,20 @@ DBOI_AUTOSHARE
|
||||
|
||||
static ERRCODE adsClearFilter( ADSAREAP pArea )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsClearFilter(%p)", pArea));
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsClearFilter(%p)", pArea));
|
||||
/*
|
||||
We don't know if an AOF was used.
|
||||
Since a call to the server would need to be made to see if there's an AOF
|
||||
anyway, just always attempt to clear it.
|
||||
///
|
||||
///UNSIGNED8 aucAOF[64];
|
||||
///UNSIGNED16 usLength;
|
||||
/// if ( AdsGetAOF( pArea->hTable, aucAOF, &usLength ) == AE_SUCCESS && usLength > 0)
|
||||
*/
|
||||
AdsClearAOF ( pArea->hTable );
|
||||
AdsClearFilter ( pArea->hTable );
|
||||
|
||||
return SUPER_CLEARFILTER( ( AREAP ) pArea );
|
||||
}
|
||||
|
||||
@@ -1671,6 +1725,9 @@ static ERRCODE adsScopeInfo( ADSAREAP pArea, USHORT nScope, PHB_ITEM pItem )
|
||||
static ERRCODE adsSetFilter( ADSAREAP pArea, LPDBFILTERINFO pFilterInfo )
|
||||
{
|
||||
BOOL bValidExpr = FALSE;
|
||||
UNSIGNED16 usResolve = ADS_RESOLVE_DYNAMIC ; /*ADS_RESOLVE_IMMEDIATE ;get this from a SETting*/
|
||||
UNSIGNED32 ulRetVal = AE_INVALID_EXPRESSION;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsSetFilter(%p, %p)", pArea, pFilterInfo));
|
||||
|
||||
/* ----------------- NOTE: ------------------
|
||||
@@ -1679,11 +1736,21 @@ static ERRCODE adsSetFilter( ADSAREAP pArea, LPDBFILTERINFO pFilterInfo )
|
||||
filter the records locally.
|
||||
--------------------------------------------------*/
|
||||
|
||||
AdsIsExprValid( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText), (UNSIGNED16*) &bValidExpr );
|
||||
if ( bValidExpr )
|
||||
AdsSetFilter( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText ) );
|
||||
/* must do this first as it calls clearFilter */
|
||||
if (SUPER_SETFILTER( ( AREAP ) pArea, pFilterInfo ) == SUCCESS )
|
||||
{
|
||||
AdsIsExprValid( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText), (UNSIGNED16*) &bValidExpr );
|
||||
if ( bValidExpr )
|
||||
{
|
||||
|
||||
return SUPER_SETFILTER( ( AREAP ) pArea, pFilterInfo );
|
||||
if ( hb_set.HB_SET_OPTIMIZE )
|
||||
{
|
||||
ulRetVal = AdsSetAOF( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText), usResolve );
|
||||
}else
|
||||
ulRetVal = AdsSetFilter( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText ) );
|
||||
}
|
||||
}
|
||||
return ulRetVal == AE_SUCCESS ? SUCCESS : FAILURE ;
|
||||
}
|
||||
|
||||
#define adsSetLocate NULL
|
||||
@@ -1917,3 +1984,55 @@ HB_FUNC( ADS_GETFUNCTABLE )
|
||||
else
|
||||
hb_retni( FAILURE );
|
||||
}
|
||||
|
||||
HB_FUNC( ADSCUSTOMIZEAOF )
|
||||
{
|
||||
ADSAREAP pArea;
|
||||
UNSIGNED32 ulNumRecs = 0;
|
||||
UNSIGNED32 ulRecord;
|
||||
UNSIGNED32 *pulRecords;
|
||||
UNSIGNED16 usOption = ADS_AOF_ADD_RECORD;
|
||||
UNSIGNED32 ulRetVal = AE_SUCCESS + 1; /* initialize to something other than success */
|
||||
|
||||
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
|
||||
if( pArea )
|
||||
{
|
||||
if( ISNUM(2) ) /* add, delete or toggle */
|
||||
usOption = hb_parni( 2 );
|
||||
|
||||
if( ISNIL(1) ) /* default to current record */
|
||||
{
|
||||
ulNumRecs = 1;
|
||||
AdsGetRecordNum( pArea->hTable, ADS_IGNOREFILTERS,
|
||||
(UNSIGNED32 *)&(pArea->ulRecNo) );
|
||||
ulRecord = pArea->ulRecNo;
|
||||
}
|
||||
else if( ISNUM( 1 ) ) /* Passed a single recno */
|
||||
ulRecord = hb_parnl( 1 );
|
||||
else if( ISARRAY( 1 ) ) /* convert array of recnos to C array */
|
||||
ulNumRecs = hb_parinfa( 1, 0 );
|
||||
|
||||
if ( ulNumRecs )
|
||||
{
|
||||
pulRecords = (UNSIGNED32 *) hb_xgrab( ulNumRecs * sizeof( UNSIGNED32 ) );
|
||||
if ( ulNumRecs > 1 ) /* convert array of recnos to C array */
|
||||
{
|
||||
for ( ulRecord = 0; ulRecord < ulNumRecs; ulRecord++)
|
||||
pulRecords[ulRecord] = hb_parnl( 1, ulRecord + 1);
|
||||
}else
|
||||
pulRecords[0] = ulRecord;
|
||||
|
||||
ulRetVal = AdsCustomizeAOF( pArea->hTable, ulNumRecs, pulRecords, usOption);
|
||||
/* if server has Customized AOF, clear the super filter so bits won't get flipped off! */
|
||||
if ( ulRetVal == AE_SUCCESS )
|
||||
SUPER_CLEARFILTER( ( AREAP ) pArea );
|
||||
|
||||
hb_xfree(pulRecords);
|
||||
}
|
||||
|
||||
hb_retnl( ulRetVal );
|
||||
}
|
||||
else
|
||||
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSCUSTOMIZEAOF" );
|
||||
}
|
||||
|
||||
|
||||
@@ -36,8 +36,9 @@
|
||||
#define HB_OS_WIN_32_USED
|
||||
|
||||
#include "hbapi.h"
|
||||
#include "hbinit.h"
|
||||
#include "hbapiitm.h"
|
||||
#include "hbinit.h"
|
||||
#include "hbvm.h"
|
||||
#include "rddsys.ch"
|
||||
#include "hbapilng.h"
|
||||
#include "hbdate.h"
|
||||
@@ -53,6 +54,8 @@ int adsRights = 1;
|
||||
int adsCharType = ADS_ANSI;
|
||||
ADSHANDLE adsConnectHandle = 0;
|
||||
|
||||
PHB_ITEM itmCobCallBack = 0;
|
||||
|
||||
HB_FUNC( ADSSETFILETYPE )
|
||||
{
|
||||
int fileType, oldType = adsFileType;
|
||||
@@ -273,28 +276,6 @@ HB_FUNC( ADSCLEARAOF )
|
||||
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSCLEARAOF" );
|
||||
}
|
||||
|
||||
HB_FUNC( ADSCUSTOMIZEAOF )
|
||||
{
|
||||
ADSAREAP pArea;
|
||||
UNSIGNED32 pulRecords[1];
|
||||
UNSIGNED16 usOption = ADS_AOF_ADD_RECORD;
|
||||
UNSIGNED32 ulRetVal;
|
||||
|
||||
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
|
||||
if( pArea )
|
||||
{
|
||||
pulRecords[0] = hb_parnl( 1 );
|
||||
if( ISNUM(2) )
|
||||
usOption = hb_parni( 2 );
|
||||
ulRetVal = AdsCustomizeAOF( pArea->hTable, 1, pulRecords, usOption);
|
||||
if ( ulRetVal == AE_SUCCESS )
|
||||
hb_retl( 1 );
|
||||
else
|
||||
hb_retl( 0 );
|
||||
}
|
||||
else
|
||||
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSCUSTOMIZEAOF" );
|
||||
}
|
||||
|
||||
HB_FUNC( ADSEVALAOF )
|
||||
{
|
||||
@@ -320,17 +301,18 @@ HB_FUNC( ADSGETAOF )
|
||||
ADSAREAP pArea;
|
||||
UNSIGNED8 pucFilter[HARBOUR_MAX_RDD_FILTER_LENGTH+1];
|
||||
UNSIGNED16 pusLen = HARBOUR_MAX_RDD_FILTER_LENGTH;
|
||||
UNSIGNED32 ulRetVal;
|
||||
UNSIGNED32 ulRetVal = FAILURE;
|
||||
|
||||
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
|
||||
if( pArea )
|
||||
{
|
||||
ulRetVal = AdsGetAOF( pArea->hTable, pucFilter, &pusLen );
|
||||
if ( ulRetVal == AE_SUCCESS )
|
||||
hb_retc( ( char * ) pucFilter );
|
||||
}
|
||||
else
|
||||
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSGETAOF" );
|
||||
|
||||
if ( ulRetVal == AE_SUCCESS )
|
||||
hb_retc( ( char * ) pucFilter );
|
||||
else
|
||||
hb_retc( "" );
|
||||
}
|
||||
|
||||
HB_FUNC( ADSGETAOFOPTLEVEL )
|
||||
@@ -370,7 +352,7 @@ HB_FUNC( ADSGETAOFNOOPT )
|
||||
HB_FUNC( ADSISRECORDINAOF )
|
||||
{
|
||||
ADSAREAP pArea;
|
||||
UNSIGNED32 ulRecordNumber = 0;
|
||||
UNSIGNED32 ulRecordNumber = 0; /* 0 for current record */
|
||||
UNSIGNED16 bIsInAOF;
|
||||
UNSIGNED32 ulRetVal;
|
||||
|
||||
@@ -378,8 +360,9 @@ HB_FUNC( ADSISRECORDINAOF )
|
||||
if( pArea )
|
||||
{
|
||||
if( hb_pcount() > 0 )
|
||||
ulRecordNumber = hb_parni( 1 );
|
||||
ulRecordNumber = hb_parnl( 1 );
|
||||
ulRetVal = AdsIsRecordInAOF( pArea->hTable, ulRecordNumber, &bIsInAOF );
|
||||
|
||||
if ( ulRetVal == AE_SUCCESS && bIsInAOF )
|
||||
hb_retl( 1 );
|
||||
else
|
||||
@@ -404,7 +387,7 @@ HB_FUNC( ADSSETAOF )
|
||||
{
|
||||
ADSAREAP pArea;
|
||||
char * pucFilter;
|
||||
UNSIGNED16 usResolve = ADS_RESOLVE_IMMEDIATE;
|
||||
UNSIGNED16 usResolve = ADS_RESOLVE_DYNAMIC ; //ADS_RESOLVE_IMMEDIATE
|
||||
UNSIGNED32 ulRetVal;
|
||||
|
||||
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
|
||||
@@ -805,3 +788,79 @@ HB_FUNC( ADSCONVERTTABLE )
|
||||
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, " ADSCONVERTTABLE" );
|
||||
|
||||
}
|
||||
|
||||
UNSIGNED32 WINAPI ShowPercentage( UNSIGNED16 usPercentDone )
|
||||
{
|
||||
PHB_ITEM pPercentDone = hb_itemPutNI(NULL, usPercentDone);
|
||||
|
||||
if ( itmCobCallBack )
|
||||
{
|
||||
hb_vmEvalBlockV( itmCobCallBack, 1, pPercentDone ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("ShowPercentage(%d) called with no codeblock set.\n", usPercentDone ));
|
||||
}
|
||||
hb_itemRelease( pPercentDone );
|
||||
return 0;
|
||||
|
||||
} /* ShowPercentage */
|
||||
|
||||
|
||||
HB_FUNC( ADSREGCALLBACK )
|
||||
{
|
||||
UNSIGNED32 ulRetVal;
|
||||
|
||||
/* Note: current implementation is not thread safe.
|
||||
ADS can register multiple callbacks, but one per thread/connection.
|
||||
To be thread safe, we need multiple connections.
|
||||
The registered function (and its codeblock itmCobCallBack) should
|
||||
NOT make any Advantage Client Engine calls. If it does,
|
||||
it is possible to get error code 6619 "Communication Layer is busy".
|
||||
|
||||
*/
|
||||
|
||||
itmCobCallBack = hb_itemParam( 1 );
|
||||
if ( !itmCobCallBack || ( hb_itemType(itmCobCallBack) != HB_IT_BLOCK ) )
|
||||
{
|
||||
hb_retl( FALSE );
|
||||
return;
|
||||
}
|
||||
hb_gcLockItem( itmCobCallBack );
|
||||
|
||||
ulRetVal = AdsRegisterProgressCallback( ShowPercentage );
|
||||
if ( ulRetVal != AE_SUCCESS )
|
||||
{
|
||||
hb_gcUnlockItem( itmCobCallBack );
|
||||
hb_itemRelease( itmCobCallBack );
|
||||
itmCobCallBack = 0;
|
||||
hb_retl( FALSE );
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
HB_FUNC( ADSCLRCALLBACK )
|
||||
{
|
||||
if ( itmCobCallBack )
|
||||
{
|
||||
hb_retni( AdsClearProgressCallback () );
|
||||
|
||||
hb_gcUnlockItem( itmCobCallBack );
|
||||
hb_itemRelease( itmCobCallBack );
|
||||
itmCobCallBack = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
HB_FUNC( ADSISINDEXED )
|
||||
{
|
||||
ADSAREAP pArea;
|
||||
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
|
||||
if(pArea)
|
||||
hb_retl(pArea->hOrdCurrent);
|
||||
else
|
||||
hb_retl( FALSE );
|
||||
}
|
||||
|
||||
|
||||
@@ -131,13 +131,13 @@
|
||||
* $ONELINER$
|
||||
* Add or remove records from an existing AOF
|
||||
* $SYNTAX$
|
||||
* ADSCustomizeAOF( [<nRecno | aRecNos>] [, <nType>] ) --> lSuccess
|
||||
* ADSCustomizeAOF( [<nRecno | aRecNos>] [, <nType>] ) --> nSuccess
|
||||
* $ARGUMENTS$
|
||||
* <nRecno | aRecNos> Can be either a single record number or an array of
|
||||
* record numbers to add or delete from the AOF. If omitted, defaults to
|
||||
* the current record.
|
||||
*
|
||||
* <nType> The type of operation:
|
||||
* <nType> The type of operation:
|
||||
|
||||
* <table>
|
||||
* ADS_AOF_ADD_RECORD Add the record to the AOF (set the bit). This is the default operation.
|
||||
@@ -145,7 +145,7 @@
|
||||
* ADS_AOF_TOGGLE_RECORD Switch the record into or out of the AOF.
|
||||
* </table>
|
||||
* $RETURNS$
|
||||
* <lSuccess> True if the operation is successful.
|
||||
* <nError> ADS error code, or 0 for success.
|
||||
* $DESCRIPTION$
|
||||
* An Advantage Optimized Filter (AOF) consists of a bitmap of the records in
|
||||
* the database. If bit 5 is on, record 5 is considered a visible record.
|
||||
@@ -207,6 +207,8 @@
|
||||
* <nOptimizationLevel> </par>
|
||||
* Values are defined in ads.ch:
|
||||
* ADS_OPTIMIZED_FULL, ADS_OPTIMIZED_PART, ADS_OPTIMIZED_NONE.
|
||||
* IMPORTANT NOTE: These values are NOT the same as those returned
|
||||
* by dbOrderInfo().
|
||||
* $DESCRIPTION$
|
||||
* See ACE.HLP for full details about the Advantage Database Server.
|
||||
* $EXAMPLES$
|
||||
@@ -268,7 +270,7 @@
|
||||
* $SYNTAX$
|
||||
* ADSGetAOF() --> cFilter
|
||||
* $ARGUMENTS$
|
||||
* None
|
||||
* None
|
||||
* $RETURNS$
|
||||
* <cFilter> The filter expression used in the call to AdsSetAOF.
|
||||
* $DESCRIPTION$
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -154,6 +154,10 @@ extern void hb_rddShutDown( void );
|
||||
#define DBOI_AUTOORDER 63 /* Get/set default order: production index */
|
||||
#define DBOI_AUTOSHARE 64 /* Get/set automatic sharing control */
|
||||
|
||||
/* Return values for DBOI_OPTLEVEL */
|
||||
#define DBOI_OPTIMIZED_NONE 0
|
||||
#define DBOI_OPTIMIZED_PART 1
|
||||
#define DBOI_OPTIMIZED_FULL 2
|
||||
|
||||
/* Codes for SELF_INFO() */
|
||||
|
||||
|
||||
@@ -117,5 +117,10 @@
|
||||
#define DBOI_AUTOORDER 63 /* Get/set default order: production index */
|
||||
#define DBOI_AUTOSHARE 64 /* Get/set automatic sharing control */
|
||||
|
||||
/* Return values for DBOI_OPTLEVEL */
|
||||
#define DBOI_OPTIMIZED_NONE 0
|
||||
#define DBOI_OPTIMIZED_PART 1
|
||||
#define DBOI_OPTIMIZED_FULL 2
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user