Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
kvdb
rocksdb
提交
aed02869
R
rocksdb
项目概览
kvdb
/
rocksdb
12 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rocksdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
aed02869
编写于
1月 22, 2015
作者:
Y
Yueh-Hsuan Chiang
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #462 from fyrz/RocksJava-JNI-allocation-correction
[RocksJava] ColumnFamily name JNI correction
上级
e5df90f5
2efe2284
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
5 deletion
+27
-5
java/rocksjni/rocksjni.cc
java/rocksjni/rocksjni.cc
+27
-5
未找到文件。
java/rocksjni/rocksjni.cc
浏览文件 @
aed02869
...
...
@@ -75,6 +75,8 @@ jobject
const
char
*
db_path
=
env
->
GetStringUTFChars
(
jdb_path
,
0
);
std
::
vector
<
jbyte
*>
cfnames_to_free
;
// the zero-terminated version of cfnames_to_free.
std
::
vector
<
char
*>
c_cfnames_to_free
;
std
::
vector
<
jbyteArray
>
jcfnames_for_free
;
std
::
vector
<
rocksdb
::
ColumnFamilyDescriptor
>
column_families
;
...
...
@@ -102,13 +104,17 @@ jobject
rocksdb
::
ColumnFamilyOptionsJni
::
getHandle
(
env
,
jcf_opt_obj
);
jbyte
*
cfname
=
env
->
GetByteArrayElements
(
byteArray
,
0
);
const
int
len
=
env
->
GetArrayLength
(
byteArray
)
+
1
;
char
*
c_cfname
=
new
char
[
len
];
memcpy
(
c_cfname
,
cfname
,
len
-
1
);
c_cfname
[
len
-
1
]
=
0
;
// free allocated cfnames after call to open
cfnames_to_free
.
push_back
(
cfname
);
c_cfnames_to_free
.
push_back
(
c_cfname
);
jcfnames_for_free
.
push_back
(
byteArray
);
column_families
.
push_back
(
rocksdb
::
ColumnFamilyDescriptor
(
reinterpret_cast
<
char
*>
(
cfname
),
*
cfOptions
));
c_cfname
,
*
cfOptions
));
}
rocksdb
::
Status
s
=
rocksdb
::
DB
::
OpenForReadOnly
(
*
opt
,
...
...
@@ -119,6 +125,8 @@ jobject
i
!=
cfnames_to_free
.
size
();
i
++
)
{
// free cfnames
env
->
ReleaseByteArrayElements
(
jcfnames_for_free
[
i
],
cfnames_to_free
[
i
],
0
);
// free c_cfnames
delete
[]
c_cfnames_to_free
[
i
];
}
// check if open operation was successful
...
...
@@ -160,6 +168,8 @@ jobject Java_org_rocksdb_RocksDB_open__JLjava_lang_String_2Ljava_util_List_2I(
const
char
*
db_path
=
env
->
GetStringUTFChars
(
jdb_path
,
0
);
std
::
vector
<
jbyte
*>
cfnames_to_free
;
// the zero-terminated version of cfnames_to_free.
std
::
vector
<
char
*>
c_cfnames_to_free
;
std
::
vector
<
jbyteArray
>
jcfnames_for_free
;
std
::
vector
<
rocksdb
::
ColumnFamilyDescriptor
>
column_families
;
...
...
@@ -187,13 +197,17 @@ jobject Java_org_rocksdb_RocksDB_open__JLjava_lang_String_2Ljava_util_List_2I(
rocksdb
::
ColumnFamilyOptionsJni
::
getHandle
(
env
,
jcf_opt_obj
);
jbyte
*
cfname
=
env
->
GetByteArrayElements
(
byteArray
,
0
);
const
int
len
=
env
->
GetArrayLength
(
byteArray
)
+
1
;
char
*
c_cfname
=
new
char
[
len
];
memcpy
(
c_cfname
,
cfname
,
len
-
1
);
c_cfname
[
len
-
1
]
=
0
;
// free allocated cfnames after call to open
cfnames_to_free
.
push_back
(
cfname
);
c_cfnames_to_free
.
push_back
(
c_cfname
);
jcfnames_for_free
.
push_back
(
byteArray
);
column_families
.
push_back
(
rocksdb
::
ColumnFamilyDescriptor
(
reinterpret_cast
<
const
char
*>
(
cfname
),
*
cfOptions
));
c_cfname
,
*
cfOptions
));
}
rocksdb
::
Status
s
=
rocksdb
::
DB
::
Open
(
*
opt
,
db_path
,
column_families
,
...
...
@@ -204,6 +218,8 @@ jobject Java_org_rocksdb_RocksDB_open__JLjava_lang_String_2Ljava_util_List_2I(
i
!=
cfnames_to_free
.
size
();
i
++
)
{
// free cfnames
env
->
ReleaseByteArrayElements
(
jcfnames_for_free
[
i
],
cfnames_to_free
[
i
],
0
);
// free c_cfnames
delete
[]
c_cfnames_to_free
[
i
];
}
// check if open operation was successful
...
...
@@ -1231,9 +1247,15 @@ jlong Java_org_rocksdb_RocksDB_createColumnFamily(
rocksdb
::
ColumnFamilyOptionsJni
::
getHandle
(
env
,
jcf_opt_obj
);
jbyte
*
cfname
=
env
->
GetByteArrayElements
(
byteArray
,
0
);
const
int
len
=
env
->
GetArrayLength
(
byteArray
)
+
1
;
char
*
c_cfname
=
new
char
[
len
];
memcpy
(
c_cfname
,
cfname
,
len
-
1
);
c_cfname
[
len
-
1
]
=
0
;
rocksdb
::
Status
s
=
db_handle
->
CreateColumnFamily
(
*
cfOptions
,
reinterpret_cast
<
char
*>
(
cfname
)
,
&
handle
);
*
cfOptions
,
c_cfname
,
&
handle
);
env
->
ReleaseByteArrayElements
(
byteArray
,
cfname
,
0
);
delete
[]
c_cfname
;
if
(
s
.
ok
())
{
return
reinterpret_cast
<
jlong
>
(
handle
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录