From 97b50b95c00adcc99f269da6f3beed70e31cd434 Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Sat, 14 Mar 2020 23:46:10 -0700 Subject: [PATCH] sqlite: ensure that we additionally clear the bindings when resetting the statement --- sqlx-core/src/sqlite/statement.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sqlx-core/src/sqlite/statement.rs b/sqlx-core/src/sqlite/statement.rs index ee02513103..a1da8156ec 100644 --- a/sqlx-core/src/sqlite/statement.rs +++ b/sqlx-core/src/sqlite/statement.rs @@ -5,10 +5,10 @@ use std::ffi::CStr; use std::os::raw::c_int; use libsqlite3_sys::{ - sqlite3_bind_parameter_count, sqlite3_column_count, sqlite3_column_decltype, - sqlite3_column_name, sqlite3_finalize, sqlite3_prepare_v3, sqlite3_reset, sqlite3_step, - sqlite3_stmt, SQLITE_DONE, SQLITE_OK, SQLITE_PREPARE_NO_VTAB, SQLITE_PREPARE_PERSISTENT, - SQLITE_ROW, + sqlite3_bind_parameter_count, sqlite3_clear_bindings, sqlite3_column_count, + sqlite3_column_decltype, sqlite3_column_name, sqlite3_finalize, sqlite3_prepare_v3, + sqlite3_reset, sqlite3_step, sqlite3_stmt, SQLITE_DONE, SQLITE_OK, SQLITE_PREPARE_NO_VTAB, + SQLITE_PREPARE_PERSISTENT, SQLITE_ROW, }; use crate::sqlite::worker::Worker; @@ -160,12 +160,16 @@ impl SqliteStatement { pub(super) fn reset(&mut self) { // https://sqlite.org/c3ref/reset.html + // https://sqlite.org/c3ref/clear_bindings.html // the status value of reset is ignored because it merely propagates // the status of the most recently invoked step function #[allow(unsafe_code)] let _ = unsafe { sqlite3_reset(self.handle()) }; + + #[allow(unsafe_code)] + let _ = unsafe { sqlite3_clear_bindings(self.handle()) }; } pub(super) async fn step(&mut self) -> crate::Result {