Files
mars-flaim/xflaim/java/jni/jdbsystem.cpp
dsandersoremutah e32c2de5dd Added documentation for the DbSystem class.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@791 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2006-08-22 22:58:24 +00:00

3700 lines
100 KiB
C++

//------------------------------------------------------------------------------
// Desc:
//
// Tabs: 3
//
// Copyright (c) 2003-2006 Novell, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com
//
// $Id: $
//------------------------------------------------------------------------------
#include "xflaim_DbSystem.h"
#include "xflaim_CREATEOPTS.h"
#include "xflaim_SlabUsage.h"
#include "xflaim_CacheUsage.h"
#include "xflaim_CacheInfo.h"
#include "xflaim_Stats.h"
#include "xflaim_DbStats.h"
#include "xflaim_RTransStats.h"
#include "xflaim_UTransStats.h"
#include "xflaim_LFileStats.h"
#include "xflaim_BlockIOStats.h"
#include "xflaim_DiskIOStat.h"
#include "xflaim_CountTimeStat.h"
#include "xflaim_LockStats.h"
#include "flaimsys.h"
#include "jniftk.h"
#include "jnirestore.h"
#include "jnistatus.h"
#define THIS_DBSYS() ((IF_DbSystem *)(FLMUINT)lThis)
// Field IDs for the CREATEOPTS class.
static jfieldID fid_CREATEOPTS_iBlockSize = NULL;
static jfieldID fid_CREATEOPTS_iVersionNum = NULL;
static jfieldID fid_CREATEOPTS_iMinRflFileSize = NULL;
static jfieldID fid_CREATEOPTS_iMaxRflFileSize = NULL;
static jfieldID fid_CREATEOPTS_bKeepRflFiles = NULL;
static jfieldID fid_CREATEOPTS_bLogAbortedTransToRfl = NULL;
static jfieldID fid_CREATEOPTS_iDefaultLanguage = NULL;
// field IDs for the SlabUsage class.
static jfieldID fid_SlabUsage_lSlabs;
static jfieldID fid_SlabUsage_lSlabBytes;
static jfieldID fid_SlabUsage_lAllocatedCells;
static jfieldID fid_SlabUsage_lFreeCells;
// field IDs for the CacheUsage class.
static jfieldID fid_CacheUsage_iByteCount = NULL;
static jfieldID fid_CacheUsage_iCount = NULL;
static jfieldID fid_CacheUsage_iOldVerCount = NULL;
static jfieldID fid_CacheUsage_iOldVerBytes = NULL;
static jfieldID fid_CacheUsage_iCacheHits = NULL;
static jfieldID fid_CacheUsage_iCacheHitLooks = NULL;
static jfieldID fid_CacheUsage_iCacheFaults = NULL;
static jfieldID fid_CacheUsage_iCacheFaultLooks = NULL;
static jfieldID fid_CacheUsage_slabUsage = NULL;
// field IDs for the CacheInfo class.
static jfieldID fid_CacheInfo_iMaxBytes = NULL;
static jfieldID fid_CacheInfo_iTotalBytesAllocated = NULL;
static jfieldID fid_CacheInfo_bDynamicCacheAdjust = NULL;
static jfieldID fid_CacheInfo_iCacheAdjustPercent = NULL;
static jfieldID fid_CacheInfo_iCacheAdjustMin = NULL;
static jfieldID fid_CacheInfo_iCacheAdjustMax = NULL;
static jfieldID fid_CacheInfo_iCacheAdjustMinToLeave = NULL;
static jfieldID fid_CacheInfo_iDirtyCount = NULL;
static jfieldID fid_CacheInfo_iDirtyBytes = NULL;
static jfieldID fid_CacheInfo_iNewCount = NULL;
static jfieldID fid_CacheInfo_iNewBytes = NULL;
static jfieldID fid_CacheInfo_iLogCount = NULL;
static jfieldID fid_CacheInfo_iLogBytes = NULL;
static jfieldID fid_CacheInfo_iFreeCount = NULL;
static jfieldID fid_CacheInfo_iFreeBytes = NULL;
static jfieldID fid_CacheInfo_iReplaceableCount = NULL;
static jfieldID fid_CacheInfo_iReplaceableBytes = NULL;
static jfieldID fid_CacheInfo_bPreallocatedCache = NULL;
static jfieldID fid_CacheInfo_BlockCache = NULL;
static jfieldID fid_CacheInfo_NodeCache = NULL;
// field IDs for the Stats class.
static jfieldID fid_Stats_dbStats = NULL;
static jfieldID fid_Stats_iStartTime = NULL;
static jfieldID fid_Stats_iStopTime = NULL;
// field IDs for the DbStats class.
static jfieldID fid_DbStats_sDbName = NULL;
static jfieldID fid_DbStats_readTransStats = NULL;
static jfieldID fid_DbStats_updateTransStats = NULL;
static jfieldID fid_DbStats_lfileStats = NULL;
static jfieldID fid_DbStats_lfhBlockStats = NULL;
static jfieldID fid_DbStats_availBlockStats = NULL;
static jfieldID fid_DbStats_dbHdrWrites = NULL;
static jfieldID fid_DbStats_logBlockWrites = NULL;
static jfieldID fid_DbStats_logBlockRestores = NULL;
static jfieldID fid_DbStats_logBlockReads = NULL;
static jfieldID fid_DbStats_iLogBlockChkErrs = NULL;
static jfieldID fid_DbStats_iReadErrors = NULL;
static jfieldID fid_DbStats_iWriteErrors = NULL;
static jfieldID fid_DbStats_lockStats = NULL;
// field IDs for the RTransStats class
static jfieldID fid_RTransStats_committedTrans = NULL;
static jfieldID fid_RTransStats_abortedTrans = NULL;
// field IDs for the UTransStats class
static jfieldID fid_UTransStats_committedTrans = NULL;
static jfieldID fid_UTransStats_groupCompletes = NULL;
static jfieldID fid_UTransStats_lGroupFinished = NULL;
static jfieldID fid_UTransStats_abortedTrans = NULL;
// field IDs for the LFileStats class
static jfieldID fid_LFileStats_rootBlockStats = NULL;
static jfieldID fid_LFileStats_middleBlockStats = NULL;
static jfieldID fid_LFileStats_leafBlockStats = NULL;
static jfieldID fid_LFileStats_lBlockSplits = NULL;
static jfieldID fid_LFileStats_lBlockCombines = NULL;
static jfieldID fid_LFileStats_iLFileNum = NULL;
static jfieldID fid_LFileStats_bIsIndex = NULL;
// field IDs for the BlockIOStats class
static jfieldID fid_BlockIOStats_blockReads = NULL;
static jfieldID fid_BlockIOStats_oldViewBlockReads = NULL;
static jfieldID fid_BlockIOStats_iBlockChkErrs = NULL;
static jfieldID fid_BlockIOStats_iOldViewBlockChkErrs = NULL;
static jfieldID fid_BlockIOStats_iOldViewErrors = NULL;
static jfieldID fid_BlockIOStats_blockWrites = NULL;
// field IDs for the DiskIOStat class
static jfieldID fid_DiskIOStat_lCount = NULL;
static jfieldID fid_DiskIOStat_lTotalBytes = NULL;
static jfieldID fid_DiskIOStat_lElapMilli = NULL;
// field IDs for the LockStats class
static jfieldID fid_LockStats_noLocks = NULL;
static jfieldID fid_LockStats_waitingForLock = NULL;
static jfieldID fid_LockStats_heldLock = NULL;
// field IDs for the CountTimeStat class
static jfieldID fid_CountTimeStat_lCount = NULL;
static jfieldID fid_CountTimeStat_lElapMilli = NULL;
FSTATIC void getCreateOpts(
JNIEnv * pEnv,
jobject createOpts,
XFLM_CREATE_OPTS * pCreateOpts);
FSTATIC jobject NewCountTimeStat(
JNIEnv * pEnv,
F_COUNT_TIME_STAT * pCountTimeStat,
jclass jCountTimeStatClass);
FSTATIC jobject NewRTransStats(
JNIEnv * pEnv,
XFLM_RTRANS_STATS * pRTransStats,
jclass jRTransStatsClass,
jclass jCountTimeStatClass);
FSTATIC jobject NewUTransStats(
JNIEnv * pEnv,
XFLM_UTRANS_STATS * pUTransStats,
jclass jUTransStatsClass,
jclass jCountTimeStatClass);
FSTATIC jobject NewLFileStats(
JNIEnv * pEnv,
XFLM_LFILE_STATS * pLFileStats,
jclass jLFileStatsClass,
jclass jBlockIOStatsClass,
jclass jDiskIOStatClass);
FSTATIC jobject NewDiskIOStat(
JNIEnv * pEnv,
XFLM_DISKIO_STAT * pDiskIOStat,
jclass jDiskIOStatClass);
FSTATIC jobject NewBlockIOStats(
JNIEnv * pEnv,
XFLM_BLOCKIO_STATS * pBlockIOStats,
jclass jBlockIOStatsClass,
jclass jDiskIOStatClass);
FSTATIC jobject NewLockStats(
JNIEnv * pEnv,
F_LOCK_STATS * pLockStats,
jclass jLockStatsClass,
jclass jCountTimeStatClass);
FSTATIC jobject NewDbStats(
JNIEnv * pEnv,
XFLM_DB_STATS * pDbStat,
jclass jDbStatsClass,
jclass jRTransStatsClass,
jclass jUTransStatsClass,
jclass jLFileStatsClass,
jclass jBlockIOStatsClass,
jclass jDiskIOStatClass,
jclass jCountTimeStatClass,
jclass jLockStatsClass);
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_Stats_initIDs(
JNIEnv * pEnv,
jclass jStatsClass)
{
// Get the field IDs for the fields in the class.
if ((fid_Stats_dbStats = pEnv->GetFieldID( jStatsClass,
"dbStats", "[Lxflaim/DbStats;")) == NULL)
{
goto Exit;
}
if ((fid_Stats_iStartTime = pEnv->GetFieldID( jStatsClass,
"iStartTime", "I")) == NULL)
{
goto Exit;
}
if ((fid_Stats_iStopTime = pEnv->GetFieldID( jStatsClass,
"iStopTime", "I")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbStats_initIDs(
JNIEnv * pEnv,
jclass jDbStatsClass)
{
// Get the field IDs for the fields in the class.
if ((fid_DbStats_sDbName = pEnv->GetFieldID( jDbStatsClass,
"sDbName", "Ljava/lang/String;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_readTransStats = pEnv->GetFieldID( jDbStatsClass,
"readTransStats", "Lxflaim/RTransStats;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_updateTransStats = pEnv->GetFieldID( jDbStatsClass,
"updateTransStats", "Lxflaim/UTransStats;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_lfileStats = pEnv->GetFieldID( jDbStatsClass,
"lfileStats", "[Lxflaim/LFileStats;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_lfhBlockStats = pEnv->GetFieldID( jDbStatsClass,
"lfhBlockStats", "Lxflaim/BlockIOStats;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_availBlockStats = pEnv->GetFieldID( jDbStatsClass,
"availBlockStats", "Lxflaim/BlockIOStats;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_dbHdrWrites = pEnv->GetFieldID( jDbStatsClass,
"dbHdrWrites", "Lxflaim/DiskIOStat;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_logBlockWrites = pEnv->GetFieldID( jDbStatsClass,
"logBlockWrites", "Lxflaim/DiskIOStat;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_logBlockRestores = pEnv->GetFieldID( jDbStatsClass,
"logBlockRestores", "Lxflaim/DiskIOStat;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_logBlockReads = pEnv->GetFieldID( jDbStatsClass,
"logBlockReads", "Lxflaim/DiskIOStat;")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_iLogBlockChkErrs = pEnv->GetFieldID( jDbStatsClass,
"iLogBlockChkErrs", "I")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_iReadErrors = pEnv->GetFieldID( jDbStatsClass,
"iReadErrors", "I")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_iWriteErrors = pEnv->GetFieldID( jDbStatsClass,
"iWriteErrors", "I")) == NULL)
{
goto Exit;
}
if ((fid_DbStats_lockStats = pEnv->GetFieldID( jDbStatsClass,
"lockStats", "Lxflaim/LockStats;")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_RTransStats_initIDs(
JNIEnv * pEnv,
jclass jRTransStatsClass)
{
// Get the field IDs for the fields in the class.
if ((fid_RTransStats_committedTrans = pEnv->GetFieldID( jRTransStatsClass,
"committedTrans", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
if ((fid_RTransStats_abortedTrans = pEnv->GetFieldID( jRTransStatsClass,
"abortedTrans", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_UTransStats_initIDs(
JNIEnv * pEnv,
jclass jUTransStatsClass)
{
// Get the field IDs for the fields in the class.
if ((fid_UTransStats_committedTrans = pEnv->GetFieldID( jUTransStatsClass,
"committedTrans", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
if ((fid_UTransStats_groupCompletes = pEnv->GetFieldID( jUTransStatsClass,
"groupCompletes", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
if ((fid_UTransStats_lGroupFinished = pEnv->GetFieldID( jUTransStatsClass,
"lGroupFinished", "J")) == NULL)
{
goto Exit;
}
if ((fid_UTransStats_abortedTrans = pEnv->GetFieldID( jUTransStatsClass,
"abortedTrans", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_LFileStats_initIDs(
JNIEnv * pEnv,
jclass jLFileStatsClass)
{
// Get the field IDs for the fields in the class.
if ((fid_LFileStats_rootBlockStats = pEnv->GetFieldID( jLFileStatsClass,
"rootBlockStats", "Lxflaim/BlockIOStats;")) == NULL)
{
goto Exit;
}
if ((fid_LFileStats_middleBlockStats = pEnv->GetFieldID( jLFileStatsClass,
"middleBlockStats", "Lxflaim/BlockIOStats;")) == NULL)
{
goto Exit;
}
if ((fid_LFileStats_leafBlockStats = pEnv->GetFieldID( jLFileStatsClass,
"leafBlockStats", "Lxflaim/BlockIOStats;")) == NULL)
{
goto Exit;
}
if ((fid_LFileStats_lBlockSplits = pEnv->GetFieldID( jLFileStatsClass,
"lBlockSplits", "J")) == NULL)
{
goto Exit;
}
if ((fid_LFileStats_lBlockCombines = pEnv->GetFieldID( jLFileStatsClass,
"lBlockCombines", "J")) == NULL)
{
goto Exit;
}
if ((fid_LFileStats_iLFileNum = pEnv->GetFieldID( jLFileStatsClass,
"iLFileNum", "I")) == NULL)
{
goto Exit;
}
if ((fid_LFileStats_bIsIndex = pEnv->GetFieldID( jLFileStatsClass,
"bIsIndex", "Z")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_BlockIOStats_initIDs(
JNIEnv * pEnv,
jclass jBlockIOStatsClass)
{
// Get the field IDs for the fields in the class.
if ((fid_BlockIOStats_blockReads = pEnv->GetFieldID( jBlockIOStatsClass,
"blockReads", "Lxflaim/DiskIOStat;")) == NULL)
{
goto Exit;
}
if ((fid_BlockIOStats_oldViewBlockReads = pEnv->GetFieldID( jBlockIOStatsClass,
"oldViewBlockReads", "Lxflaim/DiskIOStat;")) == NULL)
{
goto Exit;
}
if ((fid_BlockIOStats_iBlockChkErrs = pEnv->GetFieldID( jBlockIOStatsClass,
"iBlockChkErrs", "I")) == NULL)
{
goto Exit;
}
if ((fid_BlockIOStats_iOldViewBlockChkErrs = pEnv->GetFieldID( jBlockIOStatsClass,
"iOldViewBlockChkErrs", "I")) == NULL)
{
goto Exit;
}
if ((fid_BlockIOStats_iOldViewErrors = pEnv->GetFieldID( jBlockIOStatsClass,
"iOldViewErrors", "I")) == NULL)
{
goto Exit;
}
if ((fid_BlockIOStats_blockWrites = pEnv->GetFieldID( jBlockIOStatsClass,
"blockWrites", "Lxflaim/DiskIOStat;")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DiskIOStat_initIDs(
JNIEnv * pEnv,
jclass jDiskIOStatClass)
{
// Get the field IDs for the fields in the class.
if ((fid_DiskIOStat_lCount = pEnv->GetFieldID( jDiskIOStatClass,
"lCount", "J")) == NULL)
{
goto Exit;
}
if ((fid_DiskIOStat_lTotalBytes = pEnv->GetFieldID( jDiskIOStatClass,
"lTotalBytes", "J")) == NULL)
{
goto Exit;
}
if ((fid_DiskIOStat_lElapMilli = pEnv->GetFieldID( jDiskIOStatClass,
"lElapMilli", "J")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_LockStats_initIDs(
JNIEnv * pEnv,
jclass jLockStatsClass)
{
// Get the field IDs for the fields in the class.
if ((fid_LockStats_noLocks = pEnv->GetFieldID( jLockStatsClass,
"noLocks", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
if ((fid_LockStats_waitingForLock = pEnv->GetFieldID( jLockStatsClass,
"waitingForLock", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
if ((fid_LockStats_heldLock = pEnv->GetFieldID( jLockStatsClass,
"heldLock", "Lxflaim/CountTimeStat;")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_CountTimeStat_initIDs(
JNIEnv * pEnv,
jclass jCountTimeStatClass)
{
// Get the field IDs for the fields in the class.
if ((fid_CountTimeStat_lCount = pEnv->GetFieldID( jCountTimeStatClass,
"lCount", "J")) == NULL)
{
goto Exit;
}
if ((fid_CountTimeStat_lElapMilli = pEnv->GetFieldID( jCountTimeStatClass,
"lElapMilli", "J")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_SlabUsage_initIDs(
JNIEnv * pEnv,
jclass jSlabUsageClass)
{
// Get the field IDs for the fields in the class.
if ((fid_SlabUsage_lSlabs = pEnv->GetFieldID( jSlabUsageClass,
"lSlabs", "J")) == NULL)
{
goto Exit;
}
if ((fid_SlabUsage_lSlabBytes = pEnv->GetFieldID( jSlabUsageClass,
"lSlabBytes", "J")) == NULL)
{
goto Exit;
}
if ((fid_SlabUsage_lAllocatedCells = pEnv->GetFieldID( jSlabUsageClass,
"lAllocatedCells", "J")) == NULL)
{
goto Exit;
}
if ((fid_SlabUsage_lFreeCells = pEnv->GetFieldID( jSlabUsageClass,
"lFreeCells", "J")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_CacheUsage_initIDs(
JNIEnv * pEnv,
jclass jCacheUsageClass)
{
// Get the field IDs for the fields in the class.
if ((fid_CacheUsage_iByteCount = pEnv->GetFieldID( jCacheUsageClass,
"iByteCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_iCount = pEnv->GetFieldID( jCacheUsageClass,
"iCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_iOldVerCount = pEnv->GetFieldID( jCacheUsageClass,
"iOldVerCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_iOldVerBytes = pEnv->GetFieldID( jCacheUsageClass,
"iOldVerBytes", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_iCacheHits = pEnv->GetFieldID( jCacheUsageClass,
"iCacheHits", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_iCacheHitLooks = pEnv->GetFieldID( jCacheUsageClass,
"iCacheHitLooks", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_iCacheFaults = pEnv->GetFieldID( jCacheUsageClass,
"iCacheFaults", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_iCacheFaultLooks = pEnv->GetFieldID( jCacheUsageClass,
"iCacheFaultLooks", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheUsage_slabUsage = pEnv->GetFieldID( jCacheUsageClass,
"slabUsage", "Lxflaim/SlabUsage;")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_CacheInfo_initIDs(
JNIEnv * pEnv,
jclass jCacheInfoClass)
{
// Get the field IDs for the fields in the class.
if ((fid_CacheInfo_iMaxBytes = pEnv->GetFieldID( jCacheInfoClass,
"iMaxBytes", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iTotalBytesAllocated = pEnv->GetFieldID( jCacheInfoClass,
"iTotalBytesAllocated", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_bDynamicCacheAdjust = pEnv->GetFieldID( jCacheInfoClass,
"bDynamicCacheAdjust", "Z")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iCacheAdjustPercent = pEnv->GetFieldID( jCacheInfoClass,
"iCacheAdjustPercent", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iCacheAdjustMin = pEnv->GetFieldID( jCacheInfoClass,
"iCacheAdjustMin", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iCacheAdjustMax = pEnv->GetFieldID( jCacheInfoClass,
"iCacheAdjustMax", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iCacheAdjustMinToLeave = pEnv->GetFieldID( jCacheInfoClass,
"iCacheAdjustMinToLeave", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iDirtyCount = pEnv->GetFieldID( jCacheInfoClass,
"iDirtyCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iDirtyBytes = pEnv->GetFieldID( jCacheInfoClass,
"iDirtyBytes", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iNewCount = pEnv->GetFieldID( jCacheInfoClass,
"iNewCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iNewBytes = pEnv->GetFieldID( jCacheInfoClass,
"iNewBytes", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iLogCount = pEnv->GetFieldID( jCacheInfoClass,
"iLogCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iLogBytes = pEnv->GetFieldID( jCacheInfoClass,
"iLogBytes", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iFreeCount = pEnv->GetFieldID( jCacheInfoClass,
"iFreeCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iFreeBytes = pEnv->GetFieldID( jCacheInfoClass,
"iFreeBytes", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iReplaceableCount = pEnv->GetFieldID( jCacheInfoClass,
"iReplaceableCount", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_iReplaceableBytes = pEnv->GetFieldID( jCacheInfoClass,
"iReplaceableBytes", "I")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_bPreallocatedCache = pEnv->GetFieldID( jCacheInfoClass,
"bPreallocatedCache", "Z")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_BlockCache = pEnv->GetFieldID( jCacheInfoClass,
"BlockCache", "Lxflaim/CacheUsage;")) == NULL)
{
goto Exit;
}
if ((fid_CacheInfo_NodeCache = pEnv->GetFieldID( jCacheInfoClass,
"NodeCache", "Lxflaim/CacheUsage;")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_CREATEOPTS_initIDs(
JNIEnv * pEnv,
jclass jCREATEOPTSClass)
{
// Get the field IDs for the fields in the class.
if ((fid_CREATEOPTS_iBlockSize = pEnv->GetFieldID( jCREATEOPTSClass,
"iBlockSize", "I")) == NULL)
{
goto Exit;
}
if ((fid_CREATEOPTS_iVersionNum = pEnv->GetFieldID( jCREATEOPTSClass,
"iVersionNum", "I")) == NULL)
{
goto Exit;
}
if ((fid_CREATEOPTS_iMinRflFileSize = pEnv->GetFieldID( jCREATEOPTSClass,
"iMinRflFileSize", "I")) == NULL)
{
goto Exit;
}
if ((fid_CREATEOPTS_iMaxRflFileSize = pEnv->GetFieldID( jCREATEOPTSClass,
"iMaxRflFileSize", "I")) == NULL)
{
goto Exit;
}
if ((fid_CREATEOPTS_bKeepRflFiles = pEnv->GetFieldID( jCREATEOPTSClass,
"bKeepRflFiles", "Z")) == NULL)
{
goto Exit;
}
if ((fid_CREATEOPTS_bLogAbortedTransToRfl = pEnv->GetFieldID( jCREATEOPTSClass,
"bLogAbortedTransToRfl", "Z")) == NULL)
{
goto Exit;
}
if ((fid_CREATEOPTS_iDefaultLanguage = pEnv->GetFieldID( jCREATEOPTSClass,
"iDefaultLanguage", "I")) == NULL)
{
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1createDbSystem(
JNIEnv * pEnv,
jobject) // obj)
{
IF_DbSystem * pDbSystem;
if( RC_BAD( FlmAllocDbSystem( &pDbSystem)))
{
ThrowError( NE_XFLM_MEM, pEnv);
}
return( (jlong)((FLMUINT)pDbSystem));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1release(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
IF_DbSystem * pDbSystem = THIS_DBSYS();
if (pDbSystem)
{
pDbSystem->Release();
}
}
/****************************************************************************
Desc: Get create options from the CREATEOPTS Java object.
****************************************************************************/
FSTATIC void getCreateOpts(
JNIEnv * pEnv,
jobject createOpts,
XFLM_CREATE_OPTS * pCreateOpts)
{
pCreateOpts->uiBlockSize = (FLMUINT)pEnv->GetIntField( createOpts,
fid_CREATEOPTS_iBlockSize);
pCreateOpts->uiVersionNum = (FLMUINT)pEnv->GetIntField( createOpts,
fid_CREATEOPTS_iVersionNum);
pCreateOpts->uiMinRflFileSize = (FLMUINT)pEnv->GetIntField( createOpts,
fid_CREATEOPTS_iMinRflFileSize);
pCreateOpts->uiMaxRflFileSize = (FLMUINT)pEnv->GetIntField( createOpts,
fid_CREATEOPTS_iMaxRflFileSize);
pCreateOpts->bKeepRflFiles = (FLMBOOL)(pEnv->GetBooleanField( createOpts,
fid_CREATEOPTS_bKeepRflFiles) ? TRUE : FALSE);
pCreateOpts->bLogAbortedTransToRfl = (FLMBOOL)(pEnv->GetBooleanField( createOpts,
fid_CREATEOPTS_bLogAbortedTransToRfl) ? TRUE : FALSE);
pCreateOpts->uiDefaultLanguage = (FLMUINT)pEnv->GetIntField( createOpts,
fid_CREATEOPTS_iDefaultLanguage);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1dbCreate(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbPath,
jstring sDataDir,
jstring sRflDir,
jstring sDictFileName,
jstring sDictBuf,
jobject createOpts)
{
RCODE rc = NE_XFLM_OK;
F_Db * pDb = NULL;
XFLM_CREATE_OPTS Opts;
XFLM_CREATE_OPTS * pOpts;
FLMBYTE ucDbPath [F_PATH_MAX_SIZE];
F_DynaBuf dbPathBuf( ucDbPath, sizeof( ucDbPath));
FLMBYTE ucDataDir [F_PATH_MAX_SIZE];
F_DynaBuf dataDirBuf( ucDataDir, sizeof( ucDataDir));
FLMBYTE ucRflDir [F_PATH_MAX_SIZE];
F_DynaBuf rflDirBuf( ucRflDir, sizeof( ucRflDir));
FLMBYTE ucDictFileName [F_PATH_MAX_SIZE];
F_DynaBuf dictFileNameBuf( ucDictFileName, sizeof( ucDictFileName));
FLMBYTE ucDictBuf [100];
F_DynaBuf dictBufBuf( ucDictBuf, sizeof( ucDictBuf));
// Get all of the string parameters into buffers.
flmAssert( sDbPath);
if (RC_BAD( rc = getUTF8String( pEnv, sDbPath, &dbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDataDir, &dataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sRflDir, &rflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDictFileName, &dictFileNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDictBuf, &dictBufBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (!createOpts)
{
pOpts = NULL;
}
else
{
getCreateOpts( pEnv, createOpts, &Opts);
pOpts = &Opts;
}
if (RC_BAD( rc = THIS_DBSYS()->dbCreate(
(const char *)dbPathBuf.getBufferPtr(),
dataDirBuf.getDataLength() > 1
? (const char *)dataDirBuf.getBufferPtr()
: (const char *)NULL,
rflDirBuf.getDataLength() > 1
? (const char *)rflDirBuf.getBufferPtr()
: (const char *)NULL,
dictFileNameBuf.getDataLength() > 1
? (const char *)dictFileNameBuf.getBufferPtr()
: (const char *)NULL,
dictBufBuf.getDataLength() > 1
? (const char *)dictBufBuf.getBufferPtr()
: (const char *)NULL,
pOpts, (IF_Db **)&pDb)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pDb));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1dbOpen(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbPath,
jstring sDataDir,
jstring sRflDir,
jstring sPassword,
jboolean bAllowLimited)
{
RCODE rc = NE_XFLM_OK;
F_Db * pDb = NULL;
FLMBYTE ucDbPath [F_PATH_MAX_SIZE];
F_DynaBuf dbPathBuf( ucDbPath, sizeof( ucDbPath));
FLMBYTE ucDataDir [F_PATH_MAX_SIZE];
F_DynaBuf dataDirBuf( ucDataDir, sizeof( ucDataDir));
FLMBYTE ucRflDir [F_PATH_MAX_SIZE];
F_DynaBuf rflDirBuf( ucRflDir, sizeof( ucRflDir));
FLMBYTE ucPassword [100];
F_DynaBuf passwordBuf( ucPassword, sizeof( ucPassword));
// Get all of the string parameters into buffers.
flmAssert( sDbPath);
if (RC_BAD( rc = getUTF8String( pEnv, sDbPath, &dbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDataDir, &dataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sRflDir, &rflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sPassword, &passwordBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->dbOpen(
(const char *)dbPathBuf.getBufferPtr(),
dataDirBuf.getDataLength() > 1
? (const char *)dataDirBuf.getBufferPtr()
: (const char *)NULL,
rflDirBuf.getDataLength() > 1
? (const char *)rflDirBuf.getBufferPtr()
: (const char *)NULL,
passwordBuf.getDataLength() > 1
? (const char *)passwordBuf.getBufferPtr()
: (const char *)NULL,
bAllowLimited ? TRUE : FALSE,
(IF_Db **)&pDb)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)(FLMUINT)pDb);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1dbRemove(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbPath,
jstring sDataDir,
jstring sRflDir,
jboolean bRemove)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucDbPath [F_PATH_MAX_SIZE];
F_DynaBuf dbPathBuf( ucDbPath, sizeof( ucDbPath));
FLMBYTE ucDataDir [F_PATH_MAX_SIZE];
F_DynaBuf dataDirBuf( ucDataDir, sizeof( ucDataDir));
FLMBYTE ucRflDir [F_PATH_MAX_SIZE];
F_DynaBuf rflDirBuf( ucRflDir, sizeof( ucRflDir));
// Get all of the string parameters into buffers.
flmAssert( sDbPath);
if (RC_BAD( rc = getUTF8String( pEnv, sDbPath, &dbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDataDir, &dataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sRflDir, &rflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->dbRemove(
(const char *)dbPathBuf.getBufferPtr(),
dataDirBuf.getDataLength() > 1
? (const char *)dataDirBuf.getBufferPtr()
: (const char *)NULL,
rflDirBuf.getDataLength() > 1
? (const char *)rflDirBuf.getBufferPtr()
: (const char *)NULL,
bRemove ? TRUE : FALSE)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1dbRestore(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbPath,
jstring sDataDir,
jstring sRflDir,
jstring sBackupPath,
jstring sPassword,
jobject RestoreClient,
jobject RestoreStatus)
{
RCODE rc = NE_XFLM_OK;
JavaVM * pJvm = NULL;
JNIRestoreClient * pRestoreClient = NULL;
JNIRestoreStatus * pRestoreStatus = NULL;
FLMBYTE ucDbPath [F_PATH_MAX_SIZE];
F_DynaBuf dbPathBuf( ucDbPath, sizeof( ucDbPath));
FLMBYTE ucDataDir [F_PATH_MAX_SIZE];
F_DynaBuf dataDirBuf( ucDataDir, sizeof( ucDataDir));
FLMBYTE ucBackupPath [F_PATH_MAX_SIZE];
F_DynaBuf backupPathBuf( ucBackupPath, sizeof( ucBackupPath));
FLMBYTE ucRflDir [F_PATH_MAX_SIZE];
F_DynaBuf rflDirBuf( ucRflDir, sizeof( ucRflDir));
FLMBYTE ucPassword [100];
F_DynaBuf passwordBuf( ucPassword, sizeof( ucPassword));
// Get all of the string parameters into buffers.
flmAssert( sDbPath);
if (RC_BAD( rc = getUTF8String( pEnv, sDbPath, &dbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDataDir, &dataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sBackupPath, &backupPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sRflDir, &rflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sPassword, &passwordBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
pEnv->GetJavaVM( &pJvm);
flmAssert( RestoreClient);
if ((pRestoreClient = f_new JNIRestoreClient( RestoreClient, pJvm)) == NULL)
{
ThrowError( NE_XFLM_MEM, pEnv);
goto Exit;
}
if (RestoreStatus != NULL)
{
if ((pRestoreStatus = f_new JNIRestoreStatus( RestoreStatus, pJvm)) == NULL)
{
ThrowError( NE_XFLM_MEM, pEnv);
goto Exit;
}
}
if (RC_BAD( rc = THIS_DBSYS()->dbRestore(
(const char *)dbPathBuf.getBufferPtr(),
dataDirBuf.getDataLength() > 1
? (const char *)dataDirBuf.getBufferPtr()
: (const char *)NULL,
backupPathBuf.getDataLength() > 1
? (const char *)backupPathBuf.getBufferPtr()
: (const char *)NULL,
rflDirBuf.getDataLength() > 1
? (const char *)rflDirBuf.getBufferPtr()
: (const char *)NULL,
passwordBuf.getDataLength() > 1
? (const char *)passwordBuf.getBufferPtr()
: (const char *)NULL,
pRestoreClient, pRestoreStatus)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
if (pRestoreClient)
{
pRestoreClient->Release();
}
if (pRestoreStatus)
{
pRestoreStatus->Release();
}
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1dbCheck(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbPath,
jstring sDataDir,
jstring sRflDir,
jstring sPassword,
jint iFlags,
jobject checkStatus)
{
RCODE rc = NE_XFLM_OK;
JNICheckStatus * pStatus = NULL;
F_DbInfo * pDbInfo = NULL;
FLMBYTE ucDbPath [F_PATH_MAX_SIZE];
F_DynaBuf dbPathBuf( ucDbPath, sizeof( ucDbPath));
FLMBYTE ucDataDir [F_PATH_MAX_SIZE];
F_DynaBuf dataDirBuf( ucDataDir, sizeof( ucDataDir));
FLMBYTE ucRflDir [F_PATH_MAX_SIZE];
F_DynaBuf rflDirBuf( ucRflDir, sizeof( ucRflDir));
FLMBYTE ucPassword [100];
F_DynaBuf passwordBuf( ucPassword, sizeof( ucPassword));
// Get all of the string parameters into buffers.
flmAssert( sDbPath);
if (RC_BAD( rc = getUTF8String( pEnv, sDbPath, &dbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDataDir, &dataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sRflDir, &rflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sPassword, &passwordBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (checkStatus != NULL)
{
JavaVM * pJvm = NULL;
pEnv->GetJavaVM( &pJvm);
if ((pStatus = f_new JNICheckStatus( checkStatus, pJvm)) == NULL)
{
ThrowError( NE_XFLM_MEM, pEnv);
goto Exit;
}
}
if (RC_BAD( rc = THIS_DBSYS()->dbCheck(
(const char *)dbPathBuf.getBufferPtr(),
dataDirBuf.getDataLength() > 1
? (const char *)dataDirBuf.getBufferPtr()
: (const char *)NULL,
rflDirBuf.getDataLength() > 1
? (const char *)rflDirBuf.getBufferPtr()
: (const char *)NULL,
passwordBuf.getDataLength() > 1
? (const char *)passwordBuf.getBufferPtr()
: (const char *)NULL,
(FLMUINT)iFlags, (IF_DbInfo **)&pDbInfo, pStatus)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
if (pStatus)
{
pStatus->Release();
}
return( (jlong)((FLMUINT)pDbInfo));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1dbCopy(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sSrcDbName,
jstring sSrcDataDir,
jstring sSrcRflDir,
jstring sDestDbName,
jstring sDestDataDir,
jstring sDestRflDir,
jobject copyStatus)
{
RCODE rc = NE_XFLM_OK;
JavaVM * pJvm;
JNICopyStatus * pStatus = NULL;
FLMBYTE ucSrcDbName [F_PATH_MAX_SIZE];
F_DynaBuf srcDbNameBuf( ucSrcDbName, sizeof( ucSrcDbName));
FLMBYTE ucSrcDataDir [F_PATH_MAX_SIZE];
F_DynaBuf srcDataDirBuf( ucSrcDataDir, sizeof( ucSrcDataDir));
FLMBYTE ucSrcRflDir [F_PATH_MAX_SIZE];
F_DynaBuf srcRflDirBuf( ucSrcRflDir, sizeof( ucSrcRflDir));
FLMBYTE ucDestDbName [F_PATH_MAX_SIZE];
F_DynaBuf destDbNameBuf( ucDestDbName, sizeof( ucDestDbName));
FLMBYTE ucDestDataDir [F_PATH_MAX_SIZE];
F_DynaBuf destDataDirBuf( ucDestDataDir, sizeof( ucDestDataDir));
FLMBYTE ucDestRflDir [F_PATH_MAX_SIZE];
F_DynaBuf destRflDirBuf( ucDestRflDir, sizeof( ucDestRflDir));
// Get all of the string parameters into buffers.
flmAssert( sSrcDbName);
if (RC_BAD( rc = getUTF8String( pEnv, sSrcDbName, &srcDbNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sSrcDataDir, &srcDataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sSrcRflDir, &srcRflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
flmAssert( sDestDbName);
if (RC_BAD( rc = getUTF8String( pEnv, sDestDbName, &destDbNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDestDataDir, &destDataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDestRflDir, &destRflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (copyStatus)
{
pEnv->GetJavaVM( &pJvm);
if ( (pStatus = f_new JNICopyStatus( copyStatus, pJvm)) == NULL)
{
ThrowError( NE_XFLM_MEM, pEnv);
goto Exit;
}
}
if (RC_BAD( rc = THIS_DBSYS()->dbCopy(
(const char *)srcDbNameBuf.getBufferPtr(),
srcDataDirBuf.getDataLength() > 1
? (const char *)srcDataDirBuf.getBufferPtr()
: (const char *)NULL,
srcRflDirBuf.getDataLength() > 1
? (const char *)srcRflDirBuf.getBufferPtr()
: (const char *)NULL,
(const char *)destDbNameBuf.getBufferPtr(),
destDataDirBuf.getDataLength() > 1
? (const char *)destDataDirBuf.getBufferPtr()
: (const char *)NULL,
destRflDirBuf.getDataLength() > 1
? (const char *)destRflDirBuf.getBufferPtr()
: (const char *)NULL,
pStatus)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
if (pStatus)
{
pStatus->Release();
}
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1dbRename(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbPath,
jstring sDataDir,
jstring sRflDir,
jstring sNewDbName,
jboolean bOverwriteDestOk,
jobject renameStatus)
{
RCODE rc = NE_XFLM_OK;
JavaVM * pJvm;
JNIRenameStatus * pStatus = NULL;
FLMBYTE ucDbPath [F_PATH_MAX_SIZE];
F_DynaBuf dbPathBuf( ucDbPath, sizeof( ucDbPath));
FLMBYTE ucDataDir [F_PATH_MAX_SIZE];
F_DynaBuf dataDirBuf( ucDataDir, sizeof( ucDataDir));
FLMBYTE ucRflDir [F_PATH_MAX_SIZE];
F_DynaBuf rflDirBuf( ucRflDir, sizeof( ucRflDir));
FLMBYTE ucNewDbName [F_PATH_MAX_SIZE];
F_DynaBuf newDbNameBuf( ucNewDbName, sizeof( ucNewDbName));
// Get all of the string parameters into buffers.
flmAssert( sDbPath);
if (RC_BAD( rc = getUTF8String( pEnv, sDbPath, &dbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDataDir, &dataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sRflDir, &rflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
flmAssert( sNewDbName);
if (RC_BAD( rc = getUTF8String( pEnv, sNewDbName, &newDbNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (renameStatus != NULL)
{
pEnv->GetJavaVM( &pJvm);
if ((pStatus = f_new JNIRenameStatus( renameStatus, pJvm)) == NULL)
{
ThrowError( NE_XFLM_MEM, pEnv);
goto Exit;
}
}
if (RC_BAD(rc = THIS_DBSYS()->dbRename(
(const char *)dbPathBuf.getBufferPtr(),
dataDirBuf.getDataLength() > 1
? (const char *)dataDirBuf.getBufferPtr()
: (const char *)NULL,
rflDirBuf.getDataLength() > 1
? (const char *)rflDirBuf.getBufferPtr()
: (const char *)NULL,
(const char *)newDbNameBuf.getBufferPtr(),
bOverwriteDestOk ? TRUE : FALSE, pStatus)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
if (pStatus)
{
pStatus->Release();
}
return;
}
/****************************************************************************
Desc: Rebuild status callback
****************************************************************************/
class JavaDbRebuildStatus : public IF_DbRebuildStatus
{
public:
JavaDbRebuildStatus(
JNIEnv * pEnv,
jobject jDbRebuildStatusObject)
{
m_pEnv = pEnv;
// Get a global reference to keep the object from being garbage
// collected, and to allow it to be called across invocations into
// the native interface. Otherwise, the reference will be lost and
// cannot be used by the callback function.
m_jDbRebuildStatusObject = pEnv->NewGlobalRef( jDbRebuildStatusObject);
m_jReportRebuildMethodId = pEnv->GetMethodID( pEnv->GetObjectClass( jDbRebuildStatusObject),
"reportRebuild",
"(IZJJJJJ)I");
m_jReportRebuildErrMethodId = pEnv->GetMethodID( pEnv->GetObjectClass( jDbRebuildStatusObject),
"reportRebuildErr",
"(IIIIIIIIJ)I");
}
virtual ~JavaDbRebuildStatus()
{
if (m_jDbRebuildStatusObject)
{
m_pEnv->DeleteGlobalRef( m_jDbRebuildStatusObject);
}
}
RCODE FLMAPI reportRebuild(
XFLM_REBUILD_INFO * pRebuild)
{
// VERY IMPORTANT NOTE! m_pEnv points to the environment that was
// passed in when this object was set up. It is thread-specific, so
// it is important that the callback happen inside the same thread
// where the setIndexingStatusObject method was called. It will not
// work to set the index status object in one thread, but then do
// the index operation in another thread.
return( (RCODE)m_pEnv->CallIntMethod( m_jDbRebuildStatusObject,
m_jReportRebuildMethodId,
(jint)pRebuild->iDoingFlag,
(jboolean)(pRebuild->bStartFlag ? JNI_TRUE : JNI_FALSE),
(jlong)pRebuild->ui64FileSize,
(jlong)pRebuild->ui64BytesExamined,
(jlong)pRebuild->ui64TotNodes,
(jlong)pRebuild->ui64NodesRecov,
(jlong)pRebuild->ui64DiscardedDocs));
}
RCODE FLMAPI reportRebuildErr(
XFLM_CORRUPT_INFO * pCorruptInfo)
{
return( (RCODE)m_pEnv->CallIntMethod( m_jDbRebuildStatusObject,
m_jReportRebuildErrMethodId,
(jint)pCorruptInfo->iErrCode,
(jint)pCorruptInfo->uiErrLocale,
(jint)pCorruptInfo->uiErrLfNumber,
(jint)pCorruptInfo->uiErrLfType,
(jint)pCorruptInfo->uiErrBTreeLevel,
(jint)pCorruptInfo->uiErrBlkAddress,
(jint)pCorruptInfo->uiErrParentBlkAddress,
(jint)pCorruptInfo->uiErrElmOffset,
(jlong)pCorruptInfo->ui64ErrNodeId));
}
private:
JNIEnv * m_pEnv;
jobject m_jDbRebuildStatusObject;
jmethodID m_jReportRebuildMethodId;
jmethodID m_jReportRebuildErrMethodId;
};
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1dbRebuild(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sSourceDbPath,
jstring sSourceDataDir,
jstring sDestDbPath,
jstring sDestDataDir,
jstring sDestRflDir,
jstring sDictPath,
jstring sPassword,
jobject createOpts,
jobject jDbRebuildStatusObj)
{
RCODE rc = NE_XFLM_OK;
JavaDbRebuildStatus * pDbRebuildStatusObj = NULL;
IF_DbSystem * pDbSystem = THIS_DBSYS();
XFLM_CREATE_OPTS createOptions;
XFLM_CREATE_OPTS * pCreateOptions;
FLMUINT64 ui64TotNodes;
FLMUINT64 ui64NodesRecov;
FLMUINT64 ui64DiscardedDocs;
FLMBYTE ucSourceDbPath [F_PATH_MAX_SIZE];
F_DynaBuf sourceDbPathBuf( ucSourceDbPath, sizeof( ucSourceDbPath));
FLMBYTE ucSourceDataDir [F_PATH_MAX_SIZE];
F_DynaBuf sourceDataDirBuf( ucSourceDataDir, sizeof( ucSourceDataDir));
FLMBYTE ucDestDbPath [F_PATH_MAX_SIZE];
F_DynaBuf destDbPathBuf( ucDestDbPath, sizeof( ucDestDbPath));
FLMBYTE ucDestDataDir [F_PATH_MAX_SIZE];
F_DynaBuf destDataDirBuf( ucDestDataDir, sizeof( ucDestDataDir));
FLMBYTE ucDestRflDir [F_PATH_MAX_SIZE];
F_DynaBuf destRflDirBuf( ucDestRflDir, sizeof( ucDestRflDir));
FLMBYTE ucDictPath [F_PATH_MAX_SIZE];
F_DynaBuf dictPathBuf( ucDictPath, sizeof( ucDictPath));
FLMBYTE ucPassword [100];
F_DynaBuf passwordBuf( ucPassword, sizeof( ucPassword));
// Get all of the string parameters into buffers.
if (RC_BAD( rc = getUTF8String( pEnv, sSourceDbPath, &sourceDbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sSourceDataDir, &sourceDataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDestDbPath, &destDbPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDestDataDir, &destDataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDestRflDir, &destRflDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDictPath, &dictPathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sPassword, &passwordBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
// Setup callback object, if one was passed in
if (jDbRebuildStatusObj)
{
if ((pDbRebuildStatusObj = f_new JavaDbRebuildStatus( pEnv,
jDbRebuildStatusObj)) == NULL)
{
rc = RC_SET( NE_XFLM_MEM);
ThrowError( rc, pEnv);
goto Exit;
}
}
// Set up the create options.
if (!createOpts)
{
pCreateOptions = NULL;
}
else
{
getCreateOpts( pEnv, createOpts, &createOptions);
pCreateOptions = &createOptions;
}
// Call the rebuild function.
if (RC_BAD( rc = pDbSystem->dbRebuild(
(const char *)sourceDbPathBuf.getBufferPtr(),
sourceDataDirBuf.getDataLength() > 1
? (const char *)sourceDataDirBuf.getBufferPtr()
: (const char *)NULL,
(const char *)destDbPathBuf.getBufferPtr(),
destDataDirBuf.getDataLength() > 1
? (const char *)destDataDirBuf.getBufferPtr()
: (const char *)NULL,
destRflDirBuf.getDataLength() > 1
? (const char *)destRflDirBuf.getBufferPtr()
: (const char *)NULL,
dictPathBuf.getDataLength() > 1
? (const char *)dictPathBuf.getBufferPtr()
: (const char *)NULL,
passwordBuf.getDataLength() > 1
? (const char *)passwordBuf.getBufferPtr()
: (const char *)NULL,
pCreateOptions,
&ui64TotNodes,
&ui64NodesRecov,
&ui64DiscardedDocs,
pDbRebuildStatusObj)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
if (pDbRebuildStatusObj)
{
pDbRebuildStatusObj->Release();
}
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openBufferIStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sBuffer)
{
RCODE rc = NE_XFLM_OK;
const char * pszBuffer = NULL;
FLMUINT uiStrCharCount;
F_BufferIStream * pIStream = NULL;
char * pszAllocBuffer = NULL;
// Get a pointer to the characters in the string.
flmAssert( sBuffer);
pszBuffer = pEnv->GetStringUTFChars( sBuffer, NULL);
uiStrCharCount = (FLMUINT)pEnv->GetStringUTFLength( sBuffer);
flmAssert( uiStrCharCount);
// Create the buffer stream object.
if ((pIStream = f_new F_BufferIStream) == NULL)
{
rc = RC_SET( NE_FLM_MEM);
ThrowError( rc, pEnv);
goto Exit;
}
// Call the openStream method so that it will allocate a buffer
// internally. Add one to the size so that we allocate space for
// a null terminating byte - because uiStrCharCount does NOT include
// the null terminating byte. Buffer pointer is returned in pucBuffer.
if( RC_BAD( rc = pIStream->openStream( NULL, uiStrCharCount + 1, &pszAllocBuffer)))
{
ThrowError( rc, pEnv);
goto Exit;
}
// Copy the data from the passed in string into pucBuffer, including the NULL.
f_memcpy( pszAllocBuffer, pszBuffer, uiStrCharCount);
// NULL terminate the allocated buffer.
pszAllocBuffer [uiStrCharCount] = 0;
Exit:
if (pszBuffer)
{
pEnv->ReleaseStringUTFChars( sBuffer, pszBuffer);
}
return( (jlong)((FLMUINT)pIStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openFileIStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sPath)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucPath [F_PATH_MAX_SIZE];
F_DynaBuf pathBuf( ucPath, sizeof( ucPath));
IF_PosIStream * pIStream = NULL;
// Get all of the string parameters into buffers.
flmAssert( sPath);
if (RC_BAD( rc = getUTF8String( pEnv, sPath, &pathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->openFileIStream(
(const char *)pathBuf.getBufferPtr(), &pIStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)(FLMUINT)pIStream);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openMultiFileIStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDirectory,
jstring sBaseName)
{
RCODE rc = NE_XFLM_OK;
IF_IStream * pIStream = NULL;
FLMBYTE ucDirectory [F_PATH_MAX_SIZE];
F_DynaBuf directoryBuf( ucDirectory, sizeof( ucDirectory));
FLMBYTE ucBaseName [F_PATH_MAX_SIZE];
F_DynaBuf baseNameBuf( ucBaseName, sizeof( ucBaseName));
// Get all of the string parameters into buffers.
if (RC_BAD( rc = getUTF8String( pEnv, sDirectory, &directoryBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sBaseName, &baseNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->openMultiFileIStream(
(const char *)directoryBuf.getBufferPtr(),
(const char *)baseNameBuf.getBufferPtr(),
&pIStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pIStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openBufferedIStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lIStream,
jint iBufferSize)
{
RCODE rc = NE_XFLM_OK;
IF_IStream * pIStream = NULL;
IF_IStream * pInputStream = (IF_IStream *)((FLMUINT)lIStream);
if (RC_BAD( rc = THIS_DBSYS()->openBufferedIStream( pInputStream,
(FLMUINT)iBufferSize, &pIStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pIStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openUncompressingIStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lIStream)
{
RCODE rc = NE_XFLM_OK;
IF_IStream * pIStream = NULL;
IF_IStream * pInputStream = (IF_IStream *)((FLMUINT)lIStream);
if (RC_BAD( rc = THIS_DBSYS()->openUncompressingIStream( pInputStream, &pIStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pIStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openBase64Encoder(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lIStream,
jboolean bInsertLineBreaks)
{
RCODE rc = NE_XFLM_OK;
IF_IStream * pIStream = NULL;
IF_IStream * pInputStream = (IF_IStream *)((FLMUINT)lIStream);
if (RC_BAD( rc = THIS_DBSYS()->openBase64Encoder( pInputStream,
bInsertLineBreaks ? TRUE : FALSE, &pIStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pIStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openBase64Decoder(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lIStream)
{
RCODE rc = NE_XFLM_OK;
IF_IStream * pIStream = NULL;
IF_IStream * pInputStream = (IF_IStream *)((FLMUINT)lIStream);
if (RC_BAD( rc = THIS_DBSYS()->openBase64Decoder( pInputStream, &pIStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pIStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openFileOStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sFileName,
jboolean bTruncateIfFileExists)
{
RCODE rc = NE_XFLM_OK;
IF_OStream * pOStream = NULL;
FLMBYTE ucFileName [F_PATH_MAX_SIZE];
F_DynaBuf fileNameBuf( ucFileName, sizeof( ucFileName));
// Get all of the string parameters into buffers.
if (RC_BAD( rc = getUTF8String( pEnv, sFileName, &fileNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->openFileOStream(
(const char *)fileNameBuf.getBufferPtr(),
bTruncateIfFileExists ? TRUE : FALSE, &pOStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pOStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openMultiFileOStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDirectory,
jstring sBaseName,
jint iMaxFileSize,
jboolean bOkToOverwrite)
{
RCODE rc = NE_XFLM_OK;
IF_OStream * pOStream = NULL;
FLMBYTE ucDirectory [F_PATH_MAX_SIZE];
F_DynaBuf directoryBuf( ucDirectory, sizeof( ucDirectory));
FLMBYTE ucBaseName [F_PATH_MAX_SIZE];
F_DynaBuf baseNameBuf( ucBaseName, sizeof( ucBaseName));
// Get all of the string parameters into buffers.
if (RC_BAD( rc = getUTF8String( pEnv, sDirectory, &directoryBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sBaseName, &baseNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->openMultiFileOStream(
(const char *)directoryBuf.getBufferPtr(),
(const char *)baseNameBuf.getBufferPtr(),
(FLMUINT)iMaxFileSize,
bOkToOverwrite ? TRUE : FALSE, &pOStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pOStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1removeMultiFileStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDirectory,
jstring sBaseName)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucDirectory [F_PATH_MAX_SIZE];
F_DynaBuf directoryBuf( ucDirectory, sizeof( ucDirectory));
FLMBYTE ucBaseName [F_PATH_MAX_SIZE];
F_DynaBuf baseNameBuf( ucBaseName, sizeof( ucBaseName));
// Get all of the string parameters into buffers.
if (RC_BAD( rc = getUTF8String( pEnv, sDirectory, &directoryBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sBaseName, &baseNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->removeMultiFileStream(
(const char *)directoryBuf.getBufferPtr(),
(const char *)baseNameBuf.getBufferPtr())))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openBufferedOStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lInputOStream,
jint iBufferSize)
{
RCODE rc = NE_XFLM_OK;
IF_OStream * pOStream = NULL;
IF_OStream * pInputOStream = (IF_OStream *)((FLMUINT)lInputOStream);
if (RC_BAD( rc = THIS_DBSYS()->openBufferedOStream(
pInputOStream, (FLMUINT)iBufferSize, &pOStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pOStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1openCompressingOStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lInputOStream)
{
RCODE rc = NE_XFLM_OK;
IF_OStream * pOStream = NULL;
IF_OStream * pInputOStream = (IF_OStream *)((FLMUINT)lInputOStream);
if (RC_BAD( rc = THIS_DBSYS()->openCompressingOStream( pInputOStream, &pOStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pOStream));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1writeToOStream(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lIStream,
jlong lOStream)
{
RCODE rc = NE_XFLM_OK;
IF_IStream * pIStream = (IF_IStream *)((FLMUINT)lIStream);
IF_OStream * pOStream = (IF_OStream *)((FLMUINT)lOStream);
if (RC_BAD( rc = THIS_DBSYS()->writeToOStream( pIStream, pOStream)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1createJDataVector(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis)
{
RCODE rc = NE_XFLM_OK;
IF_DataVector * ifpDataVector = NULL;
if (RC_BAD( rc = THIS_DBSYS()->createIFDataVector( &ifpDataVector)))
{
ThrowError(rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)(FLMUINT)ifpDataVector);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1updateIniFile(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sParamName,
jstring sValue)
{
RCODE rc = NE_XFLM_OK;
IF_DbSystem * pDbSystem = THIS_DBSYS();
FLMBYTE ucParamName [80];
F_DynaBuf paramNameBuf( ucParamName, sizeof( ucParamName));
FLMBYTE ucValue [80];
F_DynaBuf valueBuf( ucValue, sizeof( ucValue));
// Get all of the string parameters into buffers.
if (RC_BAD( rc = getUTF8String( pEnv, sParamName, &paramNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sValue, &valueBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
// Call the rebuild function.
if (RC_BAD( rc = pDbSystem->updateIniFile(
(const char *)paramNameBuf.getBufferPtr(),
(const char *)valueBuf.getBufferPtr())))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jlong JNICALL Java_xflaim_DbSystem__1dbDup(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lDbToDup)
{
RCODE rc = NE_XFLM_OK;
IF_DbSystem * pDbSystem = THIS_DBSYS();
IF_Db * pDbToDup = (IF_Db *)((FLMUINT)lDbToDup);
IF_Db * pDb = NULL;
if (!pDbToDup)
{
rc = RC_SET( NE_XFLM_INVALID_PARM);
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = pDbSystem->dbDup( pDbToDup, &pDb)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jlong)((FLMUINT)pDb));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setDynamicMemoryLimit(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jint iCacheAdjustPercent,
jint iCacheAdjustMin,
jint iCacheAdjustMax,
jint iCacheAdjustMinToLeave)
{
RCODE rc = NE_XFLM_OK;
if (RC_BAD( rc = THIS_DBSYS()->setDynamicMemoryLimit(
(FLMUINT)iCacheAdjustPercent,
(FLMUINT)iCacheAdjustMin,
(FLMUINT)iCacheAdjustMax,
(FLMUINT)iCacheAdjustMinToLeave)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setHardMemoryLimit(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jint iPercent,
jboolean bPercentOfAvail,
jint iMin,
jint iMax,
jint iMinToLeave,
jboolean bPreallocate)
{
RCODE rc = NE_XFLM_OK;
if (RC_BAD( rc = THIS_DBSYS()->setHardMemoryLimit(
(FLMUINT)iPercent,
bPercentOfAvail? TRUE : FALSE,
(FLMUINT)iMin,
(FLMUINT)iMax,
(FLMUINT)iMinToLeave,
bPreallocate ? TRUE : FALSE)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jboolean JNICALL Java_xflaim_DbSystem__1getDynamicCacheSupported(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( THIS_DBSYS()->getDynamicCacheSupported() ? JNI_TRUE : JNI_FALSE);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jobject JNICALL Java_xflaim_DbSystem__1getCacheInfo(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis)
{
XFLM_CACHE_INFO cacheInfo;
jclass jCacheInfoClass = NULL;
jclass jCacheUsageClass = NULL;
jclass jSlabUsageClass = NULL;
jobject jCacheInfo = NULL;
jobject jBlockCacheUsage = NULL;
jobject jBlockSlabUsage = NULL;
jobject jNodeCacheUsage = NULL;
jobject jNodeSlabUsage = NULL;
THIS_DBSYS()->getCacheInfo( &cacheInfo);
// Find the CacheInfo, CacheUsage, and SlabUsage classes
if ((jCacheInfoClass = pEnv->FindClass( "xflaim/CacheInfo")) == NULL)
{
goto Exit;
}
if ((jCacheUsageClass = pEnv->FindClass( "xflaim/CacheUsage")) == NULL)
{
goto Exit;
}
if ((jSlabUsageClass = pEnv->FindClass( "xflaim/SlabUsage")) == NULL)
{
goto Exit;
}
// Allocate a cache info object and the needed cache usage and slab usage
// objects.
if ((jCacheInfo = pEnv->AllocObject( jCacheInfoClass)) == NULL)
{
goto Exit;
}
if ((jBlockCacheUsage = pEnv->AllocObject( jCacheUsageClass)) == NULL)
{
goto Exit;
}
if ((jNodeCacheUsage = pEnv->AllocObject( jCacheUsageClass)) == NULL)
{
goto Exit;
}
if ((jBlockSlabUsage = pEnv->AllocObject( jSlabUsageClass)) == NULL)
{
goto Exit;
}
if ((jNodeSlabUsage = pEnv->AllocObject( jSlabUsageClass)) == NULL)
{
goto Exit;
}
// Set the Block slab usage fields.
pEnv->SetLongField( jBlockSlabUsage, fid_SlabUsage_lSlabs,
(jlong)cacheInfo.BlockCache.slabUsage.ui64Slabs);
pEnv->SetLongField( jBlockSlabUsage, fid_SlabUsage_lSlabBytes,
(jlong)cacheInfo.BlockCache.slabUsage.ui64SlabBytes);
pEnv->SetLongField( jBlockSlabUsage, fid_SlabUsage_lAllocatedCells,
(jlong)cacheInfo.BlockCache.slabUsage.ui64AllocatedCells);
pEnv->SetLongField( jBlockSlabUsage, fid_SlabUsage_lFreeCells,
(jlong)cacheInfo.BlockCache.slabUsage.ui64FreeCells);
// Set the Node slab usage fields.
pEnv->SetLongField( jNodeSlabUsage, fid_SlabUsage_lSlabs,
(jlong)cacheInfo.NodeCache.slabUsage.ui64Slabs);
pEnv->SetLongField( jNodeSlabUsage, fid_SlabUsage_lSlabBytes,
(jlong)cacheInfo.NodeCache.slabUsage.ui64SlabBytes);
pEnv->SetLongField( jNodeSlabUsage, fid_SlabUsage_lAllocatedCells,
(jlong)cacheInfo.NodeCache.slabUsage.ui64AllocatedCells);
pEnv->SetLongField( jNodeSlabUsage, fid_SlabUsage_lFreeCells,
(jlong)cacheInfo.NodeCache.slabUsage.ui64FreeCells);
// Set the Block cache usage fields
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iByteCount,
(jint)cacheInfo.BlockCache.uiByteCount);
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iCount,
(jint)cacheInfo.BlockCache.uiCount);
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iOldVerCount,
(jint)cacheInfo.BlockCache.uiOldVerCount);
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iOldVerBytes,
(jint)cacheInfo.BlockCache.uiOldVerBytes);
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iCacheHits,
(jint)cacheInfo.BlockCache.uiCacheHits);
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iCacheHitLooks,
(jint)cacheInfo.BlockCache.uiCacheHitLooks);
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iCacheFaults,
(jint)cacheInfo.BlockCache.uiCacheFaults);
pEnv->SetIntField( jBlockCacheUsage, fid_CacheUsage_iCacheFaultLooks,
(jint)cacheInfo.BlockCache.uiCacheFaultLooks);
pEnv->SetObjectField( jBlockCacheUsage, fid_CacheUsage_slabUsage,
jBlockSlabUsage);
// Set the Node cache usage fields
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iByteCount,
(jint)cacheInfo.NodeCache.uiByteCount);
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iCount,
(jint)cacheInfo.NodeCache.uiCount);
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iOldVerCount,
(jint)cacheInfo.NodeCache.uiOldVerCount);
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iOldVerBytes,
(jint)cacheInfo.NodeCache.uiOldVerBytes);
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iCacheHits,
(jint)cacheInfo.NodeCache.uiCacheHits);
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iCacheHitLooks,
(jint)cacheInfo.NodeCache.uiCacheHitLooks);
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iCacheFaults,
(jint)cacheInfo.NodeCache.uiCacheFaults);
pEnv->SetIntField( jNodeCacheUsage, fid_CacheUsage_iCacheFaultLooks,
(jint)cacheInfo.NodeCache.uiCacheFaultLooks);
pEnv->SetObjectField( jNodeCacheUsage, fid_CacheUsage_slabUsage,
jNodeSlabUsage);
// Set the cache info fields.
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iMaxBytes,
(jint)cacheInfo.uiMaxBytes);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iTotalBytesAllocated,
(jint)cacheInfo.uiTotalBytesAllocated);
pEnv->SetBooleanField( jCacheInfo, fid_CacheInfo_bDynamicCacheAdjust,
(jboolean)(cacheInfo.bDynamicCacheAdjust ? JNI_TRUE : JNI_FALSE));
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iCacheAdjustPercent,
(jint)cacheInfo.uiCacheAdjustPercent);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iCacheAdjustMin,
(jint)cacheInfo.uiCacheAdjustMin);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iCacheAdjustMax,
(jint)cacheInfo.uiCacheAdjustMax);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iCacheAdjustMinToLeave,
(jint)cacheInfo.uiCacheAdjustMinToLeave);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iDirtyCount,
(jint)cacheInfo.uiDirtyCount);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iDirtyBytes,
(jint)cacheInfo.uiDirtyBytes);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iNewCount,
(jint)cacheInfo.uiNewCount);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iNewBytes,
(jint)cacheInfo.uiNewBytes);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iLogCount,
(jint)cacheInfo.uiLogCount);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iLogBytes,
(jint)cacheInfo.uiLogBytes);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iFreeCount,
(jint)cacheInfo.uiFreeCount);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iFreeBytes,
(jint)cacheInfo.uiFreeBytes);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iReplaceableCount,
(jint)cacheInfo.uiReplaceableCount);
pEnv->SetIntField( jCacheInfo, fid_CacheInfo_iReplaceableBytes,
(jint)cacheInfo.uiReplaceableBytes);
pEnv->SetBooleanField( jCacheInfo, fid_CacheInfo_bPreallocatedCache,
(jboolean)(cacheInfo.bPreallocatedCache ? JNI_TRUE : JNI_FALSE));
pEnv->SetObjectField( jCacheInfo, fid_CacheInfo_BlockCache, jBlockCacheUsage);
pEnv->SetObjectField( jCacheInfo, fid_CacheInfo_NodeCache, jNodeCacheUsage);
Exit:
return( jCacheInfo);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1enableCacheDebug(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jboolean bDebug)
{
THIS_DBSYS()->enableCacheDebug( bDebug ? TRUE : FALSE);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jboolean JNICALL Java_xflaim_DbSystem__1cacheDebugEnabled(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( THIS_DBSYS()->cacheDebugEnabled() ? JNI_TRUE : JNI_FALSE);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1closeUnusedFiles(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jint iSeconds)
{
RCODE rc = NE_XFLM_OK;
if (RC_BAD( rc = THIS_DBSYS()->closeUnusedFiles( (FLMUINT)iSeconds)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1startStats(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
THIS_DBSYS()->startStats();
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1stopStats(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
THIS_DBSYS()->stopStats();
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1resetStats(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
THIS_DBSYS()->resetStats();
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewCountTimeStat(
JNIEnv * pEnv,
F_COUNT_TIME_STAT * pCountTimeStat,
jclass jCountTimeStatClass)
{
jobject jCountTimeStat;
if ((jCountTimeStat = pEnv->AllocObject( jCountTimeStatClass)) == NULL)
{
goto Exit;
}
pEnv->SetLongField( jCountTimeStat, fid_CountTimeStat_lCount,
(jlong)pCountTimeStat->ui64Count);
pEnv->SetLongField( jCountTimeStat, fid_CountTimeStat_lElapMilli,
(jlong)pCountTimeStat->ui64ElapMilli);
Exit:
return( jCountTimeStat);
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewRTransStats(
JNIEnv * pEnv,
XFLM_RTRANS_STATS * pRTransStats,
jclass jRTransStatsClass,
jclass jCountTimeStatClass)
{
jobject jRTransStats = NULL;
jobject jCommittedTrans;
jobject jAbortedTrans;
// Allocate the sub-objects that part of the read transaction
// statistics object.
if ((jCommittedTrans = NewCountTimeStat( pEnv, &pRTransStats->CommittedTrans,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
if ((jAbortedTrans = NewCountTimeStat( pEnv, &pRTransStats->AbortedTrans,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
// Allocate and populate a read transaction statistics object.
if ((jRTransStats = pEnv->AllocObject( jRTransStatsClass)) == NULL)
{
goto Exit;
}
pEnv->SetObjectField( jRTransStats, fid_RTransStats_committedTrans,
jCommittedTrans);
pEnv->SetObjectField( jRTransStats, fid_RTransStats_abortedTrans,
jAbortedTrans);
Exit:
return( jRTransStats);
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewUTransStats(
JNIEnv * pEnv,
XFLM_UTRANS_STATS * pUTransStats,
jclass jUTransStatsClass,
jclass jCountTimeStatClass)
{
jobject jUTransStats = NULL;
jobject jCommittedTrans;
jobject jGroupCompletes;
jobject jAbortedTrans;
// Allocate the sub-objects that are part of the update transaction
// statistics object.
if ((jCommittedTrans = NewCountTimeStat( pEnv, &pUTransStats->CommittedTrans,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
if ((jGroupCompletes = NewCountTimeStat( pEnv, &pUTransStats->GroupCompletes,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
if ((jAbortedTrans = NewCountTimeStat( pEnv, &pUTransStats->AbortedTrans,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
// Allocate and populate an update transaction statistics object.
if ((jUTransStats = pEnv->AllocObject( jUTransStatsClass)) == NULL)
{
goto Exit;
}
pEnv->SetObjectField( jUTransStats, fid_UTransStats_committedTrans,
jCommittedTrans);
pEnv->SetObjectField( jUTransStats, fid_UTransStats_groupCompletes,
jGroupCompletes);
pEnv->SetLongField( jUTransStats, fid_UTransStats_lGroupFinished,
(jlong)pUTransStats->ui64GroupFinished);
pEnv->SetObjectField( jUTransStats, fid_UTransStats_abortedTrans,
jAbortedTrans);
Exit:
return( jUTransStats);
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewLFileStats(
JNIEnv * pEnv,
XFLM_LFILE_STATS * pLFileStats,
jclass jLFileStatsClass,
jclass jBlockIOStatsClass,
jclass jDiskIOStatClass)
{
jobject jLFileStats = NULL;
jobject jRootBlockStats;
jobject jMiddleBlockStats;
jobject jLeafBlockStats;
// Allocate the sub-objects that are part of the LFile statistics object.
if ((jRootBlockStats = NewBlockIOStats( pEnv, &pLFileStats->RootBlockStats,
jBlockIOStatsClass, jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jMiddleBlockStats = NewBlockIOStats( pEnv, &pLFileStats->MiddleBlockStats,
jBlockIOStatsClass, jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jLeafBlockStats = NewBlockIOStats( pEnv, &pLFileStats->LeafBlockStats,
jBlockIOStatsClass, jDiskIOStatClass)) == NULL)
{
goto Exit;
}
// Allocate and populate the LFile statistics object
if ((jLFileStats = pEnv->AllocObject( jLFileStatsClass)) == NULL)
{
goto Exit;
}
pEnv->SetObjectField( jLFileStats, fid_LFileStats_rootBlockStats,
jRootBlockStats);
pEnv->SetObjectField( jLFileStats, fid_LFileStats_middleBlockStats,
jMiddleBlockStats);
pEnv->SetObjectField( jLFileStats, fid_LFileStats_leafBlockStats,
jLeafBlockStats);
pEnv->SetLongField( jLFileStats, fid_LFileStats_lBlockSplits,
(jlong)pLFileStats->ui64BlockSplits);
pEnv->SetLongField( jLFileStats, fid_LFileStats_lBlockCombines,
(jlong)pLFileStats->ui64BlockCombines);
pEnv->SetIntField( jLFileStats, fid_LFileStats_iLFileNum,
(jint)pLFileStats->uiLFileNum);
pEnv->SetBooleanField( jLFileStats, fid_LFileStats_bIsIndex,
(jboolean)(pLFileStats->eLfType == XFLM_LF_INDEX
? JNI_TRUE
: JNI_FALSE));
Exit:
return( jLFileStats);
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewDiskIOStat(
JNIEnv * pEnv,
XFLM_DISKIO_STAT * pDiskIOStat,
jclass jDiskIOStatClass)
{
jobject jDiskIOStat;
// Allocate and populate the fields of a disk I/O statistics object.
if ((jDiskIOStat = pEnv->AllocObject( jDiskIOStatClass)) == NULL)
{
goto Exit;
}
pEnv->SetLongField( jDiskIOStat, fid_DiskIOStat_lCount,
(jlong)pDiskIOStat->ui64Count);
pEnv->SetLongField( jDiskIOStat, fid_DiskIOStat_lTotalBytes,
(jlong)pDiskIOStat->ui64TotalBytes);
pEnv->SetLongField( jDiskIOStat, fid_DiskIOStat_lElapMilli,
(jlong)pDiskIOStat->ui64ElapMilli);
Exit:
return( jDiskIOStat);
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewBlockIOStats(
JNIEnv * pEnv,
XFLM_BLOCKIO_STATS * pBlockIOStats,
jclass jBlockIOStatsClass,
jclass jDiskIOStatClass)
{
jobject jBlockIOStats = NULL;
jobject jBlockReads;
jobject jOldViewBlockReads;
jobject jBlockWrites;
// Allocate the sub-objects that are part of the block I/O statistics object.
if ((jBlockReads = NewDiskIOStat( pEnv, &pBlockIOStats->BlockReads,
jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jOldViewBlockReads = NewDiskIOStat( pEnv, &pBlockIOStats->OldViewBlockReads,
jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jBlockWrites = NewDiskIOStat( pEnv, &pBlockIOStats->BlockWrites,
jDiskIOStatClass)) == NULL)
{
goto Exit;
}
// Allocate and populate the block I/O statistics object.
if ((jBlockIOStats = pEnv->AllocObject( jBlockIOStatsClass)) == NULL)
{
goto Exit;
}
pEnv->SetObjectField( jBlockIOStats, fid_BlockIOStats_blockReads,
jBlockReads);
pEnv->SetObjectField( jBlockIOStats, fid_BlockIOStats_oldViewBlockReads,
jOldViewBlockReads);
pEnv->SetIntField( jBlockIOStats, fid_BlockIOStats_iBlockChkErrs,
(jint)pBlockIOStats->uiBlockChkErrs);
pEnv->SetIntField( jBlockIOStats, fid_BlockIOStats_iOldViewBlockChkErrs,
(jint)pBlockIOStats->uiOldViewBlockChkErrs);
pEnv->SetIntField( jBlockIOStats, fid_BlockIOStats_iOldViewErrors,
(jint)pBlockIOStats->uiOldViewErrors);
pEnv->SetObjectField( jBlockIOStats, fid_BlockIOStats_blockWrites,
jBlockWrites);
Exit:
return( jBlockIOStats);
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewLockStats(
JNIEnv * pEnv,
F_LOCK_STATS * pLockStats,
jclass jLockStatsClass,
jclass jCountTimeStatClass)
{
jobject jLockStats = NULL;
jobject jNoLocks;
jobject jWaitingForLock;
jobject jHeldLock;
// Allocate the sub-objects that are part of the lock statisitcs object.
if ((jNoLocks = NewCountTimeStat( pEnv, &pLockStats->NoLocks,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
if ((jWaitingForLock = NewCountTimeStat( pEnv, &pLockStats->WaitingForLock,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
if ((jHeldLock = NewCountTimeStat( pEnv, &pLockStats->HeldLock,
jCountTimeStatClass)) == NULL)
{
goto Exit;
}
// Allocate and populate the lock statistics object.
if ((jLockStats = pEnv->AllocObject( jLockStatsClass)) == NULL)
{
goto Exit;
}
pEnv->SetObjectField( jLockStats, fid_LockStats_noLocks,
jNoLocks);
pEnv->SetObjectField( jLockStats, fid_LockStats_waitingForLock,
jWaitingForLock);
pEnv->SetObjectField( jLockStats, fid_LockStats_heldLock,
jHeldLock);
Exit:
return( jLockStats);
}
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC jobject NewDbStats(
JNIEnv * pEnv,
XFLM_DB_STATS * pDbStats,
jclass jDbStatsClass,
jclass jRTransStatsClass,
jclass jUTransStatsClass,
jclass jLFileStatsClass,
jclass jBlockIOStatsClass,
jclass jDiskIOStatClass,
jclass jCountTimeStatClass,
jclass jLockStatsClass)
{
jobject jDbStats = NULL;
jstring jDbName;
jobject jRTransStats;
jobject jUTransStats;
jobjectArray jLFileStatsArray;
jobject jLfhBlockStats;
jobject jAvailBlockStats;
jobject jDbHdrWrites;
jobject jLogBlockWrites;
jobject jLogBlockRestores;
jobject jLogBlockReads;
jobject jLockStats;
// Allocate all of the sub-objects that are part of the database statistics
// object.
if ((jDbName = pEnv->NewStringUTF( pDbStats->pszDbName)) == NULL)
{
goto Exit;
}
if ((jRTransStats = NewRTransStats( pEnv, &pDbStats->ReadTransStats,
jRTransStatsClass, jCountTimeStatClass)) == NULL)
{
goto Exit;
}
if ((jUTransStats = NewUTransStats( pEnv, &pDbStats->UpdateTransStats,
jUTransStatsClass, jCountTimeStatClass)) == NULL)
{
goto Exit;
}
if ((jLfhBlockStats = NewBlockIOStats( pEnv, &pDbStats->LFHBlockStats,
jBlockIOStatsClass, jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jAvailBlockStats = NewBlockIOStats( pEnv, &pDbStats->AvailBlockStats,
jBlockIOStatsClass, jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jDbHdrWrites = NewDiskIOStat( pEnv, &pDbStats->DbHdrWrites,
jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jLogBlockWrites = NewDiskIOStat( pEnv, &pDbStats->LogBlockWrites,
jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jLogBlockRestores = NewDiskIOStat( pEnv, &pDbStats->LogBlockRestores,
jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jLogBlockReads = NewDiskIOStat( pEnv, &pDbStats->LogBlockReads,
jDiskIOStatClass)) == NULL)
{
goto Exit;
}
if ((jLockStats = NewLockStats( pEnv, &pDbStats->LockStats,
jLockStatsClass, jCountTimeStatClass)) == NULL)
{
goto Exit;
}
// Get a logical file array.
if (!pDbStats->uiNumLFileStats)
{
jLFileStatsArray = NULL;
}
else
{
jobject jLFileStats;
FLMUINT uiLoop;
XFLM_LFILE_STATS * pLFileStats;
if ((jLFileStatsArray = pEnv->NewObjectArray( (jsize)pDbStats->uiNumLFileStats,
jLFileStatsClass, NULL)) == NULL)
{
goto Exit;
}
// Populate the LFileStats array
for (uiLoop = 0, pLFileStats = pDbStats->pLFileStats;
uiLoop < pDbStats->uiNumLFileStats;
uiLoop++, pLFileStats++)
{
// Get an LFile statistics object.
if ((jLFileStats = NewLFileStats( pEnv, pLFileStats, jLFileStatsClass,
jBlockIOStatsClass, jDiskIOStatClass)) == NULL)
{
goto Exit;
}
// Put the LFile statistics object into the array of
// LFile statistics objects.
pEnv->SetObjectArrayElement( jLFileStatsArray, (jsize)uiLoop,
jLFileStats);
}
}
// Allocate and populate the database statistics object
if ((jDbStats = pEnv->AllocObject( jDbStatsClass)) == NULL)
{
goto Exit;
}
pEnv->SetObjectField( jDbStats, fid_DbStats_sDbName,
jDbName);
pEnv->SetObjectField( jDbStats, fid_DbStats_readTransStats,
jRTransStats);
pEnv->SetObjectField( jDbStats, fid_DbStats_updateTransStats,
jUTransStats);
pEnv->SetObjectField( jDbStats, fid_DbStats_lfileStats,
jLFileStatsArray);
pEnv->SetObjectField( jDbStats, fid_DbStats_lfhBlockStats,
jLfhBlockStats);
pEnv->SetObjectField( jDbStats, fid_DbStats_availBlockStats,
jAvailBlockStats);
pEnv->SetObjectField( jDbStats, fid_DbStats_dbHdrWrites,
jDbHdrWrites);
pEnv->SetObjectField( jDbStats, fid_DbStats_logBlockWrites,
jLogBlockWrites);
pEnv->SetObjectField( jDbStats, fid_DbStats_logBlockRestores,
jLogBlockRestores);
pEnv->SetObjectField( jDbStats, fid_DbStats_logBlockReads,
jLogBlockReads);
pEnv->SetIntField( jDbStats, fid_DbStats_iLogBlockChkErrs,
(jint)pDbStats->uiLogBlockChkErrs);
pEnv->SetIntField( jDbStats, fid_DbStats_iReadErrors,
(jint)pDbStats->uiReadErrors);
pEnv->SetIntField( jDbStats, fid_DbStats_iWriteErrors,
(jint)pDbStats->uiWriteErrors);
pEnv->SetObjectField( jDbStats, fid_DbStats_lockStats,
jLockStats);
Exit:
return( jDbStats);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jobject JNICALL Java_xflaim_DbSystem__1getStats(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis)
{
RCODE rc = NE_XFLM_OK;
XFLM_STATS stats;
jclass jStatsClass;
jclass jDbStatsClass;
jclass jRTransStatsClass;
jclass jUTransStatsClass;
jclass jLFileStatsClass;
jclass jBlockIOStatsClass;
jclass jDiskIOStatClass;
jclass jCountTimeStatClass;
jclass jLockStatsClass;
jobject jStats = NULL;
jobjectArray jDbStatsArray;
// Get the statistics.
f_memset( &stats, 0, sizeof( XFLM_STATS));
if (RC_BAD( rc = THIS_DBSYS()->getStats( &stats)))
{
ThrowError( rc, pEnv);
goto Exit;
}
// Find all of the needed classes that will be used to populate the
// statistics object.
if ((jStatsClass = pEnv->FindClass( "xflaim/Stats")) == NULL)
{
goto Exit;
}
if ((jDbStatsClass = pEnv->FindClass( "xflaim/DbStats")) == NULL)
{
goto Exit;
}
if ((jRTransStatsClass = pEnv->FindClass( "xflaim/RTransStats")) == NULL)
{
goto Exit;
}
if ((jUTransStatsClass = pEnv->FindClass( "xflaim/UTransStats")) == NULL)
{
goto Exit;
}
if ((jLFileStatsClass = pEnv->FindClass( "xflaim/LFileStats")) == NULL)
{
goto Exit;
}
if ((jBlockIOStatsClass = pEnv->FindClass( "xflaim/BlockIOStats")) == NULL)
{
goto Exit;
}
if ((jDiskIOStatClass = pEnv->FindClass( "xflaim/DiskIOStat")) == NULL)
{
goto Exit;
}
if ((jCountTimeStatClass = pEnv->FindClass( "xflaim/CountTimeStat")) == NULL)
{
goto Exit;
}
if ((jLockStatsClass = pEnv->FindClass( "xflaim/LockStats")) == NULL)
{
goto Exit;
}
// Allocate and populate an array of database statistics objects.
if (!stats.uiNumDbStats)
{
jDbStatsArray = NULL;
}
else
{
jobject jDbStats;
FLMUINT uiLoop;
XFLM_DB_STATS * pDbStats;
if ((jDbStatsArray = pEnv->NewObjectArray( (jsize)stats.uiNumDbStats,
jDbStatsClass, NULL)) == NULL)
{
goto Exit;
}
// Populate the DbStats array
for (uiLoop = 0, pDbStats = stats.pDbStats;
uiLoop < stats.uiNumDbStats;
uiLoop++, pDbStats++)
{
// Allocate a database statistics object.
if ((jDbStats = NewDbStats( pEnv, pDbStats, jDbStatsClass, jRTransStatsClass,
jUTransStatsClass, jLFileStatsClass, jBlockIOStatsClass,
jDiskIOStatClass, jCountTimeStatClass, jLockStatsClass)) == NULL)
{
goto Exit;
}
// Put the database statistics object into the array of
// database statistics objects.
pEnv->SetObjectArrayElement( jDbStatsArray, (jsize)uiLoop, jDbStats);
}
}
// Allocate and populate the statistics object
if ((jStats = pEnv->AllocObject( jStatsClass)) == NULL)
{
goto Exit;
}
pEnv->SetObjectField( jStats, fid_Stats_dbStats, jDbStatsArray);
pEnv->SetIntField( jStats, fid_Stats_iStartTime, (jint)stats.uiStartTime);
pEnv->SetIntField( jStats, fid_Stats_iStopTime, (jint)stats.uiStopTime);
Exit:
THIS_DBSYS()->freeStats( &stats);
return( jStats);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setTempDir(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sPath)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucPath [F_PATH_MAX_SIZE];
F_DynaBuf pathBuf( ucPath, sizeof( ucPath));
if (RC_BAD( rc = getUTF8String( pEnv, sPath, &pathBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->setTempDir( (const char *)pathBuf.getBufferPtr())))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jstring JNICALL Java_xflaim_DbSystem__1getTempDir(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis)
{
RCODE rc = NE_XFLM_OK;
char szPath [F_PATH_MAX_SIZE];
jstring jPath = NULL;
if (RC_BAD( rc = THIS_DBSYS()->setTempDir( szPath)))
{
ThrowError( rc, pEnv);
goto Exit;
}
jPath = pEnv->NewStringUTF( szPath);
Exit:
return( jPath);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setCheckpointInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jint iSeconds)
{
THIS_DBSYS()->setCheckpointInterval( (FLMUINT)iSeconds);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getCheckpointInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( (jint)THIS_DBSYS()->getCheckpointInterval());
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setCacheAdjustInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jint iSeconds)
{
THIS_DBSYS()->setCacheAdjustInterval( (FLMUINT)iSeconds);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getCacheAdjustInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( (jint)THIS_DBSYS()->getCacheAdjustInterval());
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setCacheCleanupInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jint iSeconds)
{
THIS_DBSYS()->setCacheCleanupInterval( (FLMUINT)iSeconds);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getCacheCleanupInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( (jint)THIS_DBSYS()->getCacheCleanupInterval());
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setUnusedCleanupInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jint iSeconds)
{
THIS_DBSYS()->setUnusedCleanupInterval( (FLMUINT)iSeconds);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getUnusedCleanupInterval(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( (jint)THIS_DBSYS()->getUnusedCleanupInterval());
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setMaxUnusedTime(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jint iSeconds)
{
THIS_DBSYS()->setMaxUnusedTime( (FLMUINT)iSeconds);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getMaxUnusedTime(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( (jint)THIS_DBSYS()->getMaxUnusedTime());
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1deactivateOpenDb(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbFileName,
jstring sDataDir)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucDbFileName [F_PATH_MAX_SIZE];
F_DynaBuf dbFileNameBuf( ucDbFileName, sizeof( ucDbFileName));
FLMBYTE ucDataDir [F_PATH_MAX_SIZE];
F_DynaBuf dataDirBuf( ucDataDir, sizeof( ucDataDir));
// Get the strings.
if (RC_BAD( rc = getUTF8String( pEnv, sDbFileName, &dbFileNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sDataDir, &dataDirBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
THIS_DBSYS()->deactivateOpenDb( (const char *)dbFileNameBuf.getBufferPtr(),
(const char *)(dataDirBuf.getDataLength() > 1
? (const char *)dataDirBuf.getBufferPtr()
: (const char *)NULL));
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setQuerySaveMax(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jint iMaxToSave)
{
THIS_DBSYS()->setQuerySaveMax( (FLMUINT)iMaxToSave);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getQuerySaveMax(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
return( (jint)THIS_DBSYS()->getQuerySaveMax());
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1setDirtyCacheLimits(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jint iMaxDirty,
jint iLowDirty)
{
THIS_DBSYS()->setDirtyCacheLimits( (FLMUINT)iMaxDirty, (FLMUINT)iLowDirty);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getMaxDirtyCacheLimit(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
FLMUINT uiMaxDirty;
FLMUINT uiLowDirty;
THIS_DBSYS()->getDirtyCacheLimits( &uiMaxDirty, &uiLowDirty);
return( (jint)uiMaxDirty);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1getLowDirtyCacheLimit(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis)
{
FLMUINT uiMaxDirty;
FLMUINT uiLowDirty;
THIS_DBSYS()->getDirtyCacheLimits( &uiMaxDirty, &uiLowDirty);
return( (jint)uiLowDirty);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jint JNICALL Java_xflaim_DbSystem__1compareStrings(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sLeftString,
jboolean bLeftWild,
jstring sRightString,
jboolean bRightWild,
jint iCompareRules,
jint iLanguage)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucLeftString [100];
F_DynaBuf leftStringBuf( ucLeftString, sizeof( ucLeftString));
FLMBYTE ucRightString [100];
F_DynaBuf rightStringBuf( ucRightString, sizeof( ucRightString));
FLMINT iResult = 0;
// Get the strings.
if (RC_BAD( rc = getUTF8String( pEnv, sLeftString, &leftStringBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sRightString, &rightStringBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->compareUTF8Strings(
(const FLMBYTE *)leftStringBuf.getBufferPtr(),
leftStringBuf.getDataLength() - 1,
bLeftWild ? TRUE : FALSE,
(const FLMBYTE *)rightStringBuf.getBufferPtr(),
rightStringBuf.getDataLength() - 1,
bRightWild ? TRUE : FALSE,
(FLMUINT)iCompareRules, (FLMUINT)iLanguage, &iResult)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jint)iResult);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jboolean JNICALL Java_xflaim_DbSystem__1hasSubStr(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sString,
jstring sSubString,
jint iCompareRules,
jint iLanguage)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucString [100];
F_DynaBuf stringBuf( ucString, sizeof( ucString));
FLMBYTE ucSubString [100];
F_DynaBuf subStringBuf( ucSubString, sizeof( ucSubString));
FLMBOOL bExists = FALSE;
// Get the strings.
if (RC_BAD( rc = getUTF8String( pEnv, sString, &stringBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = getUTF8String( pEnv, sSubString, &subStringBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->utf8IsSubStr(
(const FLMBYTE *)stringBuf.getBufferPtr(),
(const FLMBYTE *)subStringBuf.getBufferPtr(),
(FLMUINT)iCompareRules, (FLMUINT)iLanguage, &bExists)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return( (jboolean)(bExists ? JNI_TRUE : JNI_FALSE));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jboolean JNICALL Java_xflaim_DbSystem__1uniIsUpper(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jchar uzChar)
{
return( THIS_DBSYS()->uniIsUpper( (FLMUNICODE)uzChar) ? JNI_TRUE : JNI_FALSE);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jboolean JNICALL Java_xflaim_DbSystem__1uniIsLower(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jchar uzChar)
{
return( THIS_DBSYS()->uniIsLower( (FLMUNICODE)uzChar) ? JNI_TRUE : JNI_FALSE);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jboolean JNICALL Java_xflaim_DbSystem__1uniIsAlpha(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jchar uzChar)
{
return( THIS_DBSYS()->uniIsAlpha( (FLMUNICODE)uzChar) ? JNI_TRUE : JNI_FALSE);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jboolean JNICALL Java_xflaim_DbSystem__1uniIsDecimalDigit(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jchar uzChar)
{
return( THIS_DBSYS()->uniIsDecimalDigit( (FLMUNICODE)uzChar) ? JNI_TRUE : JNI_FALSE);
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT jchar JNICALL Java_xflaim_DbSystem__1uniToLower(
JNIEnv *, // pEnv,
jobject, // obj,
jlong lThis,
jchar uzChar)
{
return( (jchar)THIS_DBSYS()->uniToLower( (FLMUNICODE)uzChar));
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1waitToClose(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jstring sDbFileName)
{
RCODE rc = NE_XFLM_OK;
FLMBYTE ucDbFileName [F_PATH_MAX_SIZE];
F_DynaBuf dbFileNameBuf( ucDbFileName, sizeof( ucDbFileName));
// Get the strings.
if (RC_BAD( rc = getUTF8String( pEnv, sDbFileName, &dbFileNameBuf)))
{
ThrowError( rc, pEnv);
goto Exit;
}
if (RC_BAD( rc = THIS_DBSYS()->waitToClose(
(const char *)dbFileNameBuf.getBufferPtr())))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}
/****************************************************************************
Desc:
****************************************************************************/
JNIEXPORT void JNICALL Java_xflaim_DbSystem__1clearCache(
JNIEnv * pEnv,
jobject, // obj,
jlong lThis,
jlong lDbWithUpdateTrans)
{
RCODE rc = NE_XFLM_OK;
IF_Db * pDbWithUpdateTrans = (IF_Db *)((FLMUINT)lDbWithUpdateTrans);
if (RC_BAD( rc = THIS_DBSYS()->clearCache( pDbWithUpdateTrans)))
{
ThrowError( rc, pEnv);
goto Exit;
}
Exit:
return;
}