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).
5 //
6 // This file implements the "bridge" between Java and C++ and enables
7 // calling c++ ROCKSDB_NAMESPACE::WriteBatch methods from Java side.
8 #include <memory>
9
10 #include "db/memtable.h"
11 #include "db/write_batch_internal.h"
12 #include "include/org_rocksdb_WriteBatch.h"
13 #include "include/org_rocksdb_WriteBatch_Handler.h"
14 #include "logging/logging.h"
15 #include "rocksdb/db.h"
16 #include "rocksdb/env.h"
17 #include "rocksdb/memtablerep.h"
18 #include "rocksdb/status.h"
19 #include "rocksdb/write_batch.h"
20 #include "rocksdb/write_buffer_manager.h"
21 #include "rocksjni/portal.h"
22 #include "rocksjni/writebatchhandlerjnicallback.h"
23 #include "table/scoped_arena_iterator.h"
24
25 /*
26 * Class: org_rocksdb_WriteBatch
27 * Method: newWriteBatch
28 * Signature: (I)J
29 */
Java_org_rocksdb_WriteBatch_newWriteBatch__I(JNIEnv *,jclass,jint jreserved_bytes)30 jlong Java_org_rocksdb_WriteBatch_newWriteBatch__I(JNIEnv* /*env*/,
31 jclass /*jcls*/,
32 jint jreserved_bytes) {
33 auto* wb =
34 new ROCKSDB_NAMESPACE::WriteBatch(static_cast<size_t>(jreserved_bytes));
35 return reinterpret_cast<jlong>(wb);
36 }
37
38 /*
39 * Class: org_rocksdb_WriteBatch
40 * Method: newWriteBatch
41 * Signature: ([BI)J
42 */
Java_org_rocksdb_WriteBatch_newWriteBatch___3BI(JNIEnv * env,jclass,jbyteArray jserialized,jint jserialized_length)43 jlong Java_org_rocksdb_WriteBatch_newWriteBatch___3BI(JNIEnv* env,
44 jclass /*jcls*/,
45 jbyteArray jserialized,
46 jint jserialized_length) {
47 jboolean has_exception = JNI_FALSE;
48 std::string serialized = ROCKSDB_NAMESPACE::JniUtil::byteString<std::string>(
49 env, jserialized, jserialized_length,
50 [](const char* str, const size_t len) { return std::string(str, len); },
51 &has_exception);
52 if (has_exception == JNI_TRUE) {
53 // exception occurred
54 return 0;
55 }
56
57 auto* wb = new ROCKSDB_NAMESPACE::WriteBatch(serialized);
58 return reinterpret_cast<jlong>(wb);
59 }
60
61 /*
62 * Class: org_rocksdb_WriteBatch
63 * Method: count0
64 * Signature: (J)I
65 */
Java_org_rocksdb_WriteBatch_count0(JNIEnv *,jobject,jlong jwb_handle)66 jint Java_org_rocksdb_WriteBatch_count0(JNIEnv* /*env*/, jobject /*jobj*/,
67 jlong jwb_handle) {
68 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
69 assert(wb != nullptr);
70
71 return static_cast<jint>(wb->Count());
72 }
73
74 /*
75 * Class: org_rocksdb_WriteBatch
76 * Method: clear0
77 * Signature: (J)V
78 */
Java_org_rocksdb_WriteBatch_clear0(JNIEnv *,jobject,jlong jwb_handle)79 void Java_org_rocksdb_WriteBatch_clear0(JNIEnv* /*env*/, jobject /*jobj*/,
80 jlong jwb_handle) {
81 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
82 assert(wb != nullptr);
83
84 wb->Clear();
85 }
86
87 /*
88 * Class: org_rocksdb_WriteBatch
89 * Method: setSavePoint0
90 * Signature: (J)V
91 */
Java_org_rocksdb_WriteBatch_setSavePoint0(JNIEnv *,jobject,jlong jwb_handle)92 void Java_org_rocksdb_WriteBatch_setSavePoint0(JNIEnv* /*env*/,
93 jobject /*jobj*/,
94 jlong jwb_handle) {
95 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
96 assert(wb != nullptr);
97
98 wb->SetSavePoint();
99 }
100
101 /*
102 * Class: org_rocksdb_WriteBatch
103 * Method: rollbackToSavePoint0
104 * Signature: (J)V
105 */
Java_org_rocksdb_WriteBatch_rollbackToSavePoint0(JNIEnv * env,jobject,jlong jwb_handle)106 void Java_org_rocksdb_WriteBatch_rollbackToSavePoint0(JNIEnv* env,
107 jobject /*jobj*/,
108 jlong jwb_handle) {
109 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
110 assert(wb != nullptr);
111
112 auto s = wb->RollbackToSavePoint();
113
114 if (s.ok()) {
115 return;
116 }
117 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
118 }
119
120 /*
121 * Class: org_rocksdb_WriteBatch
122 * Method: popSavePoint
123 * Signature: (J)V
124 */
Java_org_rocksdb_WriteBatch_popSavePoint(JNIEnv * env,jobject,jlong jwb_handle)125 void Java_org_rocksdb_WriteBatch_popSavePoint(JNIEnv* env, jobject /*jobj*/,
126 jlong jwb_handle) {
127 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
128 assert(wb != nullptr);
129
130 auto s = wb->PopSavePoint();
131
132 if (s.ok()) {
133 return;
134 }
135 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
136 }
137
138 /*
139 * Class: org_rocksdb_WriteBatch
140 * Method: setMaxBytes
141 * Signature: (JJ)V
142 */
Java_org_rocksdb_WriteBatch_setMaxBytes(JNIEnv *,jobject,jlong jwb_handle,jlong jmax_bytes)143 void Java_org_rocksdb_WriteBatch_setMaxBytes(JNIEnv* /*env*/, jobject /*jobj*/,
144 jlong jwb_handle,
145 jlong jmax_bytes) {
146 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
147 assert(wb != nullptr);
148
149 wb->SetMaxBytes(static_cast<size_t>(jmax_bytes));
150 }
151
152 /*
153 * Class: org_rocksdb_WriteBatch
154 * Method: put
155 * Signature: (J[BI[BI)V
156 */
Java_org_rocksdb_WriteBatch_put__J_3BI_3BI(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len,jbyteArray jentry_value,jint jentry_value_len)157 void Java_org_rocksdb_WriteBatch_put__J_3BI_3BI(JNIEnv* env, jobject jobj,
158 jlong jwb_handle,
159 jbyteArray jkey, jint jkey_len,
160 jbyteArray jentry_value,
161 jint jentry_value_len) {
162 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
163 assert(wb != nullptr);
164 auto put = [&wb](ROCKSDB_NAMESPACE::Slice key,
165 ROCKSDB_NAMESPACE::Slice value) {
166 return wb->Put(key, value);
167 };
168 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
169 ROCKSDB_NAMESPACE::JniUtil::kv_op(put, env, jobj, jkey, jkey_len,
170 jentry_value, jentry_value_len);
171 if (status != nullptr && !status->ok()) {
172 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
173 }
174 }
175
176 /*
177 * Class: org_rocksdb_WriteBatch
178 * Method: put
179 * Signature: (J[BI[BIJ)V
180 */
Java_org_rocksdb_WriteBatch_put__J_3BI_3BIJ(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len,jbyteArray jentry_value,jint jentry_value_len,jlong jcf_handle)181 void Java_org_rocksdb_WriteBatch_put__J_3BI_3BIJ(
182 JNIEnv* env, jobject jobj, jlong jwb_handle, jbyteArray jkey, jint jkey_len,
183 jbyteArray jentry_value, jint jentry_value_len, jlong jcf_handle) {
184 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
185 assert(wb != nullptr);
186 auto* cf_handle =
187 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
188 assert(cf_handle != nullptr);
189 auto put = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice key,
190 ROCKSDB_NAMESPACE::Slice value) {
191 return wb->Put(cf_handle, key, value);
192 };
193 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
194 ROCKSDB_NAMESPACE::JniUtil::kv_op(put, env, jobj, jkey, jkey_len,
195 jentry_value, jentry_value_len);
196 if (status != nullptr && !status->ok()) {
197 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
198 }
199 }
200
201 /*
202 * Class: org_rocksdb_WriteBatch
203 * Method: putDirect
204 * Signature: (JLjava/nio/ByteBuffer;IILjava/nio/ByteBuffer;IIJ)V
205 */
Java_org_rocksdb_WriteBatch_putDirect(JNIEnv * env,jobject,jlong jwb_handle,jobject jkey,jint jkey_offset,jint jkey_len,jobject jval,jint jval_offset,jint jval_len,jlong jcf_handle)206 void Java_org_rocksdb_WriteBatch_putDirect(JNIEnv* env, jobject /*jobj*/,
207 jlong jwb_handle, jobject jkey,
208 jint jkey_offset, jint jkey_len,
209 jobject jval, jint jval_offset,
210 jint jval_len, jlong jcf_handle) {
211 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
212 assert(wb != nullptr);
213 auto* cf_handle =
214 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
215 auto put = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice& key,
216 ROCKSDB_NAMESPACE::Slice& value) {
217 if (cf_handle == nullptr) {
218 wb->Put(key, value);
219 } else {
220 wb->Put(cf_handle, key, value);
221 }
222 };
223 ROCKSDB_NAMESPACE::JniUtil::kv_op_direct(
224 put, env, jkey, jkey_offset, jkey_len, jval, jval_offset, jval_len);
225 }
226
227 /*
228 * Class: org_rocksdb_WriteBatch
229 * Method: merge
230 * Signature: (J[BI[BI)V
231 */
Java_org_rocksdb_WriteBatch_merge__J_3BI_3BI(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len,jbyteArray jentry_value,jint jentry_value_len)232 void Java_org_rocksdb_WriteBatch_merge__J_3BI_3BI(
233 JNIEnv* env, jobject jobj, jlong jwb_handle, jbyteArray jkey, jint jkey_len,
234 jbyteArray jentry_value, jint jentry_value_len) {
235 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
236 assert(wb != nullptr);
237 auto merge = [&wb](ROCKSDB_NAMESPACE::Slice key,
238 ROCKSDB_NAMESPACE::Slice value) {
239 return wb->Merge(key, value);
240 };
241 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
242 ROCKSDB_NAMESPACE::JniUtil::kv_op(merge, env, jobj, jkey, jkey_len,
243 jentry_value, jentry_value_len);
244 if (status != nullptr && !status->ok()) {
245 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
246 }
247 }
248
249 /*
250 * Class: org_rocksdb_WriteBatch
251 * Method: merge
252 * Signature: (J[BI[BIJ)V
253 */
Java_org_rocksdb_WriteBatch_merge__J_3BI_3BIJ(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len,jbyteArray jentry_value,jint jentry_value_len,jlong jcf_handle)254 void Java_org_rocksdb_WriteBatch_merge__J_3BI_3BIJ(
255 JNIEnv* env, jobject jobj, jlong jwb_handle, jbyteArray jkey, jint jkey_len,
256 jbyteArray jentry_value, jint jentry_value_len, jlong jcf_handle) {
257 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
258 assert(wb != nullptr);
259 auto* cf_handle =
260 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
261 assert(cf_handle != nullptr);
262 auto merge = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice key,
263 ROCKSDB_NAMESPACE::Slice value) {
264 return wb->Merge(cf_handle, key, value);
265 };
266 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
267 ROCKSDB_NAMESPACE::JniUtil::kv_op(merge, env, jobj, jkey, jkey_len,
268 jentry_value, jentry_value_len);
269 if (status != nullptr && !status->ok()) {
270 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
271 }
272 }
273
274 /*
275 * Class: org_rocksdb_WriteBatch
276 * Method: delete
277 * Signature: (J[BI)V
278 */
Java_org_rocksdb_WriteBatch_delete__J_3BI(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len)279 void Java_org_rocksdb_WriteBatch_delete__J_3BI(JNIEnv* env, jobject jobj,
280 jlong jwb_handle,
281 jbyteArray jkey, jint jkey_len) {
282 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
283 assert(wb != nullptr);
284 auto remove = [&wb](ROCKSDB_NAMESPACE::Slice key) { return wb->Delete(key); };
285 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
286 ROCKSDB_NAMESPACE::JniUtil::k_op(remove, env, jobj, jkey, jkey_len);
287 if (status != nullptr && !status->ok()) {
288 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
289 }
290 }
291
292 /*
293 * Class: org_rocksdb_WriteBatch
294 * Method: delete
295 * Signature: (J[BIJ)V
296 */
Java_org_rocksdb_WriteBatch_delete__J_3BIJ(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len,jlong jcf_handle)297 void Java_org_rocksdb_WriteBatch_delete__J_3BIJ(JNIEnv* env, jobject jobj,
298 jlong jwb_handle,
299 jbyteArray jkey, jint jkey_len,
300 jlong jcf_handle) {
301 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
302 assert(wb != nullptr);
303 auto* cf_handle =
304 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
305 assert(cf_handle != nullptr);
306 auto remove = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice key) {
307 return wb->Delete(cf_handle, key);
308 };
309 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
310 ROCKSDB_NAMESPACE::JniUtil::k_op(remove, env, jobj, jkey, jkey_len);
311 if (status != nullptr && !status->ok()) {
312 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
313 }
314 }
315
316 /*
317 * Class: org_rocksdb_WriteBatch
318 * Method: singleDelete
319 * Signature: (J[BI)V
320 */
Java_org_rocksdb_WriteBatch_singleDelete__J_3BI(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len)321 void Java_org_rocksdb_WriteBatch_singleDelete__J_3BI(JNIEnv* env, jobject jobj,
322 jlong jwb_handle,
323 jbyteArray jkey,
324 jint jkey_len) {
325 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
326 assert(wb != nullptr);
327 auto single_delete = [&wb](ROCKSDB_NAMESPACE::Slice key) {
328 return wb->SingleDelete(key);
329 };
330 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
331 ROCKSDB_NAMESPACE::JniUtil::k_op(single_delete, env, jobj, jkey,
332 jkey_len);
333 if (status != nullptr && !status->ok()) {
334 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
335 }
336 }
337
338 /*
339 * Class: org_rocksdb_WriteBatch
340 * Method: singleDelete
341 * Signature: (J[BIJ)V
342 */
Java_org_rocksdb_WriteBatch_singleDelete__J_3BIJ(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jkey,jint jkey_len,jlong jcf_handle)343 void Java_org_rocksdb_WriteBatch_singleDelete__J_3BIJ(JNIEnv* env, jobject jobj,
344 jlong jwb_handle,
345 jbyteArray jkey,
346 jint jkey_len,
347 jlong jcf_handle) {
348 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
349 assert(wb != nullptr);
350 auto* cf_handle =
351 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
352 assert(cf_handle != nullptr);
353 auto single_delete = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice key) {
354 return wb->SingleDelete(cf_handle, key);
355 };
356 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
357 ROCKSDB_NAMESPACE::JniUtil::k_op(single_delete, env, jobj, jkey,
358 jkey_len);
359 if (status != nullptr && !status->ok()) {
360 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
361 }
362 }
363
364 /*
365 * Class: org_rocksdb_WriteBatch
366 * Method: removeDirect
367 * Signature: (JLjava/nio/ByteBuffer;IIJ)V
368 */
Java_org_rocksdb_WriteBatch_removeDirect(JNIEnv * env,jobject,jlong jwb_handle,jobject jkey,jint jkey_offset,jint jkey_len,jlong jcf_handle)369 void Java_org_rocksdb_WriteBatch_removeDirect(JNIEnv* env, jobject /*jobj*/,
370 jlong jwb_handle, jobject jkey,
371 jint jkey_offset, jint jkey_len,
372 jlong jcf_handle) {
373 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
374 assert(wb != nullptr);
375 auto* cf_handle =
376 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
377 auto remove = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice& key) {
378 if (cf_handle == nullptr) {
379 wb->Delete(key);
380 } else {
381 wb->Delete(cf_handle, key);
382 }
383 };
384 ROCKSDB_NAMESPACE::JniUtil::k_op_direct(remove, env, jkey, jkey_offset,
385 jkey_len);
386 }
387
388 /*
389 * Class: org_rocksdb_WriteBatch
390 * Method: deleteRange
391 * Signature: (J[BI[BI)V
392 */
Java_org_rocksdb_WriteBatch_deleteRange__J_3BI_3BI(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jbegin_key,jint jbegin_key_len,jbyteArray jend_key,jint jend_key_len)393 void Java_org_rocksdb_WriteBatch_deleteRange__J_3BI_3BI(
394 JNIEnv* env, jobject jobj, jlong jwb_handle, jbyteArray jbegin_key,
395 jint jbegin_key_len, jbyteArray jend_key, jint jend_key_len) {
396 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
397 assert(wb != nullptr);
398 auto deleteRange = [&wb](ROCKSDB_NAMESPACE::Slice beginKey,
399 ROCKSDB_NAMESPACE::Slice endKey) {
400 return wb->DeleteRange(beginKey, endKey);
401 };
402 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
403 ROCKSDB_NAMESPACE::JniUtil::kv_op(deleteRange, env, jobj, jbegin_key,
404 jbegin_key_len, jend_key, jend_key_len);
405 if (status != nullptr && !status->ok()) {
406 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
407 }
408 }
409
410 /*
411 * Class: org_rocksdb_WriteBatch
412 * Method: deleteRange
413 * Signature: (J[BI[BIJ)V
414 */
Java_org_rocksdb_WriteBatch_deleteRange__J_3BI_3BIJ(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jbegin_key,jint jbegin_key_len,jbyteArray jend_key,jint jend_key_len,jlong jcf_handle)415 void Java_org_rocksdb_WriteBatch_deleteRange__J_3BI_3BIJ(
416 JNIEnv* env, jobject jobj, jlong jwb_handle, jbyteArray jbegin_key,
417 jint jbegin_key_len, jbyteArray jend_key, jint jend_key_len,
418 jlong jcf_handle) {
419 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
420 assert(wb != nullptr);
421 auto* cf_handle =
422 reinterpret_cast<ROCKSDB_NAMESPACE::ColumnFamilyHandle*>(jcf_handle);
423 assert(cf_handle != nullptr);
424 auto deleteRange = [&wb, &cf_handle](ROCKSDB_NAMESPACE::Slice beginKey,
425 ROCKSDB_NAMESPACE::Slice endKey) {
426 return wb->DeleteRange(cf_handle, beginKey, endKey);
427 };
428 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
429 ROCKSDB_NAMESPACE::JniUtil::kv_op(deleteRange, env, jobj, jbegin_key,
430 jbegin_key_len, jend_key, jend_key_len);
431 if (status != nullptr && !status->ok()) {
432 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
433 }
434 }
435
436 /*
437 * Class: org_rocksdb_WriteBatch
438 * Method: putLogData
439 * Signature: (J[BI)V
440 */
Java_org_rocksdb_WriteBatch_putLogData(JNIEnv * env,jobject jobj,jlong jwb_handle,jbyteArray jblob,jint jblob_len)441 void Java_org_rocksdb_WriteBatch_putLogData(JNIEnv* env, jobject jobj,
442 jlong jwb_handle, jbyteArray jblob,
443 jint jblob_len) {
444 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
445 assert(wb != nullptr);
446 auto putLogData = [&wb](ROCKSDB_NAMESPACE::Slice blob) {
447 return wb->PutLogData(blob);
448 };
449 std::unique_ptr<ROCKSDB_NAMESPACE::Status> status =
450 ROCKSDB_NAMESPACE::JniUtil::k_op(putLogData, env, jobj, jblob, jblob_len);
451 if (status != nullptr && !status->ok()) {
452 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, status);
453 }
454 }
455
456 /*
457 * Class: org_rocksdb_WriteBatch
458 * Method: iterate
459 * Signature: (JJ)V
460 */
Java_org_rocksdb_WriteBatch_iterate(JNIEnv * env,jobject,jlong jwb_handle,jlong handlerHandle)461 void Java_org_rocksdb_WriteBatch_iterate(JNIEnv* env, jobject /*jobj*/,
462 jlong jwb_handle,
463 jlong handlerHandle) {
464 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
465 assert(wb != nullptr);
466
467 ROCKSDB_NAMESPACE::Status s = wb->Iterate(
468 reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatchHandlerJniCallback*>(
469 handlerHandle));
470
471 if (s.ok()) {
472 return;
473 }
474 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
475 }
476
477 /*
478 * Class: org_rocksdb_WriteBatch
479 * Method: data
480 * Signature: (J)[B
481 */
Java_org_rocksdb_WriteBatch_data(JNIEnv * env,jobject,jlong jwb_handle)482 jbyteArray Java_org_rocksdb_WriteBatch_data(JNIEnv* env, jobject /*jobj*/,
483 jlong jwb_handle) {
484 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
485 assert(wb != nullptr);
486
487 auto data = wb->Data();
488 return ROCKSDB_NAMESPACE::JniUtil::copyBytes(env, data);
489 }
490
491 /*
492 * Class: org_rocksdb_WriteBatch
493 * Method: getDataSize
494 * Signature: (J)J
495 */
Java_org_rocksdb_WriteBatch_getDataSize(JNIEnv *,jobject,jlong jwb_handle)496 jlong Java_org_rocksdb_WriteBatch_getDataSize(JNIEnv* /*env*/, jobject /*jobj*/,
497 jlong jwb_handle) {
498 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
499 assert(wb != nullptr);
500
501 auto data_size = wb->GetDataSize();
502 return static_cast<jlong>(data_size);
503 }
504
505 /*
506 * Class: org_rocksdb_WriteBatch
507 * Method: hasPut
508 * Signature: (J)Z
509 */
Java_org_rocksdb_WriteBatch_hasPut(JNIEnv *,jobject,jlong jwb_handle)510 jboolean Java_org_rocksdb_WriteBatch_hasPut(JNIEnv* /*env*/, jobject /*jobj*/,
511 jlong jwb_handle) {
512 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
513 assert(wb != nullptr);
514
515 return wb->HasPut();
516 }
517
518 /*
519 * Class: org_rocksdb_WriteBatch
520 * Method: hasDelete
521 * Signature: (J)Z
522 */
Java_org_rocksdb_WriteBatch_hasDelete(JNIEnv *,jobject,jlong jwb_handle)523 jboolean Java_org_rocksdb_WriteBatch_hasDelete(JNIEnv* /*env*/,
524 jobject /*jobj*/,
525 jlong jwb_handle) {
526 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
527 assert(wb != nullptr);
528
529 return wb->HasDelete();
530 }
531
532 /*
533 * Class: org_rocksdb_WriteBatch
534 * Method: hasSingleDelete
535 * Signature: (J)Z
536 */
Java_org_rocksdb_WriteBatch_hasSingleDelete(JNIEnv *,jobject,jlong jwb_handle)537 JNIEXPORT jboolean JNICALL Java_org_rocksdb_WriteBatch_hasSingleDelete(
538 JNIEnv* /*env*/, jobject /*jobj*/, jlong jwb_handle) {
539 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
540 assert(wb != nullptr);
541
542 return wb->HasSingleDelete();
543 }
544
545 /*
546 * Class: org_rocksdb_WriteBatch
547 * Method: hasDeleteRange
548 * Signature: (J)Z
549 */
Java_org_rocksdb_WriteBatch_hasDeleteRange(JNIEnv *,jobject,jlong jwb_handle)550 JNIEXPORT jboolean JNICALL Java_org_rocksdb_WriteBatch_hasDeleteRange(
551 JNIEnv* /*env*/, jobject /*jobj*/, jlong jwb_handle) {
552 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
553 assert(wb != nullptr);
554
555 return wb->HasDeleteRange();
556 }
557
558 /*
559 * Class: org_rocksdb_WriteBatch
560 * Method: hasMerge
561 * Signature: (J)Z
562 */
Java_org_rocksdb_WriteBatch_hasMerge(JNIEnv *,jobject,jlong jwb_handle)563 JNIEXPORT jboolean JNICALL Java_org_rocksdb_WriteBatch_hasMerge(
564 JNIEnv* /*env*/, jobject /*jobj*/, jlong jwb_handle) {
565 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
566 assert(wb != nullptr);
567
568 return wb->HasMerge();
569 }
570
571 /*
572 * Class: org_rocksdb_WriteBatch
573 * Method: hasBeginPrepare
574 * Signature: (J)Z
575 */
Java_org_rocksdb_WriteBatch_hasBeginPrepare(JNIEnv *,jobject,jlong jwb_handle)576 JNIEXPORT jboolean JNICALL Java_org_rocksdb_WriteBatch_hasBeginPrepare(
577 JNIEnv* /*env*/, jobject /*jobj*/, jlong jwb_handle) {
578 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
579 assert(wb != nullptr);
580
581 return wb->HasBeginPrepare();
582 }
583
584 /*
585 * Class: org_rocksdb_WriteBatch
586 * Method: hasEndPrepare
587 * Signature: (J)Z
588 */
Java_org_rocksdb_WriteBatch_hasEndPrepare(JNIEnv *,jobject,jlong jwb_handle)589 JNIEXPORT jboolean JNICALL Java_org_rocksdb_WriteBatch_hasEndPrepare(
590 JNIEnv* /*env*/, jobject /*jobj*/, jlong jwb_handle) {
591 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
592 assert(wb != nullptr);
593
594 return wb->HasEndPrepare();
595 }
596
597 /*
598 * Class: org_rocksdb_WriteBatch
599 * Method: hasCommit
600 * Signature: (J)Z
601 */
Java_org_rocksdb_WriteBatch_hasCommit(JNIEnv *,jobject,jlong jwb_handle)602 JNIEXPORT jboolean JNICALL Java_org_rocksdb_WriteBatch_hasCommit(
603 JNIEnv* /*env*/, jobject /*jobj*/, jlong jwb_handle) {
604 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
605 assert(wb != nullptr);
606
607 return wb->HasCommit();
608 }
609
610 /*
611 * Class: org_rocksdb_WriteBatch
612 * Method: hasRollback
613 * Signature: (J)Z
614 */
Java_org_rocksdb_WriteBatch_hasRollback(JNIEnv *,jobject,jlong jwb_handle)615 JNIEXPORT jboolean JNICALL Java_org_rocksdb_WriteBatch_hasRollback(
616 JNIEnv* /*env*/, jobject /*jobj*/, jlong jwb_handle) {
617 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
618 assert(wb != nullptr);
619
620 return wb->HasRollback();
621 }
622
623 /*
624 * Class: org_rocksdb_WriteBatch
625 * Method: markWalTerminationPoint
626 * Signature: (J)V
627 */
Java_org_rocksdb_WriteBatch_markWalTerminationPoint(JNIEnv *,jobject,jlong jwb_handle)628 void Java_org_rocksdb_WriteBatch_markWalTerminationPoint(JNIEnv* /*env*/,
629 jobject /*jobj*/,
630 jlong jwb_handle) {
631 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
632 assert(wb != nullptr);
633
634 wb->MarkWalTerminationPoint();
635 }
636
637 /*
638 * Class: org_rocksdb_WriteBatch
639 * Method: getWalTerminationPoint
640 * Signature: (J)Lorg/rocksdb/WriteBatch/SavePoint;
641 */
Java_org_rocksdb_WriteBatch_getWalTerminationPoint(JNIEnv * env,jobject,jlong jwb_handle)642 jobject Java_org_rocksdb_WriteBatch_getWalTerminationPoint(JNIEnv* env,
643 jobject /*jobj*/,
644 jlong jwb_handle) {
645 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(jwb_handle);
646 assert(wb != nullptr);
647
648 auto save_point = wb->GetWalTerminationPoint();
649 return ROCKSDB_NAMESPACE::WriteBatchSavePointJni::construct(env, save_point);
650 }
651
652 /*
653 * Class: org_rocksdb_WriteBatch
654 * Method: disposeInternal
655 * Signature: (J)V
656 */
Java_org_rocksdb_WriteBatch_disposeInternal(JNIEnv *,jobject,jlong handle)657 void Java_org_rocksdb_WriteBatch_disposeInternal(JNIEnv* /*env*/,
658 jobject /*jobj*/,
659 jlong handle) {
660 auto* wb = reinterpret_cast<ROCKSDB_NAMESPACE::WriteBatch*>(handle);
661 assert(wb != nullptr);
662 delete wb;
663 }
664
665 /*
666 * Class: org_rocksdb_WriteBatch_Handler
667 * Method: createNewHandler0
668 * Signature: ()J
669 */
Java_org_rocksdb_WriteBatch_00024Handler_createNewHandler0(JNIEnv * env,jobject jobj)670 jlong Java_org_rocksdb_WriteBatch_00024Handler_createNewHandler0(JNIEnv* env,
671 jobject jobj) {
672 auto* wbjnic = new ROCKSDB_NAMESPACE::WriteBatchHandlerJniCallback(env, jobj);
673 return reinterpret_cast<jlong>(wbjnic);
674 }
675