浏览代码

Improved parameter binding

Cesar Rodas 5 月之前
父节点
当前提交
d48a84d561
共有 1 个文件被更改,包括 12 次插入5 次删除
  1. 12 5
      crates/cdk-sqlite/src/mint/async_rusqlite.rs

+ 12 - 5
crates/cdk-sqlite/src/mint/async_rusqlite.rs

@@ -105,12 +105,19 @@ impl Statement {
 #[inline(always)]
 fn process_query(conn: &Connection, sql: InnerStatement) -> Result<DbResponse, Error> {
     let start = Instant::now();
+    let mut args = sql.args;
     let mut stmt = conn.prepare_cached(&sql.sql)?;
-    for (name, value) in sql.args {
-        let index = stmt
-            .parameter_index(&name)
-            .map_err(|_| Error::MissingParameter(name.clone()))?
-            .ok_or(Error::MissingParameter(name))?;
+    let total_parameters = stmt.parameter_count();
+
+    for index in 1..=total_parameters {
+        let value = if let Some(value) = stmt.parameter_name(index).map(|name| {
+            args.remove(name)
+                .ok_or(Error::MissingParameter(name.to_owned()))
+        }) {
+            value?
+        } else {
+            continue;
+        };
 
         stmt.raw_bind_parameter(index, value)?;
     }