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