Function select_all

Source
pub fn select_all<T: SqlQuery + SqlParams, F, R>(
    conn: &Connection,
    entity: &T,
    to_model: F,
) -> Result<Vec<R>, Error>
where F: Fn(&Row<'_>) -> Result<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 connection
  • entity: 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(())
}