1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
/*-
* 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_Dbc.cpp 10.8 (Sleepycat) 10/28/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_Dbc.h"
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_close
(JNIEnv *jnienv, jobject jthis)
{
int err;
DBC *dbc = get_DBC(jnienv, jthis);
if (!verify_non_null(jnienv, dbc))
return;
err = dbc->c_close(dbc);
if (verify_return(jnienv, err))
{
set_private_info(jnienv, name_DBC, jthis, 0);
}
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_del
(JNIEnv *jnienv, jobject jthis, jint flags)
{
int err;
DBC *dbc = get_DBC(jnienv, jthis);
if (!verify_non_null(jnienv, dbc))
return 0;
err = dbc->c_del(dbc, flags);
if (err != DB_KEYEMPTY) {
verify_return(jnienv, err);
}
return err;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_get
(JNIEnv *jnienv, jobject jthis,
/*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
{
// Depending on flags, the user may be supplying the key,
// or else we may have to retrieve it.
OpKind opkind = outOp;
int op_flags = flags & DB_OPFLAGS_MASK;
if (op_flags == DB_SET || op_flags == DB_SET_RECNO) {
opkind = inOp;
}
else if (op_flags == DB_SET_RANGE) {
opkind = inOutOp;
}
int err;
DBC *dbc = get_DBC(jnienv, jthis);
LockedDBT dbkey(jnienv, key, opkind);
if (dbkey.has_error())
return 0;
LockedDBT dbdata(jnienv, data, outOp);
if (dbdata.has_error())
return 0;
if (!verify_non_null(jnienv, dbc))
return -1;
err = dbc->c_get(dbc, dbkey.dbt, dbdata.dbt, flags);
if (err != DB_NOTFOUND) {
verify_return(jnienv, err);
}
return err;
}
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_put
(JNIEnv *jnienv, jobject jthis,
/*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
{
int err;
DBC *dbc = get_DBC(jnienv, jthis);
LockedDBT dbkey(jnienv, key, inOp);
if (dbkey.has_error())
return 0;
LockedDBT dbdata(jnienv, data, inOp);
if (dbdata.has_error())
return 0;
if (!verify_non_null(jnienv, dbc))
return 0;
err = dbc->c_put(dbc, dbkey.dbt, dbdata.dbt, flags);
if (err != DB_KEYEXIST) {
verify_return(jnienv, err);
}
return err;
}
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_finalize
(JNIEnv *jnienv, jobject jthis)
{
DBC *dbc = get_DBC(jnienv, jthis);
if (dbc) {
// Free any data related to DBC here
}
}
|