gecko-dev/db/libdb_java/java_Db.cpp

201 строка
5.2 KiB
C++

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 1997, 1998
* Sleepycat Software. All rights reserved.
*/
#include "config.h"
#ifndef lint
static const char sccsid[] = "@(#)java_Db.cpp 10.4 (Sleepycat) 4/10/98";
#endif /* not lint */
#include <jni.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include "db.h"
#include "java_util.h"
#include "com_sleepycat_db_Db.h"
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_close
(JNIEnv *jnienv, /*Db*/ jobject jthis, jint flags)
{
int err;
DB *db = get_DB(jnienv, jthis);
if (!verify_non_null(jnienv, db))
return;
err = db->close(db, flags);
if (verify_return(jnienv, err))
{
set_private_info(jnienv, name_DB, jthis, 0);
}
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_cursor
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid)
{
int err;
DB *db = get_DB(jnienv, jthis);
DB_TXN *dbtxnid = get_DB_TXN(jnienv, txnid);
if (!verify_non_null(jnienv, db))
return NULL;
DBC *dbc;
err = db->cursor(db, dbtxnid, &dbc);
verify_return(jnienv, err);
return get_Dbc(jnienv, dbc);
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_del
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,
/*Dbt*/ jobject key, jint dbflags)
{
int err;
DB *db = get_DB(jnienv, jthis);
if (!verify_non_null(jnienv, db))
return;
DB_TXN *dbtxnid = get_DB_TXN(jnienv, txnid);
LockedDBT dbkey(jnienv, key, 0);
if (dbkey.has_error())
return;
err = db->del(db, dbtxnid, dbkey.dbt, dbflags);
verify_return(jnienv, err);
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_fd
(JNIEnv *jnienv, /*Db*/ jobject jthis)
{
int err;
int return_value = 0;
DB *db = get_DB(jnienv, jthis);
if (!verify_non_null(jnienv, db))
return 0;
err = db->fd(db, &return_value);
verify_return(jnienv, err);
return return_value;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,
/*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
{
int err;
DB *db = get_DB(jnienv, jthis);
DB_TXN *dbtxnid = get_DB_TXN(jnienv, txnid);
LockedDBT dbkey(jnienv, key, 0);
if (dbkey.has_error())
return 0;
LockedDBT dbdata(jnienv, data, 1);
if (dbdata.has_error())
return 0;
if (!verify_non_null(jnienv, db))
return 0;
err = db->get(db, dbtxnid, dbkey.dbt, dbdata.dbt, flags);
if (err != 0 && err != DB_NOTFOUND) {
verify_return(jnienv, err);
}
return err;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_put
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,
/*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
{
int err;
DB *db = get_DB(jnienv, jthis);
DB_TXN *dbtxnid = get_DB_TXN(jnienv, txnid);
LockedDBT dbkey(jnienv, key, 0);
if (dbkey.has_error())
return 0;
LockedDBT dbdata(jnienv, data, 0);
if (dbdata.has_error())
return 0;
if (!verify_non_null(jnienv, db))
return 0;
err = db->put(db, dbtxnid, dbkey.dbt, dbdata.dbt, flags);
if (err != 0 && err != DB_KEYEXIST) {
verify_return(jnienv, err);
}
return err;
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_stat
(JNIEnv *jnienv, jobject jthis, jint flags)
{
int err;
DB *db = get_DB(jnienv, jthis);
DB_BTREE_STAT *statp = 0;
if (!verify_non_null(jnienv, db))
return 0;
err = db->stat(db, &statp, 0, flags);
verify_return(jnienv, err);
return get_DbBtreeStat(jnienv, statp);
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_sync
(JNIEnv *jnienv, /*Db*/ jobject jthis, jint flags)
{
int err;
DB *db = get_DB(jnienv, jthis);
if (!verify_non_null(jnienv, db))
return;
err = db->sync(db, flags);
verify_return(jnienv, err);
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get_1type
(JNIEnv *jnienv, /*Db*/ jobject jthis)
{
DB *db = get_DB(jnienv, jthis);
if (!verify_non_null(jnienv, db))
return 0;
return (jint)db->type;
}
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_open
(JNIEnv *jnienv, /*static Db*/ jclass /*jthis_class*/,
jstring fname, jint type, jint flags, jint mode,
/*DbEnv*/ jobject dbenv, /*DbInfo*/ jobject info)
{
int err;
jobject retval = NULL;
DB *db;
DB_ENV *db_dbenv = get_DB_ENV(jnienv, dbenv);
DB_INFO *dbinfo = get_DB_INFO(jnienv, info);
LockedString dbfname(jnienv, fname);
if (verify_non_null(jnienv, db_dbenv)) {
flags |= DB_THREAD;
err = db_open(dbfname.string, (DBTYPE)type, flags, mode,
db_dbenv, dbinfo, &db);
if (verify_return(jnienv, err)) {
db->db_malloc = java_db_malloc;
retval = create_default_object(jnienv, name_DB);
set_private_info(jnienv, name_DB, retval, db);
}
}
return retval;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_finalize
(JNIEnv *jnienv, jobject jthis)
{
DB *db = get_DB(jnienv, jthis);
if (db) {
// Free any info related to DB here.
// Unfortunately, we cannot really autoclose because
// finalize is not called in any particular order
}
}