#include "rocksdb/utilities/write_batch_with_index.h"
#include "include/org_rocksdb_WBWIRocksIterator.h"
#include "include/org_rocksdb_WriteBatchWithIndex.h"
#include "rocksdb/comparator.h"
#include "rocksjni/cplusplus_to_java_convert.h"
#include "rocksjni/portal.h"
jlong Java_org_rocksdb_WriteBatchWithIndex_newWriteBatchWithIndex__(
JNIEnv* , jclass ) {
auto* wbwi = new ROCKSDB_NAMESPACE::WriteBatchWithIndex();
return GET_CPLUSPLUS_POINTER(wbwi);
}
jlong Java_org_rocksdb_WriteBatchWithIndex_newWriteBatchWithIndex__Z(
JNIEnv* , jclass , jboolean joverwrite_key) {
auto* wbwi = new ROCKSDB_NAMESPACE::WriteBatchWithIndex(
ROCKSDB_NAMESPACE::BytewiseComparator(), 0,
static_cast<bool>(joverwrite_key));
return GET_CPLUSPLUS_POINTER(wbwi);
}
jlong Java_org_rocksdb_WriteBatchWithIndex_newWriteBatchWithIndex__JBIZ(
JNIEnv* , jclass , jlong jfallback_index_comparator_handle,
jbyte jcomparator_type, jint jreserved_bytes, jboolean joverwrite_key) {
ROCKSDB_NAMESPACE::Comparator* fallback_comparator = nullptr;
switch (jcomparator_type) {
case 0x0:
fallback_comparator =
reinterpret_cast<ROCKSDB_NAMESPACE::ComparatorJniCallback*>(
jfallback_index_comparator_handle);
break;
case 0x1:
fallback_comparator = reinterpret_cast<ROCKSDB_NAMESPACE::Comparator*>(
jfallback_index_comparator_handle);
break;
}
auto* wbwi = new ROCKSDB_NAMESPACE::WriteBatchWithIndex(
fallback_comparator, static_cast<size_t>(jreserved_bytes),
static_cast<bool>(joverwrite_key));
return GET_CPLUSPLUS_POINTER(wbwi);
}
jint Java_org_rocksdb_WriteBatchWithIndex_count0Jni(JNIEnv* ,
jclass ,
jlong jwbwi_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
return static_cast<jint>(wbwi->GetWriteBatch()->Count());
}
void Java_org_rocksdb_WriteBatchWithIndex_putJni__J_3BI_3BI(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jkey, jint jkey_len,
jbyteArray jentry_value, jint jentry_value_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto put = [&wbwi](ROCKSDB_NAMESPACE::Slice key,
ROCKSDB_NAMESPACE::Slice value) {
return wbwi->Put(key, value);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::kv_op(put, env, jkey, jkey_len, jentry_value,
jentry_value_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_putJni__J_3BI_3BIJ(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jkey, jint jkey_len,
jbyteArray jentry_value, jint jentry_value_len, jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
assert(cf_handle != nullptr);
auto put = [&wbwi, &cf_handle](ROCKSDB_NAMESPACE::Slice key,
ROCKSDB_NAMESPACE::Slice value) {
return wbwi->Put(cf_handle, key, value);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::kv_op(put, env, jkey, jkey_len, jentry_value,
jentry_value_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_putDirectJni(
JNIEnv* env, jclass , jlong jwb_handle, jobject jkey,
jint jkey_offset, jint jkey_len, jobject jval, jint jval_offset,
jint jval_len, jlong jcf_handle) {
auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
assert(wb != nullptr);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
auto put = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice& key,
ROCKSDB_NAMESPACE::Slice& value) {
if (cf_handle == nullptr) {
wb->Put(key, value);
} else {
wb->Put(cf_handle, key, value);
}
};
ROCKSDB_NAMESPACE::JniUtil::kv_op_direct(
put, env, jkey, jkey_offset, jkey_len, jval, jval_offset, jval_len);
}
void Java_org_rocksdb_WriteBatchWithIndex_mergeJni__J_3BI_3BI(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jkey, jint jkey_len,
jbyteArray jentry_value, jint jentry_value_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto merge = [&wbwi](ROCKSDB_NAMESPACE::Slice key,
ROCKSDB_NAMESPACE::Slice value) {
return wbwi->Merge(key, value);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::kv_op(merge, env, jkey, jkey_len,
jentry_value, jentry_value_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_mergeJni__J_3BI_3BIJ(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jkey, jint jkey_len,
jbyteArray jentry_value, jint jentry_value_len, jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
assert(cf_handle != nullptr);
auto merge = [&wbwi, &cf_handle](ROCKSDB_NAMESPACE::Slice key,
ROCKSDB_NAMESPACE::Slice value) {
return wbwi->Merge(cf_handle, key, value);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::kv_op(merge, env, jkey, jkey_len,
jentry_value, jentry_value_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_deleteJni__J_3BI(JNIEnv* env, jclass,
jlong jwbwi_handle,
jbyteArray jkey,
jint jkey_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto remove = [&wbwi](ROCKSDB_NAMESPACE::Slice key) {
return wbwi->Delete(key);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::k_op(remove, env, jkey, jkey_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_deleteJni__J_3BIJ(JNIEnv* env, jclass,
jlong jwbwi_handle,
jbyteArray jkey,
jint jkey_len,
jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
assert(cf_handle != nullptr);
auto remove = [&wbwi, &cf_handle](ROCKSDB_NAMESPACE::Slice key) {
return wbwi->Delete(cf_handle, key);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::k_op(remove, env, jkey, jkey_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_singleDeleteJni__J_3BI(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jkey, jint jkey_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto single_delete = [&wbwi](ROCKSDB_NAMESPACE::Slice key) {
return wbwi->SingleDelete(key);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::k_op(single_delete, env, jkey, jkey_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_singleDeleteJni__J_3BIJ(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jkey, jint jkey_len,
jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
assert(cf_handle != nullptr);
auto single_delete = [&wbwi, &cf_handle](ROCKSDB_NAMESPACE::Slice key) {
return wbwi->SingleDelete(cf_handle, key);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::k_op(single_delete, env, jkey, jkey_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_deleteDirectJni(
JNIEnv* env, jclass , jlong jwb_handle, jobject jkey,
jint jkey_offset, jint jkey_len, jlong jcf_handle) {
auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
assert(wb != nullptr);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
auto remove = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice& key) {
if (cf_handle == nullptr) {
wb->Delete(key);
} else {
wb->Delete(cf_handle, key);
}
};
ROCKSDB_NAMESPACE::JniUtil::k_op_direct(remove, env, jkey, jkey_offset,
jkey_len);
}
void Java_org_rocksdb_WriteBatchWithIndex_deleteRangeJni__J_3BI_3BI(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jbegin_key,
jint jbegin_key_len, jbyteArray jend_key, jint jend_key_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto deleteRange = [&wbwi](ROCKSDB_NAMESPACE::Slice beginKey,
ROCKSDB_NAMESPACE::Slice endKey) {
return wbwi->DeleteRange(beginKey, endKey);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::kv_op(deleteRange, env, jbegin_key,
jbegin_key_len, jend_key, jend_key_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_deleteRangeJni__J_3BI_3BIJ(
JNIEnv* env, jclass, jlong jwbwi_handle, jbyteArray jbegin_key,
jint jbegin_key_len, jbyteArray jend_key, jint jend_key_len,
jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
assert(cf_handle != nullptr);
auto deleteRange = [&wbwi, &cf_handle](ROCKSDB_NAMESPACE::Slice beginKey,
ROCKSDB_NAMESPACE::Slice endKey) {
return wbwi->DeleteRange(cf_handle, beginKey, endKey);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::kv_op(deleteRange, env, jbegin_key,
jbegin_key_len, jend_key, jend_key_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_putLogDataJni(JNIEnv* env, jclass,
jlong jwbwi_handle,
jbyteArray jblob,
jint jblob_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto putLogData = [&wbwi](ROCKSDB_NAMESPACE::Slice blob) {
return wbwi->PutLogData(blob);
};
std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
ROCKSDB_NAMESPACE::JniUtil::k_op(putLogData, env, jblob, jblob_len);
if (status != nullptr && !status->ok()) {
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
}
}
void Java_org_rocksdb_WriteBatchWithIndex_clear0Jni(JNIEnv* ,
jclass ,
jlong jwbwi_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
wbwi->Clear();
}
void Java_org_rocksdb_WriteBatchWithIndex_setSavePoint0Jni(JNIEnv* ,
jclass ,
jlong jwbwi_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
wbwi->SetSavePoint();
}
void Java_org_rocksdb_WriteBatchWithIndex_rollbackToSavePoint0Jni(
JNIEnv* env, jclass , jlong jwbwi_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto s = wbwi->RollbackToSavePoint();
if (s.ok()) {
return;
}
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
}
void Java_org_rocksdb_WriteBatchWithIndex_popSavePointJni(JNIEnv* env,
jclass ,
jlong jwbwi_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto s = wbwi->PopSavePoint();
if (s.ok()) {
return;
}
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
}
void Java_org_rocksdb_WriteBatchWithIndex_setMaxBytesJni(JNIEnv* ,
jclass ,
jlong jwbwi_handle,
jlong jmax_bytes) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
wbwi->SetMaxBytes(static_cast<size_t>(jmax_bytes));
}
jobject Java_org_rocksdb_WriteBatchWithIndex_getWriteBatchJni(
JNIEnv* env, jclass , jlong jwbwi_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
assert(wbwi != nullptr);
auto* wb = wbwi->GetWriteBatch();
return ROCKSDB_NAMESPACE::WriteBatchJni::construct(env, wb);
}
jlong Java_org_rocksdb_WriteBatchWithIndex_iterator0(JNIEnv* ,
jclass ,
jlong jwbwi_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
auto* wbwi_iterator = wbwi->NewIterator();
return GET_CPLUSPLUS_POINTER(wbwi_iterator);
}
jlong Java_org_rocksdb_WriteBatchWithIndex_iterator1(JNIEnv* ,
jclass ,
jlong jwbwi_handle,
jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
auto* wbwi_iterator = wbwi->NewIterator(cf_handle);
return GET_CPLUSPLUS_POINTER(wbwi_iterator);
}
jlong Java_org_rocksdb_WriteBatchWithIndex_iteratorWithBase(
JNIEnv*, jclass, jlong jwbwi_handle, jlong jcf_handle,
jlong jbase_iterator_handle, jlong jread_opts_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
auto* base_iterator =
reinterpret_cast<ROCKSDB_NAMESPACE::Iterator*>(jbase_iterator_handle);
ROCKSDB_NAMESPACE::ReadOptions* read_opts =
jread_opts_handle == 0
? nullptr
: reinterpret_cast<ROCKSDB_NAMESPACE::ReadOptions*>(
jread_opts_handle);
auto* iterator =
wbwi->NewIteratorWithBase(cf_handle, base_iterator, read_opts);
return GET_CPLUSPLUS_POINTER(iterator);
}
jbyteArray JNICALL Java_org_rocksdb_WriteBatchWithIndex_getFromBatch__JJ_3BI(
JNIEnv* env, jclass , jlong jwbwi_handle, jlong jdbopt_handle,
jbyteArray jkey, jint jkey_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
auto* dbopt = reinterpret_cast<ROCKSDB_NAMESPACE::DBOptions*>(jdbopt_handle);
auto getter = [&wbwi, &dbopt](const ROCKSDB_NAMESPACE::Slice& key,
std::string* value) {
return wbwi->GetFromBatch(*dbopt, key, value);
};
return ROCKSDB_NAMESPACE::JniUtil::v_op(getter, env, jkey, jkey_len);
}
jbyteArray Java_org_rocksdb_WriteBatchWithIndex_getFromBatch__JJ_3BIJ(
JNIEnv* env, jclass , jlong jwbwi_handle, jlong jdbopt_handle,
jbyteArray jkey, jint jkey_len, jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
auto* dbopt = reinterpret_cast<ROCKSDB_NAMESPACE::DBOptions*>(jdbopt_handle);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
auto getter = [&wbwi, &cf_handle, &dbopt](const ROCKSDB_NAMESPACE::Slice& key,
std::string* value) {
return wbwi->GetFromBatch(cf_handle, *dbopt, key, value);
};
return ROCKSDB_NAMESPACE::JniUtil::v_op(getter, env, jkey, jkey_len);
}
jbyteArray Java_org_rocksdb_WriteBatchWithIndex_getFromBatchAndDB__JJJ_3BI(
JNIEnv* env, jclass , jlong jwbwi_handle, jlong jdb_handle,
jlong jreadopt_handle, jbyteArray jkey, jint jkey_len) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
auto* db = reinterpret_cast<ROCKSDB_NAMESPACE::DB*>(jdb_handle);
auto* readopt =
reinterpret_cast<ROCKSDB_NAMESPACE::ReadOptions*>(jreadopt_handle);
auto getter = [&wbwi, &db, &readopt](const ROCKSDB_NAMESPACE::Slice& key,
std::string* value) {
return wbwi->GetFromBatchAndDB(db, *readopt, key, value);
};
return ROCKSDB_NAMESPACE::JniUtil::v_op(getter, env, jkey, jkey_len);
}
jbyteArray Java_org_rocksdb_WriteBatchWithIndex_getFromBatchAndDB__JJJ_3BIJ(
JNIEnv* env, jclass , jlong jwbwi_handle, jlong jdb_handle,
jlong jreadopt_handle, jbyteArray jkey, jint jkey_len, jlong jcf_handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(jwbwi_handle);
auto* db = reinterpret_cast<ROCKSDB_NAMESPACE::DB*>(jdb_handle);
auto* readopt =
reinterpret_cast<ROCKSDB_NAMESPACE::ReadOptions*>(jreadopt_handle);
auto* cf_handle =
reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
auto getter = [&wbwi, &db, &cf_handle, &readopt](
const ROCKSDB_NAMESPACE::Slice& key, std::string* value) {
return wbwi->GetFromBatchAndDB(db, *readopt, cf_handle, key, value);
};
return ROCKSDB_NAMESPACE::JniUtil::v_op(getter, env, jkey, jkey_len);
}
void Java_org_rocksdb_WriteBatchWithIndex_disposeInternalJni(JNIEnv* ,
jclass ,
jlong handle) {
auto* wbwi =
reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex*>(handle);
assert(wbwi != nullptr);
delete wbwi;
}
void Java_org_rocksdb_WBWIRocksIterator_disposeInternalJni(JNIEnv* ,
jclass ,
jlong handle) {
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
assert(it != nullptr);
delete it;
}
jboolean Java_org_rocksdb_WBWIRocksIterator_isValid0Jni(JNIEnv* ,
jclass ,
jlong handle) {
return reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle)->Valid();
}
void Java_org_rocksdb_WBWIRocksIterator_seekToFirst0Jni(JNIEnv* ,
jclass ,
jlong handle) {
reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle)->SeekToFirst();
}
void Java_org_rocksdb_WBWIRocksIterator_seekToLast0Jni(JNIEnv* ,
jclass ,
jlong handle) {
reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle)->SeekToLast();
}
void Java_org_rocksdb_WBWIRocksIterator_next0Jni(JNIEnv* ,
jclass ,
jlong handle) {
reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle)->Next();
}
void Java_org_rocksdb_WBWIRocksIterator_prev0Jni(JNIEnv* ,
jclass ,
jlong handle) {
reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle)->Prev();
}
void Java_org_rocksdb_WBWIRocksIterator_seek0Jni(JNIEnv* env, jclass ,
jlong handle,
jbyteArray jtarget,
jint jtarget_len) {
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
jbyte* target = new jbyte[jtarget_len];
env->GetByteArrayRegion(jtarget, 0, jtarget_len, target);
if (env->ExceptionCheck()) {
delete[] target;
return;
}
ROCKSDB_NAMESPACE::Slice target_slice(reinterpret_cast<char*>(target),
jtarget_len);
it->Seek(target_slice);
delete[] target;
}
void Java_org_rocksdb_WBWIRocksIterator_seekDirect0Jni(
JNIEnv* env, jclass , jlong handle, jobject jtarget,
jint jtarget_off, jint jtarget_len) {
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
auto seek = [&it](ROCKSDB_NAMESPACE::Slice& target_slice) {
it->Seek(target_slice);
};
ROCKSDB_NAMESPACE::JniUtil::k_op_direct(seek, env, jtarget, jtarget_off,
jtarget_len);
}
void Java_org_rocksdb_WBWIRocksIterator_seekByteArray0Jni(
JNIEnv* env, jclass , jlong handle, jbyteArray jtarget,
jint jtarget_off, jint jtarget_len) {
const std::unique_ptr<char[]> target(new char[jtarget_len]);
if (target == nullptr) {
jclass oom_class = env->FindClass("/lang/java/OutOfMemoryError");
env->ThrowNew(oom_class,
"Memory allocation failed in RocksDB JNI function");
return;
}
env->GetByteArrayRegion(jtarget, jtarget_off, jtarget_len,
reinterpret_cast<jbyte*>(target.get()));
ROCKSDB_NAMESPACE::Slice target_slice(target.get(), jtarget_len);
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
it->Seek(target_slice);
}
void Java_org_rocksdb_WBWIRocksIterator_seekForPrev0Jni(JNIEnv* env,
jclass ,
jlong handle,
jbyteArray jtarget,
jint jtarget_len) {
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
jbyte* target = new jbyte[jtarget_len];
env->GetByteArrayRegion(jtarget, 0, jtarget_len, target);
if (env->ExceptionCheck()) {
delete[] target;
return;
}
ROCKSDB_NAMESPACE::Slice target_slice(reinterpret_cast<char*>(target),
jtarget_len);
it->SeekForPrev(target_slice);
delete[] target;
}
void Java_org_rocksdb_WBWIRocksIterator_seekForPrevDirect0Jni(
JNIEnv* env, jclass , jlong handle, jobject jtarget,
jint jtarget_off, jint jtarget_len) {
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
auto seek_for_prev = [&it](ROCKSDB_NAMESPACE::Slice& target_slice) {
it->SeekForPrev(target_slice);
};
ROCKSDB_NAMESPACE::JniUtil::k_op_direct(seek_for_prev, env, jtarget,
jtarget_off, jtarget_len);
}
void Java_org_rocksdb_WBWIRocksIterator_seekForPrevByteArray0Jni(
JNIEnv* env, jclass , jlong handle, jbyteArray jtarget,
jint jtarget_off, jint jtarget_len) {
const std::unique_ptr<char[]> target(new char[jtarget_len]);
if (target == nullptr) {
jclass oom_class = env->FindClass("/lang/java/OutOfMemoryError");
env->ThrowNew(oom_class,
"Memory allocation failed in RocksDB JNI function");
return;
}
env->GetByteArrayRegion(jtarget, jtarget_off, jtarget_len,
reinterpret_cast<jbyte*>(target.get()));
ROCKSDB_NAMESPACE::Slice target_slice(target.get(), jtarget_len);
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
it->SeekForPrev(target_slice);
}
void Java_org_rocksdb_WBWIRocksIterator_status0Jni(JNIEnv* env, jclass ,
jlong handle) {
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
ROCKSDB_NAMESPACE::Status s = it->status();
if (s.ok()) {
return;
}
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
}
jlongArray Java_org_rocksdb_WBWIRocksIterator_entry1(JNIEnv* env,
jclass ,
jlong handle) {
auto* it = reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator*>(handle);
const ROCKSDB_NAMESPACE::WriteEntry& we = it->Entry();
jlong results[3];
results[0] = ROCKSDB_NAMESPACE::WriteTypeJni::toJavaWriteType(we.type);
auto* key_slice = new ROCKSDB_NAMESPACE::Slice(we.key.data(), we.key.size());
results[1] = GET_CPLUSPLUS_POINTER(key_slice);
if (we.type == ROCKSDB_NAMESPACE::kDeleteRecord ||
we.type == ROCKSDB_NAMESPACE::kSingleDeleteRecord ||
we.type == ROCKSDB_NAMESPACE::kLogDataRecord) {
results[2] = 0;
} else {
auto* value_slice =
new ROCKSDB_NAMESPACE::Slice(we.value.data(), we.value.size());
results[2] = GET_CPLUSPLUS_POINTER(value_slice);
}
jlongArray jresults = env->NewLongArray(3);
if (jresults == nullptr) {
if (results[2] != 0) {
auto* value_slice =
reinterpret_cast<ROCKSDB_NAMESPACE::Slice*>(results[2]);
delete value_slice;
}
delete key_slice;
return nullptr;
}
env->SetLongArrayRegion(jresults, 0, 3, results);
if (env->ExceptionCheck()) {
env->DeleteLocalRef(jresults);
if (results[2] != 0) {
auto* value_slice =
reinterpret_cast<ROCKSDB_NAMESPACE::Slice*>(results[2]);
delete value_slice;
}
delete key_slice;
return nullptr;
}
return jresults;
}
void Java_org_rocksdb_WBWIRocksIterator_refresh0Jni(JNIEnv* env,
jobject ,
jlong ) {
ROCKSDB_NAMESPACE::Status s =
ROCKSDB_NAMESPACE::Status::NotSupported("Refresh() is not supported");
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
}
void Java_org_rocksdb_WBWIRocksIterator_refresh1(JNIEnv* env, jobject ,
jlong ,
jlong ) {
ROCKSDB_NAMESPACE::Status s = ROCKSDB_NAMESPACE::Status::NotSupported(
"Refresh(Snapshot*) is not supported");
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
}