Changed pDRNSet to be a dynamic result set - class is now available in the toolkit.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@565 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
@@ -32,6 +32,11 @@ FSTATIC RCODE flmCurSetSubQuery(
|
||||
CURSOR * pCursor,
|
||||
SUBQUERY * pSubQuery);
|
||||
|
||||
FSTATIC int DRNCompareFunc(
|
||||
void * pvData1,
|
||||
void * pvData2,
|
||||
void * pvUserValue);
|
||||
|
||||
FSTATIC RCODE flmCurRecValidate(
|
||||
eFlmFuncs eFlmFuncId,
|
||||
CURSOR * pCursor,
|
||||
@@ -82,36 +87,6 @@ FSTATIC RCODE flmCurEvalSingleRec(
|
||||
FLMUINT * puiCount,
|
||||
FLMUINT * puiSkipCount);
|
||||
|
||||
/****************************************************************************
|
||||
Desc: This routine will do all the setup needed to establish a sub-query as
|
||||
the current subquery for the query.
|
||||
****************************************************************************/
|
||||
class F_DRNCompare : public IF_ResultSetCompare
|
||||
{
|
||||
RCODE FLMAPI compare(
|
||||
const void * pvData1,
|
||||
FLMUINT uiLength1,
|
||||
const void * pvData2,
|
||||
FLMUINT uiLength2,
|
||||
FLMINT * piCompare)
|
||||
{
|
||||
F_UNREFERENCED_PARM( uiLength1);
|
||||
F_UNREFERENCED_PARM( uiLength2);
|
||||
|
||||
if( *((FLMUINT *)pvData1) < *((FLMUINT *)pvData2))
|
||||
{
|
||||
*piCompare = -1;
|
||||
}
|
||||
else if( *((FLMUINT *)pvData1) > *((FLMUINT *)pvData2))
|
||||
{
|
||||
*piCompare = 1;
|
||||
}
|
||||
|
||||
*piCompare = 0;
|
||||
return( NE_FLM_OK);
|
||||
}
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
Desc: This routine will do all the setup needed to establish a sub-query as
|
||||
the current subquery for the query.
|
||||
@@ -149,6 +124,26 @@ Exit:
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc: DRN comparison callback function for dynamic result set.
|
||||
****************************************************************************/
|
||||
FSTATIC int DRNCompareFunc(
|
||||
void * pvData1,
|
||||
void * pvData2,
|
||||
void * // pvUserValue
|
||||
)
|
||||
{
|
||||
if( *((FLMUINT *)pvData1) < *((FLMUINT *)pvData2))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if( *((FLMUINT *)pvData1) > *((FLMUINT *)pvData2))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc: Validate a record that has passed the search criteria. This routine
|
||||
checks the record against the validation function and also checks it
|
||||
@@ -162,9 +157,8 @@ FSTATIC RCODE flmCurRecValidate(
|
||||
FLMUINT * puiCount,
|
||||
FLMBOOL * pbReturnRecOK)
|
||||
{
|
||||
RCODE rc = FERR_OK;
|
||||
FLMBOOL bSavedInvisTrans;
|
||||
F_DRNCompare * pDrnCompare = NULL;
|
||||
RCODE rc = FERR_OK;
|
||||
FLMBOOL bSavedInvisTrans;
|
||||
|
||||
// At this point, we have a record that has passed all the selection
|
||||
// criteria in the query. If we have a record validator callback,
|
||||
@@ -201,6 +195,12 @@ FSTATIC RCODE flmCurRecValidate(
|
||||
|
||||
szTmpDir[ 0] = 0;
|
||||
|
||||
if ((pCursor->pDRNSet = f_new F_DynSearchSet) == NULL)
|
||||
{
|
||||
rc = RC_SET( FERR_MEM);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( gv_FlmSysData.bTempDirSet && gv_FlmSysData.szTempDir[ 0])
|
||||
{
|
||||
if( RC_BAD( rc = flmGetTmpDir( szTmpDir)))
|
||||
@@ -218,27 +218,17 @@ FSTATIC RCODE flmCurRecValidate(
|
||||
}
|
||||
}
|
||||
|
||||
if( RC_BAD( rc = FlmAllocResultSet( &pCursor->pDRNSet)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( (pDrnCompare = f_new F_DRNCompare) == NULL)
|
||||
{
|
||||
rc = RC_SET( FERR_MEM);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( RC_BAD( rc = pCursor->pDRNSet->setupResultSet( szTmpDir,
|
||||
pDrnCompare, sizeof( FLMUINT))))
|
||||
if (RC_BAD( rc = pCursor->pDRNSet->setup( szTmpDir, sizeof( FLMUINT))))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pCursor->pDRNSet->setCompareFunc( DRNCompareFunc, NULL);
|
||||
}
|
||||
|
||||
if (RC_BAD( rc = pCursor->pDRNSet->addEntry( &pSubQuery->uiDrn)))
|
||||
{
|
||||
if (rc == FERR_EXISTS)
|
||||
if (rc == NE_FLM_EXISTS)
|
||||
{
|
||||
*pbReturnRecOK = FALSE;
|
||||
rc = FERR_OK;
|
||||
@@ -284,11 +274,6 @@ FSTATIC RCODE flmCurRecValidate(
|
||||
|
||||
Exit:
|
||||
|
||||
if( pDrnCompare)
|
||||
{
|
||||
pDrnCompare->Release();
|
||||
}
|
||||
|
||||
return( rc);
|
||||
}
|
||||
|
||||
|
||||
@@ -361,7 +361,7 @@ typedef struct CURSOR
|
||||
FLMUINT uiLastPrcntOffs;
|
||||
FLMBOOL bUsePrcntPos;
|
||||
|
||||
IF_ResultSet * pDRNSet;
|
||||
F_DynSearchSet * pDRNSet;
|
||||
FLMBOOL bEliminateDups;
|
||||
QTINFO QTInfo;
|
||||
RCODE rc;
|
||||
|
||||
Reference in New Issue
Block a user