drizzle 0.1.16

A type-safe SQL query builder for Rust
Documentation
#[cfg(feature = "rusqlite")]
mod schema;

#[cfg(feature = "rusqlite")]
fn main() {
    use drizzle::core::expr::eq;
    use drizzle::sqlite::prelude::*;
    use rusqlite::Connection;
    #[cfg(feature = "uuid")]
    use uuid::Uuid;

    use crate::schema::{InsertPosts, InsertUsers, Posts, Schema, SelectPosts, SelectUsers, Users};

    let conn = Connection::open_in_memory().expect("open connection");
    let (db, Schema { users, posts }) =
        drizzle::sqlite::rusqlite::Drizzle::new(conn, Schema::new());
    db.create().expect("create tables");

    #[cfg(feature = "uuid")]
    let id = Uuid::new_v4();
    #[cfg(not(feature = "uuid"))]
    let id = 1;

    db.insert(users)
        .values([InsertUsers::new("Alex Smith", 26u64).with_id(id)])
        .execute()
        .expect("insert user");

    db.insert(posts)
        .values([InsertPosts::new(id).with_context("just testing")])
        .execute()
        .expect("insert post");

    let user_rows: Vec<SelectUsers> = db.select(()).from(users).all().expect("select users");
    let post_rows: Vec<SelectPosts> = db.select(()).from(posts).all().expect("select posts");

    assert_eq!(user_rows.len(), 1);
    assert_eq!(user_rows[0].name, "Alex Smith");
    assert_eq!(post_rows.len(), 1);
    assert_eq!(post_rows[0].context, Some("just testing".to_string()));

    println!("Users: {:?}", user_rows);
    println!("Posts: {:?}", post_rows);

    #[derive(SQLiteFromRow, Debug)]
    #[from(Users)]
    struct JoinedResult {
        #[cfg(feature = "uuid")]
        id: Uuid,
        #[cfg(not(feature = "uuid"))]
        id: i64,
        #[cfg(feature = "uuid")]
        #[column(Posts::id)]
        post_id: Uuid,
        #[cfg(not(feature = "uuid"))]
        #[column(Posts::id)]
        post_id: i64,
        name: String,
        age: i64,
    }

    let row: JoinedResult = db
        .select(JoinedResult::Select)
        .from(users)
        .left_join((posts, eq(users.id, posts.user_id)))
        .get()
        .expect("select users on posts.user_id");

    assert_eq!(row.id, id);
    assert_eq!(row.name, "Alex Smith");
    assert_eq!(row.age, 26);
    #[cfg(feature = "uuid")]
    assert!(!row.post_id.is_nil());
    #[cfg(not(feature = "uuid"))]
    assert_eq!(row.post_id, 1);
}

#[cfg(not(feature = "rusqlite"))]
fn main() {
    println!(
        "rusqlite feature not enabled — run with: cargo run --example rusqlite --features rusqlite"
    );
}