qraft 0.1.2

Typed Rust query builder with CTE and soft-delete support.
Documentation
#![cfg(feature = "derive")]

use qraft::expression::EqExt;
use qraft::select;
use qraft::{Postgres, Qraft, Sqlite, alias};

#[derive(Qraft)]
pub struct User {
    id: i64,
    name: Option<String>,
}

#[test]
fn alias_macro_exposes_const_columns() {
    alias!(u: User);

    let stmt = select((u::id, u::name))
        .from(u::table)
        .filter(u::id.eq(7))
        .to_debug_sql::<Postgres>();

    assert_eq!(
        stmt,
        r#"select "u"."id", "u"."name" from "users" as "u" where "u"."id" = $1; params=[7]"#
    );
}

#[test]
fn alias_macro_supports_joins() {
    alias!(u: User);
    alias!(other: User);

    let stmt = select((u::id, other::name))
        .from(u::table)
        .inner_join(other::table.on(u::id.eq(other::id)))
        .to_debug_sql::<Sqlite>();

    assert_eq!(
        stmt,
        r#"select "u"."id", "other"."name" from "users" as "u" inner join "users" as "other" on "u"."id" = "other"."id"; params=[]"#
    );
}

#[test]
fn alias_macro_supports_updates() {
    alias!(u: User);

    let stmt = qraft::update(u::table)
        .set(u::name.eq("lea"))
        .filter(u::id.eq(1))
        .to_debug_sql::<Sqlite>();

    assert_eq!(
        stmt,
        r#"update "users" as "u" set "name" = ? where "u"."id" = ?; params=["lea", 1]"#
    );
}