From 94e397624f8d1fb152500bab6276956a13ffb847 Mon Sep 17 00:00:00 2001 From: Tom van Dinther <39470469+tvandinther@users.noreply.github.com> Date: Thu, 5 Sep 2024 23:28:33 +0200 Subject: [PATCH 1/4] Add statement.parameter_count() --- bindings/c/src/lib.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/bindings/c/src/lib.rs b/bindings/c/src/lib.rs index 5757cd5f7e..fff7013666 100644 --- a/bindings/c/src/lib.rs +++ b/bindings/c/src/lib.rs @@ -737,6 +737,29 @@ pub unsafe extern "C" fn libsql_bind_blob( 0 } +#[no_mangle] +pub unsafe extern "C" fn libsql_stmt_parameter_count( + stmt: libsql_stmt_t, + out_count: *mut std::ffi::c_int, + out_err_msg: *mut *const std::ffi::c_char, +) -> std::ffi::c_int { + if stmt.is_null() { + set_err_msg("Null statement".to_string(), out_err_msg); + return 1; + } + let stmt = stmt.get_ref_mut(); + match stmt.stmt.parameter_count().try_into() as Result { + Ok(i) => { + *out_count = i; + return 0; + } + Err(e) => { + set_err_msg(format!("Error getting parameter count: {}", e), out_err_msg); + return 1; + } + } +} + #[no_mangle] pub unsafe extern "C" fn libsql_query_stmt( stmt: libsql_stmt_t, From de7e67d09bd7ffbf528f0712ef7a28f9fbdb6520 Mon Sep 17 00:00:00 2001 From: Tom van Dinther <39470469+tvandinther@users.noreply.github.com> Date: Fri, 6 Sep 2024 00:02:49 +0200 Subject: [PATCH 2/4] Add statement.parameter_name() --- bindings/c/src/lib.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/bindings/c/src/lib.rs b/bindings/c/src/lib.rs index fff7013666..65949619ba 100644 --- a/bindings/c/src/lib.rs +++ b/bindings/c/src/lib.rs @@ -942,6 +942,35 @@ pub unsafe extern "C" fn libsql_column_name( } } +#[no_mangle] +pub unsafe extern "C" fn libsql_stmt_parameter_name( + stmt: libsql_stmt_t, + index: std::ffi::c_int, + out_name: *mut *const std::ffi::c_char, + out_err_msg: *mut *const std::ffi::c_char, +) -> std::ffi::c_int { + if stmt.is_null() { + set_err_msg("Null statement".to_string(), out_err_msg); + return 1; + } + let stmt = stmt.get_ref_mut(); + if let Some(name) = stmt.stmt.parameter_name(index) { + match std::ffi::CString::new(name) { + Ok(name) => { + *out_name = name.into_raw(); + return 0; + } + Err(e) => { + set_err_msg(format!("Error getting parameter name: {}", e), out_err_msg); + return 1; + } + } + } else { + set_err_msg(format!("There is no named parameter at index {}", index), out_err_msg); + return 1; + } +} + #[no_mangle] pub unsafe extern "C" fn libsql_column_type( res: libsql_rows_t, From 39b0b68381aac60ed6cb4b00ca7f8e3e2191c588 Mon Sep 17 00:00:00 2001 From: Tom van Dinther <39470469+tvandinther@users.noreply.github.com> Date: Fri, 6 Sep 2024 22:41:04 +0200 Subject: [PATCH 3/4] Add statement.finalize() --- bindings/c/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/bindings/c/src/lib.rs b/bindings/c/src/lib.rs index 65949619ba..f5872f03f3 100644 --- a/bindings/c/src/lib.rs +++ b/bindings/c/src/lib.rs @@ -818,6 +818,20 @@ pub unsafe extern "C" fn libsql_reset_stmt( 0 } +#[no_mangle] +pub unsafe extern "C" fn libsql_stmt_finalize( + stmt: libsql_stmt_t, + out_err_msg: *mut *const std::ffi::c_char, +) -> std::ffi::c_int { + if stmt.is_null() { + set_err_msg("Null statement".to_string(), out_err_msg); + return 1; + } + let stmt = stmt.get_ref_mut(); + stmt.stmt.finalize(); + 0 +} + #[no_mangle] pub unsafe extern "C" fn libsql_free_stmt(stmt: libsql_stmt_t) { if stmt.is_null() { From 3ab7f8adf2a2358673202a546bccd74c6be3a843 Mon Sep 17 00:00:00 2001 From: Tom van Dinther <39470469+tvandinther@users.noreply.github.com> Date: Sun, 31 Aug 2025 13:43:05 +0200 Subject: [PATCH 4/4] cargo fmt --- bindings/c/src/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bindings/c/src/lib.rs b/bindings/c/src/lib.rs index f5872f03f3..7054ae50a2 100644 --- a/bindings/c/src/lib.rs +++ b/bindings/c/src/lib.rs @@ -980,7 +980,10 @@ pub unsafe extern "C" fn libsql_stmt_parameter_name( } } } else { - set_err_msg(format!("There is no named parameter at index {}", index), out_err_msg); + set_err_msg( + format!("There is no named parameter at index {}", index), + out_err_msg, + ); return 1; } }