From 0481e692172be53f3f549df72851ff71c7f635d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EC=9A=B0?= Date: Fri, 24 Jan 2025 14:07:52 +0900 Subject: [PATCH] Handle Err case from `connection.io` --- bindings/java/rs_src/limbo_statement.rs | 35 ++++++++++++++----------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/bindings/java/rs_src/limbo_statement.rs b/bindings/java/rs_src/limbo_statement.rs index 29ecb7cd1..4277b599e 100644 --- a/bindings/java/rs_src/limbo_statement.rs +++ b/bindings/java/rs_src/limbo_statement.rs @@ -59,27 +59,32 @@ pub extern "system" fn Java_org_github_tursodatabase_core_LimboStatement_step<'l }; loop { - match stmt.stmt.step() { - Ok(StepResult::Row(row)) => match row_to_obj_array(&mut env, &row) { - Ok(row) => return to_limbo_step_result(&mut env, STEP_RESULT_ID_ROW, Some(row)), - Err(e) => { + match stmt + .stmt + .step() + .map_err(|_e| to_limbo_step_result(&mut env, STEP_RESULT_ID_ERROR, None)) + .unwrap() + { + StepResult::Row(row) => { + return match row_to_obj_array(&mut env, &row) { + Ok(row) => to_limbo_step_result(&mut env, STEP_RESULT_ID_ROW, Some(row)), + Err(e) => { + set_err_msg_and_throw_exception(&mut env, obj, LIMBO_ETC, e.to_string()); + to_limbo_step_result(&mut env, STEP_RESULT_ID_ERROR, None) + } + } + } + StepResult::IO => { + if let Err(e) = stmt.connection.io.run_once() { set_err_msg_and_throw_exception(&mut env, obj, LIMBO_ETC, e.to_string()); return to_limbo_step_result(&mut env, STEP_RESULT_ID_ERROR, None); } - }, - Ok(StepResult::IO) => { - stmt.connection.io.run_once().unwrap(); } - Ok(StepResult::Done) => { - return to_limbo_step_result(&mut env, STEP_RESULT_ID_DONE, None) - } - Ok(StepResult::Interrupt) => { + StepResult::Done => return to_limbo_step_result(&mut env, STEP_RESULT_ID_DONE, None), + StepResult::Interrupt => { return to_limbo_step_result(&mut env, STEP_RESULT_ID_INTERRUPT, None) } - Ok(StepResult::Busy) => { - return to_limbo_step_result(&mut env, STEP_RESULT_ID_BUSY, None) - } - _ => return to_limbo_step_result(&mut env, STEP_RESULT_ID_ERROR, None), + StepResult::Busy => return to_limbo_step_result(&mut env, STEP_RESULT_ID_BUSY, None), } } }