Skip to content

Commit 50cea3c

Browse files
authored
Add test for appending struct fields using params! macro (#603)
Fixes #408
2 parents 85543ad + aeec0a1 commit 50cea3c

File tree

1 file changed

+42
-0
lines changed
  • crates/duckdb/src/appender

1 file changed

+42
-0
lines changed

crates/duckdb/src/appender/mod.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,48 @@ mod test {
281281
Ok(())
282282
}
283283

284+
#[test]
285+
#[cfg(feature = "chrono")]
286+
fn test_append_struct_with_params() -> Result<()> {
287+
use chrono::NaiveDate;
288+
289+
struct Person {
290+
first_name: String,
291+
last_name: String,
292+
dob: NaiveDate,
293+
}
294+
295+
let db = Connection::open_in_memory()?;
296+
297+
db.execute_batch("CREATE TABLE foo(first_name VARCHAR, last_name VARCHAR, dob DATE);")?;
298+
299+
let person1 = Person {
300+
first_name: String::from("John"),
301+
last_name: String::from("Smith"),
302+
dob: NaiveDate::from_ymd_opt(1970, 1, 1).unwrap(),
303+
};
304+
305+
let person2 = Person {
306+
first_name: String::from("Jane"),
307+
last_name: String::from("Smith"),
308+
dob: NaiveDate::from_ymd_opt(1975, 1, 1).unwrap(),
309+
};
310+
311+
// Use params! to extract struct fields
312+
{
313+
let persons = vec![&person1, &person2];
314+
let mut app = db.appender("foo")?;
315+
for p in &persons {
316+
app.append_row(params![&p.first_name, &p.last_name, p.dob])?;
317+
}
318+
}
319+
320+
let count: i64 = db.query_row("SELECT count(*) FROM foo", [], |row| row.get(0))?;
321+
assert_eq!(count, 2);
322+
323+
Ok(())
324+
}
325+
284326
#[test]
285327
fn test_appender_error() -> Result<()> {
286328
let conn = Connection::open_in_memory()?;

0 commit comments

Comments
 (0)