Skip to content

Commit 1ff0b3b

Browse files
authored
upgrade jni and tokio (#74)
* upgrade jni and tokio * use no reference * fix gradle build * write rs * Revert "write rs" This reverts commit 562fd5b. * revert * fix void
1 parent 9170c96 commit 1ff0b3b

5 files changed

Lines changed: 84 additions & 83 deletions

File tree

datafusion-java/src/main/java/org/apache/arrow/datafusion/DefaultDataFrame.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public CompletableFuture<ArrowReader> collect(BufferAllocator allocator) {
4242
}
4343

4444
private boolean containsError(String errString) {
45-
return errString != null && !"".equals(errString);
45+
return errString != null && !errString.isEmpty();
4646
}
4747

4848
@Override

datafusion-java/src/main/java/org/apache/arrow/datafusion/DefaultSessionContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public CompletableFuture<DataFrame> sql(String sql) {
2828
getPointer(),
2929
sql,
3030
(errMessage, dataframeId) -> {
31-
if (null != errMessage && !errMessage.equals("")) {
31+
if (null != errMessage && !errMessage.isEmpty()) {
3232
future.completeExceptionally(new RuntimeException(errMessage));
3333
} else {
3434
DefaultDataFrame frame = new DefaultDataFrame(DefaultSessionContext.this, dataframeId);
@@ -65,7 +65,7 @@ public CompletableFuture<Void> registerParquet(String name, Path path) {
6565
}
6666

6767
private void voidCallback(CompletableFuture<Void> future, String errMessage) {
68-
if (null != errMessage && !errMessage.equals("")) {
68+
if (null != errMessage && !errMessage.isEmpty()) {
6969
future.completeExceptionally(new RuntimeException(errMessage));
7070
} else {
7171
future.complete(null);

datafusion-jni/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ license = "Apache-2.0"
1010
edition = "2021"
1111

1212
[dependencies]
13-
jni = "^0.19.0"
14-
tokio = "^1.18.0"
13+
jni = "^0.21.0"
14+
tokio = "^1.32.0"
1515
arrow = "^22.0"
1616
datafusion = "^12.0"
1717

datafusion-jni/src/context.rs

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use datafusion::execution::context::SessionContext;
22
use datafusion::prelude::{CsvReadOptions, ParquetReadOptions};
3-
use jni::objects::{JClass, JObject, JString, JValue};
3+
use jni::objects::{JClass, JObject, JString};
44
use jni::sys::jlong;
55
use jni::JNIEnv;
66
use tokio::runtime::Runtime;
77

88
#[no_mangle]
99
pub extern "system" fn Java_org_apache_arrow_datafusion_DefaultSessionContext_registerCsv(
10-
env: JNIEnv,
10+
mut env: JNIEnv,
1111
_class: JClass,
1212
runtime: jlong,
1313
pointer: jlong,
@@ -17,35 +17,38 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DefaultSessionContext_re
1717
) {
1818
let runtime = unsafe { &mut *(runtime as *mut Runtime) };
1919
let name: String = env
20-
.get_string(name)
20+
.get_string(&name)
2121
.expect("Couldn't get name as string!")
2222
.into();
2323
let path: String = env
24-
.get_string(path)
24+
.get_string(&path)
2525
.expect("Couldn't get name as string!")
2626
.into();
2727
let context = unsafe { &mut *(pointer as *mut SessionContext) };
2828
runtime.block_on(async {
2929
let register_result = context
3030
.register_csv(&name, &path, CsvReadOptions::new())
3131
.await;
32-
let err_message: JValue = match register_result {
33-
Ok(_) => JValue::Void,
34-
Err(err) => {
35-
let err_message = env
36-
.new_string(err.to_string())
37-
.expect("Couldn't create java string!");
38-
err_message.into()
39-
}
32+
let err_message = match register_result {
33+
Ok(_) => "".to_string(),
34+
Err(err) => err.to_string(),
4035
};
41-
env.call_method(callback, "accept", "(Ljava/lang/Object;)V", &[err_message])
42-
.expect("failed to callback method");
36+
let err_message = env
37+
.new_string(err_message)
38+
.expect("Couldn't create java string!");
39+
env.call_method(
40+
callback,
41+
"accept",
42+
"(Ljava/lang/Object;)V",
43+
&[(&err_message).into()],
44+
)
45+
.expect("failed to callback method");
4346
});
4447
}
4548

4649
#[no_mangle]
4750
pub extern "system" fn Java_org_apache_arrow_datafusion_DefaultSessionContext_registerParquet(
48-
env: JNIEnv,
51+
mut env: JNIEnv,
4952
_class: JClass,
5053
runtime: jlong,
5154
pointer: jlong,
@@ -55,35 +58,38 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DefaultSessionContext_re
5558
) {
5659
let runtime = unsafe { &mut *(runtime as *mut Runtime) };
5760
let name: String = env
58-
.get_string(name)
61+
.get_string(&name)
5962
.expect("Couldn't get name as string!")
6063
.into();
6164
let path: String = env
62-
.get_string(path)
65+
.get_string(&path)
6366
.expect("Couldn't get path as string!")
6467
.into();
6568
let context = unsafe { &mut *(pointer as *mut SessionContext) };
6669
runtime.block_on(async {
6770
let register_result = context
6871
.register_parquet(&name, &path, ParquetReadOptions::default())
6972
.await;
70-
let err_message: JValue = match register_result {
71-
Ok(_) => JValue::Void,
72-
Err(err) => {
73-
let err_message = env
74-
.new_string(err.to_string())
75-
.expect("Couldn't create java string!");
76-
err_message.into()
77-
}
73+
let err_message = match register_result {
74+
Ok(_) => "".to_string(),
75+
Err(err) => err.to_string(),
7876
};
79-
env.call_method(callback, "accept", "(Ljava/lang/Object;)V", &[err_message])
80-
.expect("failed to callback method");
77+
let err_message = env
78+
.new_string(err_message)
79+
.expect("Couldn't create java string!");
80+
env.call_method(
81+
callback,
82+
"accept",
83+
"(Ljava/lang/Object;)V",
84+
&[(&err_message).into()],
85+
)
86+
.expect("failed to callback method");
8187
});
8288
}
8389

8490
#[no_mangle]
8591
pub extern "system" fn Java_org_apache_arrow_datafusion_DefaultSessionContext_querySql(
86-
env: JNIEnv,
92+
mut env: JNIEnv,
8793
_class: JClass,
8894
runtime: jlong,
8995
pointer: jlong,
@@ -92,20 +98,23 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DefaultSessionContext_qu
9298
) {
9399
let runtime = unsafe { &mut *(runtime as *mut Runtime) };
94100
let sql: String = env
95-
.get_string(sql)
101+
.get_string(&sql)
96102
.expect("Couldn't get sql as string!")
97103
.into();
98104
let context = unsafe { &mut *(pointer as *mut SessionContext) };
99105
runtime.block_on(async {
100106
let query_result = context.sql(&sql).await;
101107
match query_result {
102108
Ok(v) => {
109+
let empty_str = env
110+
.new_string("".to_string())
111+
.expect("Couldn't create java string!");
103112
let dataframe = Box::into_raw(Box::new(v)) as jlong;
104113
env.call_method(
105114
callback,
106115
"callback",
107116
"(Ljava/lang/String;J)V",
108-
&[JValue::Void, dataframe.into()],
117+
&[(&empty_str).into(), dataframe.into()],
109118
)
110119
}
111120
Err(err) => {
@@ -117,7 +126,7 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DefaultSessionContext_qu
117126
callback,
118127
"callback",
119128
"(Ljava/lang/String;J)V",
120-
&[err_message.into(), dataframe.into()],
129+
&[(&err_message).into(), dataframe.into()],
121130
)
122131
}
123132
}

datafusion-jni/src/dataframe.rs

Lines changed: 39 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use arrow::ipc::writer::FileWriter;
22
use datafusion::dataframe::DataFrame;
33
use datafusion::prelude::SessionContext;
4-
use jni::objects::{JClass, JObject, JString, JValue};
4+
use jni::objects::{JClass, JObject, JString};
55
use jni::sys::jlong;
66
use jni::JNIEnv;
77
use std::convert::Into;
@@ -12,7 +12,7 @@ use tokio::runtime::Runtime;
1212

1313
#[no_mangle]
1414
pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_collectDataframe(
15-
env: JNIEnv,
15+
mut env: JNIEnv,
1616
_class: JClass,
1717
runtime: jlong,
1818
dataframe: jlong,
@@ -39,21 +39,21 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_collectDatafr
3939
.new_string("".to_string())
4040
.expect("Couldn't create java string!");
4141
let ba = env
42-
.byte_array_from_slice(&buff.get_ref())
42+
.byte_array_from_slice(buff.get_ref())
4343
.expect("cannot create empty byte array");
4444
env.call_method(
4545
callback,
4646
"accept",
4747
"(Ljava/lang/Object;Ljava/lang/Object;)V",
48-
&[err_message.into(), ba.into()],
48+
&[(&err_message).into(), (&ba).into()],
4949
)
5050
.expect("failed to call method");
5151
});
5252
}
5353

5454
#[no_mangle]
5555
pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_showDataframe(
56-
env: JNIEnv,
56+
mut env: JNIEnv,
5757
_class: JClass,
5858
runtime: jlong,
5959
dataframe: jlong,
@@ -63,28 +63,26 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_showDataframe
6363
let dataframe = unsafe { &mut *(dataframe as *mut Arc<DataFrame>) };
6464
runtime.block_on(async {
6565
let r = dataframe.show().await;
66-
let err_message: JValue = match r {
67-
Ok(_) => JValue::Void,
68-
Err(err) => {
69-
let err_message = env
70-
.new_string(err.to_string())
71-
.expect("Couldn't create java string!");
72-
err_message.into()
73-
}
66+
let err_message = match r {
67+
Ok(_) => "".to_string(),
68+
Err(err) => err.to_string(),
7469
};
70+
let err_message = env
71+
.new_string(err_message)
72+
.expect("Couldn't create java string!");
7573
env.call_method(
7674
callback,
7775
"accept",
7876
"(Ljava/lang/Object;)V",
79-
&[err_message.into()],
77+
&[(&err_message).into()],
8078
)
8179
.expect("failed to call method");
8280
});
8381
}
8482

8583
#[no_mangle]
8684
pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_writeParquet(
87-
env: JNIEnv,
85+
mut env: JNIEnv,
8886
_class: JClass,
8987
runtime: jlong,
9088
dataframe: jlong,
@@ -94,33 +92,31 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_writeParquet(
9492
let runtime = unsafe { &mut *(runtime as *mut Runtime) };
9593
let dataframe = unsafe { &mut *(dataframe as *mut Arc<DataFrame>) };
9694
let path: String = env
97-
.get_string(path)
95+
.get_string(&path)
9896
.expect("Couldn't get path as string!")
9997
.into();
10098
runtime.block_on(async {
10199
let r = dataframe.write_parquet(&path, None).await;
102-
let err_message: JValue = match r {
103-
Ok(_) => JValue::Void,
104-
Err(err) => {
105-
let err_message = env
106-
.new_string(err.to_string())
107-
.expect("Couldn't create java string!");
108-
err_message.into()
109-
}
100+
let err_message = match r {
101+
Ok(_) => "".to_string(),
102+
Err(err) => err.to_string(),
110103
};
104+
let err_message = env
105+
.new_string(err_message)
106+
.expect("Couldn't create java string!");
111107
env.call_method(
112108
callback,
113109
"accept",
114110
"(Ljava/lang/Object;)V",
115-
&[err_message.into()],
111+
&[(&err_message).into()],
116112
)
117113
.expect("failed to call method");
118114
});
119115
}
120116

121117
#[no_mangle]
122118
pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_writeCsv(
123-
env: JNIEnv,
119+
mut env: JNIEnv,
124120
_class: JClass,
125121
runtime: jlong,
126122
dataframe: jlong,
@@ -130,33 +126,31 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_writeCsv(
130126
let runtime = unsafe { &mut *(runtime as *mut Runtime) };
131127
let dataframe = unsafe { &mut *(dataframe as *mut Arc<DataFrame>) };
132128
let path: String = env
133-
.get_string(path)
129+
.get_string(&path)
134130
.expect("Couldn't get path as string!")
135131
.into();
136132
runtime.block_on(async {
137133
let r = dataframe.write_csv(&path).await;
138-
let err_message: JValue = match r {
139-
Ok(_) => JValue::Void,
140-
Err(err) => {
141-
let err_message = env
142-
.new_string(err.to_string())
143-
.expect("Couldn't create java string!");
144-
err_message.into()
145-
}
134+
let err_message = match r {
135+
Ok(_) => "".to_string(),
136+
Err(err) => err.to_string(),
146137
};
138+
let err_message = env
139+
.new_string(err_message)
140+
.expect("Couldn't create java string!");
147141
env.call_method(
148142
callback,
149143
"accept",
150144
"(Ljava/lang/Object;)V",
151-
&[err_message.into()],
145+
&[(&err_message).into()],
152146
)
153147
.expect("failed to call method");
154148
});
155149
}
156150

157151
#[no_mangle]
158152
pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_registerTable(
159-
env: JNIEnv,
153+
mut env: JNIEnv,
160154
_class: JClass,
161155
runtime: jlong,
162156
dataframe: jlong,
@@ -168,25 +162,23 @@ pub extern "system" fn Java_org_apache_arrow_datafusion_DataFrames_registerTable
168162
let dataframe = unsafe { &mut *(dataframe as *mut Arc<DataFrame>) };
169163
let context = unsafe { &mut *(session as *mut SessionContext) };
170164
let name: String = env
171-
.get_string(name)
165+
.get_string(&name)
172166
.expect("Couldn't get name as string!")
173167
.into();
174168
runtime.block_on(async {
175169
let r = context.register_table(name.as_str(), dataframe.clone());
176-
let err_message: JValue = match r {
177-
Ok(_) => JValue::Void,
178-
Err(err) => {
179-
let err_message = env
180-
.new_string(err.to_string())
181-
.expect("Couldn't create java string!");
182-
err_message.into()
183-
}
170+
let err_message = match r {
171+
Ok(_) => "".to_string(),
172+
Err(err) => err.to_string(),
184173
};
174+
let err_message = env
175+
.new_string(err_message)
176+
.expect("Couldn't create java string!");
185177
env.call_method(
186178
callback,
187179
"accept",
188180
"(Ljava/lang/Object;)V",
189-
&[err_message.into()],
181+
&[(&err_message).into()],
190182
)
191183
.expect("failed to call method");
192184
});

0 commit comments

Comments
 (0)