pub fn select_all<T: SqlQuery + SqlParams, F, R>(
conn: &Connection,
entity: &T,
to_model: F,
) -> Result<Vec<R>, Error>
Expand description
§select_all
Executes a custom SELECT query and maps multiple results to models using a provided mapping function.
§Parameters
conn
: SQLite database connectionentity
: Query parameter object (must implement SqlQuery and SqlParams traits)to_model
: Function to map a database row to your model type
§Return Value
Result<Vec<T>, Error>
: On success, returns a vector of mapped models; on failure, returns Error
§Example Usage
use rusqlite::{Connection, Result, Row};
use parsql_macros::{Queryable, SqlParams};
use parsql_sqlite::select_all;
fn main() -> Result<()> {
// Create database connection
let conn = Connection::open("test.db")?;
conn.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT, state INTEGER)", [])?;
conn.execute("INSERT INTO users (name, email, state) VALUES ('John', 'john@example.com', 1)", [])?;
conn.execute("INSERT INTO users (name, email, state) VALUES ('Jane', 'jane@example.com', 1)", [])?;
// Define your model
#[derive(Debug)]
pub struct User {
pub id: i64,
pub name: String,
pub email: String,
pub state: i16,
}
// Define a query
#[derive(Queryable, SqlParams)]
#[table("users")]
#[where_clause("state = ?")]
pub struct GetActiveUsers {
pub state: i16,
}
// Create query parameters
let get_query = GetActiveUsers { state: 1 };
// Define row mapping function
let to_user = |row: &Row| -> Result<User> {
Ok(User {
id: row.get(0)?,
name: row.get(1)?,
email: row.get(2)?,
state: row.get(3)?,
})
};
// Execute query with custom mapping
let users = select_all(&mut conn, get_query, to_user)?;
println!("Active users: {:?}", users);
Ok(())
}