From 8a17158034da35de84bff0aba9e00ea440691ca2 Mon Sep 17 00:00:00 2001 From: Andika Tanuwijaya Date: Sun, 29 Jun 2025 02:28:06 +0700 Subject: [PATCH] [rust_binding] named params --- bindings/rust/src/lib.rs | 16 ++++++++++-- bindings/rust/tests/integration_tests.rs | 32 +++++++++++++++++++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/bindings/rust/src/lib.rs b/bindings/rust/src/lib.rs index 53c6d17bf..7fc83cdff 100644 --- a/bindings/rust/src/lib.rs +++ b/bindings/rust/src/lib.rs @@ -229,7 +229,13 @@ impl Statement { stmt.bind_at(NonZero::new(i + 1).unwrap(), value.into()); } } - params::Params::Named(_items) => todo!(), + params::Params::Named(values) => { + for (name, value) in values.into_iter() { + let mut stmt = self.inner.lock().unwrap(); + let i = stmt.parameters().index(name).unwrap(); + stmt.bind_at(i, value.into()); + } + } } #[allow(clippy::arc_with_non_send_sync)] let rows = Rows { @@ -253,7 +259,13 @@ impl Statement { stmt.bind_at(NonZero::new(i + 1).unwrap(), value.into()); } } - params::Params::Named(_items) => todo!(), + params::Params::Named(values) => { + for (name, value) in values.into_iter() { + let mut stmt = self.inner.lock().unwrap(); + let i = stmt.parameters().index(name).unwrap(); + stmt.bind_at(i, value.into()); + } + } } loop { let mut stmt = self.inner.lock().unwrap(); diff --git a/bindings/rust/tests/integration_tests.rs b/bindings/rust/tests/integration_tests.rs index b9f31cc88..3fd5bee8c 100644 --- a/bindings/rust/tests/integration_tests.rs +++ b/bindings/rust/tests/integration_tests.rs @@ -1,4 +1,4 @@ -use limbo::Builder; +use limbo::{Builder, Value}; #[tokio::test] async fn test_rows_next() { @@ -14,6 +14,24 @@ async fn test_rows_next() { conn.execute("INSERT INTO test (x) VALUES (2)", ()) .await .unwrap(); + conn.execute( + "INSERT INTO test (x) VALUES (:x)", + vec![(":x".to_string(), Value::Integer(3))], + ) + .await + .unwrap(); + conn.execute( + "INSERT INTO test (x) VALUES (@x)", + vec![("@x".to_string(), Value::Integer(4))], + ) + .await + .unwrap(); + conn.execute( + "INSERT INTO test (x) VALUES ($x)", + vec![("$x".to_string(), Value::Integer(5))], + ) + .await + .unwrap(); let mut res = conn.query("SELECT * FROM test", ()).await.unwrap(); assert_eq!( res.next().await.unwrap().unwrap().get_value(0).unwrap(), @@ -23,5 +41,17 @@ async fn test_rows_next() { res.next().await.unwrap().unwrap().get_value(0).unwrap(), 2.into() ); + assert_eq!( + res.next().await.unwrap().unwrap().get_value(0).unwrap(), + 3.into() + ); + assert_eq!( + res.next().await.unwrap().unwrap().get_value(0).unwrap(), + 4.into() + ); + assert_eq!( + res.next().await.unwrap().unwrap().get_value(0).unwrap(), + 5.into() + ); assert!(res.next().await.unwrap().is_none()); }