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:
dsandersoremutah
2006-06-13 18:46:11 +00:00
parent 19b2abceb5
commit 10767eccbc
2 changed files with 38 additions and 53 deletions

View File

@@ -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);
}

View File

@@ -361,7 +361,7 @@ typedef struct CURSOR
FLMUINT uiLastPrcntOffs;
FLMBOOL bUsePrcntPos;
IF_ResultSet * pDRNSet;
F_DynSearchSet * pDRNSet;
FLMBOOL bEliminateDups;
QTINFO QTInfo;
RCODE rc;