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::SstFileReader methods
8 // from Java side.
9
10 #include <jni.h>
11 #include <string>
12
13 #include "include/org_rocksdb_SstFileReader.h"
14 #include "rocksdb/comparator.h"
15 #include "rocksdb/env.h"
16 #include "rocksdb/options.h"
17 #include "rocksdb/sst_file_reader.h"
18 #include "rocksjni/portal.h"
19
20 /*
21 * Class: org_rocksdb_SstFileReader
22 * Method: newSstFileReader
23 * Signature: (J)J
24 */
Java_org_rocksdb_SstFileReader_newSstFileReader(JNIEnv *,jclass,jlong joptions)25 jlong Java_org_rocksdb_SstFileReader_newSstFileReader(JNIEnv * /*env*/,
26 jclass /*jcls*/,
27 jlong joptions) {
28 auto *options =
29 reinterpret_cast<const ROCKSDB_NAMESPACE::Options *>(joptions);
30 ROCKSDB_NAMESPACE::SstFileReader *sst_file_reader =
31 new ROCKSDB_NAMESPACE::SstFileReader(*options);
32 return reinterpret_cast<jlong>(sst_file_reader);
33 }
34
35 /*
36 * Class: org_rocksdb_SstFileReader
37 * Method: open
38 * Signature: (JLjava/lang/String;)V
39 */
Java_org_rocksdb_SstFileReader_open(JNIEnv * env,jobject,jlong jhandle,jstring jfile_path)40 void Java_org_rocksdb_SstFileReader_open(JNIEnv *env, jobject /*jobj*/,
41 jlong jhandle, jstring jfile_path) {
42 const char *file_path = env->GetStringUTFChars(jfile_path, nullptr);
43 if (file_path == nullptr) {
44 // exception thrown: OutOfMemoryError
45 return;
46 }
47 ROCKSDB_NAMESPACE::Status s =
48 reinterpret_cast<ROCKSDB_NAMESPACE::SstFileReader *>(jhandle)->Open(
49 file_path);
50 env->ReleaseStringUTFChars(jfile_path, file_path);
51
52 if (!s.ok()) {
53 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
54 }
55 }
56
57 /*
58 * Class: org_rocksdb_SstFileReader
59 * Method: newIterator
60 * Signature: (JJ)J
61 */
Java_org_rocksdb_SstFileReader_newIterator(JNIEnv *,jobject,jlong jhandle,jlong jread_options_handle)62 jlong Java_org_rocksdb_SstFileReader_newIterator(JNIEnv * /*env*/,
63 jobject /*jobj*/,
64 jlong jhandle,
65 jlong jread_options_handle) {
66 auto *sst_file_reader =
67 reinterpret_cast<ROCKSDB_NAMESPACE::SstFileReader *>(jhandle);
68 auto *read_options =
69 reinterpret_cast<ROCKSDB_NAMESPACE::ReadOptions *>(jread_options_handle);
70 return reinterpret_cast<jlong>(sst_file_reader->NewIterator(*read_options));
71 }
72
73 /*
74 * Class: org_rocksdb_SstFileReader
75 * Method: disposeInternal
76 * Signature: (J)V
77 */
Java_org_rocksdb_SstFileReader_disposeInternal(JNIEnv *,jobject,jlong jhandle)78 void Java_org_rocksdb_SstFileReader_disposeInternal(JNIEnv * /*env*/,
79 jobject /*jobj*/,
80 jlong jhandle) {
81 delete reinterpret_cast<ROCKSDB_NAMESPACE::SstFileReader *>(jhandle);
82 }
83
84 /*
85 * Class: org_rocksdb_SstFileReader
86 * Method: verifyChecksum
87 * Signature: (J)V
88 */
Java_org_rocksdb_SstFileReader_verifyChecksum(JNIEnv * env,jobject,jlong jhandle)89 void Java_org_rocksdb_SstFileReader_verifyChecksum(JNIEnv *env,
90 jobject /*jobj*/,
91 jlong jhandle) {
92 auto *sst_file_reader =
93 reinterpret_cast<ROCKSDB_NAMESPACE::SstFileReader *>(jhandle);
94 auto s = sst_file_reader->VerifyChecksum();
95 if (!s.ok()) {
96 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
97 }
98 }
99
100 /*
101 * Class: org_rocksdb_SstFileReader
102 * Method: getTableProperties
103 * Signature: (J)J
104 */
Java_org_rocksdb_SstFileReader_getTableProperties(JNIEnv * env,jobject,jlong jhandle)105 jobject Java_org_rocksdb_SstFileReader_getTableProperties(JNIEnv *env,
106 jobject /*jobj*/,
107 jlong jhandle) {
108 auto *sst_file_reader =
109 reinterpret_cast<ROCKSDB_NAMESPACE::SstFileReader *>(jhandle);
110 std::shared_ptr<const ROCKSDB_NAMESPACE::TableProperties> tp =
111 sst_file_reader->GetTableProperties();
112 jobject jtable_properties =
113 ROCKSDB_NAMESPACE::TablePropertiesJni::fromCppTableProperties(
114 env, *(tp.get()));
115 return jtable_properties;
116 }
117