Add a ConfigOptions for use in comparing objects and converting to/from strings (#6389)
Summary: The methods in convenience.h are used to compare/convert objects to/from strings. There is a mishmash of parameters in use here with more needed in the future. This PR replaces those parameters with a single structure. Pull Request resolved: https://github.com/facebook/rocksdb/pull/6389 Reviewed By: siying Differential Revision: D21163707 Pulled By: zhichao-cao fbshipit-source-id: f807b4cc7e2b0af3871536b69546b2604dfa81bdmain
parent
c1ccd6b6af
commit
4cbc19d2a1
@ -0,0 +1,88 @@ |
|||||||
|
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
||||||
|
// This source code is licensed under both the GPLv2 (found in the
|
||||||
|
// COPYING file in the root directory) and Apache 2.0 License
|
||||||
|
// (found in the LICENSE.Apache file in the root directory).
|
||||||
|
//
|
||||||
|
// This file implements the "bridge" between Java and C++ and enables
|
||||||
|
// calling C++ ROCKSDB_NAMESPACE::ConfigOptions methods
|
||||||
|
// from Java side.
|
||||||
|
|
||||||
|
#include <jni.h> |
||||||
|
|
||||||
|
#include "include/org_rocksdb_ConfigOptions.h" |
||||||
|
#include "rocksdb/convenience.h" |
||||||
|
#include "rocksjni/portal.h" |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_ConfigOptions |
||||||
|
* Method: disposeInternal |
||||||
|
* Signature: (J)V |
||||||
|
*/ |
||||||
|
void Java_org_rocksdb_ConfigOptions_disposeInternal(JNIEnv *, jobject, |
||||||
|
jlong jhandle) { |
||||||
|
auto *co = reinterpret_cast<ROCKSDB_NAMESPACE::ConfigOptions *>(jhandle); |
||||||
|
assert(co != nullptr); |
||||||
|
delete co; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_ConfigOptions |
||||||
|
* Method: newConfigOptions |
||||||
|
* Signature: ()J |
||||||
|
*/ |
||||||
|
jlong Java_org_rocksdb_ConfigOptions_newConfigOptions(JNIEnv *, jclass) { |
||||||
|
auto *cfg_opt = new ROCKSDB_NAMESPACE::ConfigOptions(); |
||||||
|
return reinterpret_cast<jlong>(cfg_opt); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_ConfigOptions |
||||||
|
* Method: setDelimiter |
||||||
|
* Signature: (JLjava/lang/String;)V |
||||||
|
*/ |
||||||
|
void Java_org_rocksdb_ConfigOptions_setDelimiter(JNIEnv *env, jclass, |
||||||
|
jlong handle, jstring s) { |
||||||
|
auto *cfg_opt = reinterpret_cast<ROCKSDB_NAMESPACE::ConfigOptions *>(handle); |
||||||
|
const char *delim = env->GetStringUTFChars(s, nullptr); |
||||||
|
if (delim == nullptr) { |
||||||
|
// exception thrown: OutOfMemoryError
|
||||||
|
return; |
||||||
|
} |
||||||
|
cfg_opt->delimiter = delim; |
||||||
|
env->ReleaseStringUTFChars(s, delim); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_ConfigOptions |
||||||
|
* Method: setIgnoreUnknownOptions |
||||||
|
* Signature: (JZ)V |
||||||
|
*/ |
||||||
|
void Java_org_rocksdb_ConfigOptions_setIgnoreUnknownOptions(JNIEnv *, jclass, |
||||||
|
jlong handle, |
||||||
|
jboolean b) { |
||||||
|
auto *cfg_opt = reinterpret_cast<ROCKSDB_NAMESPACE::ConfigOptions *>(handle); |
||||||
|
cfg_opt->ignore_unknown_options = static_cast<bool>(b); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_ConfigOptions |
||||||
|
* Method: setInputStringsEscaped |
||||||
|
* Signature: (JZ)V |
||||||
|
*/ |
||||||
|
void Java_org_rocksdb_ConfigOptions_setInputStringsEscaped(JNIEnv *, jclass, |
||||||
|
jlong handle, |
||||||
|
jboolean b) { |
||||||
|
auto *cfg_opt = reinterpret_cast<ROCKSDB_NAMESPACE::ConfigOptions *>(handle); |
||||||
|
cfg_opt->input_strings_escaped = static_cast<bool>(b); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_ConfigOptions |
||||||
|
* Method: setSanityLevel |
||||||
|
* Signature: (JI)V |
||||||
|
*/ |
||||||
|
void Java_org_rocksdb_ConfigOptions_setSanityLevel(JNIEnv *, jclass, |
||||||
|
jlong handle, jbyte level) { |
||||||
|
auto *cfg_opt = reinterpret_cast<ROCKSDB_NAMESPACE::ConfigOptions *>(handle); |
||||||
|
cfg_opt->sanity_level = ROCKSDB_NAMESPACE::SanityLevelJni::toCppSanityLevel(level); |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package org.rocksdb; |
||||||
|
|
||||||
|
public class ConfigOptions extends RocksObject { |
||||||
|
static { |
||||||
|
RocksDB.loadLibrary(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Construct with default Options |
||||||
|
*/ |
||||||
|
public ConfigOptions() { |
||||||
|
super(newConfigOptions()); |
||||||
|
} |
||||||
|
|
||||||
|
public ConfigOptions setDelimiter(final String delimiter) { |
||||||
|
setDelimiter(nativeHandle_, delimiter); |
||||||
|
return this; |
||||||
|
} |
||||||
|
public ConfigOptions setIgnoreUnknownOptions(final boolean ignore) { |
||||||
|
setIgnoreUnknownOptions(nativeHandle_, ignore); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public ConfigOptions setEnv(final Env env) { |
||||||
|
setEnv(nativeHandle_, env.nativeHandle_); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public ConfigOptions setInputStringsEscaped(final boolean escaped) { |
||||||
|
setInputStringsEscaped(nativeHandle_, escaped); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public ConfigOptions setSanityLevel(final SanityLevel level) { |
||||||
|
setSanityLevel(nativeHandle_, level.getValue()); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
@Override protected final native void disposeInternal(final long handle); |
||||||
|
|
||||||
|
private native static long newConfigOptions(); |
||||||
|
private native static void setEnv(final long handle, final long envHandle); |
||||||
|
private native static void setDelimiter(final long handle, final String delimiter); |
||||||
|
private native static void setIgnoreUnknownOptions(final long handle, final boolean ignore); |
||||||
|
private native static void setInputStringsEscaped(final long handle, final boolean escaped); |
||||||
|
private native static void setSanityLevel(final long handle, final byte level); |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package org.rocksdb; |
||||||
|
|
||||||
|
public enum SanityLevel { |
||||||
|
NONE((byte) 0x0), |
||||||
|
LOOSELY_COMPATIBLE((byte) 0x1), |
||||||
|
EXACT_MATCH((byte) 0xFF); |
||||||
|
|
||||||
|
private final byte value; |
||||||
|
|
||||||
|
SanityLevel(final byte value) { |
||||||
|
this.value = value; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get the internal representation value. |
||||||
|
* |
||||||
|
* @return the internal representation value. |
||||||
|
*/ |
||||||
|
// TODO(AR) should be made package-private
|
||||||
|
public byte getValue() { |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get the SanityLevel from the internal representation value. |
||||||
|
* |
||||||
|
* @param value the internal representation value. |
||||||
|
* |
||||||
|
* @return the SanityLevel |
||||||
|
* |
||||||
|
* @throws IllegalArgumentException if the value does not match a |
||||||
|
* SanityLevel |
||||||
|
*/ |
||||||
|
static SanityLevel fromValue(final byte value) throws IllegalArgumentException { |
||||||
|
for (final SanityLevel level : SanityLevel.values()) { |
||||||
|
if (level.value == value) { |
||||||
|
return level; |
||||||
|
} |
||||||
|
} |
||||||
|
throw new IllegalArgumentException("Unknown value for SanityLevel: " + value); |
||||||
|
} |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue