]>
Commit | Line | Data |
---|---|---|
7c673cae | 1 | // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. |
11fdf7f2 TL |
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). | |
7c673cae FG |
5 | // |
6 | // This file implements the callback "bridge" between Java and C++ for | |
f67539c2 | 7 | // ROCKSDB_NAMESPACE::WriteBatch::Handler. |
7c673cae FG |
8 | |
9 | #ifndef JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_ | |
10 | #define JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_ | |
11 | ||
12 | #include <jni.h> | |
1e59de90 TL |
13 | |
14 | #include <functional> | |
11fdf7f2 | 15 | #include <memory> |
1e59de90 | 16 | |
7c673cae | 17 | #include "rocksdb/write_batch.h" |
1e59de90 | 18 | #include "rocksjni/jnicallback.h" |
7c673cae | 19 | |
f67539c2 | 20 | namespace ROCKSDB_NAMESPACE { |
7c673cae FG |
21 | /** |
22 | * This class acts as a bridge between C++ | |
23 | * and Java. The methods in this class will be | |
24 | * called back from the RocksDB storage engine (C++) | |
25 | * which calls the appropriate Java method. | |
26 | * This enables Write Batch Handlers to be implemented in Java. | |
27 | */ | |
1e59de90 TL |
28 | class WriteBatchHandlerJniCallback : public JniCallback, |
29 | public WriteBatch::Handler { | |
7c673cae | 30 | public: |
1e59de90 TL |
31 | WriteBatchHandlerJniCallback(JNIEnv* env, jobject jWriteBackHandler); |
32 | Status PutCF(uint32_t column_family_id, const Slice& key, const Slice& value); | |
33 | void Put(const Slice& key, const Slice& value); | |
34 | Status MergeCF(uint32_t column_family_id, const Slice& key, | |
35 | const Slice& value); | |
36 | void Merge(const Slice& key, const Slice& value); | |
37 | Status DeleteCF(uint32_t column_family_id, const Slice& key); | |
38 | void Delete(const Slice& key); | |
39 | Status SingleDeleteCF(uint32_t column_family_id, const Slice& key); | |
40 | void SingleDelete(const Slice& key); | |
41 | Status DeleteRangeCF(uint32_t column_family_id, const Slice& beginKey, | |
42 | const Slice& endKey); | |
43 | void DeleteRange(const Slice& beginKey, const Slice& endKey); | |
44 | void LogData(const Slice& blob); | |
45 | Status PutBlobIndexCF(uint32_t column_family_id, const Slice& key, | |
46 | const Slice& value); | |
47 | Status MarkBeginPrepare(bool); | |
48 | Status MarkEndPrepare(const Slice& xid); | |
49 | Status MarkNoop(bool empty_batch); | |
50 | Status MarkRollback(const Slice& xid); | |
51 | Status MarkCommit(const Slice& xid); | |
52 | Status MarkCommitWithTimestamp(const Slice& xid, const Slice& commit_ts); | |
53 | bool Continue(); | |
7c673cae FG |
54 | |
55 | private: | |
1e59de90 TL |
56 | JNIEnv* m_env; |
57 | jmethodID m_jPutCfMethodId; | |
58 | jmethodID m_jPutMethodId; | |
59 | jmethodID m_jMergeCfMethodId; | |
60 | jmethodID m_jMergeMethodId; | |
61 | jmethodID m_jDeleteCfMethodId; | |
62 | jmethodID m_jDeleteMethodId; | |
63 | jmethodID m_jSingleDeleteCfMethodId; | |
64 | jmethodID m_jSingleDeleteMethodId; | |
65 | jmethodID m_jDeleteRangeCfMethodId; | |
66 | jmethodID m_jDeleteRangeMethodId; | |
67 | jmethodID m_jLogDataMethodId; | |
68 | jmethodID m_jPutBlobIndexCfMethodId; | |
69 | jmethodID m_jMarkBeginPrepareMethodId; | |
70 | jmethodID m_jMarkEndPrepareMethodId; | |
71 | jmethodID m_jMarkNoopMethodId; | |
72 | jmethodID m_jMarkRollbackMethodId; | |
73 | jmethodID m_jMarkCommitMethodId; | |
74 | jmethodID m_jMarkCommitWithTimestampMethodId; | |
75 | jmethodID m_jContinueMethodId; | |
76 | /** | |
77 | * @return A pointer to a ROCKSDB_NAMESPACE::Status or nullptr if an | |
78 | * unexpected exception occurred | |
79 | */ | |
80 | std::unique_ptr<ROCKSDB_NAMESPACE::Status> kv_op( | |
81 | const Slice& key, const Slice& value, | |
82 | std::function<void(jbyteArray, jbyteArray)> kvFn); | |
83 | /** | |
84 | * @return A pointer to a ROCKSDB_NAMESPACE::Status or nullptr if an | |
85 | * unexpected exception occurred | |
86 | */ | |
87 | std::unique_ptr<ROCKSDB_NAMESPACE::Status> k_op( | |
88 | const Slice& key, std::function<void(jbyteArray)> kFn); | |
7c673cae | 89 | }; |
f67539c2 | 90 | } // namespace ROCKSDB_NAMESPACE |
7c673cae FG |
91 | |
92 | #endif // JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_ |