git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@791 0109f412-320b-0410-ab79-c3e0c5ffbbe6
3700 lines
100 KiB
C++
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, ¶mNameBuf)))
|
|
{
|
|
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;
|
|
}
|
|
|