mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Import changeset
This commit is contained in:
132
bdb/libdb_java/checkapi.prl
Normal file
132
bdb/libdb_java/checkapi.prl
Normal file
@ -0,0 +1,132 @@
|
||||
#
|
||||
# Released to public domain by Donald Anderson dda@world.std.com
|
||||
# No warranties.
|
||||
#
|
||||
# Perl script to check for matching of JNI interfaces to implementation.
|
||||
# We check all .cpp arguments and .h arguments and make sure that for
|
||||
# each .h declaration (marked by JNIEXPORT keyword), there is a .cpp
|
||||
# definition for the same function (also marked by JNIEXPORT keyword),
|
||||
# and vice versa. Definitions and declarations are determined solely
|
||||
# by whether they are in a .h or .cpp file - we don't do any further
|
||||
# analysis.
|
||||
#
|
||||
# Some additions made to help with Berkeley DB sources:
|
||||
#
|
||||
# Berkeley DB Java sources use JAVADB_*_ACCESS #defines
|
||||
# to quickly define routine access functions.
|
||||
|
||||
foreach $file (<@ARGV>) { # glob allows direct use from Win* makefiles
|
||||
open (FILE, $file) || die "$file: cannot open\n";
|
||||
$dot_h = 0;
|
||||
if ($file =~ /.*[hH]$/) {
|
||||
$dot_h = 1;
|
||||
}
|
||||
$in_def = 0;
|
||||
nextline:
|
||||
while (<FILE>) {
|
||||
chop;
|
||||
if (/JNIEXPORT/ || /^JAVADB_.*_ACCESS/) {
|
||||
$in_def = 1;
|
||||
$def = "";
|
||||
}
|
||||
if ($in_def == 1) {
|
||||
$def .= $_;
|
||||
}
|
||||
if (/\)/) {
|
||||
$line = "";
|
||||
$in_def = 0;
|
||||
if ($def eq "") {
|
||||
next nextline;
|
||||
}
|
||||
$_ = $def;
|
||||
# remove comments
|
||||
s@/\*[^*]*\*/@@g;
|
||||
s@[ ][ ]*@ @g;
|
||||
s@JNIEnv *\* *@JNIEnv @g;
|
||||
s@([,*()]) @\1@g;
|
||||
s@ ([,*()])@\1@g;
|
||||
|
||||
s/JAVADB_WO_ACCESS_METHOD/JAVADB_WO_ACCESS/;
|
||||
|
||||
if (/^JAVADB_.*_ACCESS/) {
|
||||
s@ *@ @g;
|
||||
s@_ACCESS_STRING\(([^,]*),@_ACCESS(\1,jstring,@;
|
||||
s@_ACCESS_BEFORE_APPINIT@_ACCESS@;
|
||||
s@_ACCESS\(@,normal,@;
|
||||
s@JAVADB_@@;
|
||||
s@\)@,@;
|
||||
@vars = split(/,/);
|
||||
$get = 0;
|
||||
$set = 0;
|
||||
if (@vars[0] eq "RW") {
|
||||
$get = 1;
|
||||
$set = 1;
|
||||
}
|
||||
if (@vars[0] eq "RO") {
|
||||
$get = 1;
|
||||
}
|
||||
if (@vars[0] eq "WO") {
|
||||
$set = 1;
|
||||
}
|
||||
if ($get == 0 && $set == 0) {
|
||||
print "Invalid use of JAVADB_ macro\n";
|
||||
}
|
||||
if ($set == 1) {
|
||||
$line = "JNIEXPORT void JNICALL Java_com_sleepycat_db_@vars[2]_set_1@vars[4](JNIEnv,jobject,@vars[3])";
|
||||
}
|
||||
if ($get == 1) {
|
||||
$line2 = "JNIEXPORT @vars[3] JNICALL Java_com_sleepycat_db_@vars[2]_get_1@vars[4](JNIEnv,jobject)";
|
||||
}
|
||||
}
|
||||
else {
|
||||
s@([,(][a-zA-Z0-9_]*) [a-zA-Z0-9_]*@\1@g;
|
||||
s@;$@@g;
|
||||
$line = $_;
|
||||
}
|
||||
|
||||
$def = "";
|
||||
|
||||
if ($line ne "") {
|
||||
if ($lines{$line} eq "") {
|
||||
$lines{$line} = 0;
|
||||
}
|
||||
if ($dot_h == 1) {
|
||||
$lines{$line} += 1;
|
||||
}
|
||||
else {
|
||||
$lines{$line} -= 1;
|
||||
}
|
||||
$line = "";
|
||||
}
|
||||
if ($line2 ne "") {
|
||||
if ($lines{$line2} eq "") {
|
||||
$lines{$line2} = 0;
|
||||
}
|
||||
if ($dot_h == 1) {
|
||||
$lines{$line2} += 1;
|
||||
}
|
||||
else {
|
||||
$lines{$line2} -= 1;
|
||||
}
|
||||
$line2 = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
close (FILE);
|
||||
}
|
||||
|
||||
$status = 0;
|
||||
foreach $key (sort keys %lines) {
|
||||
if ($lines{$key} != 0) {
|
||||
if ($lines{$key} > 0) {
|
||||
print "Missing .cpp implementation: $lines${key}\n";
|
||||
$status = 1;
|
||||
}
|
||||
else {
|
||||
print "Missing .h declaration: $lines${key}\n";
|
||||
$status = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
exit ($status);
|
349
bdb/libdb_java/com_sleepycat_db_Db.h
Normal file
349
bdb/libdb_java/com_sleepycat_db_Db.h
Normal file
@ -0,0 +1,349 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_sleepycat_db_Db */
|
||||
|
||||
#ifndef _Included_com_sleepycat_db_Db
|
||||
#define _Included_com_sleepycat_db_Db
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: _init
|
||||
* Signature: (Lcom/sleepycat/db/DbEnv;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1init
|
||||
(JNIEnv *, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: _notify_internal
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1notify_1internal
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: _close
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db__1close
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: cursor
|
||||
* Signature: (Lcom/sleepycat/db/DbTxn;I)Lcom/sleepycat/db/Dbc;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_cursor
|
||||
(JNIEnv *, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: del
|
||||
* Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_del
|
||||
(JNIEnv *, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: err
|
||||
* Signature: (ILjava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_err
|
||||
(JNIEnv *, jobject, jint, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: errx
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_errx
|
||||
(JNIEnv *, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: fd
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_fd
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: _finalize
|
||||
* Signature: (Lcom/sleepycat/db/DbErrcall;Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1finalize
|
||||
(JNIEnv *, jobject, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: get
|
||||
* Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get
|
||||
(JNIEnv *, jobject, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: get_byteswapped
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_Db_get_1byteswapped
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: get_type
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get_1type
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: join
|
||||
* Signature: ([Lcom/sleepycat/db/Dbc;I)Lcom/sleepycat/db/Dbc;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_join
|
||||
(JNIEnv *, jobject, jobjectArray, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: key_range
|
||||
* Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/DbKeyRange;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_key_1range
|
||||
(JNIEnv *, jobject, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: _open
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;III)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1open
|
||||
(JNIEnv *, jobject, jstring, jstring, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: put
|
||||
* Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_put
|
||||
(JNIEnv *, jobject, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: rename
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_rename
|
||||
(JNIEnv *, jobject, jstring, jstring, jstring, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: remove
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_remove
|
||||
(JNIEnv *, jobject, jstring, jstring, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: append_recno_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbAppendRecno;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_append_1recno_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: bt_compare_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbBtreeCompare;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1compare_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_bt_maxkey
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1bt_1maxkey
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_bt_minkey
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1bt_1minkey
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: bt_prefix_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbBtreePrefix;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1prefix_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_cachesize
|
||||
* Signature: (III)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1cachesize
|
||||
(JNIEnv *, jobject, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: dup_compare_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbDupCompare;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_dup_1compare_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: feedback_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbFeedback;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_feedback_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_flags
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1flags
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_h_ffactor
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1h_1ffactor
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: hash_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbHash;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_hash_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_h_nelem
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1h_1nelem
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_lorder
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1lorder
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_pagesize
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1pagesize
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_re_delim
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1delim
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_re_len
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1len
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_re_pad
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1pad
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_re_source
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1source
|
||||
(JNIEnv *, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: set_q_extentsize
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1q_1extentsize
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: stat
|
||||
* Signature: (I)Ljava/lang/Object;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_stat
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: sync
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_sync
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: upgrade
|
||||
* Signature: (Ljava/lang/String;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_upgrade
|
||||
(JNIEnv *, jobject, jstring, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: verify
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/io/OutputStream;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_verify
|
||||
(JNIEnv *, jobject, jstring, jstring, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Db
|
||||
* Method: one_time_init
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_one_1time_1init
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
509
bdb/libdb_java/com_sleepycat_db_DbEnv.h
Normal file
509
bdb/libdb_java/com_sleepycat_db_DbEnv.h
Normal file
@ -0,0 +1,509 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_sleepycat_db_DbEnv */
|
||||
|
||||
#ifndef _Included_com_sleepycat_db_DbEnv
|
||||
#define _Included_com_sleepycat_db_DbEnv
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _close
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1close
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: err
|
||||
* Signature: (ILjava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_err
|
||||
(JNIEnv *, jobject, jint, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: errx
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_errx
|
||||
(JNIEnv *, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _finalize
|
||||
* Signature: (Lcom/sleepycat/db/DbErrcall;Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1finalize
|
||||
(JNIEnv *, jobject, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _init
|
||||
* Signature: (Lcom/sleepycat/db/DbErrcall;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init
|
||||
(JNIEnv *, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _init_using_db
|
||||
* Signature: (Lcom/sleepycat/db/DbErrcall;Lcom/sleepycat/db/Db;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init_1using_1db
|
||||
(JNIEnv *, jobject, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _notify_db_close
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1notify_1db_1close
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: open
|
||||
* Signature: (Ljava/lang/String;II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_open
|
||||
(JNIEnv *, jobject, jstring, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: remove
|
||||
* Signature: (Ljava/lang/String;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_remove
|
||||
(JNIEnv *, jobject, jstring, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_cachesize
|
||||
* Signature: (III)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1cachesize
|
||||
(JNIEnv *, jobject, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _set_errcall
|
||||
* Signature: (Lcom/sleepycat/db/DbErrcall;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errcall
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _set_errpfx
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errpfx
|
||||
(JNIEnv *, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: feedback_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbFeedback;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_feedback_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_verbose
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1verbose
|
||||
(JNIEnv *, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_data_dir
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1data_1dir
|
||||
(JNIEnv *, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lg_bsize
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lg_1bsize
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lg_dir
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lg_1dir
|
||||
(JNIEnv *, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lg_max
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lg_1max
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lk_conflicts
|
||||
* Signature: ([[B)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1conflicts
|
||||
(JNIEnv *, jobject, jobjectArray);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lk_detect
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1detect
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lk_max
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lk_max_lockers
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max_1lockers
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lk_max_locks
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max_1locks
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_lk_max_objects
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max_1objects
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_mp_mmapsize
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1mp_1mmapsize
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_mutexlocks
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1mutexlocks
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_pageyield
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1pageyield
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_panicstate
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1panicstate
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: recovery_init_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbRecoveryInit;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_recovery_1init_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_region_init
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1region_1init
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_flags
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1flags
|
||||
(JNIEnv *, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_server
|
||||
* Signature: (Ljava/lang/String;JJI)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1server
|
||||
(JNIEnv *, jobject, jstring, jlong, jlong, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_shm_key
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1shm_1key
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_tas_spins
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1tas_1spins
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_tmp_dir
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1tmp_1dir
|
||||
(JNIEnv *, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: tx_recover_changed
|
||||
* Signature: (Lcom/sleepycat/db/DbTxnRecover;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_tx_1recover_1changed
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: set_tx_max
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1tx_1max
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: _set_tx_timestamp
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1tx_1timestamp
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: get_version_major
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1major
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: get_version_minor
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1minor
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: get_version_patch
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1patch
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: get_version_string
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1string
|
||||
(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: strerror
|
||||
* Signature: (I)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_strerror
|
||||
(JNIEnv *, jclass, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: lock_detect
|
||||
* Signature: (II)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1detect
|
||||
(JNIEnv *, jobject, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: lock_get
|
||||
* Signature: (IILcom/sleepycat/db/Dbt;I)Lcom/sleepycat/db/DbLock;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1get
|
||||
(JNIEnv *, jobject, jint, jint, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: lock_id
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1id
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: lock_stat
|
||||
* Signature: ()Lcom/sleepycat/db/DbLockStat;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1stat
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_archive
|
||||
* Signature: (I)[Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_log_1archive
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_compare
|
||||
* Signature: (Lcom/sleepycat/db/DbLsn;Lcom/sleepycat/db/DbLsn;)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_log_1compare
|
||||
(JNIEnv *, jclass, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_file
|
||||
* Signature: (Lcom/sleepycat/db/DbLsn;)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_log_1file
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_flush
|
||||
* Signature: (Lcom/sleepycat/db/DbLsn;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1flush
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_get
|
||||
* Signature: (Lcom/sleepycat/db/DbLsn;Lcom/sleepycat/db/Dbt;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1get
|
||||
(JNIEnv *, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_put
|
||||
* Signature: (Lcom/sleepycat/db/DbLsn;Lcom/sleepycat/db/Dbt;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1put
|
||||
(JNIEnv *, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_stat
|
||||
* Signature: ()Lcom/sleepycat/db/DbLogStat;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_log_1stat
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_register
|
||||
* Signature: (Lcom/sleepycat/db/Db;Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1register
|
||||
(JNIEnv *, jobject, jobject, jstring);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: log_unregister
|
||||
* Signature: (Lcom/sleepycat/db/Db;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1unregister
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: memp_stat
|
||||
* Signature: ()Lcom/sleepycat/db/DbMpoolStat;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_memp_1stat
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: memp_fstat
|
||||
* Signature: ()[Lcom/sleepycat/db/DbMpoolFStat;
|
||||
*/
|
||||
JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_memp_1fstat
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: memp_trickle
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_memp_1trickle
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: txn_begin
|
||||
* Signature: (Lcom/sleepycat/db/DbTxn;I)Lcom/sleepycat/db/DbTxn;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1begin
|
||||
(JNIEnv *, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: txn_checkpoint
|
||||
* Signature: (III)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_txn_1checkpoint
|
||||
(JNIEnv *, jobject, jint, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbEnv
|
||||
* Method: txn_stat
|
||||
* Signature: ()Lcom/sleepycat/db/DbTxnStat;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1stat
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
29
bdb/libdb_java/com_sleepycat_db_DbLock.h
Normal file
29
bdb/libdb_java/com_sleepycat_db_DbLock.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_sleepycat_db_DbLock */
|
||||
|
||||
#ifndef _Included_com_sleepycat_db_DbLock
|
||||
#define _Included_com_sleepycat_db_DbLock
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbLock
|
||||
* Method: finalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_finalize
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbLock
|
||||
* Method: put
|
||||
* Signature: (Lcom/sleepycat/db/DbEnv;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_put
|
||||
(JNIEnv *, jobject, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
29
bdb/libdb_java/com_sleepycat_db_DbLsn.h
Normal file
29
bdb/libdb_java/com_sleepycat_db_DbLsn.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_sleepycat_db_DbLsn */
|
||||
|
||||
#ifndef _Included_com_sleepycat_db_DbLsn
|
||||
#define _Included_com_sleepycat_db_DbLsn
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbLsn
|
||||
* Method: finalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_finalize
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbLsn
|
||||
* Method: init_lsn
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_init_1lsn
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
53
bdb/libdb_java/com_sleepycat_db_DbTxn.h
Normal file
53
bdb/libdb_java/com_sleepycat_db_DbTxn.h
Normal file
@ -0,0 +1,53 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_sleepycat_db_DbTxn */
|
||||
|
||||
#ifndef _Included_com_sleepycat_db_DbTxn
|
||||
#define _Included_com_sleepycat_db_DbTxn
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbTxn
|
||||
* Method: abort
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_abort
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbTxn
|
||||
* Method: commit
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_commit
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbTxn
|
||||
* Method: id
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbTxn_id
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbTxn
|
||||
* Method: prepare
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_prepare
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_DbTxn
|
||||
* Method: finalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_finalize
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
69
bdb/libdb_java/com_sleepycat_db_Dbc.h
Normal file
69
bdb/libdb_java/com_sleepycat_db_Dbc.h
Normal file
@ -0,0 +1,69 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_sleepycat_db_Dbc */
|
||||
|
||||
#ifndef _Included_com_sleepycat_db_Dbc
|
||||
#define _Included_com_sleepycat_db_Dbc
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbc
|
||||
* Method: close
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_close
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbc
|
||||
* Method: count
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_count
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbc
|
||||
* Method: del
|
||||
* Signature: (I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_del
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbc
|
||||
* Method: dup
|
||||
* Signature: (I)Lcom/sleepycat/db/Dbc;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Dbc_dup
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbc
|
||||
* Method: get
|
||||
* Signature: (Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_get
|
||||
(JNIEnv *, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbc
|
||||
* Method: put
|
||||
* Signature: (Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_put
|
||||
(JNIEnv *, jobject, jobject, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbc
|
||||
* Method: finalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_finalize
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
157
bdb/libdb_java/com_sleepycat_db_Dbt.h
Normal file
157
bdb/libdb_java/com_sleepycat_db_Dbt.h
Normal file
@ -0,0 +1,157 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_sleepycat_db_Dbt */
|
||||
|
||||
#ifndef _Included_com_sleepycat_db_Dbt
|
||||
#define _Included_com_sleepycat_db_Dbt
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: finalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_finalize
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_data
|
||||
* Signature: ()[B
|
||||
*/
|
||||
JNIEXPORT jbyteArray JNICALL Java_com_sleepycat_db_Dbt_get_1data
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: internal_set_data
|
||||
* Signature: ([B)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_internal_1set_1data
|
||||
(JNIEnv *, jobject, jbyteArray);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: set_offset
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1offset
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_offset
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1offset
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_size
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1size
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: set_size
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1size
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_ulen
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1ulen
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: set_ulen
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1ulen
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_dlen
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1dlen
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: set_dlen
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1dlen
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_doff
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1doff
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: set_doff
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1doff
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_flags
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1flags
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: set_flags
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1flags
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: set_recno_key_data
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1recno_1key_1data
|
||||
(JNIEnv *, jobject, jint);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: get_recno_key_data
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1recno_1key_1data
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: com_sleepycat_db_Dbt
|
||||
* Method: init
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_init
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
964
bdb/libdb_java/java_Db.c
Normal file
964
bdb/libdb_java/java_Db.c
Normal file
@ -0,0 +1,964 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_Db.c,v 11.34 2000/11/30 00:58:38 ubell Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <jni.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "db.h"
|
||||
#include "db_int.h"
|
||||
#include "db_page.h"
|
||||
#include "db_ext.h"
|
||||
#include "java_util.h"
|
||||
#include "com_sleepycat_db_Db.h"
|
||||
|
||||
/* This struct is used in Db.verify and its callback */
|
||||
struct verify_callback_struct {
|
||||
JNIEnv *env;
|
||||
jobject streamobj;
|
||||
jbyteArray bytes;
|
||||
int nbytes;
|
||||
jmethodID writemid;
|
||||
};
|
||||
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, flags, DB, flags)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, h_1ffactor, DB, h_ffactor)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, h_1nelem, DB, h_nelem)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, lorder, DB, lorder)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, re_1delim, DB, re_delim)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, re_1len, DB, re_len)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, re_1pad, DB, re_pad)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, q_1extentsize, DB, q_extentsize)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, bt_1maxkey, DB, bt_maxkey)
|
||||
JAVADB_WO_ACCESS_METHOD(Db, jint, bt_1minkey, DB, bt_minkey)
|
||||
|
||||
/* This only gets called once ever, at the beginning of execution
|
||||
* and can be used to initialize unchanging methodIds, fieldIds, etc.
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_one_1time_1init
|
||||
(JNIEnv *jnienv, /*Db.class*/ jclass jthisclass)
|
||||
{
|
||||
COMPQUIET(jnienv, NULL);
|
||||
COMPQUIET(jthisclass, NULL);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1init
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbEnv*/ jobject jdbenv, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
DB_ENV *dbenv;
|
||||
|
||||
dbenv = get_DB_ENV(jnienv, jdbenv);
|
||||
dbinfo = get_DB_JAVAINFO(jnienv, jthis);
|
||||
DB_ASSERT(dbinfo == NULL);
|
||||
|
||||
err = db_create(&db, dbenv, flags);
|
||||
if (verify_return(jnienv, err, 0)) {
|
||||
set_private_dbobj(jnienv, name_DB, jthis, db);
|
||||
dbinfo = dbji_construct(jnienv, flags);
|
||||
set_private_info(jnienv, name_DB, jthis, dbinfo);
|
||||
db->cj_internal = dbinfo;
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db__1close
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
dbinfo = get_DB_JAVAINFO(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (0);
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
|
||||
/* Null out the private data to indicate the DB is invalid.
|
||||
* We do this in advance to help guard against multithreading
|
||||
* issues.
|
||||
*/
|
||||
set_private_dbobj(jnienv, name_DB, jthis, 0);
|
||||
|
||||
err = db->close(db, flags);
|
||||
if (err != DB_INCOMPLETE)
|
||||
verify_return(jnienv, err, 0);
|
||||
dbji_dealloc(dbinfo, jnienv);
|
||||
|
||||
/* don't call JAVADB_API_END - db cannot be used */
|
||||
return (err);
|
||||
}
|
||||
|
||||
/* We are being notified that the parent DbEnv has closed.
|
||||
* Zero out the pointer to the DB, since it is no longer
|
||||
* valid, to prevent mistakes. The user will get a null
|
||||
* pointer exception if they try to use this Db again.
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1notify_1internal
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis)
|
||||
{
|
||||
set_private_dbobj(jnienv, name_DB, jthis, 0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_append_1recno_1changed
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbAppendRecno*/ jobject jcallback)
|
||||
{
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
dbinfo = (DB_JAVAINFO*)db->cj_internal;
|
||||
dbji_set_append_recno_object(dbinfo, jnienv, db, jcallback);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1compare_1changed
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbBtreeCompare*/ jobject jbtcompare)
|
||||
{
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
dbinfo = (DB_JAVAINFO*)db->cj_internal;
|
||||
dbji_set_bt_compare_object(dbinfo, jnienv, db, jbtcompare);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1prefix_1changed
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbBtreePrefix*/ jobject jbtprefix)
|
||||
{
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
dbinfo = (DB_JAVAINFO*)db->cj_internal;
|
||||
dbji_set_bt_prefix_object(dbinfo, jnienv, db, jbtprefix);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_cursor
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid, jint flags)
|
||||
{
|
||||
int err;
|
||||
DBC *dbc;
|
||||
DB *db = get_DB(jnienv, jthis);
|
||||
DB_TXN *dbtxnid = get_DB_TXN(jnienv, txnid);
|
||||
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (NULL);
|
||||
err = db->cursor(db, dbtxnid, &dbc, flags);
|
||||
verify_return(jnienv, err, 0);
|
||||
return (get_Dbc(jnienv, dbc));
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_del
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,
|
||||
/*Dbt*/ jobject key, jint dbflags)
|
||||
{
|
||||
int err;
|
||||
DB_TXN *dbtxnid;
|
||||
DB *db;
|
||||
JDBT dbkey;
|
||||
|
||||
err = 0;
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (0);
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
dbtxnid = get_DB_TXN(jnienv, txnid);
|
||||
if (jdbt_lock(&dbkey, jnienv, key, inOp) != 0)
|
||||
goto out;
|
||||
|
||||
err = db->del(db, dbtxnid, &dbkey.dbt->dbt, dbflags);
|
||||
if (err != DB_NOTFOUND) {
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
|
||||
out:
|
||||
jdbt_unlock(&dbkey, jnienv);
|
||||
JAVADB_API_END(db);
|
||||
return (err);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_dup_1compare_1changed
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbDupCompare*/ jobject jdupcompare)
|
||||
{
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
dbinfo = (DB_JAVAINFO*)db->cj_internal;
|
||||
dbji_set_dup_compare_object(dbinfo, jnienv, db, jdupcompare);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_err
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jint ecode, jstring msg)
|
||||
{
|
||||
DB *db;
|
||||
JSTR msg_string;
|
||||
|
||||
if (jstr_lock(&msg_string, jnienv, msg) != 0)
|
||||
goto out;
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
goto out;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
db->err(db, ecode, msg_string.string);
|
||||
JAVADB_API_END(db);
|
||||
|
||||
out:
|
||||
jstr_unlock(&msg_string, jnienv);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_errx
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jstring msg)
|
||||
{
|
||||
JSTR msg_string;
|
||||
DB *db = get_DB(jnienv, jthis);
|
||||
|
||||
if (jstr_lock(&msg_string, jnienv, msg) != 0)
|
||||
goto out;
|
||||
if (!verify_non_null(jnienv, db))
|
||||
goto out;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
db->errx(db, msg_string.string);
|
||||
JAVADB_API_END(db);
|
||||
|
||||
out:
|
||||
jstr_unlock(&msg_string, jnienv);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
err = db->fd(db, &return_value);
|
||||
verify_return(jnienv, err, 0);
|
||||
JAVADB_API_END(db);
|
||||
|
||||
return (return_value);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_feedback_1changed
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbFeedback*/ jobject jfeedback)
|
||||
{
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
dbinfo = (DB_JAVAINFO*)db->cj_internal;
|
||||
dbji_set_feedback_object(dbinfo, jnienv, db, jfeedback);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
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, op_flags, retry;
|
||||
DB *db;
|
||||
OpKind keyop, dataop;
|
||||
DB_TXN *dbtxnid;
|
||||
JDBT dbkey, dbdata;
|
||||
|
||||
err = 0;
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
goto out3;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
|
||||
/* Depending on flags, the key may be input/output. */
|
||||
keyop = inOp;
|
||||
dataop = outOp;
|
||||
op_flags = flags & DB_OPFLAGS_MASK;
|
||||
if (op_flags == DB_SET_RECNO) {
|
||||
keyop = inOutOp;
|
||||
}
|
||||
else if (op_flags == DB_GET_BOTH) {
|
||||
keyop = inOutOp;
|
||||
dataop = inOutOp;
|
||||
}
|
||||
|
||||
dbtxnid = get_DB_TXN(jnienv, txnid);
|
||||
|
||||
if (jdbt_lock(&dbkey, jnienv, key, keyop) != 0)
|
||||
goto out2;
|
||||
if (jdbt_lock(&dbdata, jnienv, data, dataop) != 0)
|
||||
goto out1;
|
||||
for (retry = 0; retry < 3; retry++) {
|
||||
err = db->get(db, dbtxnid, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
|
||||
|
||||
/* If we failed due to lack of memory in our DBT arrays,
|
||||
* retry.
|
||||
*/
|
||||
if (err != ENOMEM)
|
||||
break;
|
||||
if (!jdbt_realloc(&dbdata, jnienv))
|
||||
break;
|
||||
}
|
||||
if (err != DB_NOTFOUND) {
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
out1:
|
||||
jdbt_unlock(&dbdata, jnienv);
|
||||
out2:
|
||||
jdbt_unlock(&dbkey, jnienv);
|
||||
out3:
|
||||
JAVADB_API_END(db);
|
||||
return (err);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_hash_1changed
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbHash*/ jobject jhash)
|
||||
{
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
dbinfo = (DB_JAVAINFO*)db->cj_internal;
|
||||
dbji_set_h_hash_object(dbinfo, jnienv, db, jhash);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_join
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*Dbc[]*/ jobjectArray curslist,
|
||||
jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db = get_DB(jnienv, jthis);
|
||||
int count = (*jnienv)->GetArrayLength(jnienv, curslist);
|
||||
DBC **newlist = (DBC **)malloc(sizeof(DBC *) * (count+1));
|
||||
DBC *dbc;
|
||||
int i;
|
||||
|
||||
/* Convert the java array of Dbc's to a C array of DBC's. */
|
||||
for (i=0; i<count; i++) {
|
||||
jobject jobj = (*jnienv)->GetObjectArrayElement(jnienv, curslist, i);
|
||||
if (jobj == 0) {
|
||||
/*
|
||||
* An embedded null in the array is treated
|
||||
* as an endpoint.
|
||||
*/
|
||||
newlist[i] = 0;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
newlist[i] = get_DBC(jnienv, jobj);
|
||||
}
|
||||
}
|
||||
newlist[count] = 0;
|
||||
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (NULL);
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
|
||||
err = db->join(db, newlist, &dbc, flags);
|
||||
free(newlist);
|
||||
verify_return(jnienv, err, 0);
|
||||
|
||||
JAVADB_API_END(db);
|
||||
return (get_Dbc(jnienv, dbc));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_key_1range
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject jtxn,
|
||||
/*Dbt*/ jobject jkey, jobject /*DbKeyRange*/ range, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db = get_DB(jnienv, jthis);
|
||||
DB_TXN *txn = get_DB_TXN(jnienv, jtxn);
|
||||
JDBT dbkey;
|
||||
DB_KEY_RANGE result;
|
||||
jfieldID fid;
|
||||
jclass krclass;
|
||||
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
if (!verify_non_null(jnienv, range))
|
||||
return;
|
||||
if (jdbt_lock(&dbkey, jnienv, jkey, inOp) != 0)
|
||||
goto out;
|
||||
err = db->key_range(db, txn, &dbkey.dbt->dbt, &result, flags);
|
||||
if (verify_return(jnienv, err, 0)) {
|
||||
/* fill in the values of the DbKeyRange structure */
|
||||
krclass = get_class(jnienv, "DbKeyRange");
|
||||
fid = (*jnienv)->GetFieldID(jnienv, krclass, "less", "D");
|
||||
(*jnienv)->SetDoubleField(jnienv, range, fid, result.less);
|
||||
fid = (*jnienv)->GetFieldID(jnienv, krclass, "equal", "D");
|
||||
(*jnienv)->SetDoubleField(jnienv, range, fid, result.equal);
|
||||
fid = (*jnienv)->GetFieldID(jnienv, krclass, "greater", "D");
|
||||
(*jnienv)->SetDoubleField(jnienv, range, fid, result.greater);
|
||||
}
|
||||
out:
|
||||
jdbt_unlock(&dbkey, jnienv);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
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;
|
||||
DB_TXN *dbtxnid;
|
||||
JDBT dbkey, dbdata;
|
||||
|
||||
err = 0;
|
||||
db = get_DB(jnienv, jthis);
|
||||
dbtxnid = get_DB_TXN(jnienv, txnid);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (0); /* error will be thrown, retval doesn't matter */
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
|
||||
if (jdbt_lock(&dbkey, jnienv, key, inOp) != 0)
|
||||
goto out2;
|
||||
if (jdbt_lock(&dbdata, jnienv, data, inOp) != 0)
|
||||
goto out1;
|
||||
|
||||
if (!verify_non_null(jnienv, db))
|
||||
goto out1;
|
||||
err = db->put(db, dbtxnid, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
|
||||
if (err != DB_KEYEXIST) {
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
out1:
|
||||
jdbt_unlock(&dbdata, jnienv);
|
||||
out2:
|
||||
jdbt_unlock(&dbkey, jnienv);
|
||||
JAVADB_API_END(db);
|
||||
return (err);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_rename
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jstring file,
|
||||
jstring database, jstring newname, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
DB_JAVAINFO *dbinfo;
|
||||
JSTR j_file;
|
||||
JSTR j_database;
|
||||
JSTR j_newname;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
dbinfo = get_DB_JAVAINFO(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
if (jstr_lock(&j_file, jnienv, file) != 0)
|
||||
goto out3;
|
||||
if (jstr_lock(&j_database, jnienv, database) != 0)
|
||||
goto out2;
|
||||
if (jstr_lock(&j_newname, jnienv, newname) != 0)
|
||||
goto out1;
|
||||
|
||||
err = db->rename(db, j_file.string, j_database.string,
|
||||
j_newname.string, flags);
|
||||
|
||||
verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);
|
||||
dbji_dealloc(dbinfo, jnienv);
|
||||
set_private_dbobj(jnienv, name_DB, jthis, 0);
|
||||
|
||||
out1:
|
||||
jstr_unlock(&j_newname, jnienv);
|
||||
out2:
|
||||
jstr_unlock(&j_database, jnienv);
|
||||
out3:
|
||||
jstr_unlock(&j_file, jnienv);
|
||||
/* don't call JAVADB_API_END - db cannot be used */
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_remove
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jstring file,
|
||||
jstring database, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db = get_DB(jnienv, jthis);
|
||||
DB_JAVAINFO *dbinfo = get_DB_JAVAINFO(jnienv, jthis);
|
||||
JSTR j_file;
|
||||
JSTR j_database;
|
||||
|
||||
dbinfo = get_DB_JAVAINFO(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
if (jstr_lock(&j_file, jnienv, file) != 0)
|
||||
goto out2;
|
||||
if (jstr_lock(&j_database, jnienv, database) != 0)
|
||||
goto out1;
|
||||
err = db->remove(db, j_file.string, j_database.string, flags);
|
||||
|
||||
set_private_dbobj(jnienv, name_DB, jthis, 0);
|
||||
verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);
|
||||
dbji_dealloc(dbinfo, jnienv);
|
||||
|
||||
out1:
|
||||
jstr_unlock(&j_database, jnienv);
|
||||
out2:
|
||||
jstr_unlock(&j_file, jnienv);
|
||||
/* don't call JAVADB_API_END - db cannot be used */
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_sleepycat_db_Db_set_1pagesize
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jlong value)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (verify_non_null(jnienv, db)) {
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
err = db->set_pagesize(db, (u_int32_t)value);
|
||||
verify_return(jnienv, err, 0);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_sleepycat_db_Db_set_1cachesize
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jint gbytes, jint bytes,
|
||||
jint ncaches)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (verify_non_null(jnienv, db)) {
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
err = db->set_cachesize(db, gbytes, bytes, ncaches);
|
||||
verify_return(jnienv, err, 0);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_sleepycat_db_Db_set_1re_1source
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jstring re_source)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (verify_non_null(jnienv, db)) {
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
|
||||
/* XXX does the string from get_c_string ever get freed? */
|
||||
if (re_source != NULL)
|
||||
err = db->set_re_source(db, get_c_string(jnienv, re_source));
|
||||
else
|
||||
err = db->set_re_source(db, 0);
|
||||
|
||||
verify_return(jnienv, err, 0);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_stat
|
||||
(JNIEnv *jnienv, jobject jthis, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db = get_DB(jnienv, jthis);
|
||||
jobject retval = NULL;
|
||||
jclass dbclass;
|
||||
void *statp = 0;
|
||||
DB_BTREE_STAT *bstp;
|
||||
DB_HASH_STAT *hstp;
|
||||
DB_QUEUE_STAT *qstp;
|
||||
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (NULL);
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
|
||||
err = db->stat(db, &statp, NULL, flags);
|
||||
if (verify_return(jnienv, err, 0)) {
|
||||
DBTYPE dbtype = db->get_type(db);
|
||||
switch (dbtype) {
|
||||
|
||||
/* Btree and recno share the same stat structure */
|
||||
case DB_BTREE:
|
||||
case DB_RECNO:
|
||||
bstp = (DB_BTREE_STAT *)statp;
|
||||
retval = create_default_object(jnienv,
|
||||
name_DB_BTREE_STAT);
|
||||
dbclass = get_class(jnienv, name_DB_BTREE_STAT);
|
||||
|
||||
/* Set the individual fields */
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_magic", bstp->bt_magic);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_version", bstp->bt_version);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_metaflags", bstp->bt_metaflags);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_nkeys", bstp->bt_nkeys);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_ndata", bstp->bt_ndata);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_pagesize", bstp->bt_pagesize);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_maxkey", bstp->bt_maxkey);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_minkey", bstp->bt_minkey);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_re_len", bstp->bt_re_len);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_re_pad", bstp->bt_re_pad);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_levels", bstp->bt_levels);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_int_pg", bstp->bt_int_pg);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_leaf_pg", bstp->bt_leaf_pg);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_dup_pg", bstp->bt_dup_pg);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_over_pg", bstp->bt_over_pg);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_free", bstp->bt_free);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_int_pgfree", bstp->bt_int_pgfree);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_leaf_pgfree", bstp->bt_leaf_pgfree);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_dup_pgfree", bstp->bt_dup_pgfree);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"bt_over_pgfree", bstp->bt_over_pgfree);
|
||||
|
||||
break;
|
||||
|
||||
/* Hash stat structure */
|
||||
case DB_HASH:
|
||||
hstp = (DB_HASH_STAT *)statp;
|
||||
retval = create_default_object(jnienv,
|
||||
name_DB_HASH_STAT);
|
||||
dbclass = get_class(jnienv, name_DB_HASH_STAT);
|
||||
|
||||
/* Set the individual fields */
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_magic", hstp->hash_magic);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_version", hstp->hash_version);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_metaflags", hstp->hash_metaflags);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_nkeys", hstp->hash_nkeys);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_ndata", hstp->hash_ndata);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_pagesize", hstp->hash_pagesize);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_nelem", hstp->hash_nelem);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_ffactor", hstp->hash_ffactor);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_buckets", hstp->hash_buckets);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_free", hstp->hash_free);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_bfree", hstp->hash_bfree);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_bigpages", hstp->hash_bigpages);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_big_bfree", hstp->hash_big_bfree);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_overflows", hstp->hash_overflows);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_ovfl_free", hstp->hash_ovfl_free);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_dup", hstp->hash_dup);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"hash_dup_free", hstp->hash_dup_free);
|
||||
|
||||
break;
|
||||
|
||||
case DB_QUEUE:
|
||||
qstp = (DB_QUEUE_STAT *)statp;
|
||||
retval = create_default_object(jnienv,
|
||||
name_DB_QUEUE_STAT);
|
||||
dbclass = get_class(jnienv, name_DB_QUEUE_STAT);
|
||||
|
||||
/* Set the individual fields */
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_magic", qstp->qs_magic);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_version", qstp->qs_version);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_metaflags", qstp->qs_metaflags);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_nkeys", qstp->qs_nkeys);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_ndata", qstp->qs_ndata);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_pagesize", qstp->qs_pagesize);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_pages", qstp->qs_pages);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_re_len", qstp->qs_re_len);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_re_pad", qstp->qs_re_pad);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_pgfree", qstp->qs_pgfree);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_first_recno", qstp->qs_first_recno);
|
||||
set_int_field(jnienv, dbclass, retval,
|
||||
"qs_cur_recno", qstp->qs_cur_recno);
|
||||
break;
|
||||
|
||||
/* That's all the database types we're aware of! */
|
||||
default:
|
||||
report_exception(jnienv,
|
||||
"Db.stat not implemented for types"
|
||||
"other than HASH, BTREE and RECNO",
|
||||
EINVAL, 0);
|
||||
break;
|
||||
}
|
||||
free(statp);
|
||||
}
|
||||
JAVADB_API_END(db);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
JNIEXPORT jint 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 (0);
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
err = db->sync(db, flags);
|
||||
if (err != DB_INCOMPLETE)
|
||||
verify_return(jnienv, err, 0);
|
||||
JAVADB_API_END(db);
|
||||
return (err);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_Db_get_1byteswapped
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis)
|
||||
{
|
||||
DB *db;
|
||||
jboolean retval;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (0);
|
||||
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
retval = db->get_byteswapped(db) ? 1 : 0;
|
||||
JAVADB_API_END(db);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get_1type
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis)
|
||||
{
|
||||
DB *db;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return (0);
|
||||
|
||||
return ((jint)db->type);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1open
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jstring file, jstring database,
|
||||
jint type, jint flags, jint mode)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
JSTR dbfile;
|
||||
JSTR dbdatabase;
|
||||
|
||||
/* Java is assumed to be threaded. */
|
||||
flags |= DB_THREAD;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (jstr_lock(&dbfile, jnienv, file) != 0)
|
||||
goto out2;
|
||||
if (jstr_lock(&dbdatabase, jnienv, database) != 0)
|
||||
goto out1;
|
||||
if (verify_non_null(jnienv, db)) {
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
err = db->open(db, dbfile.string, dbdatabase.string,
|
||||
(DBTYPE)type, flags, mode);
|
||||
verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
out1:
|
||||
jstr_unlock(&dbdatabase, jnienv);
|
||||
out2:
|
||||
jstr_unlock(&dbfile, jnienv);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_upgrade
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jstring name,
|
||||
jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db = get_DB(jnienv, jthis);
|
||||
JSTR j_name;
|
||||
|
||||
if (verify_non_null(jnienv, db)) {
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
if (jstr_lock(&j_name, jnienv, name) != 0)
|
||||
goto out;
|
||||
err = db->upgrade(db, j_name.string, flags);
|
||||
verify_return(jnienv, err, 0);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
out:
|
||||
jstr_unlock(&j_name, jnienv);
|
||||
}
|
||||
|
||||
static int java_verify_callback(void *handle, const void *str_arg)
|
||||
{
|
||||
char *str;
|
||||
struct verify_callback_struct *vc;
|
||||
int len;
|
||||
jthrowable except;
|
||||
JNIEnv *jnienv;
|
||||
|
||||
str = (char *)str_arg;
|
||||
vc = (struct verify_callback_struct *)handle;
|
||||
jnienv = vc->env;
|
||||
len = strlen(str)+1;
|
||||
if (len > vc->nbytes) {
|
||||
vc->nbytes = len;
|
||||
vc->bytes = (*jnienv)->NewByteArray(jnienv, len);
|
||||
}
|
||||
(*jnienv)->SetByteArrayRegion(jnienv, vc->bytes, 0, len, (jbyte*)str);
|
||||
(*jnienv)->CallVoidMethod(jnienv, vc->streamobj,
|
||||
vc->writemid, vc->bytes, 0, len-1);
|
||||
|
||||
if ((except = (*jnienv)->ExceptionOccurred(jnienv)) != NULL)
|
||||
return (EIO);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_verify
|
||||
(JNIEnv *jnienv, /*Db*/ jobject jthis, jstring name,
|
||||
jstring subdb, jobject stream, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB *db;
|
||||
JSTR j_name;
|
||||
JSTR j_subdb;
|
||||
struct verify_callback_struct vcs;
|
||||
jclass streamclass;
|
||||
|
||||
db = get_DB(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, db))
|
||||
return;
|
||||
JAVADB_API_BEGIN(db, jthis);
|
||||
|
||||
if (jstr_lock(&j_name, jnienv, name) != 0)
|
||||
goto out2;
|
||||
if (jstr_lock(&j_subdb, jnienv, subdb) != 0)
|
||||
goto out1;
|
||||
|
||||
/* set up everything we need for the callbacks */
|
||||
vcs.env = jnienv;
|
||||
vcs.streamobj = stream;
|
||||
vcs.nbytes = 100;
|
||||
vcs.bytes = (*jnienv)->NewByteArray(jnienv, vcs.nbytes);
|
||||
|
||||
/* get the method ID for OutputStream.write(byte[], int, int); */
|
||||
streamclass = (*jnienv)->FindClass(jnienv, "java/io/OutputStream");
|
||||
vcs.writemid = (*jnienv)->GetMethodID(jnienv, streamclass,
|
||||
"write", "([BII)V");
|
||||
|
||||
/* invoke verify - this will invoke the callback repeatedly. */
|
||||
err = __db_verify_internal(db, j_name.string, j_subdb.string,
|
||||
&vcs, java_verify_callback, flags);
|
||||
verify_return(jnienv, err, 0);
|
||||
|
||||
out1:
|
||||
jstr_unlock(&j_subdb, jnienv);
|
||||
out2:
|
||||
jstr_unlock(&j_name, jnienv);
|
||||
JAVADB_API_END(db);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1finalize
|
||||
(JNIEnv *jnienv, jobject jthis,
|
||||
jobject /*DbErrcall*/ errcall, jstring errpfx)
|
||||
{
|
||||
DB_JAVAINFO *dbinfo;
|
||||
DB *db;
|
||||
|
||||
dbinfo = get_DB_JAVAINFO(jnienv, jthis);
|
||||
db = get_DB(jnienv, jthis);
|
||||
DB_ASSERT(dbinfo != NULL);
|
||||
|
||||
/* Note: We can never be sure if the underlying DB is attached to
|
||||
* a DB_ENV that was already closed. Sure, that's a user error,
|
||||
* but it shouldn't crash the VM. Therefore, we cannot just
|
||||
* automatically close if the handle indicates we are not yet
|
||||
* closed. The best we can do is detect this and report it.
|
||||
*/
|
||||
if (db != NULL) {
|
||||
/* If this error occurs, this object was never closed. */
|
||||
report_errcall(jnienv, errcall, errpfx,
|
||||
"Db.finalize: open Db object destroyed");
|
||||
}
|
||||
|
||||
/* Shouldn't see this object again, but just in case */
|
||||
set_private_dbobj(jnienv, name_DB, jthis, 0);
|
||||
set_private_info(jnienv, name_DB, jthis, 0);
|
||||
|
||||
dbji_destroy(dbinfo, jnienv);
|
||||
}
|
1300
bdb/libdb_java/java_DbEnv.c
Normal file
1300
bdb/libdb_java/java_DbEnv.c
Normal file
File diff suppressed because it is too large
Load Diff
55
bdb/libdb_java/java_DbLock.c
Normal file
55
bdb/libdb_java/java_DbLock.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_DbLock.c,v 11.4 2000/11/30 00:58:39 ubell Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <jni.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "db.h"
|
||||
#include "java_util.h"
|
||||
#include "com_sleepycat_db_DbLock.h"
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_put
|
||||
(JNIEnv *jnienv, jobject jthis, /*DbEnv*/ jobject env)
|
||||
{
|
||||
int err;
|
||||
DB_LOCK *dblock = get_DB_LOCK(jnienv, jthis);
|
||||
DB_ENV *dbenv = get_DB_ENV(jnienv, env);
|
||||
|
||||
if (!verify_non_null(jnienv, dbenv))
|
||||
return;
|
||||
|
||||
if (!verify_non_null(jnienv, dblock))
|
||||
return;
|
||||
|
||||
err = lock_put(dbenv, dblock);
|
||||
if (verify_return(jnienv, err, 0)) {
|
||||
/* After a successful put, the DbLock can no longer
|
||||
* be used, so we release the storage related to it
|
||||
* (allocated in DbEnv.lock_get() or lock_tget()).
|
||||
*/
|
||||
free(dblock);
|
||||
|
||||
set_private_dbobj(jnienv, name_DB_LOCK, jthis, 0);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_finalize
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
DB_LOCK *dblock = get_DB_LOCK(jnienv, jthis);
|
||||
if (dblock) {
|
||||
/* Free any data related to DB_LOCK here */
|
||||
free(dblock);
|
||||
}
|
||||
set_private_dbobj(jnienv, name_DB_LOCK, jthis, 0); /* paranoia */
|
||||
}
|
43
bdb/libdb_java/java_DbLsn.c
Normal file
43
bdb/libdb_java/java_DbLsn.c
Normal file
@ -0,0 +1,43 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_DbLsn.c,v 11.5 2000/11/30 00:58:39 ubell Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <jni.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h> /* needed for FILENAME_MAX */
|
||||
|
||||
#include "db.h"
|
||||
#include "db_int.h"
|
||||
#include "java_util.h"
|
||||
#include "com_sleepycat_db_DbLsn.h"
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_init_1lsn
|
||||
(JNIEnv *jnienv, /*DbLsn*/ jobject jthis)
|
||||
{
|
||||
/* Note: the DB_LSN object stored in the private_dbobj_
|
||||
* is allocated in get_DbLsn().
|
||||
*/
|
||||
|
||||
COMPQUIET(jnienv, NULL);
|
||||
COMPQUIET(jthis, NULL);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_finalize
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
DB_LSN *dblsn;
|
||||
|
||||
dblsn = get_DB_LSN(jnienv, jthis);
|
||||
if (dblsn) {
|
||||
free(dblsn);
|
||||
}
|
||||
}
|
82
bdb/libdb_java/java_DbTxn.c
Normal file
82
bdb/libdb_java/java_DbTxn.c
Normal file
@ -0,0 +1,82 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_DbTxn.c,v 11.3 2000/09/18 18:32:25 dda Exp $";
|
||||
#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_DbTxn.h"
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_abort
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
int err;
|
||||
DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, dbtxn))
|
||||
return;
|
||||
|
||||
err = txn_abort(dbtxn);
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_commit
|
||||
(JNIEnv *jnienv, jobject jthis, jint flags)
|
||||
{
|
||||
int err;
|
||||
DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, dbtxn))
|
||||
return;
|
||||
|
||||
err = txn_commit(dbtxn, flags);
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbTxn_id
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
int retval = 0;
|
||||
DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, dbtxn))
|
||||
return (-1);
|
||||
|
||||
/* No error to check for from txn_id */
|
||||
retval = txn_id(dbtxn);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_prepare
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
int err;
|
||||
DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
|
||||
if (!verify_non_null(jnienv, dbtxn))
|
||||
return;
|
||||
|
||||
err = txn_prepare(dbtxn);
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_finalize
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
|
||||
if (dbtxn) {
|
||||
/* Free any data related to DB_TXN here
|
||||
* Note: we don't make a policy of doing
|
||||
* a commit or abort here. The txnmgr
|
||||
* should be closed, and DB will clean up.
|
||||
*/
|
||||
}
|
||||
}
|
196
bdb/libdb_java/java_Dbc.c
Normal file
196
bdb/libdb_java/java_Dbc.c
Normal file
@ -0,0 +1,196 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_Dbc.c,v 11.10 2000/10/25 19:54:55 dda Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <jni.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef DIAGNOSTIC
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#include "db.h"
|
||||
#include "db_int.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, 0)) {
|
||||
set_private_dbobj(jnienv, name_DBC, jthis, 0);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_count
|
||||
(JNIEnv *jnienv, jobject jthis, jint flags)
|
||||
{
|
||||
int err;
|
||||
DBC *dbc = get_DBC(jnienv, jthis);
|
||||
db_recno_t count;
|
||||
|
||||
if (!verify_non_null(jnienv, dbc))
|
||||
return (0);
|
||||
err = dbc->c_count(dbc, &count, flags);
|
||||
verify_return(jnienv, err, 0);
|
||||
return (count);
|
||||
}
|
||||
|
||||
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, 0);
|
||||
}
|
||||
return (err);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Dbc_dup
|
||||
(JNIEnv *jnienv, jobject jthis, jint flags)
|
||||
{
|
||||
int err;
|
||||
DBC *dbc = get_DBC(jnienv, jthis);
|
||||
DBC *dbc_ret = NULL;
|
||||
|
||||
if (!verify_non_null(jnienv, dbc))
|
||||
return (0);
|
||||
err = dbc->c_dup(dbc, &dbc_ret, flags);
|
||||
if (!verify_return(jnienv, err, 0))
|
||||
return (0);
|
||||
|
||||
return (get_Dbc(jnienv, dbc_ret));
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_get
|
||||
(JNIEnv *jnienv, jobject jthis,
|
||||
/*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
|
||||
{
|
||||
int err, retry, op_flags;
|
||||
DBC *dbc;
|
||||
JDBT dbkey, dbdata;
|
||||
OpKind keyop, dataop;
|
||||
|
||||
/* Depending on flags, the user may be supplying the key,
|
||||
* or else we may have to retrieve it.
|
||||
*/
|
||||
err = 0;
|
||||
keyop = outOp;
|
||||
dataop = outOp;
|
||||
|
||||
op_flags = flags & DB_OPFLAGS_MASK;
|
||||
if (op_flags == DB_SET) {
|
||||
keyop = inOp;
|
||||
}
|
||||
else if (op_flags == DB_SET_RANGE ||
|
||||
op_flags == DB_SET_RECNO) {
|
||||
keyop = inOutOp;
|
||||
}
|
||||
else if (op_flags == DB_GET_BOTH) {
|
||||
keyop = inOutOp;
|
||||
dataop = inOutOp;
|
||||
}
|
||||
|
||||
dbc = get_DBC(jnienv, jthis);
|
||||
if (jdbt_lock(&dbkey, jnienv, key, keyop) != 0)
|
||||
goto out2;
|
||||
if (jdbt_lock(&dbdata, jnienv, data, dataop) != 0)
|
||||
goto out1;
|
||||
|
||||
if (!verify_non_null(jnienv, dbc))
|
||||
goto out1;
|
||||
|
||||
for (retry = 0; retry < 3; retry++) {
|
||||
err = dbc->c_get(dbc, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
|
||||
|
||||
/* If we failed due to lack of memory in our DBT arrays,
|
||||
* retry.
|
||||
*/
|
||||
if (err != ENOMEM)
|
||||
break;
|
||||
if (!jdbt_realloc(&dbkey, jnienv) && !jdbt_realloc(&dbdata, jnienv))
|
||||
break;
|
||||
}
|
||||
if (err != DB_NOTFOUND) {
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
out1:
|
||||
jdbt_unlock(&dbdata, jnienv);
|
||||
out2:
|
||||
jdbt_unlock(&dbkey, jnienv);
|
||||
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;
|
||||
JDBT dbkey, dbdata;
|
||||
|
||||
err = 0;
|
||||
dbc = get_DBC(jnienv, jthis);
|
||||
if (jdbt_lock(&dbkey, jnienv, key, inOp) != 0)
|
||||
goto out2;
|
||||
if (jdbt_lock(&dbdata, jnienv, data, inOp) != 0)
|
||||
goto out1;
|
||||
|
||||
if (!verify_non_null(jnienv, dbc))
|
||||
goto out1;
|
||||
err = dbc->c_put(dbc, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
|
||||
if (err != DB_KEYEXIST) {
|
||||
verify_return(jnienv, err, 0);
|
||||
}
|
||||
out1:
|
||||
jdbt_unlock(&dbdata, jnienv);
|
||||
out2:
|
||||
jdbt_unlock(&dbkey, jnienv);
|
||||
return (err);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_finalize
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
/* Free any data related to DBC here.
|
||||
* If we ever have java-only data embedded in the DBC
|
||||
* and need to do this, we'll have to track Dbc's
|
||||
* according to which Db owns them, just as
|
||||
* we track Db's according to which DbEnv owns them.
|
||||
* That's necessary to avoid double freeing that
|
||||
* comes about when closes interact with GC.
|
||||
*/
|
||||
|
||||
#ifdef DIAGNOSTIC
|
||||
DBC *dbc;
|
||||
|
||||
dbc = get_DBC(jnienv, jthis);
|
||||
if (dbc != NULL)
|
||||
fprintf(stderr, "Java API: Dbc has not been closed\n");
|
||||
#else
|
||||
|
||||
COMPQUIET(jnienv, NULL);
|
||||
COMPQUIET(jthis, NULL);
|
||||
|
||||
#endif
|
||||
}
|
176
bdb/libdb_java/java_Dbt.c
Normal file
176
bdb/libdb_java/java_Dbt.c
Normal file
@ -0,0 +1,176 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_Dbt.c,v 11.10 2000/10/25 19:54:55 dda Exp $";
|
||||
#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_Dbt.h"
|
||||
|
||||
JAVADB_RW_ACCESS(Dbt, jint, size, DBT, size)
|
||||
JAVADB_RW_ACCESS(Dbt, jint, ulen, DBT, ulen)
|
||||
JAVADB_RW_ACCESS(Dbt, jint, dlen, DBT, dlen)
|
||||
JAVADB_RW_ACCESS(Dbt, jint, doff, DBT, doff)
|
||||
JAVADB_RW_ACCESS(Dbt, jint, flags, DBT, flags)
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_init
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
DBT_JAVAINFO *dbtji;
|
||||
|
||||
dbtji = dbjit_construct();
|
||||
set_private_dbobj(jnienv, name_DBT, jthis, dbtji);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_internal_1set_1data
|
||||
(JNIEnv *jnienv, jobject jthis, jbyteArray array)
|
||||
{
|
||||
DBT_JAVAINFO *db_this;
|
||||
|
||||
db_this = get_DBT_JAVAINFO(jnienv, jthis);
|
||||
if (verify_non_null(jnienv, db_this)) {
|
||||
|
||||
/* If we previously allocated an array for java,
|
||||
* must release reference.
|
||||
*/
|
||||
dbjit_release(db_this, jnienv);
|
||||
|
||||
/* Make the array a global ref,
|
||||
* it won't be GC'd till we release it.
|
||||
*/
|
||||
if (array)
|
||||
array = (jbyteArray)NEW_GLOBAL_REF(jnienv, array);
|
||||
db_this->array_ = array;
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jbyteArray JNICALL Java_com_sleepycat_db_Dbt_get_1data
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
DBT_JAVAINFO *db_this;
|
||||
jbyteArray arr;
|
||||
int len;
|
||||
|
||||
db_this = get_DBT_JAVAINFO(jnienv, jthis);
|
||||
if (verify_non_null(jnienv, db_this)) {
|
||||
/* XXX this will copy the data on each call to get_data,
|
||||
* even if it is unchanged.
|
||||
*/
|
||||
if (db_this->create_array_ != 0) {
|
||||
/* XXX we should reuse the existing array if we can */
|
||||
len = db_this->dbt.size;
|
||||
if (db_this->array_ != NULL)
|
||||
DELETE_GLOBAL_REF(jnienv, db_this->array_);
|
||||
arr = (*jnienv)->NewByteArray(jnienv, len);
|
||||
db_this->array_ =
|
||||
(jbyteArray)NEW_GLOBAL_REF(jnienv, arr);
|
||||
(*jnienv)->SetByteArrayRegion(jnienv, arr, 0, len,
|
||||
db_this->dbt.data);
|
||||
}
|
||||
return (db_this->array_);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1offset
|
||||
(JNIEnv *jnienv, jobject jthis, jint offset)
|
||||
{
|
||||
DBT_JAVAINFO *db_this;
|
||||
|
||||
db_this = get_DBT_JAVAINFO(jnienv, jthis);
|
||||
if (verify_non_null(jnienv, db_this)) {
|
||||
db_this->offset_ = offset;
|
||||
}
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1offset
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
DBT_JAVAINFO *db_this;
|
||||
|
||||
db_this = get_DBT_JAVAINFO(jnienv, jthis);
|
||||
if (verify_non_null(jnienv, db_this)) {
|
||||
return db_this->offset_;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1recno_1key_1data(JNIEnv *jnienv, jobject jthis, jint value)
|
||||
{
|
||||
JDBT jdbt;
|
||||
|
||||
if (jdbt_lock(&jdbt, jnienv, jthis, inOp) != 0)
|
||||
goto out;
|
||||
|
||||
if (!jdbt.dbt->dbt.data ||
|
||||
jdbt.java_array_len_ < sizeof(db_recno_t)) {
|
||||
char buf[200];
|
||||
sprintf(buf, "set_recno_key_data error: %p %p %d %d",
|
||||
&jdbt.dbt->dbt, jdbt.dbt->dbt.data,
|
||||
jdbt.dbt->dbt.ulen, sizeof(db_recno_t));
|
||||
report_exception(jnienv, buf, 0, 0);
|
||||
}
|
||||
else {
|
||||
*(db_recno_t*)(jdbt.dbt->dbt.data) = value;
|
||||
}
|
||||
out:
|
||||
jdbt_unlock(&jdbt, jnienv);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1recno_1key_1data(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
jint ret;
|
||||
JDBT jdbt;
|
||||
|
||||
ret = 0;
|
||||
|
||||
/* Although this is kind of like "retrieve", we don't support
|
||||
* DB_DBT_MALLOC for this operation, so we tell jdbt_lock
|
||||
* that is not a retrieve.
|
||||
*/
|
||||
if (jdbt_lock(&jdbt, jnienv, jthis, inOp) != 0)
|
||||
goto out;
|
||||
|
||||
if (!jdbt.dbt->dbt.data ||
|
||||
jdbt.java_array_len_ < sizeof(db_recno_t)) {
|
||||
char buf[200];
|
||||
sprintf(buf, "get_recno_key_data error: %p %p %d %d",
|
||||
&jdbt.dbt->dbt, jdbt.dbt->dbt.data,
|
||||
jdbt.dbt->dbt.ulen, sizeof(db_recno_t));
|
||||
report_exception(jnienv, buf, 0, 0);
|
||||
}
|
||||
else {
|
||||
ret = *(db_recno_t*)(jdbt.dbt->dbt.data);
|
||||
}
|
||||
out:
|
||||
jdbt_unlock(&jdbt, jnienv);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_finalize
|
||||
(JNIEnv *jnienv, jobject jthis)
|
||||
{
|
||||
DBT_JAVAINFO *dbtji;
|
||||
|
||||
dbtji = get_DBT_JAVAINFO(jnienv, jthis);
|
||||
if (dbtji) {
|
||||
/* Free any data related to DBT here */
|
||||
dbjit_release(dbtji, jnienv);
|
||||
|
||||
/* Extra paranoia */
|
||||
memset(dbtji, 0, sizeof(DBT_JAVAINFO));
|
||||
free(dbtji);
|
||||
}
|
||||
}
|
1001
bdb/libdb_java/java_info.c
Normal file
1001
bdb/libdb_java/java_info.c
Normal file
File diff suppressed because it is too large
Load Diff
200
bdb/libdb_java/java_info.h
Normal file
200
bdb/libdb_java/java_info.h
Normal file
@ -0,0 +1,200 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*
|
||||
* $Id: java_info.h,v 11.17 2000/07/31 20:28:30 dda Exp $
|
||||
*/
|
||||
|
||||
#ifndef _JAVA_INFO_H_
|
||||
#define _JAVA_INFO_H_
|
||||
|
||||
/*
|
||||
* "Info" classes for Java implementation of Berkeley DB API.
|
||||
* These classes hold extra information for which there is
|
||||
* no room or counterpart in the base classes used in the C API.
|
||||
* In the case of a DBT, the DBT_javainfo class is stored in the
|
||||
* 'private' variable of the java Dbt, and the DBT_javainfo is subclassed
|
||||
* from a DBT. In the case of DB and DB_ENV, the appropriate
|
||||
* info objects are pointed to by the DB and DB_ENV objects.
|
||||
* This is convenient to implement callbacks.
|
||||
*/
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Declaration of class DBT_javainfo
|
||||
*
|
||||
* A DBT_javainfo is created whenever a Dbt (java) object is created,
|
||||
* and a pointer to it is stored in its private info storage.
|
||||
* It is subclassed from DBT, because we must retain some extra
|
||||
* information in it while it is in use. In particular, when
|
||||
* a java array is associated with it, we need to keep a Globally
|
||||
* Locked reference to it so it is not GC'd. This reference is
|
||||
* destroyed when the Dbt is GC'd.
|
||||
*/
|
||||
typedef struct _dbt_javainfo
|
||||
{
|
||||
DBT dbt;
|
||||
DB *db_; /* associated DB */
|
||||
jobject dbtref_; /* the java Dbt object */
|
||||
jbyteArray array_;
|
||||
int offset_;
|
||||
int create_array_; /* flag to create the array as needed */
|
||||
}
|
||||
DBT_JAVAINFO; /* used with all 'dbtji' functions */
|
||||
|
||||
extern DBT_JAVAINFO *dbjit_construct();
|
||||
extern void dbjit_release(DBT_JAVAINFO *dbjit, JNIEnv *jnienv);
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Declaration of class DB_ENV_JAVAINFO
|
||||
*
|
||||
* A DB_ENV_JAVAINFO is allocated and stuffed into the cj_internal
|
||||
* and the db_errpfx for every DB_ENV created. It holds a
|
||||
* little extra info that is needed to support callbacks.
|
||||
*
|
||||
* There's a bit of trickery here, because we have built this
|
||||
* above a layer that has a C function callback that gets
|
||||
* invoked when an error occurs. One of the C callback's arguments
|
||||
* is the prefix from the DB_ENV, but since we stuffed a pointer
|
||||
* to our own DB_ENV_JAVAINFO into the prefix, we get that object as an
|
||||
* argument to the C callback. Thus, the C callback can have
|
||||
* access to much more than just the prefix, and it needs that
|
||||
* to call back into the Java enviroment.
|
||||
*
|
||||
* The DB_ENV_JAVAINFO object holds a copy of the Java Virtual Machine,
|
||||
* which is needed to attach to the current running thread
|
||||
* whenever we need to make a callback. (This is more reliable
|
||||
* than our previous approach, which was to save the thread
|
||||
* that created the DbEnv). It also has the Java callback object,
|
||||
* as well as a 'default' callback object that is used when the
|
||||
* caller sets the callback to null. It also has the original
|
||||
* error prefix, since we overwrote the one in the DB_ENV.
|
||||
* There are also fields that are unrelated to the handling
|
||||
* of callbacks, but are convenient to attach to a DB_ENV.
|
||||
*
|
||||
* Note: We assume that the Java layer is the only one
|
||||
* fiddling with the contents of db_errpfx, db_errcall, cj_internal
|
||||
* for a DB_ENV that was created via Java. Since the Java layer should
|
||||
* have the only pointer to such a DB_ENV, this should be true.
|
||||
*/
|
||||
typedef struct _db_env_javainfo
|
||||
{
|
||||
JavaVM *javavm_;
|
||||
int is_dbopen_;
|
||||
char *errpfx_;
|
||||
jobject jdbref_; /* temporary reference */
|
||||
jobject jenvref_; /* temporary reference */
|
||||
jobject default_errcall_; /* global reference */
|
||||
jobject errcall_; /* global reference */
|
||||
jobject feedback_; /* global reference */
|
||||
jobject tx_recover_; /* global reference */
|
||||
jobject recovery_init_; /* global reference */
|
||||
unsigned char *conflict_;
|
||||
}
|
||||
DB_ENV_JAVAINFO; /* used with all 'dbjie' functions */
|
||||
|
||||
/* create/initialize an object */
|
||||
extern DB_ENV_JAVAINFO *dbjie_construct(JNIEnv *jnienv,
|
||||
jobject default_errcall,
|
||||
int is_dbopen);
|
||||
|
||||
/* release all objects held by this this one */
|
||||
extern void dbjie_dealloc(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
|
||||
|
||||
/* free this object, releasing anything allocated on its behalf */
|
||||
extern void dbjie_destroy(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
|
||||
|
||||
/* This gets the environment for the current thread */
|
||||
extern JNIEnv *dbjie_get_jnienv(DB_ENV_JAVAINFO *);
|
||||
|
||||
extern void dbjie_set_errpfx(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
|
||||
jstring errpfx);
|
||||
extern jstring dbjie_get_errpfx(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
|
||||
extern void dbjie_set_errcall(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
|
||||
jobject new_errcall);
|
||||
extern void dbjie_set_conflict(DB_ENV_JAVAINFO *, unsigned char *v);
|
||||
extern void dbjie_set_feedback_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
|
||||
DB_ENV *dbenv, jobject value);
|
||||
extern void dbjie_call_feedback(DB_ENV_JAVAINFO *, DB_ENV *dbenv, jobject jenv,
|
||||
int opcode, int percent);
|
||||
extern void dbjie_set_recovery_init_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
|
||||
DB_ENV *dbenv, jobject value);
|
||||
extern int dbjie_call_recovery_init(DB_ENV_JAVAINFO *, DB_ENV *dbenv,
|
||||
jobject jenv);
|
||||
extern void dbjie_set_tx_recover_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
|
||||
DB_ENV *dbenv, jobject value);
|
||||
extern int dbjie_call_tx_recover(DB_ENV_JAVAINFO *,
|
||||
DB_ENV *dbenv, jobject jenv,
|
||||
DBT *dbt, DB_LSN *lsn, int recops);
|
||||
extern jobject dbjie_get_errcall(DB_ENV_JAVAINFO *) ;
|
||||
extern int dbjie_is_dbopen(DB_ENV_JAVAINFO *);
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Declaration of class DB_JAVAINFO
|
||||
*
|
||||
* A DB_JAVAINFO is allocated and stuffed into the cj_internal field
|
||||
* for every DB created. It holds a little extra info that is needed
|
||||
* to support callbacks.
|
||||
*
|
||||
* Note: We assume that the Java layer is the only one
|
||||
* fiddling with the contents of cj_internal
|
||||
* for a DB that was created via Java. Since the Java layer should
|
||||
* have the only pointer to such a DB, this should be true.
|
||||
*/
|
||||
typedef struct _db_javainfo
|
||||
{
|
||||
JavaVM *javavm_;
|
||||
jobject jdbref_; /* temporary reference during callback */
|
||||
jobject feedback_; /* global reference */
|
||||
jobject append_recno_; /* global reference */
|
||||
jobject bt_compare_; /* global reference */
|
||||
jobject bt_prefix_; /* global reference */
|
||||
jobject dup_compare_; /* global reference */
|
||||
jobject h_hash_; /* global reference */
|
||||
jmethodID feedback_method_id_;
|
||||
jmethodID append_recno_method_id_;
|
||||
jmethodID bt_compare_method_id_;
|
||||
jmethodID bt_prefix_method_id_;
|
||||
jmethodID dup_compare_method_id_;
|
||||
jmethodID h_hash_method_id_;
|
||||
jint construct_flags_;
|
||||
} DB_JAVAINFO;
|
||||
|
||||
/* create/initialize an object */
|
||||
extern DB_JAVAINFO *dbji_construct(JNIEnv *jnienv, jint flags);
|
||||
|
||||
/* release all objects held by this this one */
|
||||
extern void dbji_dealloc(DB_JAVAINFO *, JNIEnv *jnienv);
|
||||
|
||||
/* free this object, releasing anything allocated on its behalf */
|
||||
extern void dbji_destroy(DB_JAVAINFO *, JNIEnv *jnienv);
|
||||
|
||||
/* This gets the environment for the current thread */
|
||||
extern JNIEnv *dbji_get_jnienv();
|
||||
extern jint dbji_get_flags();
|
||||
|
||||
extern void dbji_set_feedback_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
|
||||
extern void dbji_call_feedback(DB_JAVAINFO *, DB *db, jobject jdb,
|
||||
int opcode, int percent);
|
||||
|
||||
extern void dbji_set_append_recno_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
|
||||
extern int dbji_call_append_recno(DB_JAVAINFO *, DB *db, jobject jdb,
|
||||
DBT *dbt, jint recno);
|
||||
extern void dbji_set_bt_compare_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
|
||||
extern int dbji_call_bt_compare(DB_JAVAINFO *, DB *db, jobject jdb,
|
||||
const DBT *dbt1, const DBT *dbt2);
|
||||
extern void dbji_set_bt_prefix_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
|
||||
extern size_t dbji_call_bt_prefix(DB_JAVAINFO *, DB *db, jobject jdb,
|
||||
const DBT *dbt1, const DBT *dbt2);
|
||||
extern void dbji_set_dup_compare_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
|
||||
extern int dbji_call_dup_compare(DB_JAVAINFO *, DB *db, jobject jdb,
|
||||
const DBT *dbt1, const DBT *dbt2);
|
||||
extern void dbji_set_h_hash_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
|
||||
extern int dbji_call_h_hash(DB_JAVAINFO *, DB *db, jobject jdb,
|
||||
const void *data, int len);
|
||||
|
||||
#endif /* !_JAVA_INFO_H_ */
|
294
bdb/libdb_java/java_locked.c
Normal file
294
bdb/libdb_java/java_locked.c
Normal file
@ -0,0 +1,294 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_locked.c,v 11.11 2000/10/25 19:54:55 dda Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <jni.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "db.h"
|
||||
#include "java_util.h"
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Implementation of class LockedDBT
|
||||
*
|
||||
*/
|
||||
int
|
||||
jdbt_lock(JDBT *jdbt, JNIEnv *jnienv, jobject obj, OpKind kind)
|
||||
{
|
||||
DBT *dbt;
|
||||
|
||||
jdbt->obj_ = obj;
|
||||
jdbt->do_realloc_ = 0;
|
||||
jdbt->kind_ = kind;
|
||||
jdbt->java_array_len_= 0;
|
||||
jdbt->java_data_ = 0;
|
||||
jdbt->before_data_ = 0;
|
||||
jdbt->has_error_ = 0;
|
||||
jdbt->dbt = (DBT_JAVAINFO *)get_private_dbobj(jnienv, name_DBT, obj);
|
||||
|
||||
if (!verify_non_null(jnienv, jdbt->dbt)) {
|
||||
jdbt->has_error_ = 1;
|
||||
return (EINVAL);
|
||||
}
|
||||
dbt = &jdbt->dbt->dbt;
|
||||
|
||||
if (kind == outOp &&
|
||||
(dbt->flags & (DB_DBT_USERMEM | DB_DBT_MALLOC | DB_DBT_REALLOC)) == 0) {
|
||||
report_exception(jnienv,
|
||||
"Dbt.flags must be set to Db.DB_DBT_USERMEM, "
|
||||
"Db.DB_DBT_MALLOC or Db.DB_DBT_REALLOC",
|
||||
0, 0);
|
||||
jdbt->has_error_ = 1;
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
/* If this is requested to be realloc, we cannot use the
|
||||
* underlying realloc, because the array we will pass in
|
||||
* is not allocated by us, but the Java VM, so it cannot
|
||||
* be successfully realloced. We simulate the reallocation,
|
||||
* by using USERMEM and reallocating the java array when a
|
||||
* ENOMEM error occurs. We change the flags during the operation,
|
||||
* and they are reset when the operation completes (in the
|
||||
* LockedDBT destructor.
|
||||
*/
|
||||
if ((dbt->flags & DB_DBT_REALLOC) != 0) {
|
||||
dbt->flags &= ~DB_DBT_REALLOC;
|
||||
dbt->flags |= DB_DBT_USERMEM;
|
||||
jdbt->do_realloc_ = 1;
|
||||
}
|
||||
|
||||
if ((dbt->flags & DB_DBT_USERMEM) || kind != outOp) {
|
||||
|
||||
/* If writing with DB_DBT_USERMEM/REALLOC
|
||||
* or it's a set (or get/set) operation,
|
||||
* then the data should point to a java array.
|
||||
* Note that outOp means data is coming out of the database
|
||||
* (it's a get). inOp means data is going into the database
|
||||
* (either a put, or a key input).
|
||||
*/
|
||||
if (!jdbt->dbt->array_) {
|
||||
report_exception(jnienv, "Dbt.data is null", 0, 0);
|
||||
jdbt->has_error_ = 1;
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
/* Verify other parameters */
|
||||
jdbt->java_array_len_ = (*jnienv)->GetArrayLength(jnienv, jdbt->dbt->array_);
|
||||
if (jdbt->dbt->offset_ < 0 ) {
|
||||
report_exception(jnienv, "Dbt.offset illegal", 0, 0);
|
||||
jdbt->has_error_ = 1;
|
||||
return (EINVAL);
|
||||
}
|
||||
if (dbt->ulen + jdbt->dbt->offset_ > jdbt->java_array_len_) {
|
||||
report_exception(jnienv,
|
||||
"Dbt.ulen + Dbt.offset greater than array length", 0, 0);
|
||||
jdbt->has_error_ = 1;
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
jdbt->java_data_ = (*jnienv)->GetByteArrayElements(jnienv, jdbt->dbt->array_,
|
||||
(jboolean *)0);
|
||||
dbt->data = jdbt->before_data_ = jdbt->java_data_ + jdbt->dbt->offset_;
|
||||
}
|
||||
else {
|
||||
|
||||
/* If writing with DB_DBT_MALLOC, then the data is
|
||||
* allocated by DB.
|
||||
*/
|
||||
dbt->data = jdbt->before_data_ = 0;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* The LockedDBT destructor is called when the java handler returns
|
||||
* to the user, since that's when the LockedDBT objects go out of scope.
|
||||
* Since it is thus called after any call to the underlying database,
|
||||
* it copies any information from temporary structures back to user
|
||||
* accessible arrays, and of course must free memory and remove references.
|
||||
*/
|
||||
void
|
||||
jdbt_unlock(JDBT *jdbt, JNIEnv *jnienv)
|
||||
{
|
||||
DBT *dbt;
|
||||
|
||||
dbt = &jdbt->dbt->dbt;
|
||||
|
||||
/* Fix up the flags if we changed them. */
|
||||
if (jdbt->do_realloc_) {
|
||||
dbt->flags &= ~DB_DBT_USERMEM;
|
||||
dbt->flags |= DB_DBT_REALLOC;
|
||||
}
|
||||
|
||||
if ((dbt->flags & (DB_DBT_USERMEM | DB_DBT_REALLOC)) ||
|
||||
jdbt->kind_ == inOp) {
|
||||
|
||||
/* If writing with DB_DBT_USERMEM/REALLOC or it's a set
|
||||
* (or get/set) operation, then the data may be already in
|
||||
* the java array, in which case, we just need to release it.
|
||||
* If DB didn't put it in the array (indicated by the
|
||||
* dbt->data changing), we need to do that
|
||||
*/
|
||||
if (jdbt->before_data_ != jdbt->java_data_) {
|
||||
(*jnienv)->SetByteArrayRegion(jnienv,
|
||||
jdbt->dbt->array_,
|
||||
jdbt->dbt->offset_,
|
||||
dbt->ulen,
|
||||
jdbt->before_data_);
|
||||
}
|
||||
(*jnienv)->ReleaseByteArrayElements(jnienv, jdbt->dbt->array_, jdbt->java_data_, 0);
|
||||
dbt->data = 0;
|
||||
}
|
||||
if ((dbt->flags & DB_DBT_MALLOC) && jdbt->kind_ != inOp) {
|
||||
|
||||
/* If writing with DB_DBT_MALLOC, then the data was allocated
|
||||
* by DB. If dbt->data is zero, it means an error occurred
|
||||
* (and should have been already reported).
|
||||
*/
|
||||
if (dbt->data) {
|
||||
|
||||
/* Release any old references. */
|
||||
dbjit_release(jdbt->dbt, jnienv);
|
||||
|
||||
/* In the case of SET_RANGE, the key is inOutOp
|
||||
* and when not found, its data will be left as
|
||||
* its original value. Only copy and free it
|
||||
* here if it has been allocated by DB
|
||||
* (dbt->data has changed).
|
||||
*/
|
||||
if (dbt->data != jdbt->before_data_) {
|
||||
jdbt->dbt->array_ = (jbyteArray)
|
||||
NEW_GLOBAL_REF(jnienv,
|
||||
(*jnienv)->NewByteArray(jnienv,
|
||||
dbt->size));
|
||||
jdbt->dbt->offset_ = 0;
|
||||
(*jnienv)->SetByteArrayRegion(jnienv,
|
||||
jdbt->dbt->array_, 0, dbt->size,
|
||||
(jbyte *)dbt->data);
|
||||
free(dbt->data);
|
||||
dbt->data = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Realloc the java array to receive data if the DBT was marked
|
||||
* for realloc, and the last operation set the size field to an
|
||||
* amount greater than ulen.
|
||||
*/
|
||||
int jdbt_realloc(JDBT *jdbt, JNIEnv *jnienv)
|
||||
{
|
||||
DBT *dbt;
|
||||
|
||||
dbt = &jdbt->dbt->dbt;
|
||||
|
||||
if (!jdbt->do_realloc_ || jdbt->has_error_ || dbt->size <= dbt->ulen)
|
||||
return (0);
|
||||
|
||||
(*jnienv)->ReleaseByteArrayElements(jnienv, jdbt->dbt->array_, jdbt->java_data_, 0);
|
||||
dbjit_release(jdbt->dbt, jnienv);
|
||||
|
||||
/* We allocate a new array of the needed size.
|
||||
* We'll set the offset to 0, as the old offset
|
||||
* really doesn't make any sense.
|
||||
*/
|
||||
jdbt->java_array_len_ = dbt->ulen = dbt->size;
|
||||
jdbt->dbt->offset_ = 0;
|
||||
jdbt->dbt->array_ = (jbyteArray)
|
||||
NEW_GLOBAL_REF(jnienv, (*jnienv)->NewByteArray(jnienv, dbt->size));
|
||||
|
||||
jdbt->java_data_ = (*jnienv)->GetByteArrayElements(jnienv,
|
||||
jdbt->dbt->array_,
|
||||
(jboolean *)0);
|
||||
dbt->data = jdbt->before_data_ = jdbt->java_data_;
|
||||
return (1);
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Implementation of class JSTR
|
||||
*
|
||||
*/
|
||||
int
|
||||
jstr_lock(JSTR *js, JNIEnv *jnienv, jstring jstr)
|
||||
{
|
||||
js->jstr_ = jstr;
|
||||
|
||||
if (jstr == 0)
|
||||
js->string = 0;
|
||||
else
|
||||
js->string = (*jnienv)->GetStringUTFChars(jnienv, jstr,
|
||||
(jboolean *)0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
void jstr_unlock(JSTR *js, JNIEnv *jnienv)
|
||||
{
|
||||
if (js->jstr_)
|
||||
(*jnienv)->ReleaseStringUTFChars(jnienv, js->jstr_, js->string);
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Implementation of class JSTRARRAY
|
||||
*
|
||||
*/
|
||||
int
|
||||
jstrarray_lock(JSTRARRAY *jsa, JNIEnv *jnienv, jobjectArray arr)
|
||||
{
|
||||
int i;
|
||||
|
||||
jsa->arr_ = arr;
|
||||
jsa->array = 0;
|
||||
|
||||
if (arr != 0) {
|
||||
int count = (*jnienv)->GetArrayLength(jnienv, arr);
|
||||
const char **new_array =
|
||||
(const char **)malloc((sizeof(const char *))*(count+1));
|
||||
for (i=0; i<count; i++) {
|
||||
jstring jstr = (jstring)(*jnienv)->GetObjectArrayElement(jnienv, arr, i);
|
||||
if (jstr == 0) {
|
||||
/*
|
||||
* An embedded null in the string array
|
||||
* is treated as an endpoint.
|
||||
*/
|
||||
new_array[i] = 0;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
new_array[i] =
|
||||
(*jnienv)->GetStringUTFChars(jnienv, jstr, (jboolean *)0);
|
||||
}
|
||||
}
|
||||
new_array[count] = 0;
|
||||
jsa->array = new_array;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
void jstrarray_unlock(JSTRARRAY *jsa, JNIEnv *jnienv)
|
||||
{
|
||||
int i;
|
||||
jstring jstr;
|
||||
|
||||
if (jsa->arr_) {
|
||||
int count = (*jnienv)->GetArrayLength(jnienv, jsa->arr_);
|
||||
for (i=0; i<count; i++) {
|
||||
if (jsa->array[i] == 0)
|
||||
break;
|
||||
jstr = (jstring)(*jnienv)->GetObjectArrayElement(jnienv, jsa->arr_, i);
|
||||
(*jnienv)->ReleaseStringUTFChars(jnienv, jstr, jsa->array[i]);
|
||||
}
|
||||
free((void*)jsa->array);
|
||||
}
|
||||
}
|
98
bdb/libdb_java/java_locked.h
Normal file
98
bdb/libdb_java/java_locked.h
Normal file
@ -0,0 +1,98 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*
|
||||
* $Id: java_locked.h,v 11.9 2000/10/25 19:54:55 dda Exp $
|
||||
*/
|
||||
|
||||
#ifndef _JAVA_LOCKED_H_
|
||||
#define _JAVA_LOCKED_H_
|
||||
|
||||
/*
|
||||
* Used internally by LockedDBT constructor.
|
||||
*/
|
||||
typedef enum _OpKind {
|
||||
inOp, /* setting data in database (passing data in) */
|
||||
outOp, /* getting data from database to user memory */
|
||||
inOutOp /* both getting/setting data */
|
||||
} OpKind;
|
||||
|
||||
/*
|
||||
*
|
||||
* Declaration of JDBT
|
||||
*
|
||||
* A JDBT object exists during a
|
||||
* single native call to the DB API. Its constructor's job is
|
||||
* to temporarily convert any java array found in the DBT_JAVAINFO
|
||||
* to actual bytes in memory that remain locked in place. These
|
||||
* bytes are used during the call to the underlying DB C layer,
|
||||
* and are released and/or copied back by the destructor.
|
||||
* Thus, a LockedDBT must be declared as a stack object to
|
||||
* function properly.
|
||||
*/
|
||||
typedef struct _jdbt
|
||||
{
|
||||
/* these are accessed externally to ldbt_ functions */
|
||||
DBT_JAVAINFO *dbt;
|
||||
unsigned int java_array_len_;
|
||||
|
||||
/* these are for used internally by ldbt_ functions */
|
||||
jobject obj_;
|
||||
jbyte *java_data_;
|
||||
jbyte *before_data_;
|
||||
int has_error_;
|
||||
int do_realloc_;
|
||||
OpKind kind_;
|
||||
} JDBT;
|
||||
|
||||
extern int jdbt_lock(JDBT *, JNIEnv *jnienv, jobject obj, OpKind kind);
|
||||
extern void jdbt_unlock(JDBT *, JNIEnv *jnienv); /* this unlocks and frees the memory */
|
||||
extern int jdbt_realloc(JDBT *, JNIEnv *jnienv); /* returns 1 if reallocation took place */
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Declaration of JSTR
|
||||
*
|
||||
* A JSTR exists temporarily to convert a java jstring object
|
||||
* to a char *. Because the memory for the char * string is
|
||||
* managed by the JVM, it must be released when we are done
|
||||
* looking at it. Typically, jstr_lock() is called at the
|
||||
* beginning of a function for each jstring object, and jstr_unlock
|
||||
* is called at the end of each function for each JSTR.
|
||||
*/
|
||||
typedef struct _jstr
|
||||
{
|
||||
/* this accessed externally to jstr_ functions */
|
||||
const char *string;
|
||||
|
||||
/* this is used internally by jstr_ functions */
|
||||
jstring jstr_;
|
||||
} JSTR;
|
||||
|
||||
extern int jstr_lock(JSTR *, JNIEnv *jnienv, jstring jstr);
|
||||
extern void jstr_unlock(JSTR *, JNIEnv *jnienv); /* this unlocks and frees mem */
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Declaration of class LockedStrarray
|
||||
*
|
||||
* Given a java jobjectArray object (that must be a String[]),
|
||||
* we extract the individual strings and build a const char **
|
||||
* When the LockedStrarray object is destroyed, the individual
|
||||
* strings are released.
|
||||
*/
|
||||
typedef struct _jstrarray
|
||||
{
|
||||
/* this accessed externally to jstrarray_ functions */
|
||||
const char **array;
|
||||
|
||||
/* this is used internally by jstrarray_ functions */
|
||||
jobjectArray arr_;
|
||||
} JSTRARRAY;
|
||||
|
||||
extern int jstrarray_lock(JSTRARRAY *, JNIEnv *jnienv, jobjectArray arr);
|
||||
extern void jstrarray_unlock(JSTRARRAY *, JNIEnv *jnienv); /* this unlocks and frees mem */
|
||||
|
||||
#endif /* !_JAVA_LOCKED_H_ */
|
556
bdb/libdb_java/java_util.c
Normal file
556
bdb/libdb_java/java_util.c
Normal file
@ -0,0 +1,556 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*/
|
||||
#include "db_config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char revid[] = "$Id: java_util.c,v 11.17 2000/10/28 13:09:39 dda Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <jni.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "db.h"
|
||||
#include "java_util.h"
|
||||
|
||||
#ifdef DB_WIN32
|
||||
#define sys_errlist _sys_errlist
|
||||
#define sys_nerr _sys_nerr
|
||||
#endif
|
||||
|
||||
const char * const name_DB = "Db";
|
||||
const char * const name_DB_BTREE_STAT = "DbBtreeStat";
|
||||
const char * const name_DBC = "Dbc";
|
||||
const char * const name_DB_DEADLOCK_EX = "DbDeadlockException";
|
||||
const char * const name_DB_ENV = "DbEnv";
|
||||
const char * const name_DB_EXCEPTION = "DbException";
|
||||
const char * const name_DB_HASH_STAT = "DbHashStat";
|
||||
const char * const name_DB_LOCK = "DbLock";
|
||||
const char * const name_DB_LOCK_STAT = "DbLockStat";
|
||||
const char * const name_DB_LOG_STAT = "DbLogStat";
|
||||
const char * const name_DB_LSN = "DbLsn";
|
||||
const char * const name_DB_MEMORY_EX = "DbMemoryException";
|
||||
const char * const name_DB_MPOOL_FSTAT = "DbMpoolFStat";
|
||||
const char * const name_DB_MPOOL_STAT = "DbMpoolStat";
|
||||
const char * const name_DB_QUEUE_STAT = "DbQueueStat";
|
||||
const char * const name_DB_RUNRECOVERY_EX = "DbRunRecoveryException";
|
||||
const char * const name_DBT = "Dbt";
|
||||
const char * const name_DB_TXN = "DbTxn";
|
||||
const char * const name_DB_TXN_STAT = "DbTxnStat";
|
||||
const char * const name_DB_TXN_STAT_ACTIVE = "DbTxnStat$Active";
|
||||
const char * const name_DbAppendRecno = "DbAppendRecno";
|
||||
const char * const name_DbBtreeCompare = "DbBtreeCompare";
|
||||
const char * const name_DbBtreePrefix = "DbBtreePrefix";
|
||||
const char * const name_DbDupCompare = "DbDupCompare";
|
||||
const char * const name_DbEnvFeedback = "DbEnvFeedback";
|
||||
const char * const name_DbErrcall = "DbErrcall";
|
||||
const char * const name_DbHash = "DbHash";
|
||||
const char * const name_DbFeedback = "DbFeedback";
|
||||
const char * const name_DbRecoveryInit = "DbRecoveryInit";
|
||||
const char * const name_DbTxnRecover = "DbTxnRecover";
|
||||
|
||||
const char * const string_signature = "Ljava/lang/String;";
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Utility functions used by "glue" functions.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Get the private data from a Db* object that points back to a C DB_* object.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void *get_private_dbobj(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj)
|
||||
{
|
||||
jclass dbClass;
|
||||
jfieldID id;
|
||||
long_to_ptr lp;
|
||||
|
||||
if (!obj)
|
||||
return (0);
|
||||
|
||||
dbClass = get_class(jnienv, classname);
|
||||
id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_dbobj_", "J");
|
||||
lp.java_long = (*jnienv)->GetLongField(jnienv, obj, id);
|
||||
return (lp.ptr);
|
||||
}
|
||||
|
||||
/* Set the private data in a Db* object that points back to a C DB_* object.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void set_private_dbobj(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj, void *value)
|
||||
{
|
||||
long_to_ptr lp;
|
||||
jclass dbClass;
|
||||
jfieldID id;
|
||||
|
||||
lp.java_long = 0; /* no junk in case sizes mismatch */
|
||||
lp.ptr = value;
|
||||
dbClass = get_class(jnienv, classname);
|
||||
id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_dbobj_", "J");
|
||||
(*jnienv)->SetLongField(jnienv, obj, id, lp.java_long);
|
||||
}
|
||||
|
||||
/* Get the private data in a Db/DbEnv object that holds additional 'side data'.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void *get_private_info(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj)
|
||||
{
|
||||
jclass dbClass;
|
||||
jfieldID id;
|
||||
long_to_ptr lp;
|
||||
|
||||
if (!obj)
|
||||
return (0);
|
||||
|
||||
dbClass = get_class(jnienv, classname);
|
||||
id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_info_", "J");
|
||||
lp.java_long = (*jnienv)->GetLongField(jnienv, obj, id);
|
||||
return (lp.ptr);
|
||||
}
|
||||
|
||||
/* Set the private data in a Db/DbEnv object that holds additional 'side data'.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void set_private_info(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj, void *value)
|
||||
{
|
||||
long_to_ptr lp;
|
||||
jclass dbClass;
|
||||
jfieldID id;
|
||||
|
||||
lp.java_long = 0; /* no junk in case sizes mismatch */
|
||||
lp.ptr = value;
|
||||
dbClass = get_class(jnienv, classname);
|
||||
id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_info_", "J");
|
||||
(*jnienv)->SetLongField(jnienv, obj, id, lp.java_long);
|
||||
}
|
||||
|
||||
/*
|
||||
* Given a non-qualified name (e.g. "foo"), get the class handle
|
||||
* for the fully qualified name (e.g. "com.sleepycat.db.foo")
|
||||
*/
|
||||
jclass get_class(JNIEnv *jnienv, const char *classname)
|
||||
{
|
||||
/* Note: PERFORMANCE: It should be possible to cache jclass's.
|
||||
* If we do a NewGlobalRef on each one, we can keep them
|
||||
* around in a table. A jclass is a jobject, and
|
||||
* since NewGlobalRef returns a jobject, it isn't
|
||||
* technically right, but it would likely work with
|
||||
* most implementations. Possibly make it configurable.
|
||||
*/
|
||||
char fullname[128] = DB_PACKAGE_NAME;
|
||||
strncat(fullname, classname, sizeof(fullname));
|
||||
return ((*jnienv)->FindClass(jnienv, fullname));
|
||||
}
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be a DB object type.
|
||||
*/
|
||||
void set_object_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *object_classname,
|
||||
const char *name_of_field, jobject obj)
|
||||
{
|
||||
char signature[512];
|
||||
jfieldID id;
|
||||
|
||||
strncpy(signature, "L", sizeof(signature));
|
||||
strncat(signature, DB_PACKAGE_NAME, sizeof(signature));
|
||||
strncat(signature, object_classname, sizeof(signature));
|
||||
strncat(signature, ";", sizeof(signature));
|
||||
|
||||
id = (*jnienv)->GetFieldID(jnienv, class_of_this, name_of_field, signature);
|
||||
(*jnienv)->SetObjectField(jnienv, jthis, id, obj);
|
||||
}
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be an integer type.
|
||||
*/
|
||||
void set_int_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *name_of_field, jint value)
|
||||
{
|
||||
jfieldID id = (*jnienv)->GetFieldID(jnienv, class_of_this, name_of_field, "I");
|
||||
(*jnienv)->SetIntField(jnienv, jthis, id, value);
|
||||
}
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be an integer type.
|
||||
*/
|
||||
void set_long_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *name_of_field, jlong value)
|
||||
{
|
||||
jfieldID id = (*jnienv)->GetFieldID(jnienv, class_of_this, name_of_field, "J");
|
||||
(*jnienv)->SetLongField(jnienv, jthis, id, value);
|
||||
}
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be an integer type.
|
||||
*/
|
||||
void set_lsn_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *name_of_field, DB_LSN value)
|
||||
{
|
||||
set_object_field(jnienv, class_of_this, jthis, name_DB_LSN,
|
||||
name_of_field, get_DbLsn(jnienv, value));
|
||||
}
|
||||
|
||||
/* Report an exception back to the java side.
|
||||
*/
|
||||
void report_exception(JNIEnv *jnienv, const char *text, int err,
|
||||
unsigned long expect_mask)
|
||||
{
|
||||
jstring textString;
|
||||
jclass dbexcept;
|
||||
jclass javaexcept;
|
||||
jmethodID constructId;
|
||||
jthrowable obj;
|
||||
|
||||
textString = NULL;
|
||||
dbexcept = NULL;
|
||||
javaexcept = NULL;
|
||||
constructId = NULL;
|
||||
obj = NULL;
|
||||
|
||||
switch (err) {
|
||||
/* DB_JAVA_CALLBACK is returned by dbji_call_append_recno()
|
||||
* (the append_recno callback) when the Java version of the
|
||||
* callback has thrown an exception, and we want to pass the
|
||||
* exception on. The exception has already been thrown, we
|
||||
* don't want to throw a new one.
|
||||
*/
|
||||
case DB_JAVA_CALLBACK:
|
||||
break;
|
||||
case ENOMEM:
|
||||
dbexcept = get_class(jnienv, name_DB_MEMORY_EX);
|
||||
break;
|
||||
case ENOENT:
|
||||
/* In this case there is a corresponding standard java
|
||||
* exception type that we'll use. First we make sure
|
||||
* that the calling function expected this kind of error,
|
||||
* if not we give an 'internal error' DbException, since
|
||||
* we must not throw an exception type that isn't
|
||||
* declared in the signature.
|
||||
*
|
||||
* We'll make this a little more general if/when we add
|
||||
* more java standard exceptions.
|
||||
*/
|
||||
if ((expect_mask & EXCEPTION_FILE_NOT_FOUND) == 0) {
|
||||
char errstr[1024];
|
||||
|
||||
strncpy(errstr, "internal error: unexpected errno: ",
|
||||
sizeof(errstr));
|
||||
strncat(errstr, text, sizeof(errstr));
|
||||
textString = get_java_string(jnienv, errstr);
|
||||
dbexcept = get_class(jnienv, name_DB_EXCEPTION);
|
||||
}
|
||||
else {
|
||||
javaexcept =
|
||||
(*jnienv)->FindClass(jnienv, "java/io/FileNotFoundException");
|
||||
}
|
||||
break;
|
||||
case DB_RUNRECOVERY:
|
||||
dbexcept = get_class(jnienv, name_DB_RUNRECOVERY_EX);
|
||||
break;
|
||||
case DB_LOCK_DEADLOCK:
|
||||
dbexcept = get_class(jnienv, name_DB_DEADLOCK_EX);
|
||||
break;
|
||||
default:
|
||||
dbexcept = get_class(jnienv, name_DB_EXCEPTION);
|
||||
break;
|
||||
}
|
||||
if (dbexcept != NULL) {
|
||||
if (textString == NULL)
|
||||
textString = get_java_string(jnienv, text);
|
||||
constructId = (*jnienv)->GetMethodID(jnienv, dbexcept,
|
||||
"<init>",
|
||||
"(Ljava/lang/String;I)V");
|
||||
obj = (jthrowable)(*jnienv)->NewObject(jnienv, dbexcept,
|
||||
constructId, textString,
|
||||
err);
|
||||
(*jnienv)->Throw(jnienv, obj);
|
||||
}
|
||||
else if (javaexcept != NULL) {
|
||||
javaexcept =
|
||||
(*jnienv)->FindClass(jnienv, "java/io/FileNotFoundException");
|
||||
(*jnienv)->ThrowNew(jnienv, javaexcept, text);
|
||||
}
|
||||
}
|
||||
|
||||
/* Report an error via the errcall mechanism.
|
||||
*/
|
||||
void report_errcall(JNIEnv *jnienv, jobject errcall,
|
||||
jstring prefix, const char *message)
|
||||
{
|
||||
jmethodID id;
|
||||
jclass errcall_class;
|
||||
jstring msg;
|
||||
|
||||
errcall_class = get_class(jnienv, name_DbErrcall);
|
||||
msg = get_java_string(jnienv, message);
|
||||
|
||||
id = (*jnienv)->GetMethodID(jnienv, errcall_class,
|
||||
"errcall",
|
||||
"(Ljava/lang/String;Ljava/lang/String;)V");
|
||||
if (id == NULL) {
|
||||
fprintf(stderr, "Cannot get errcall methodID!\n");
|
||||
fprintf(stderr, "error: %s\n", message);
|
||||
return;
|
||||
}
|
||||
|
||||
(*jnienv)->CallVoidMethod(jnienv, errcall, id, prefix, msg);
|
||||
}
|
||||
|
||||
/* If the object is null, report an exception and return false (0),
|
||||
* otherwise return true (1).
|
||||
*/
|
||||
int verify_non_null(JNIEnv *jnienv, void *obj)
|
||||
{
|
||||
if (obj == NULL) {
|
||||
report_exception(jnienv, "null object", EINVAL, 0);
|
||||
return (0);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* If the error code is non-zero, report an exception and return false (0),
|
||||
* otherwise return true (1).
|
||||
*/
|
||||
int verify_return(JNIEnv *jnienv, int err, unsigned long expect_mask)
|
||||
{
|
||||
if (err == 0)
|
||||
return 1;
|
||||
|
||||
report_exception(jnienv, db_strerror(err), err, expect_mask);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Create an object of the given class, calling its default constructor.
|
||||
*/
|
||||
jobject create_default_object(JNIEnv *jnienv, const char *class_name)
|
||||
{
|
||||
jclass dbclass = get_class(jnienv, class_name);
|
||||
jmethodID id = (*jnienv)->GetMethodID(jnienv, dbclass, "<init>", "()V");
|
||||
jobject object = (*jnienv)->NewObject(jnienv, dbclass, id);
|
||||
return (object);
|
||||
}
|
||||
|
||||
/* Convert an DB object to a Java encapsulation of that object.
|
||||
* Note: This implementation creates a new Java object on each call,
|
||||
* so it is generally useful when a new DB object has just been created.
|
||||
*/
|
||||
jobject convert_object(JNIEnv *jnienv, const char *class_name, void *dbobj)
|
||||
{
|
||||
jobject jo;
|
||||
|
||||
if (!dbobj)
|
||||
return (0);
|
||||
|
||||
jo = create_default_object(jnienv, class_name);
|
||||
set_private_dbobj(jnienv, class_name, jo, dbobj);
|
||||
return (jo);
|
||||
}
|
||||
|
||||
/* Create a copy of the string
|
||||
*/
|
||||
char *dup_string(const char *str)
|
||||
{
|
||||
int len;
|
||||
char *retval;
|
||||
|
||||
len = strlen(str) + 1;
|
||||
retval = (char *)malloc(sizeof(char)*len);
|
||||
strncpy(retval, str, len);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
/* Create a java string from the given string
|
||||
*/
|
||||
jstring get_java_string(JNIEnv *jnienv, const char* string)
|
||||
{
|
||||
if (string == 0)
|
||||
return (0);
|
||||
return ((*jnienv)->NewStringUTF(jnienv, string));
|
||||
}
|
||||
|
||||
/* Create a malloc'ed copy of the java string.
|
||||
* Caller must free it.
|
||||
*/
|
||||
char *get_c_string(JNIEnv *jnienv, jstring jstr)
|
||||
{
|
||||
const jbyte *utf;
|
||||
char *retval;
|
||||
|
||||
utf = (*jnienv)->GetStringUTFChars(jnienv, jstr, NULL);
|
||||
retval = dup_string((const char *)utf);
|
||||
(*jnienv)->ReleaseStringUTFChars(jnienv, jstr, utf);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Convert a java object to the various C pointers they represent.
|
||||
*/
|
||||
DB *get_DB(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB *)get_private_dbobj(jnienv, name_DB, obj));
|
||||
}
|
||||
|
||||
DB_BTREE_STAT *get_DB_BTREE_STAT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_BTREE_STAT *)get_private_dbobj(jnienv, name_DB_BTREE_STAT, obj));
|
||||
}
|
||||
|
||||
DBC *get_DBC(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DBC *)get_private_dbobj(jnienv, name_DBC, obj));
|
||||
}
|
||||
|
||||
DB_ENV *get_DB_ENV(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_ENV *)get_private_dbobj(jnienv, name_DB_ENV, obj));
|
||||
}
|
||||
|
||||
DB_ENV_JAVAINFO *get_DB_ENV_JAVAINFO(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_ENV_JAVAINFO *)get_private_info(jnienv, name_DB_ENV, obj));
|
||||
}
|
||||
|
||||
DB_HASH_STAT *get_DB_HASH_STAT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_HASH_STAT *)get_private_dbobj(jnienv, name_DB_HASH_STAT, obj));
|
||||
}
|
||||
|
||||
DB_JAVAINFO *get_DB_JAVAINFO(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_JAVAINFO *)get_private_info(jnienv, name_DB, obj));
|
||||
}
|
||||
|
||||
DB_LOCK *get_DB_LOCK(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_LOCK *)get_private_dbobj(jnienv, name_DB_LOCK, obj));
|
||||
}
|
||||
|
||||
DB_LOG_STAT *get_DB_LOG_STAT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_LOG_STAT *)get_private_dbobj(jnienv, name_DB_LOG_STAT, obj));
|
||||
}
|
||||
|
||||
DB_LSN *get_DB_LSN(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_LSN *)get_private_dbobj(jnienv, name_DB_LSN, obj));
|
||||
}
|
||||
|
||||
DB_MPOOL_FSTAT *get_DB_MPOOL_FSTAT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_MPOOL_FSTAT *)get_private_dbobj(jnienv, name_DB_MPOOL_FSTAT, obj));
|
||||
}
|
||||
|
||||
DB_MPOOL_STAT *get_DB_MPOOL_STAT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_MPOOL_STAT *)get_private_dbobj(jnienv, name_DB_MPOOL_STAT, obj));
|
||||
}
|
||||
|
||||
DB_QUEUE_STAT *get_DB_QUEUE_STAT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_QUEUE_STAT *)get_private_dbobj(jnienv, name_DB_QUEUE_STAT, obj));
|
||||
}
|
||||
|
||||
DB_TXN *get_DB_TXN(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_TXN *)get_private_dbobj(jnienv, name_DB_TXN, obj));
|
||||
}
|
||||
|
||||
DB_TXN_STAT *get_DB_TXN_STAT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DB_TXN_STAT *)get_private_dbobj(jnienv, name_DB_TXN_STAT, obj));
|
||||
}
|
||||
|
||||
DBT *get_DBT(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
DBT_JAVAINFO *ji;
|
||||
|
||||
ji = (DBT_JAVAINFO *)get_private_dbobj(jnienv, name_DBT, obj);
|
||||
if (ji == NULL)
|
||||
return (NULL);
|
||||
else
|
||||
return (&ji->dbt);
|
||||
}
|
||||
|
||||
DBT_JAVAINFO *get_DBT_JAVAINFO(JNIEnv *jnienv, jobject obj)
|
||||
{
|
||||
return ((DBT_JAVAINFO *)get_private_dbobj(jnienv, name_DBT, obj));
|
||||
}
|
||||
|
||||
/* Convert a C pointer to the various Java objects they represent.
|
||||
*/
|
||||
jobject get_DbBtreeStat(JNIEnv *jnienv, DB_BTREE_STAT *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_BTREE_STAT, dbobj));
|
||||
}
|
||||
|
||||
jobject get_Dbc(JNIEnv *jnienv, DBC *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DBC, dbobj));
|
||||
}
|
||||
|
||||
jobject get_DbHashStat(JNIEnv *jnienv, DB_HASH_STAT *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_HASH_STAT, dbobj));
|
||||
}
|
||||
|
||||
jobject get_DbLogStat(JNIEnv *jnienv, DB_LOG_STAT *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_LOG_STAT, dbobj));
|
||||
}
|
||||
|
||||
/* LSNs are different since they are really normally
|
||||
* treated as by-value objects. We actually create
|
||||
* a pointer to the LSN and store that, deleting it
|
||||
* when the LSN is GC'd.
|
||||
*/
|
||||
jobject get_DbLsn(JNIEnv *jnienv, DB_LSN dbobj)
|
||||
{
|
||||
DB_LSN *lsnp = (DB_LSN *)malloc(sizeof(DB_LSN));
|
||||
memset(lsnp, 0, sizeof(DB_LSN));
|
||||
*lsnp = dbobj;
|
||||
return (convert_object(jnienv, name_DB_LSN, lsnp));
|
||||
}
|
||||
|
||||
jobject get_Dbt(JNIEnv *jnienv, DBT *dbt)
|
||||
{
|
||||
return (convert_object(jnienv, name_DBT, dbt));
|
||||
}
|
||||
|
||||
jobject get_DbMpoolFStat(JNIEnv *jnienv, DB_MPOOL_FSTAT *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_MPOOL_FSTAT, dbobj));
|
||||
}
|
||||
|
||||
jobject get_DbMpoolStat(JNIEnv *jnienv, DB_MPOOL_STAT *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_MPOOL_STAT, dbobj));
|
||||
}
|
||||
|
||||
jobject get_DbQueueStat(JNIEnv *jnienv, DB_QUEUE_STAT *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_QUEUE_STAT, dbobj));
|
||||
}
|
||||
|
||||
jobject get_DbTxn(JNIEnv *jnienv, DB_TXN *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_TXN, dbobj));
|
||||
}
|
||||
|
||||
jobject get_DbTxnStat(JNIEnv *jnienv, DB_TXN_STAT *dbobj)
|
||||
{
|
||||
return (convert_object(jnienv, name_DB_TXN_STAT, dbobj));
|
||||
}
|
359
bdb/libdb_java/java_util.h
Normal file
359
bdb/libdb_java/java_util.h
Normal file
@ -0,0 +1,359 @@
|
||||
/*-
|
||||
* See the file LICENSE for redistribution information.
|
||||
*
|
||||
* Copyright (c) 1997, 1998, 1999, 2000
|
||||
* Sleepycat Software. All rights reserved.
|
||||
*
|
||||
* $Id: java_util.h,v 11.22 2001/01/11 18:19:53 bostic Exp $
|
||||
*/
|
||||
|
||||
#ifndef _JAVA_UTIL_H_
|
||||
#define _JAVA_UTIL_H_
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
/* These are level 4 warnings that are explicitly disabled.
|
||||
* With Visual C++, by default you do not see above level 3 unless
|
||||
* you use /W4. But we like to compile with the highest level
|
||||
* warnings to catch other errors.
|
||||
*
|
||||
* 4201: nameless struct/union
|
||||
* triggered by standard include file <winnt.h>
|
||||
*
|
||||
* 4244: '=' : convert from '__int64' to 'unsigned int', possible loss of data
|
||||
* results from making size_t data members correspond to jlongs
|
||||
*
|
||||
* 4514: unreferenced inline function has been removed
|
||||
* jni.h defines methods that are not called
|
||||
*
|
||||
* 4127: conditional expression is constant
|
||||
* occurs because of arg in JAVADB_RW_ACCESS_STRING macro
|
||||
*/
|
||||
#pragma warning(disable: 4244 4201 4514 4127)
|
||||
|
||||
#endif
|
||||
|
||||
#include "db_config.h"
|
||||
#include "db.h"
|
||||
#include "java_info.h"
|
||||
#include "java_locked.h"
|
||||
#include <jni.h>
|
||||
#include <string.h> /* needed for memset */
|
||||
|
||||
#define DB_PACKAGE_NAME "com/sleepycat/db/"
|
||||
|
||||
/* Union to convert longs to pointers (see {get,set}_private_dbobj).
|
||||
*/
|
||||
typedef union {
|
||||
jlong java_long;
|
||||
void *ptr;
|
||||
} long_to_ptr;
|
||||
|
||||
/****************************************************************
|
||||
*
|
||||
* Utility functions and definitions used by "glue" functions.
|
||||
*
|
||||
*/
|
||||
|
||||
#define NOT_IMPLEMENTED(str) \
|
||||
report_exception(jnienv, str /*concatenate*/ ": not implemented", 0)
|
||||
|
||||
/* Get, delete a global reference.
|
||||
* Making this operation a function call allows for
|
||||
* easier tracking for debugging. Global references
|
||||
* are mostly grabbed at 'open' and 'close' points,
|
||||
* so there shouldn't be a big performance hit.
|
||||
*
|
||||
* Macro-izing this makes it easier to add debugging code
|
||||
* to track unreleased references.
|
||||
*/
|
||||
#ifdef DBJAVA_DEBUG
|
||||
#include <unistd.h>
|
||||
static void wrdebug(const char *str)
|
||||
{
|
||||
write(2, str, strlen(str));
|
||||
write(2, "\n", 1);
|
||||
}
|
||||
|
||||
static jobject debug_new_global_ref(JNIEnv *jnienv, jobject obj, const char *s)
|
||||
{
|
||||
wrdebug(s);
|
||||
return (*jnienv)->NewGlobalRef(jnienv, obj);
|
||||
}
|
||||
|
||||
static void debug_delete_global_ref(JNIEnv *jnienv, jobject obj, const char *s)
|
||||
{
|
||||
wrdebug(s);
|
||||
(*jnienv)->DeleteGlobalRef(jnienv, obj);
|
||||
}
|
||||
|
||||
#define NEW_GLOBAL_REF(jnienv, obj) \
|
||||
debug_new_global_ref(jnienv, obj, "+Ref: " #obj)
|
||||
#define DELETE_GLOBAL_REF(jnienv, obj) \
|
||||
debug_delete_global_ref(jnienv, obj, "-Ref: " #obj)
|
||||
#else
|
||||
#define NEW_GLOBAL_REF(jnienv, obj) (*jnienv)->NewGlobalRef(jnienv, obj)
|
||||
#define DELETE_GLOBAL_REF(jnienv, obj) (*jnienv)->DeleteGlobalRef(jnienv, obj)
|
||||
#define wrdebug(x)
|
||||
#endif
|
||||
|
||||
/* Get the private data from a Db* object that points back to a C DB_* object.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void *get_private_dbobj(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj);
|
||||
|
||||
/* Set the private data in a Db* object that points back to a C DB_* object.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void set_private_dbobj(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj, void *value);
|
||||
|
||||
/* Get the private data in a Db/DbEnv object that holds additional 'side data'.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void *get_private_info(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj);
|
||||
|
||||
/* Set the private data in a Db/DbEnv object that holds additional 'side data'.
|
||||
* The private data is stored in the object as a Java long (64 bits),
|
||||
* which is long enough to store a pointer on current architectures.
|
||||
*/
|
||||
void set_private_info(JNIEnv *jnienv, const char *classname,
|
||||
jobject obj, void *value);
|
||||
|
||||
/*
|
||||
* Given a non-qualified name (e.g. "foo"), get the class handl
|
||||
* for the fully qualified name (e.g. "com.sleepycat.db.foo")
|
||||
*/
|
||||
jclass get_class(JNIEnv *jnienv, const char *classname);
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be a DB object type.
|
||||
*/
|
||||
void set_object_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *object_classname,
|
||||
const char *name_of_field, jobject obj);
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be an integer type.
|
||||
*/
|
||||
void set_int_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *name_of_field, jint value);
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be an integer type.
|
||||
*/
|
||||
void set_long_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *name_of_field, jlong value);
|
||||
|
||||
/* Set an individual field in a Db* object.
|
||||
* The field must be an DbLsn type.
|
||||
*/
|
||||
void set_lsn_field(JNIEnv *jnienv, jclass class_of_this,
|
||||
jobject jthis, const char *name_of_field, DB_LSN value);
|
||||
|
||||
/* Values of expect_mask
|
||||
*/
|
||||
static const int EXCEPTION_FILE_NOT_FOUND = 0x0001;
|
||||
|
||||
/* Report an exception back to the java side.
|
||||
*/
|
||||
void report_exception(JNIEnv *jnienv, const char *text, int err,
|
||||
unsigned long expect_mask);
|
||||
|
||||
/* Report an error via the errcall mechanism.
|
||||
*/
|
||||
void report_errcall(JNIEnv *jnienv, jobject errcall,
|
||||
jstring prefix, const char *message);
|
||||
|
||||
/* If the object is null, report an exception and return false (0),
|
||||
* otherwise return true (1).
|
||||
*/
|
||||
int verify_non_null(JNIEnv *jnienv, void *obj);
|
||||
|
||||
/* If the error code is non-zero, report an exception and return false (0),
|
||||
* otherwise return true (1).
|
||||
*/
|
||||
int verify_return(JNIEnv *jnienv, int err, unsigned long expect_mask);
|
||||
|
||||
/* Create an object of the given class, calling its default constructor.
|
||||
*/
|
||||
jobject create_default_object(JNIEnv *jnienv, const char *class_name);
|
||||
|
||||
/* Convert an DB object to a Java encapsulation of that object.
|
||||
* Note: This implementation creates a new Java object on each call,
|
||||
* so it is generally useful when a new DB object has just been created.
|
||||
*/
|
||||
jobject convert_object(JNIEnv *jnienv, const char *class_name, void *dbobj);
|
||||
|
||||
/* Create a copy of the string
|
||||
*/
|
||||
char *dup_string(const char *str);
|
||||
|
||||
/* Create a malloc'ed copy of the java string.
|
||||
* Caller must free it.
|
||||
*/
|
||||
char *get_c_string(JNIEnv *jnienv, jstring jstr);
|
||||
|
||||
/* Create a java string from the given string
|
||||
*/
|
||||
jstring get_java_string(JNIEnv *jnienv, const char* string);
|
||||
|
||||
/* Convert a java object to the various C pointers they represent.
|
||||
*/
|
||||
DB *get_DB (JNIEnv *jnienv, jobject obj);
|
||||
DB_BTREE_STAT *get_DB_BTREE_STAT (JNIEnv *jnienv, jobject obj);
|
||||
DBC *get_DBC (JNIEnv *jnienv, jobject obj);
|
||||
DB_ENV *get_DB_ENV (JNIEnv *jnienv, jobject obj);
|
||||
DB_ENV_JAVAINFO *get_DB_ENV_JAVAINFO (JNIEnv *jnienv, jobject obj);
|
||||
DB_HASH_STAT *get_DB_HASH_STAT (JNIEnv *jnienv, jobject obj);
|
||||
DB_JAVAINFO *get_DB_JAVAINFO (JNIEnv *jnienv, jobject obj);
|
||||
DB_LOCK *get_DB_LOCK (JNIEnv *jnienv, jobject obj);
|
||||
DB_LOG_STAT *get_DB_LOG_STAT (JNIEnv *jnienv, jobject obj);
|
||||
DB_LSN *get_DB_LSN (JNIEnv *jnienv, jobject obj);
|
||||
DB_MPOOL_FSTAT *get_DB_MPOOL_FSTAT(JNIEnv *jnienv, jobject obj);
|
||||
DB_MPOOL_STAT *get_DB_MPOOL_STAT (JNIEnv *jnienv, jobject obj);
|
||||
DB_QUEUE_STAT *get_DB_QUEUE_STAT (JNIEnv *jnienv, jobject obj);
|
||||
DB_TXN *get_DB_TXN (JNIEnv *jnienv, jobject obj);
|
||||
DB_TXN_STAT *get_DB_TXN_STAT (JNIEnv *jnienv, jobject obj);
|
||||
DBT *get_DBT (JNIEnv *jnienv, jobject obj);
|
||||
DBT_JAVAINFO *get_DBT_JAVAINFO (JNIEnv *jnienv, jobject obj);
|
||||
|
||||
/* From a C object, create a Java object.
|
||||
*/
|
||||
jobject get_DbBtreeStat (JNIEnv *jnienv, DB_BTREE_STAT *dbobj);
|
||||
jobject get_Dbc (JNIEnv *jnienv, DBC *dbobj);
|
||||
jobject get_DbHashStat (JNIEnv *jnienv, DB_HASH_STAT *dbobj);
|
||||
jobject get_DbLogStat (JNIEnv *jnienv, DB_LOG_STAT *dbobj);
|
||||
jobject get_DbLsn (JNIEnv *jnienv, DB_LSN dbobj);
|
||||
jobject get_DbMpoolStat (JNIEnv *jnienv, DB_MPOOL_STAT *dbobj);
|
||||
jobject get_DbMpoolFStat (JNIEnv *jnienv, DB_MPOOL_FSTAT *dbobj);
|
||||
jobject get_DbQueueStat (JNIEnv *jnienv, DB_QUEUE_STAT *dbobj);
|
||||
jobject get_Dbt (JNIEnv *jnienv, DBT *dbt);
|
||||
jobject get_DbTxn (JNIEnv *jnienv, DB_TXN *dbobj);
|
||||
jobject get_DbTxnStat (JNIEnv *jnienv, DB_TXN_STAT *dbobj);
|
||||
|
||||
/* The java names of DB classes */
|
||||
extern const char * const name_DB;
|
||||
extern const char * const name_DB_BTREE_STAT;
|
||||
extern const char * const name_DBC;
|
||||
extern const char * const name_DB_DEADLOCK_EX;
|
||||
extern const char * const name_DB_ENV;
|
||||
extern const char * const name_DB_EXCEPTION;
|
||||
extern const char * const name_DB_HASH_STAT;
|
||||
extern const char * const name_DB_LOCK;
|
||||
extern const char * const name_DB_LOCK_STAT;
|
||||
extern const char * const name_DB_LOG_STAT;
|
||||
extern const char * const name_DB_LSN;
|
||||
extern const char * const name_DB_MEMORY_EX;
|
||||
extern const char * const name_DB_MPOOL_FSTAT;
|
||||
extern const char * const name_DB_MPOOL_STAT;
|
||||
extern const char * const name_DB_QUEUE_STAT;
|
||||
extern const char * const name_DB_RUNRECOVERY_EX;
|
||||
extern const char * const name_DBT;
|
||||
extern const char * const name_DB_TXN;
|
||||
extern const char * const name_DB_TXN_STAT;
|
||||
extern const char * const name_DB_TXN_STAT_ACTIVE;
|
||||
extern const char * const name_DbAppendRecno;
|
||||
extern const char * const name_DbBtreeCompare;
|
||||
extern const char * const name_DbBtreePrefix;
|
||||
extern const char * const name_DbDupCompare;
|
||||
extern const char * const name_DbEnvFeedback;
|
||||
extern const char * const name_DbErrcall;
|
||||
extern const char * const name_DbFeedback;
|
||||
extern const char * const name_DbHash;
|
||||
extern const char * const name_DbRecoveryInit;
|
||||
extern const char * const name_DbTxnRecover;
|
||||
|
||||
extern const char * const string_signature;
|
||||
|
||||
#define JAVADB_RO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
|
||||
JNIEXPORT j_fieldtype JNICALL \
|
||||
Java_com_sleepycat_db_##j_class##_get_1##j_field \
|
||||
(JNIEnv *jnienv, jobject jthis) \
|
||||
{ \
|
||||
c_type *db_this = get_##c_type(jnienv, jthis); \
|
||||
\
|
||||
if (verify_non_null(jnienv, db_this)) { \
|
||||
return db_this->c_field; \
|
||||
} \
|
||||
return 0; \
|
||||
}
|
||||
|
||||
#define JAVADB_WO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
|
||||
JNIEXPORT void JNICALL \
|
||||
Java_com_sleepycat_db_##j_class##_set_1##j_field \
|
||||
(JNIEnv *jnienv, jobject jthis, j_fieldtype value) \
|
||||
{ \
|
||||
c_type *db_this = get_##c_type(jnienv, jthis); \
|
||||
\
|
||||
if (verify_non_null(jnienv, db_this)) { \
|
||||
db_this->c_field = value; \
|
||||
} \
|
||||
}
|
||||
|
||||
/* This is a variant of the JAVADB_WO_ACCESS macro to define a simple set_
|
||||
* method using a C "method" call. These should be used with set_
|
||||
* methods that cannot invoke java 'callbacks' (no set_ method currently
|
||||
* does that). That assumption allows us to optimize (and simplify)
|
||||
* by not calling API_BEGIN/END macros.
|
||||
*/
|
||||
#define JAVADB_WO_ACCESS_METHOD(j_class, j_fieldtype, \
|
||||
j_field, c_type, c_field) \
|
||||
JNIEXPORT void JNICALL \
|
||||
Java_com_sleepycat_db_##j_class##_set_1##j_field \
|
||||
(JNIEnv *jnienv, jobject jthis, j_fieldtype value) \
|
||||
{ \
|
||||
c_type *db_this; \
|
||||
int err; \
|
||||
\
|
||||
db_this = get_##c_type(jnienv, jthis); \
|
||||
if (verify_non_null(jnienv, db_this)) { \
|
||||
err = db_this->set_##c_field(db_this, value); \
|
||||
verify_return(jnienv, err, 0); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define JAVADB_RW_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
|
||||
JAVADB_RO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
|
||||
JAVADB_WO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field)
|
||||
|
||||
#define JAVADB_WO_ACCESS_STRING(j_class, j_field, c_type, c_field) \
|
||||
JNIEXPORT void JNICALL \
|
||||
Java_com_sleepycat_db_##j_class##_set_1##j_field \
|
||||
(JNIEnv *jnienv, jobject jthis, jstring value) \
|
||||
{ \
|
||||
c_type *db_this; \
|
||||
int err; \
|
||||
\
|
||||
db_this = get_##c_type(jnienv, jthis); \
|
||||
if (verify_non_null(jnienv, db_this)) { \
|
||||
err = db_this->set_##c_field(db_this, \
|
||||
(*jnienv)->GetStringUTFChars(jnienv, value, NULL)); \
|
||||
verify_return(jnienv, err, 0); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define JAVADB_API_BEGIN(db, jthis) \
|
||||
if ((db) != NULL) \
|
||||
((DB_JAVAINFO*)(db)->cj_internal)->jdbref_ = \
|
||||
((DB_ENV_JAVAINFO*)((db)->dbenv->cj_internal))->jdbref_ = (jthis)
|
||||
|
||||
#define JAVADB_API_END(db) \
|
||||
if ((db) != NULL) \
|
||||
((DB_JAVAINFO*)(db)->cj_internal)->jdbref_ = \
|
||||
((DB_ENV_JAVAINFO*)((db)->dbenv->cj_internal))->jdbref_ = 0
|
||||
|
||||
#define JAVADB_ENV_API_BEGIN(dbenv, jthis) \
|
||||
if ((dbenv) != NULL) \
|
||||
((DB_ENV_JAVAINFO*)((dbenv)->cj_internal))->jenvref_ = (jthis)
|
||||
|
||||
#define JAVADB_ENV_API_END(dbenv) \
|
||||
if ((dbenv) != NULL) \
|
||||
((DB_ENV_JAVAINFO*)((dbenv)->cj_internal))->jenvref_ = 0
|
||||
|
||||
#endif /* !_JAVA_UTIL_H_ */
|
Reference in New Issue
Block a user