* Method: newSstFileWriter
* Signature: (JJJ)J
*/
-jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter(JNIEnv *env, jclass jcls,
+jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter__JJJ(JNIEnv *env, jclass jcls,
jlong jenvoptions,
jlong joptions,
jlong jcomparator) {
return reinterpret_cast<jlong>(sst_file_writer);
}
+/*
+ * Class: org_rocksdb_SstFileWriter
+ * Method: newSstFileWriter
+ * Signature: (JJ)J
+ */
+jlong Java_org_rocksdb_SstFileWriter_newSstFileWriter__JJ(JNIEnv *env, jclass jcls,
+ jlong jenvoptions,
+ jlong joptions) {
+ auto *env_options =
+ reinterpret_cast<const rocksdb::EnvOptions *>(jenvoptions);
+ auto *options = reinterpret_cast<const rocksdb::Options *>(joptions);
+ rocksdb::SstFileWriter *sst_file_writer =
+ new rocksdb::SstFileWriter(*env_options, *options);
+ return reinterpret_cast<jlong>(sst_file_writer);
+}
+
/*
* Class: org_rocksdb_SstFileWriter
* Method: open
envOptions.nativeHandle_, options.nativeHandle_, comparator.getNativeHandle()));
}
+ public SstFileWriter(final EnvOptions envOptions, final Options options) {
+ super(newSstFileWriter(
+ envOptions.nativeHandle_, options.nativeHandle_));
+ }
+
public void open(final String filePath) throws RocksDBException {
open(nativeHandle_, filePath);
}
private native static long newSstFileWriter(
final long envOptionsHandle, final long optionsHandle, final long userComparatorHandle);
+ private native static long newSstFileWriter(final long envOptionsHandle,
+ final long optionsHandle);
+
private native void open(final long handle, final String filePath) throws RocksDBException;
private native void add(final long handle, final long keyHandle, final long valueHandle)
@Rule public TemporaryFolder parentFolder = new TemporaryFolder();
- private File newSstFile(final TreeMap<String, String> keyValues)
+ private File newSstFile(final TreeMap<String, String> keyValues,
+ boolean useJavaBytewiseComparator)
throws IOException, RocksDBException {
final EnvOptions envOptions = new EnvOptions();
- final ComparatorOptions comparatorOptions = new ComparatorOptions();
- final BytewiseComparator comparator = new BytewiseComparator(comparatorOptions);
- final Options options = new Options().setComparator(comparator);
- final SstFileWriter sstFileWriter = new SstFileWriter(envOptions, options, comparator);
+ final Options options = new Options();
+ SstFileWriter sstFileWriter = null;
+ ComparatorOptions comparatorOptions = null;
+ BytewiseComparator comparator = null;
+ if (useJavaBytewiseComparator) {
+ comparatorOptions = new ComparatorOptions();
+ comparator = new BytewiseComparator(comparatorOptions);
+ options.setComparator(comparator);
+ sstFileWriter = new SstFileWriter(envOptions, options, comparator);
+ } else {
+ sstFileWriter = new SstFileWriter(envOptions, options);
+ }
+
final File sstFile = parentFolder.newFile(SST_FILE_NAME);
try {
sstFileWriter.open(sstFile.getAbsolutePath());
sstFileWriter.close();
options.close();
envOptions.close();
- comparatorOptions.close();
- comparator.close();
+ if (comparatorOptions != null) {
+ comparatorOptions.close();
+ }
+ if (comparator != null) {
+ comparator.close();
+ }
}
return sstFile;
}
@Test
- public void generateSstFile() throws RocksDBException, IOException {
+ public void generateSstFileWithJavaComparator() throws RocksDBException, IOException {
+ final TreeMap<String, String> keyValues = new TreeMap<>();
+ keyValues.put("key1", "value1");
+ keyValues.put("key2", "value2");
+ newSstFile(keyValues, true);
+ }
+
+ @Test
+ public void generateSstFileWithNativeComparator() throws RocksDBException, IOException {
final TreeMap<String, String> keyValues = new TreeMap<>();
keyValues.put("key1", "value1");
keyValues.put("key2", "value2");
- newSstFile(keyValues);
+ newSstFile(keyValues, false);
}
@Test
final TreeMap<String, String> keyValues = new TreeMap<>();
keyValues.put("key1", "value1");
keyValues.put("key2", "value2");
- final File sstFile = newSstFile(keyValues);
+ final File sstFile = newSstFile(keyValues, false);
final File dbFolder = parentFolder.newFolder(DB_DIRECTORY_NAME);
final Options options = new Options().setCreateIfMissing(true);
final RocksDB db = RocksDB.open(options, dbFolder.getAbsolutePath());