1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
6 // This file implements the "bridge" between Java and C++ and enables
7 // calling c++ ROCKSDB_NAMESPACE::WriteBatchWithIndex methods from Java side.
9 #include "rocksdb/utilities/write_batch_with_index.h"
10 #include "include/org_rocksdb_WBWIRocksIterator.h"
11 #include "include/org_rocksdb_WriteBatchWithIndex.h"
12 #include "rocksdb/comparator.h"
13 #include "rocksjni/portal.h"
16 * Class: org_rocksdb_WriteBatchWithIndex
17 * Method: newWriteBatchWithIndex
20 jlong
Java_org_rocksdb_WriteBatchWithIndex_newWriteBatchWithIndex__(
21 JNIEnv
* /*env*/, jclass
/*jcls*/) {
22 auto* wbwi
= new ROCKSDB_NAMESPACE::WriteBatchWithIndex();
23 return reinterpret_cast<jlong
>(wbwi
);
27 * Class: org_rocksdb_WriteBatchWithIndex
28 * Method: newWriteBatchWithIndex
31 jlong
Java_org_rocksdb_WriteBatchWithIndex_newWriteBatchWithIndex__Z(
32 JNIEnv
* /*env*/, jclass
/*jcls*/, jboolean joverwrite_key
) {
33 auto* wbwi
= new ROCKSDB_NAMESPACE::WriteBatchWithIndex(
34 ROCKSDB_NAMESPACE::BytewiseComparator(), 0,
35 static_cast<bool>(joverwrite_key
));
36 return reinterpret_cast<jlong
>(wbwi
);
40 * Class: org_rocksdb_WriteBatchWithIndex
41 * Method: newWriteBatchWithIndex
44 jlong
Java_org_rocksdb_WriteBatchWithIndex_newWriteBatchWithIndex__JBIZ(
45 JNIEnv
* /*env*/, jclass
/*jcls*/, jlong jfallback_index_comparator_handle
,
46 jbyte jcomparator_type
, jint jreserved_bytes
, jboolean joverwrite_key
) {
47 ROCKSDB_NAMESPACE::Comparator
* fallback_comparator
= nullptr;
48 switch (jcomparator_type
) {
52 reinterpret_cast<ROCKSDB_NAMESPACE::ComparatorJniCallback
*>(
53 jfallback_index_comparator_handle
);
56 // JAVA_NATIVE_COMPARATOR_WRAPPER
58 fallback_comparator
= reinterpret_cast<ROCKSDB_NAMESPACE::Comparator
*>(
59 jfallback_index_comparator_handle
);
62 auto* wbwi
= new ROCKSDB_NAMESPACE::WriteBatchWithIndex(
63 fallback_comparator
, static_cast<size_t>(jreserved_bytes
),
64 static_cast<bool>(joverwrite_key
));
65 return reinterpret_cast<jlong
>(wbwi
);
69 * Class: org_rocksdb_WriteBatchWithIndex
73 jint
Java_org_rocksdb_WriteBatchWithIndex_count0(JNIEnv
* /*env*/,
77 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
78 assert(wbwi
!= nullptr);
80 return static_cast<jint
>(wbwi
->GetWriteBatch()->Count());
84 * Class: org_rocksdb_WriteBatchWithIndex
86 * Signature: (J[BI[BI)V
88 void Java_org_rocksdb_WriteBatchWithIndex_put__J_3BI_3BI(
89 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jkey
,
90 jint jkey_len
, jbyteArray jentry_value
, jint jentry_value_len
) {
92 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
93 assert(wbwi
!= nullptr);
94 auto put
= [&wbwi
](ROCKSDB_NAMESPACE::Slice key
,
95 ROCKSDB_NAMESPACE::Slice value
) {
96 return wbwi
->Put(key
, value
);
98 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
99 ROCKSDB_NAMESPACE::JniUtil::kv_op(put
, env
, jobj
, jkey
, jkey_len
,
100 jentry_value
, jentry_value_len
);
101 if (status
!= nullptr && !status
->ok()) {
102 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
107 * Class: org_rocksdb_WriteBatchWithIndex
109 * Signature: (J[BI[BIJ)V
111 void Java_org_rocksdb_WriteBatchWithIndex_put__J_3BI_3BIJ(
112 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jkey
,
113 jint jkey_len
, jbyteArray jentry_value
, jint jentry_value_len
,
116 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
117 assert(wbwi
!= nullptr);
119 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
120 assert(cf_handle
!= nullptr);
121 auto put
= [&wbwi
, &cf_handle
](ROCKSDB_NAMESPACE::Slice key
,
122 ROCKSDB_NAMESPACE::Slice value
) {
123 return wbwi
->Put(cf_handle
, key
, value
);
125 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
126 ROCKSDB_NAMESPACE::JniUtil::kv_op(put
, env
, jobj
, jkey
, jkey_len
,
127 jentry_value
, jentry_value_len
);
128 if (status
!= nullptr && !status
->ok()) {
129 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
134 * Class: org_rocksdb_WriteBatchWithIndex
136 * Signature: (JLjava/nio/ByteBuffer;IILjava/nio/ByteBuffer;IIJ)V
138 void Java_org_rocksdb_WriteBatchWithIndex_putDirect(
139 JNIEnv
* env
, jobject
/*jobj*/, jlong jwb_handle
, jobject jkey
,
140 jint jkey_offset
, jint jkey_len
, jobject jval
, jint jval_offset
,
141 jint jval_len
, jlong jcf_handle
) {
142 auto* wb
= reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch
*>(jwb_handle
);
143 assert(wb
!= nullptr);
145 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
146 auto put
= [&wb
, &cf_handle
](ROCKSDB_NAMESPACE::Slice
& key
,
147 ROCKSDB_NAMESPACE::Slice
& value
) {
148 if (cf_handle
== nullptr) {
151 wb
->Put(cf_handle
, key
, value
);
154 ROCKSDB_NAMESPACE::JniUtil::kv_op_direct(
155 put
, env
, jkey
, jkey_offset
, jkey_len
, jval
, jval_offset
, jval_len
);
159 * Class: org_rocksdb_WriteBatchWithIndex
161 * Signature: (J[BI[BI)V
163 void Java_org_rocksdb_WriteBatchWithIndex_merge__J_3BI_3BI(
164 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jkey
,
165 jint jkey_len
, jbyteArray jentry_value
, jint jentry_value_len
) {
167 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
168 assert(wbwi
!= nullptr);
169 auto merge
= [&wbwi
](ROCKSDB_NAMESPACE::Slice key
,
170 ROCKSDB_NAMESPACE::Slice value
) {
171 return wbwi
->Merge(key
, value
);
173 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
174 ROCKSDB_NAMESPACE::JniUtil::kv_op(merge
, env
, jobj
, jkey
, jkey_len
,
175 jentry_value
, jentry_value_len
);
176 if (status
!= nullptr && !status
->ok()) {
177 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
182 * Class: org_rocksdb_WriteBatchWithIndex
184 * Signature: (J[BI[BIJ)V
186 void Java_org_rocksdb_WriteBatchWithIndex_merge__J_3BI_3BIJ(
187 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jkey
,
188 jint jkey_len
, jbyteArray jentry_value
, jint jentry_value_len
,
191 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
192 assert(wbwi
!= nullptr);
194 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
195 assert(cf_handle
!= nullptr);
196 auto merge
= [&wbwi
, &cf_handle
](ROCKSDB_NAMESPACE::Slice key
,
197 ROCKSDB_NAMESPACE::Slice value
) {
198 return wbwi
->Merge(cf_handle
, key
, value
);
200 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
201 ROCKSDB_NAMESPACE::JniUtil::kv_op(merge
, env
, jobj
, jkey
, jkey_len
,
202 jentry_value
, jentry_value_len
);
203 if (status
!= nullptr && !status
->ok()) {
204 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
209 * Class: org_rocksdb_WriteBatchWithIndex
213 void Java_org_rocksdb_WriteBatchWithIndex_delete__J_3BI(JNIEnv
* env
,
219 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
220 assert(wbwi
!= nullptr);
221 auto remove
= [&wbwi
](ROCKSDB_NAMESPACE::Slice key
) {
222 return wbwi
->Delete(key
);
224 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
225 ROCKSDB_NAMESPACE::JniUtil::k_op(remove
, env
, jobj
, jkey
, jkey_len
);
226 if (status
!= nullptr && !status
->ok()) {
227 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
232 * Class: org_rocksdb_WriteBatchWithIndex
234 * Signature: (J[BIJ)V
236 void Java_org_rocksdb_WriteBatchWithIndex_delete__J_3BIJ(
237 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jkey
,
238 jint jkey_len
, jlong jcf_handle
) {
240 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
241 assert(wbwi
!= nullptr);
243 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
244 assert(cf_handle
!= nullptr);
245 auto remove
= [&wbwi
, &cf_handle
](ROCKSDB_NAMESPACE::Slice key
) {
246 return wbwi
->Delete(cf_handle
, key
);
248 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
249 ROCKSDB_NAMESPACE::JniUtil::k_op(remove
, env
, jobj
, jkey
, jkey_len
);
250 if (status
!= nullptr && !status
->ok()) {
251 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
256 * Class: org_rocksdb_WriteBatchWithIndex
257 * Method: singleDelete
260 void Java_org_rocksdb_WriteBatchWithIndex_singleDelete__J_3BI(
261 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jkey
,
264 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
265 assert(wbwi
!= nullptr);
266 auto single_delete
= [&wbwi
](ROCKSDB_NAMESPACE::Slice key
) {
267 return wbwi
->SingleDelete(key
);
269 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
270 ROCKSDB_NAMESPACE::JniUtil::k_op(single_delete
, env
, jobj
, jkey
,
272 if (status
!= nullptr && !status
->ok()) {
273 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
278 * Class: org_rocksdb_WriteBatchWithIndex
279 * Method: singleDelete
280 * Signature: (J[BIJ)V
282 void Java_org_rocksdb_WriteBatchWithIndex_singleDelete__J_3BIJ(
283 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jkey
,
284 jint jkey_len
, jlong jcf_handle
) {
286 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
287 assert(wbwi
!= nullptr);
289 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
290 assert(cf_handle
!= nullptr);
291 auto single_delete
= [&wbwi
, &cf_handle
](ROCKSDB_NAMESPACE::Slice key
) {
292 return wbwi
->SingleDelete(cf_handle
, key
);
294 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
295 ROCKSDB_NAMESPACE::JniUtil::k_op(single_delete
, env
, jobj
, jkey
,
297 if (status
!= nullptr && !status
->ok()) {
298 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
303 * Class: org_rocksdb_WriteBatchWithIndex
304 * Method: removeDirect
305 * Signature: (JLjava/nio/ByteBuffer;IIJ)V
307 void Java_org_rocksdb_WriteBatchWithIndex_removeDirect(
308 JNIEnv
* env
, jobject
/*jobj*/, jlong jwb_handle
, jobject jkey
,
309 jint jkey_offset
, jint jkey_len
, jlong jcf_handle
) {
310 auto* wb
= reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch
*>(jwb_handle
);
311 assert(wb
!= nullptr);
313 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
314 auto remove
= [&wb
, &cf_handle
](ROCKSDB_NAMESPACE::Slice
& key
) {
315 if (cf_handle
== nullptr) {
318 wb
->Delete(cf_handle
, key
);
321 ROCKSDB_NAMESPACE::JniUtil::k_op_direct(remove
, env
, jkey
, jkey_offset
,
326 * Class: org_rocksdb_WriteBatchWithIndex
327 * Method: deleteRange
328 * Signature: (J[BI[BI)V
330 void Java_org_rocksdb_WriteBatchWithIndex_deleteRange__J_3BI_3BI(
331 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jbegin_key
,
332 jint jbegin_key_len
, jbyteArray jend_key
, jint jend_key_len
) {
334 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
335 assert(wbwi
!= nullptr);
336 auto deleteRange
= [&wbwi
](ROCKSDB_NAMESPACE::Slice beginKey
,
337 ROCKSDB_NAMESPACE::Slice endKey
) {
338 return wbwi
->DeleteRange(beginKey
, endKey
);
340 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
341 ROCKSDB_NAMESPACE::JniUtil::kv_op(deleteRange
, env
, jobj
, jbegin_key
,
342 jbegin_key_len
, jend_key
, jend_key_len
);
343 if (status
!= nullptr && !status
->ok()) {
344 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
349 * Class: org_rocksdb_WriteBatchWithIndex
350 * Method: deleteRange
351 * Signature: (J[BI[BIJ)V
353 void Java_org_rocksdb_WriteBatchWithIndex_deleteRange__J_3BI_3BIJ(
354 JNIEnv
* env
, jobject jobj
, jlong jwbwi_handle
, jbyteArray jbegin_key
,
355 jint jbegin_key_len
, jbyteArray jend_key
, jint jend_key_len
,
358 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
359 assert(wbwi
!= nullptr);
361 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
362 assert(cf_handle
!= nullptr);
363 auto deleteRange
= [&wbwi
, &cf_handle
](ROCKSDB_NAMESPACE::Slice beginKey
,
364 ROCKSDB_NAMESPACE::Slice endKey
) {
365 return wbwi
->DeleteRange(cf_handle
, beginKey
, endKey
);
367 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
368 ROCKSDB_NAMESPACE::JniUtil::kv_op(deleteRange
, env
, jobj
, jbegin_key
,
369 jbegin_key_len
, jend_key
, jend_key_len
);
370 if (status
!= nullptr && !status
->ok()) {
371 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
376 * Class: org_rocksdb_WriteBatchWithIndex
380 void Java_org_rocksdb_WriteBatchWithIndex_putLogData(JNIEnv
* env
, jobject jobj
,
385 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
386 assert(wbwi
!= nullptr);
387 auto putLogData
= [&wbwi
](ROCKSDB_NAMESPACE::Slice blob
) {
388 return wbwi
->PutLogData(blob
);
390 std::unique_ptr
<ROCKSDB_NAMESPACE::Status
> status
=
391 ROCKSDB_NAMESPACE::JniUtil::k_op(putLogData
, env
, jobj
, jblob
, jblob_len
);
392 if (status
!= nullptr && !status
->ok()) {
393 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, status
);
398 * Class: org_rocksdb_WriteBatchWithIndex
402 void Java_org_rocksdb_WriteBatchWithIndex_clear0(JNIEnv
* /*env*/,
404 jlong jwbwi_handle
) {
406 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
407 assert(wbwi
!= nullptr);
413 * Class: org_rocksdb_WriteBatchWithIndex
414 * Method: setSavePoint0
417 void Java_org_rocksdb_WriteBatchWithIndex_setSavePoint0(JNIEnv
* /*env*/,
419 jlong jwbwi_handle
) {
421 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
422 assert(wbwi
!= nullptr);
424 wbwi
->SetSavePoint();
428 * Class: org_rocksdb_WriteBatchWithIndex
429 * Method: rollbackToSavePoint0
432 void Java_org_rocksdb_WriteBatchWithIndex_rollbackToSavePoint0(
433 JNIEnv
* env
, jobject
/*jobj*/, jlong jwbwi_handle
) {
435 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
436 assert(wbwi
!= nullptr);
438 auto s
= wbwi
->RollbackToSavePoint();
444 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, s
);
448 * Class: org_rocksdb_WriteBatchWithIndex
449 * Method: popSavePoint
452 void Java_org_rocksdb_WriteBatchWithIndex_popSavePoint(JNIEnv
* env
,
454 jlong jwbwi_handle
) {
456 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
457 assert(wbwi
!= nullptr);
459 auto s
= wbwi
->PopSavePoint();
465 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, s
);
469 * Class: org_rocksdb_WriteBatchWithIndex
470 * Method: setMaxBytes
473 void Java_org_rocksdb_WriteBatchWithIndex_setMaxBytes(JNIEnv
* /*env*/,
478 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
479 assert(wbwi
!= nullptr);
481 wbwi
->SetMaxBytes(static_cast<size_t>(jmax_bytes
));
485 * Class: org_rocksdb_WriteBatchWithIndex
486 * Method: getWriteBatch
487 * Signature: (J)Lorg/rocksdb/WriteBatch;
489 jobject
Java_org_rocksdb_WriteBatchWithIndex_getWriteBatch(JNIEnv
* env
,
491 jlong jwbwi_handle
) {
493 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
494 assert(wbwi
!= nullptr);
496 auto* wb
= wbwi
->GetWriteBatch();
498 // TODO(AR) is the `wb` object owned by us?
499 return ROCKSDB_NAMESPACE::WriteBatchJni::construct(env
, wb
);
503 * Class: org_rocksdb_WriteBatchWithIndex
507 jlong
Java_org_rocksdb_WriteBatchWithIndex_iterator0(JNIEnv
* /*env*/,
509 jlong jwbwi_handle
) {
511 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
512 auto* wbwi_iterator
= wbwi
->NewIterator();
513 return reinterpret_cast<jlong
>(wbwi_iterator
);
517 * Class: org_rocksdb_WriteBatchWithIndex
521 jlong
Java_org_rocksdb_WriteBatchWithIndex_iterator1(JNIEnv
* /*env*/,
526 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
528 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
529 auto* wbwi_iterator
= wbwi
->NewIterator(cf_handle
);
530 return reinterpret_cast<jlong
>(wbwi_iterator
);
534 * Class: org_rocksdb_WriteBatchWithIndex
535 * Method: iteratorWithBase
538 jlong
Java_org_rocksdb_WriteBatchWithIndex_iteratorWithBase(
539 JNIEnv
*, jobject
, jlong jwbwi_handle
, jlong jcf_handle
,
540 jlong jbase_iterator_handle
, jlong jread_opts_handle
) {
542 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
544 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
545 auto* base_iterator
=
546 reinterpret_cast<ROCKSDB_NAMESPACE::Iterator
*>(jbase_iterator_handle
);
547 ROCKSDB_NAMESPACE::ReadOptions
* read_opts
=
548 jread_opts_handle
== 0
550 : reinterpret_cast<ROCKSDB_NAMESPACE::ReadOptions
*>(
553 wbwi
->NewIteratorWithBase(cf_handle
, base_iterator
, read_opts
);
554 return reinterpret_cast<jlong
>(iterator
);
558 * Class: org_rocksdb_WriteBatchWithIndex
559 * Method: getFromBatch
560 * Signature: (JJ[BI)[B
562 jbyteArray JNICALL
Java_org_rocksdb_WriteBatchWithIndex_getFromBatch__JJ_3BI(
563 JNIEnv
* env
, jobject
/*jobj*/, jlong jwbwi_handle
, jlong jdbopt_handle
,
564 jbyteArray jkey
, jint jkey_len
) {
566 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
567 auto* dbopt
= reinterpret_cast<ROCKSDB_NAMESPACE::DBOptions
*>(jdbopt_handle
);
569 auto getter
= [&wbwi
, &dbopt
](const ROCKSDB_NAMESPACE::Slice
& key
,
570 std::string
* value
) {
571 return wbwi
->GetFromBatch(*dbopt
, key
, value
);
574 return ROCKSDB_NAMESPACE::JniUtil::v_op(getter
, env
, jkey
, jkey_len
);
578 * Class: org_rocksdb_WriteBatchWithIndex
579 * Method: getFromBatch
580 * Signature: (JJ[BIJ)[B
582 jbyteArray
Java_org_rocksdb_WriteBatchWithIndex_getFromBatch__JJ_3BIJ(
583 JNIEnv
* env
, jobject
/*jobj*/, jlong jwbwi_handle
, jlong jdbopt_handle
,
584 jbyteArray jkey
, jint jkey_len
, jlong jcf_handle
) {
586 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
587 auto* dbopt
= reinterpret_cast<ROCKSDB_NAMESPACE::DBOptions
*>(jdbopt_handle
);
589 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
591 auto getter
= [&wbwi
, &cf_handle
, &dbopt
](const ROCKSDB_NAMESPACE::Slice
& key
,
592 std::string
* value
) {
593 return wbwi
->GetFromBatch(cf_handle
, *dbopt
, key
, value
);
596 return ROCKSDB_NAMESPACE::JniUtil::v_op(getter
, env
, jkey
, jkey_len
);
600 * Class: org_rocksdb_WriteBatchWithIndex
601 * Method: getFromBatchAndDB
602 * Signature: (JJJ[BI)[B
604 jbyteArray
Java_org_rocksdb_WriteBatchWithIndex_getFromBatchAndDB__JJJ_3BI(
605 JNIEnv
* env
, jobject
/*jobj*/, jlong jwbwi_handle
, jlong jdb_handle
,
606 jlong jreadopt_handle
, jbyteArray jkey
, jint jkey_len
) {
608 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
609 auto* db
= reinterpret_cast<ROCKSDB_NAMESPACE::DB
*>(jdb_handle
);
611 reinterpret_cast<ROCKSDB_NAMESPACE::ReadOptions
*>(jreadopt_handle
);
613 auto getter
= [&wbwi
, &db
, &readopt
](const ROCKSDB_NAMESPACE::Slice
& key
,
614 std::string
* value
) {
615 return wbwi
->GetFromBatchAndDB(db
, *readopt
, key
, value
);
618 return ROCKSDB_NAMESPACE::JniUtil::v_op(getter
, env
, jkey
, jkey_len
);
622 * Class: org_rocksdb_WriteBatchWithIndex
623 * Method: getFromBatchAndDB
624 * Signature: (JJJ[BIJ)[B
626 jbyteArray
Java_org_rocksdb_WriteBatchWithIndex_getFromBatchAndDB__JJJ_3BIJ(
627 JNIEnv
* env
, jobject
/*jobj*/, jlong jwbwi_handle
, jlong jdb_handle
,
628 jlong jreadopt_handle
, jbyteArray jkey
, jint jkey_len
, jlong jcf_handle
) {
630 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(jwbwi_handle
);
631 auto* db
= reinterpret_cast<ROCKSDB_NAMESPACE::DB
*>(jdb_handle
);
633 reinterpret_cast<ROCKSDB_NAMESPACE::ReadOptions
*>(jreadopt_handle
);
635 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle
*>(jcf_handle
);
637 auto getter
= [&wbwi
, &db
, &cf_handle
, &readopt
](
638 const ROCKSDB_NAMESPACE::Slice
& key
, std::string
* value
) {
639 return wbwi
->GetFromBatchAndDB(db
, *readopt
, cf_handle
, key
, value
);
642 return ROCKSDB_NAMESPACE::JniUtil::v_op(getter
, env
, jkey
, jkey_len
);
646 * Class: org_rocksdb_WriteBatchWithIndex
647 * Method: disposeInternal
650 void Java_org_rocksdb_WriteBatchWithIndex_disposeInternal(JNIEnv
* /*env*/,
654 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchWithIndex
*>(handle
);
655 assert(wbwi
!= nullptr);
659 /* WBWIRocksIterator below */
662 * Class: org_rocksdb_WBWIRocksIterator
663 * Method: disposeInternal
666 void Java_org_rocksdb_WBWIRocksIterator_disposeInternal(JNIEnv
* /*env*/,
669 auto* it
= reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
);
670 assert(it
!= nullptr);
675 * Class: org_rocksdb_WBWIRocksIterator
679 jboolean
Java_org_rocksdb_WBWIRocksIterator_isValid0(JNIEnv
* /*env*/,
682 return reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
)->Valid();
686 * Class: org_rocksdb_WBWIRocksIterator
687 * Method: seekToFirst0
690 void Java_org_rocksdb_WBWIRocksIterator_seekToFirst0(JNIEnv
* /*env*/,
693 reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
)->SeekToFirst();
697 * Class: org_rocksdb_WBWIRocksIterator
698 * Method: seekToLast0
701 void Java_org_rocksdb_WBWIRocksIterator_seekToLast0(JNIEnv
* /*env*/,
704 reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
)->SeekToLast();
708 * Class: org_rocksdb_WBWIRocksIterator
712 void Java_org_rocksdb_WBWIRocksIterator_next0(JNIEnv
* /*env*/, jobject
/*jobj*/,
714 reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
)->Next();
718 * Class: org_rocksdb_WBWIRocksIterator
722 void Java_org_rocksdb_WBWIRocksIterator_prev0(JNIEnv
* /*env*/, jobject
/*jobj*/,
724 reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
)->Prev();
728 * Class: org_rocksdb_WBWIRocksIterator
732 void Java_org_rocksdb_WBWIRocksIterator_seek0(JNIEnv
* env
, jobject
/*jobj*/,
733 jlong handle
, jbyteArray jtarget
,
735 auto* it
= reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
);
736 jbyte
* target
= env
->GetByteArrayElements(jtarget
, nullptr);
737 if (target
== nullptr) {
738 // exception thrown: OutOfMemoryError
742 ROCKSDB_NAMESPACE::Slice
target_slice(reinterpret_cast<char*>(target
),
745 it
->Seek(target_slice
);
747 env
->ReleaseByteArrayElements(jtarget
, target
, JNI_ABORT
);
751 * Class: org_rocksdb_WBWIRocksIterator
752 * Method: seekDirect0
753 * Signature: (JLjava/nio/ByteBuffer;II)V
755 void Java_org_rocksdb_WBWIRocksIterator_seekDirect0(
756 JNIEnv
* env
, jobject
/*jobj*/, jlong handle
, jobject jtarget
,
757 jint jtarget_off
, jint jtarget_len
) {
758 auto* it
= reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
);
759 auto seek
= [&it
](ROCKSDB_NAMESPACE::Slice
& target_slice
) {
760 it
->Seek(target_slice
);
762 ROCKSDB_NAMESPACE::JniUtil::k_op_direct(seek
, env
, jtarget
, jtarget_off
,
767 * Class: org_rocksdb_WBWIRocksIterator
768 * Method: seekForPrev0
771 void Java_org_rocksdb_WBWIRocksIterator_seekForPrev0(JNIEnv
* env
,
776 auto* it
= reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
);
777 jbyte
* target
= env
->GetByteArrayElements(jtarget
, nullptr);
778 if (target
== nullptr) {
779 // exception thrown: OutOfMemoryError
783 ROCKSDB_NAMESPACE::Slice
target_slice(reinterpret_cast<char*>(target
),
786 it
->SeekForPrev(target_slice
);
788 env
->ReleaseByteArrayElements(jtarget
, target
, JNI_ABORT
);
792 * Class: org_rocksdb_WBWIRocksIterator
796 void Java_org_rocksdb_WBWIRocksIterator_status0(JNIEnv
* env
, jobject
/*jobj*/,
798 auto* it
= reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
);
799 ROCKSDB_NAMESPACE::Status s
= it
->status();
805 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, s
);
809 * Class: org_rocksdb_WBWIRocksIterator
813 jlongArray
Java_org_rocksdb_WBWIRocksIterator_entry1(JNIEnv
* env
,
816 auto* it
= reinterpret_cast<ROCKSDB_NAMESPACE::WBWIIterator
*>(handle
);
817 const ROCKSDB_NAMESPACE::WriteEntry
& we
= it
->Entry();
821 // set the type of the write entry
822 results
[0] = ROCKSDB_NAMESPACE::WriteTypeJni::toJavaWriteType(we
.type
);
824 // NOTE: key_slice and value_slice will be freed by
825 // org.rocksdb.DirectSlice#close
827 auto* key_slice
= new ROCKSDB_NAMESPACE::Slice(we
.key
.data(), we
.key
.size());
828 results
[1] = reinterpret_cast<jlong
>(key_slice
);
829 if (we
.type
== ROCKSDB_NAMESPACE::kDeleteRecord
||
830 we
.type
== ROCKSDB_NAMESPACE::kSingleDeleteRecord
||
831 we
.type
== ROCKSDB_NAMESPACE::kLogDataRecord
) {
832 // set native handle of value slice to null if no value available
836 new ROCKSDB_NAMESPACE::Slice(we
.value
.data(), we
.value
.size());
837 results
[2] = reinterpret_cast<jlong
>(value_slice
);
840 jlongArray jresults
= env
->NewLongArray(3);
841 if (jresults
== nullptr) {
842 // exception thrown: OutOfMemoryError
843 if (results
[2] != 0) {
845 reinterpret_cast<ROCKSDB_NAMESPACE::Slice
*>(results
[2]);
852 env
->SetLongArrayRegion(jresults
, 0, 3, results
);
853 if (env
->ExceptionCheck()) {
854 // exception thrown: ArrayIndexOutOfBoundsException
855 env
->DeleteLocalRef(jresults
);
856 if (results
[2] != 0) {
858 reinterpret_cast<ROCKSDB_NAMESPACE::Slice
*>(results
[2]);
869 * Class: org_rocksdb_WBWIRocksIterator
873 void Java_org_rocksdb_WBWIRocksIterator_refresh0(JNIEnv
* env
) {
874 ROCKSDB_NAMESPACE::Status s
= ROCKSDB_NAMESPACE::Status::NotSupported("Refresh() is not supported");
875 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, s
);