Thanks! And we have a x64 version of OWDLC available to go with it already!
lpDS->idCursorHandle = (ID)hCursor;
...
hCursor = (HJDECURSOR)lpDS->idCursorHandle;
lpDS->idCursorHandle = jdeStoreDataPtr(hUser, hCursor);
...
hCursor = jdeRemoveDataPtr(hUser, lpDS->idCursorHandle);
We can infer that is the case with the HREQUEST handle since generated NER stores the value in an ID. We can hope that the same holds true for all handles. Perhaps I'll create a test function that opens thousands of cursors and checks the status of the high 32 bits.
=======================================================================
NAMED ER: zztest_TestTableHandle
=======================================================================
evt_HandleF0101
evt_mnAddressNumber
evt_szNameAlpha
OPT: Using Defaults
0001 VA evt_mnAddressNumber = "2000072"
0002 VA evt_HandleF0101 = F0101.Open Handle
0003 F0101(VA evt_HandleF0101).Fetch Single
VA evt_mnAddressNumber = TK Address Number
VA evt_szNameAlpha <- TK Name - Alpha
0004 F0101(VA evt_HandleF0101).Close
JDEBFRTN(ID) JDEBFWINAPI
zztest_TestTableHandle( LPBHVRCOM lpBhvrCom ,
LPVOID lpVoid ,
LPDSD58DUMMY lpDS )
{
/*****************************************************************
* Variable declarations
*****************************************************************/
ID idRtnVal = ER_SUCCESS;
ID evt_HandleF0101 = 0;
MATH_NUMERIC evt_mnAddressNumber = { 0 };
JCHAR evt_szNameAlpha[41] = { 0 };
JDEDB_RESULT iRtnJDB = JDEDB_ERROR;
/*****************************************************************
* Declare structures
*****************************************************************/
F0101 zF0101_3 = { 0 };
FILEIO_HANDLE_INFO zHndlInfo = { 0 };
SELECTSTRUCT zSelect4[1] = { 0 };
DBREF zDbRef5 = { 0 };
/*****************************************************************
* Declare pointers
*****************************************************************/
LPJDEAPP lpObj = (LPJDEAPP)NULL;
LPAPPVARIABLES pAppVars = (LPAPPVARIABLES)NULL;
HENV hEnv = (HENV)NULL;
JCHAR* pszEnvName = (JCHAR*)NULL;
HUSER hUser = (HUSER)NULL;
LPKEYINFO pKeyInfo = (LPKEYINFO)NULL;
void* pKeyBuffer = NULL;
/*****************************************************************
* Check for NULL pointers
*****************************************************************/
if ( ( lpBhvrCom == (LPBHVRCOM)NULL ) ||
( lpVoid == (LPVOID)NULL ) ||
( lpDS == (LPDSD58DUMMY)NULL ) )
{
jdeErrorSet( lpBhvrCom , lpVoid , 0L , _J("4363") , (LPVOID)NULL );
return ER_ERROR;
}
/*****************************************************************
* Set pointers
*****************************************************************/
lpObj = lpBhvrCom->lpObj;
pAppVars = lpObj->lpzAppVars;
hEnv = lpBhvrCom->hEnv;
pszEnvName = JDB_GetEnvironment( hEnv );
iRtnJDB = JDB_InitBhvr( lpBhvrCom , &hUser , NULL , JDEDB_COMMIT_AUTO );
/*****************************************************************
* Main processing
*****************************************************************/
zDbRef5.idInstance = 0L;
/* VA evt_mnAddressNumber = "2000072" */
ParseNumericStringEx( &evt_mnAddressNumber ,
_J("2000072") , DEFAULT_SEPARATOR | CURRENCY_KEEP );
/* VA evt_HandleF0101 = F0101.Open Handle */
pAppVars->iTableRetCode = RTK_CER_FIOOpenHandle( hEnv, hUser ,
_J("F0101") , pszEnvName , 1L , 0 , &evt_HandleF0101 );
/* F0101(VA evt_HandleF0101).Fetch Single */
pKeyInfo = (LPKEYINFO)jdeAlloc(COMMON_POOL, 3 * sizeof(struct keyinfo), MEM_ZEROINIT);
if ( RTK_CER_FIOGetHandleInfo( evt_HandleF0101 , &zHndlInfo ) )
{
pAppVars->iTableRetCode = ER_ERROR;
if ( JDB_ClearSelection( zHndlInfo.hReqest ) == JDEDB_PASSED )
{
RTK_CER_FIOSelectInitH( zSelect4 , 1 , zHndlInfo.nType ,
zHndlInfo.szFileName , 0L );
jdeNIDcpy( zSelect4[0].Item1.szDict , _J("AN8") );
if ( zHndlInfo.nType == FILEIO_TYPE_VIEW )
{
jdeNIDcpy( zSelect4[0].Item1.szTable , _J("F0101") );
zSelect4[0].Item1.idInstance = 0L;
}
zSelect4[0].lpValue = (LPVOID)&evt_mnAddressNumber;
jdeNIDcpy( zDbRef5.szTable , zHndlInfo.szFileName );
jdeNIDcpy( zDbRef5.szDict , _J("AN8") );
if(jdeK2AddtoKeyStruct(pKeyInfo, 0, zDbRef5, &evt_mnAddressNumber, 9, -1) == FALSE)
{
if(pKeyInfo)
{
jdeFree(pKeyInfo);
pKeyInfo=NULL;
}
}
if(pKeyInfo)
{
pKeyBuffer=JDB_BuildKeyBuffer(pKeyInfo,1);
if ( JDB_FetchKeyed( zHndlInfo.hReqest , 1L , pKeyBuffer , 1, &zF0101_3 , 0 ) != JDEDB_PASSED )
{
JDB_ClearSelection( zHndlInfo.hReqest );
JDB_ClearSequencing( zHndlInfo.hReqest );
}
else
{
jdeStrncpyTerminate( evt_szNameAlpha , zF0101_3.abalph ,
DIM( evt_szNameAlpha ) );
pAppVars->iTableRetCode = ER_SUCCESS;
}
}
else
{
RTK_CER_FIOSelect( zHndlInfo.hReqest , 1L , 1 , zSelect4 ,
&pAppVars->iTableRetCode );
if ( pAppVars->iTableRetCode == ER_SUCCESS )
{
pAppVars->iTableRetCode = ER_ERROR;
if ( JDB_Fetch( zHndlInfo.hReqest , &zF0101_3 , 0 ) != JDEDB_PASSED )
{
JDB_ClearSelection( zHndlInfo.hReqest );
JDB_ClearSequencing( zHndlInfo.hReqest );
}
else
{
jdeStrncpyTerminate( evt_szNameAlpha , zF0101_3.abalph ,
DIM( evt_szNameAlpha ) );
pAppVars->iTableRetCode = ER_SUCCESS;
}
}
}
}
}
if ( pKeyInfo )
{
jdeFree( pKeyInfo );
pKeyInfo=(LPKEYINFO)NULL;
}
if ( pKeyBuffer )
{
JDB_FreeKeyBuffer( pKeyBuffer );
pKeyBuffer=NULL;
}
/* F0101(VA evt_HandleF0101).Close */
pAppVars->iTableRetCode = RTK_CER_FIOCloseHandle( evt_HandleF0101 );
pAppVars->iTableRetCode = RTK_CER_FIOCloseHandle( evt_HandleF0101 );
if ( hUser ) { JDB_FreeBhvr( hUser ); }
return idRtnVal;
} /* end of zztest_TestTableHandle */
typedef struct tagFILEIO_HANDLE_INFO
{
HENV hEnv; /* environment associated with handle */
NID szEnvName; /* environment name */
HUSER hUSER; /* user associated with handle */
NID szFileName; /* filename handle points to */
unsigned short nType; /* 0/1 = table/view */
unsigned long nHandleValue; /* Handle value */
HREQUEST hReqest; /* the HREQUEST for this fileio handle */
} FILEIO_HANDLE_INFO;
We use essential cookies to make this site work, and optional cookies to enhance your experience.