sqll 0.14.2

Efficient interface to SQLite that doesn't get in your way
Documentation
use std::fs;

use anyhow::Result;
use sqll::{Connection, OwnedBytes};
use tempfile::tempdir;

#[test]
fn deserialize_file() -> Result<()> {
    let dir = tempdir()?;
    let path = dir.path().join("database.sqlite");

    {
        let c = Connection::open(&path)?;

        c.execute(
            r#"
			CREATE TABLE users (name TEXT, age INTEGER);
			INSERT INTO users VALUES ('Alice', 42);
			INSERT INTO users VALUES ('Bob', 72);
			"#,
        )?;
    }

    let bytes = fs::read(path)?;

    let mut data = OwnedBytes::new();
    data.extend_from_slice(&bytes)?;
    assert!(!data.is_empty());

    let c = Connection::open_in_memory()?;
    c.deserialize(c"main", data)?;

    let rows = c
        .prepare("SELECT name, age FROM users ORDER BY name")?
        .iter::<(String, u32)>()
        .collect::<sqll::Result<Vec<_>>>()?;

    assert_eq!(rows, [("Alice".to_string(), 42), ("Bob".to_string(), 72)]);
    Ok(())
}