Added more methods to Query class.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@773 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
@@ -24,11 +24,199 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "xflaim_Query.h"
|
||||
#include "xflaim_OptInfo.h"
|
||||
#include "xflaim_ResultSetCounts.h"
|
||||
#include "flaimsys.h"
|
||||
#include "jniftk.h"
|
||||
|
||||
#define THIS_QUERY() ((F_Query *)((FLMUINT)lThis))
|
||||
|
||||
// Fields in the OptInfo class
|
||||
|
||||
static jfieldID fid_OptInfo_iOptType = NULL;
|
||||
static jfieldID fid_OptInfo_iCost = NULL;
|
||||
static jfieldID fid_OptInfo_lNodeId = NULL;
|
||||
static jfieldID fid_OptInfo_lEndNodeId = NULL;
|
||||
static jfieldID fid_OptInfo_iIxNum = NULL;
|
||||
static jfieldID fid_OptInfo_sIxName = NULL;
|
||||
static jfieldID fid_OptInfo_bMustVerifyPath = NULL;
|
||||
static jfieldID fid_OptInfo_bDoNodeMatch = NULL;
|
||||
static jfieldID fid_OptInfo_bCanCompareOnKey = NULL;
|
||||
static jfieldID fid_OptInfo_lKeysRead = NULL;
|
||||
static jfieldID fid_OptInfo_lKeyHadDupDoc = NULL;
|
||||
static jfieldID fid_OptInfo_lKeysPassed = NULL;
|
||||
static jfieldID fid_OptInfo_lNodesRead = NULL;
|
||||
static jfieldID fid_OptInfo_lNodesTested = NULL;
|
||||
static jfieldID fid_OptInfo_lNodesPassed = NULL;
|
||||
static jfieldID fid_OptInfo_lDocsRead = NULL;
|
||||
static jfieldID fid_OptInfo_lDupDocsEliminated = NULL;
|
||||
static jfieldID fid_OptInfo_lNodesFailedValidation = NULL;
|
||||
static jfieldID fid_OptInfo_lDocsFailedValidation = NULL;
|
||||
static jfieldID fid_OptInfo_lDocsPassed = NULL;
|
||||
|
||||
// Fields in the ResultSetCounts class
|
||||
|
||||
static jfieldID fid_ResultSetCounts_iReadCount = NULL;
|
||||
static jfieldID fid_ResultSetCounts_iPassedCount = NULL;
|
||||
static jfieldID fid_ResultSetCounts_iPositionableToCount = NULL;
|
||||
static jfieldID fid_ResultSetCounts_bDoneBuildingResultSet = NULL;
|
||||
|
||||
FSTATIC jobject NewOptInfo(
|
||||
JNIEnv * pEnv,
|
||||
XFLM_OPT_INFO * pOptInfo,
|
||||
jclass jOptInfoClass);
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_OptInfo_initIDs(
|
||||
JNIEnv * pEnv,
|
||||
jclass jOptInfoClass)
|
||||
{
|
||||
|
||||
// Get the field IDs for the fields in the class.
|
||||
|
||||
if ((fid_OptInfo_iOptType = pEnv->GetFieldID( jOptInfoClass,
|
||||
"iOptType", "I")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_iCost = pEnv->GetFieldID( jOptInfoClass,
|
||||
"iCost", "I")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lNodeId = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lNodeId", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lEndNodeId = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lEndNodeId", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_iIxNum = pEnv->GetFieldID( jOptInfoClass,
|
||||
"iIxNum", "I")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_sIxName = pEnv->GetFieldID( jOptInfoClass,
|
||||
"sIxName", "Ljava/lang/String;")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_bMustVerifyPath = pEnv->GetFieldID( jOptInfoClass,
|
||||
"bMustVerifyPath", "Z")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_bDoNodeMatch = pEnv->GetFieldID( jOptInfoClass,
|
||||
"bDoNodeMatch", "Z")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_bCanCompareOnKey = pEnv->GetFieldID( jOptInfoClass,
|
||||
"bCanCompareOnKey", "Z")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lKeysRead = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lKeysRead", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lKeyHadDupDoc = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lKeyHadDupDoc", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lKeysPassed = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lKeysPassed", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lNodesRead = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lNodesRead", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lNodesTested = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lNodesTested", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lNodesPassed = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lNodesPassed", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lDocsRead = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lDocsRead", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lDupDocsEliminated = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lDupDocsEliminated", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lNodesFailedValidation = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lNodesFailedValidation", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lDocsFailedValidation = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lDocsFailedValidation", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_OptInfo_lDocsPassed = pEnv->GetFieldID( jOptInfoClass,
|
||||
"lDocsPassed", "J")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_ResultSetCounts_initIDs(
|
||||
JNIEnv * pEnv,
|
||||
jclass jResultSetCountsClass)
|
||||
{
|
||||
|
||||
// Get the field IDs for the fields in the class.
|
||||
|
||||
if ((fid_ResultSetCounts_iReadCount = pEnv->GetFieldID( jResultSetCountsClass,
|
||||
"iReadCount", "I")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_ResultSetCounts_iPassedCount = pEnv->GetFieldID( jResultSetCountsClass,
|
||||
"iPassedCount", "I")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_ResultSetCounts_iPositionableToCount = pEnv->GetFieldID( jResultSetCountsClass,
|
||||
"iPositionableToCount", "I")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
if ((fid_ResultSetCounts_bDoneBuildingResultSet = pEnv->GetFieldID( jResultSetCountsClass,
|
||||
"bDoneBuildingResultSet", "Z")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return;
|
||||
}
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
@@ -180,80 +368,17 @@ Exit:
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1addOperator(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jint iOperator)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
|
||||
if (RC_BAD( rc = pQuery->addOperator( (eQueryOperators)iOperator, 0, NULL)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1addStringOperator(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jint iOperator,
|
||||
jboolean bCaseInsensitive,
|
||||
jboolean bCompressWhitespace,
|
||||
jboolean bNoWhitespace,
|
||||
jboolean bNoUnderscores,
|
||||
jboolean bNoDashes,
|
||||
jboolean bWhitespaceAsSpace,
|
||||
jboolean bIgnoreLeadingSpace,
|
||||
jboolean bIgnoreTrailingSpace)
|
||||
jint iCompareRules)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
FLMUINT uiCompareRules = 0;
|
||||
|
||||
if (bCaseInsensitive)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_CASE_INSENSITIVE;
|
||||
}
|
||||
if (bCompressWhitespace)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_COMPRESS_WHITESPACE;
|
||||
}
|
||||
if (bNoWhitespace)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_NO_WHITESPACE;
|
||||
}
|
||||
if (bNoUnderscores)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_NO_UNDERSCORES;
|
||||
}
|
||||
if (bNoDashes)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_NO_DASHES;
|
||||
}
|
||||
if (bWhitespaceAsSpace)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_WHITESPACE_AS_SPACE;
|
||||
}
|
||||
if (bIgnoreLeadingSpace)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_IGNORE_LEADING_SPACE;
|
||||
}
|
||||
if (bIgnoreTrailingSpace)
|
||||
{
|
||||
uiCompareRules |= XFLM_COMP_IGNORE_TRAILING_SPACE;
|
||||
}
|
||||
if (RC_BAD( rc = pQuery->addOperator( (eQueryOperators)iOperator,
|
||||
uiCompareRules, NULL)))
|
||||
(FLMUINT)iCompareRules, NULL)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
@@ -381,3 +506,643 @@ Exit:
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1getFirst(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jlong lReusedNodeRef,
|
||||
jint iTimeLimit)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
IF_DOMNode * pNewNode = lReusedNodeRef
|
||||
? (IF_DOMNode *)((FLMUINT)lReusedNodeRef)
|
||||
: NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getFirst( pDb, &pNewNode, (FLMUINT)iTimeLimit)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pNewNode));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1getLast(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jlong lReusedNodeRef,
|
||||
jint iTimeLimit)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
IF_DOMNode * pNewNode = lReusedNodeRef
|
||||
? (IF_DOMNode *)((FLMUINT)lReusedNodeRef)
|
||||
: NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getLast( pDb, &pNewNode, (FLMUINT)iTimeLimit)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pNewNode));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1getNext(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jlong lReusedNodeRef,
|
||||
jint iTimeLimit,
|
||||
jint iNumToSkip)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
IF_DOMNode * pNewNode = lReusedNodeRef
|
||||
? (IF_DOMNode *)((FLMUINT)lReusedNodeRef)
|
||||
: NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getNext( pDb, &pNewNode, (FLMUINT)iTimeLimit,
|
||||
(FLMUINT)iNumToSkip, NULL)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pNewNode));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1getPrev(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jlong lReusedNodeRef,
|
||||
jint iTimeLimit,
|
||||
jint iNumToSkip)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
IF_DOMNode * pNewNode = lReusedNodeRef
|
||||
? (IF_DOMNode *)((FLMUINT)lReusedNodeRef)
|
||||
: NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getPrev( pDb, &pNewNode, (FLMUINT)iTimeLimit,
|
||||
(FLMUINT)iNumToSkip, NULL)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pNewNode));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1getCurrent(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jlong lReusedNodeRef)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
IF_DOMNode * pNewNode = lReusedNodeRef
|
||||
? (IF_DOMNode *)((FLMUINT)lReusedNodeRef)
|
||||
: NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getCurrent( pDb, &pNewNode)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pNewNode));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1resetQuery(
|
||||
JNIEnv *, // pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis)
|
||||
{
|
||||
THIS_QUERY()->resetQuery();
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
FSTATIC jobject NewOptInfo(
|
||||
JNIEnv * pEnv,
|
||||
XFLM_OPT_INFO * pOptInfo,
|
||||
jclass jOptInfoClass)
|
||||
{
|
||||
jobject jOptInfo = NULL;
|
||||
jstring jIxName;
|
||||
|
||||
if ((jIxName = pEnv->NewStringUTF( (const char *)pOptInfo->szIxName)) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Allocate and populate the opt info object
|
||||
|
||||
if ((jOptInfo = pEnv->AllocObject( jOptInfoClass)) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
pEnv->SetIntField( jOptInfo, fid_OptInfo_iOptType,
|
||||
(jint)pOptInfo->eOptType);
|
||||
pEnv->SetIntField( jOptInfo, fid_OptInfo_iCost,
|
||||
(jint)pOptInfo->uiCost);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lNodeId,
|
||||
(jlong)pOptInfo->ui64NodeId);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lEndNodeId,
|
||||
(jlong)pOptInfo->ui64EndNodeId);
|
||||
pEnv->SetIntField( jOptInfo, fid_OptInfo_iIxNum,
|
||||
(jint)pOptInfo->uiIxNum);
|
||||
pEnv->SetObjectField( jOptInfo, fid_OptInfo_sIxName,
|
||||
jIxName);
|
||||
pEnv->SetBooleanField( jOptInfo, fid_OptInfo_bMustVerifyPath,
|
||||
(jboolean)(pOptInfo->bMustVerifyPath ? JNI_TRUE : JNI_FALSE));
|
||||
pEnv->SetBooleanField( jOptInfo, fid_OptInfo_bDoNodeMatch,
|
||||
(jboolean)(pOptInfo->bDoNodeMatch ? JNI_TRUE : JNI_FALSE));
|
||||
pEnv->SetBooleanField( jOptInfo, fid_OptInfo_bCanCompareOnKey,
|
||||
(jboolean)(pOptInfo->bCanCompareOnKey ? JNI_TRUE : JNI_FALSE));
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lKeysRead,
|
||||
(jlong)pOptInfo->ui64KeysRead);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lKeyHadDupDoc,
|
||||
(jlong)pOptInfo->ui64KeyHadDupDoc);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lKeysPassed,
|
||||
(jlong)pOptInfo->ui64KeysPassed);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lNodesRead,
|
||||
(jlong)pOptInfo->ui64NodesRead);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lNodesTested,
|
||||
(jlong)pOptInfo->ui64NodesTested);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lNodesPassed,
|
||||
(jlong)pOptInfo->ui64NodesPassed);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lDocsRead,
|
||||
(jlong)pOptInfo->ui64DocsRead);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lDupDocsEliminated,
|
||||
(jlong)pOptInfo->ui64DupDocsEliminated);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lNodesFailedValidation,
|
||||
(jlong)pOptInfo->ui64NodesFailedValidation);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lDocsFailedValidation,
|
||||
(jlong)pOptInfo->ui64DocsFailedValidation);
|
||||
pEnv->SetLongField( jOptInfo, fid_OptInfo_lDocsPassed,
|
||||
(jlong)pOptInfo->ui64DocsPassed);
|
||||
|
||||
Exit:
|
||||
|
||||
return( jOptInfo);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jobjectArray JNICALL Java_xflaim_Query__1getStatsAndOptInfo(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
XFLM_OPT_INFO * pOptInfoArray = NULL;
|
||||
FLMUINT uiNumOptInfos = 0;
|
||||
jclass jOptInfoClass = NULL;
|
||||
jobjectArray jOptInfoArray = NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getStatsAndOptInfo( &uiNumOptInfos, &pOptInfoArray)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Get the OptInfo class.
|
||||
|
||||
if ((jOptInfoClass = pEnv->FindClass( "xflaim/OptInfo")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Allocate an array of OptInfo objects.
|
||||
|
||||
if (uiNumOptInfos)
|
||||
{
|
||||
XFLM_OPT_INFO * pOptInfo;
|
||||
FLMUINT uiLoop;
|
||||
jobject jOptInfo;
|
||||
|
||||
if ((jOptInfoArray = pEnv->NewObjectArray( (jsize)uiNumOptInfos,
|
||||
jOptInfoClass, NULL)) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Populate the OptInfo array
|
||||
|
||||
for (uiLoop = 0, pOptInfo = pOptInfoArray;
|
||||
uiLoop < uiNumOptInfos;
|
||||
uiLoop++, pOptInfo++)
|
||||
{
|
||||
|
||||
// Allocate an opt info object.
|
||||
|
||||
if ((jOptInfo = NewOptInfo( pEnv, pOptInfo, jOptInfoClass)) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Put the opt info object into the array of
|
||||
// opt info objects.
|
||||
|
||||
pEnv->SetObjectArrayElement( jOptInfoArray, (jsize)uiLoop, jOptInfo);
|
||||
}
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
if (pOptInfoArray)
|
||||
{
|
||||
pQuery->freeStatsAndOptInfo( &pOptInfoArray);
|
||||
}
|
||||
|
||||
return( jOptInfoArray);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1setDupHandling(
|
||||
JNIEnv *, // pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jboolean bRemoveDups)
|
||||
{
|
||||
THIS_QUERY()->setDupHandling( bRemoveDups ? TRUE : FALSE);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1setIndex(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jint iIndex)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
|
||||
if (RC_BAD( rc = pQuery->setIndex( (FLMUINT)iIndex)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jint JNICALL Java_xflaim_Query__1getIndex(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
FLMUINT uiIndex;
|
||||
FLMBOOL bHaveMultiple;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getIndex( pDb, &uiIndex, &bHaveMultiple)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jint)uiIndex);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jboolean JNICALL Java_xflaim_Query__1usesMultipleIndexes(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
FLMUINT uiIndex;
|
||||
FLMBOOL bHaveMultiple;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getIndex( pDb, &uiIndex, &bHaveMultiple)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jboolean)(bHaveMultiple ? JNI_TRUE : JNI_FALSE));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1addSortKey(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lSortKeyContext,
|
||||
jboolean bChildToContext,
|
||||
jboolean bElement,
|
||||
jint iNameId,
|
||||
jint iCompareRules,
|
||||
jint iLimit,
|
||||
jint iKeyComponent,
|
||||
jboolean bSortDescending,
|
||||
jboolean bSortMissingHigh)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
void * pvContext = (void *)((FLMUINT)lSortKeyContext);
|
||||
void * pvReturnedContext = NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->addSortKey( pvContext,
|
||||
(FLMBOOL)(bChildToContext ? TRUE : FALSE),
|
||||
(FLMBOOL)(bElement ? TRUE : FALSE),
|
||||
(FLMUINT)iNameId,
|
||||
(FLMUINT)iCompareRules,
|
||||
(FLMUINT)iLimit,
|
||||
(FLMUINT)iKeyComponent,
|
||||
(FLMBOOL)(bSortDescending ? TRUE : FALSE),
|
||||
(FLMBOOL)(bSortMissingHigh ? TRUE : FALSE),
|
||||
&pvReturnedContext)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pvReturnedContext));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1enablePositioning(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
|
||||
if (RC_BAD( rc = pQuery->enablePositioning()))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1positionTo(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jlong lReusedNodeRef,
|
||||
jint iTimeLimit,
|
||||
jint iPosition)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
IF_DOMNode * pNewNode = lReusedNodeRef
|
||||
? (IF_DOMNode *)((FLMUINT)lReusedNodeRef)
|
||||
: NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->positionTo( pDb, &pNewNode, (FLMUINT)iTimeLimit,
|
||||
(FLMUINT)iPosition)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pNewNode));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Query__1positionTo2(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jlong lReusedNodeRef,
|
||||
jint iTimeLimit,
|
||||
jlong lSearchKeyRef,
|
||||
jint iFlags)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
IF_DataVector * pSearchKey = (IF_DataVector *)((FLMUINT)lSearchKeyRef);
|
||||
IF_DOMNode * pNewNode = lReusedNodeRef
|
||||
? (IF_DOMNode *)((FLMUINT)lReusedNodeRef)
|
||||
: NULL;
|
||||
|
||||
if (RC_BAD( rc = pQuery->positionTo( pDb, &pNewNode, (FLMUINT)iTimeLimit,
|
||||
pSearchKey, (FLMUINT)iFlags)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jlong)((FLMUINT)pNewNode));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jint JNICALL Java_xflaim_Query__1getPosition(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
FLMUINT uiPosition = 0;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getPosition( pDb, &uiPosition)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( (jint)uiPosition);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1buildResultSet(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jint iTimeLimit)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
|
||||
if (RC_BAD( rc = pQuery->buildResultSet( pDb, (FLMUINT)iTimeLimit)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1stopBuildingResultSet(
|
||||
JNIEnv *, // pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis)
|
||||
{
|
||||
THIS_QUERY()->stopBuildingResultSet();
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Query__1enableResultSetEncryption(
|
||||
JNIEnv *, // pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis)
|
||||
{
|
||||
THIS_QUERY()->enableResultSetEncryption();
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jobject JNICALL Java_xflaim_Query__1getResultSetCounts(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj
|
||||
jlong lThis,
|
||||
jlong lDbRef,
|
||||
jint iTimeLimit,
|
||||
jboolean bPartialCountOk)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Query * pQuery = THIS_QUERY();
|
||||
IF_Db * pDb = (IF_Db *)((FLMUINT)lDbRef);
|
||||
jclass jResultSetCountsClass = NULL;
|
||||
jobject jCounts = NULL;
|
||||
FLMUINT uiReadCount;
|
||||
FLMUINT uiPassedCount;
|
||||
FLMUINT uiPositionableToCount;
|
||||
FLMBOOL bDoneBuildingResultSet;
|
||||
|
||||
if (RC_BAD( rc = pQuery->getCounts( pDb, (FLMUINT)iTimeLimit,
|
||||
(FLMBOOL)(bPartialCountOk ? TRUE : FALSE),
|
||||
&uiReadCount, &uiPassedCount,
|
||||
&uiPositionableToCount, &bDoneBuildingResultSet)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if ((jResultSetCountsClass = pEnv->FindClass( "xflaim/ResultSetCounts")) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if ((jCounts = pEnv->AllocObject( jResultSetCountsClass)) == NULL)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
pEnv->SetIntField( jCounts, fid_ResultSetCounts_iReadCount,
|
||||
(jint)uiReadCount);
|
||||
pEnv->SetIntField( jCounts, fid_ResultSetCounts_iPassedCount,
|
||||
(jint)uiPassedCount);
|
||||
pEnv->SetIntField( jCounts, fid_ResultSetCounts_iPositionableToCount,
|
||||
(jint)uiPositionableToCount);
|
||||
pEnv->SetBooleanField( jCounts, fid_ResultSetCounts_bDoneBuildingResultSet,
|
||||
(jboolean)(bDoneBuildingResultSet ? JNI_TRUE : JNI_FALSE));
|
||||
|
||||
Exit:
|
||||
|
||||
return( jCounts);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user