sntl 0.1.0

Compile-time guarded ORM for PostgreSQL — your data's guardian from compile to production
Documentation
use sntl::core::expr::Column;
use sntl::core::query::UpdateQuery;
use sntl::core::types::Value;

#[test]
fn update_single_field() {
    let q = UpdateQuery::new("users")
        .set("name", "Alice Smith")
        .where_id(Value::from("abc-123"));
    let (sql, binds) = q.build();
    assert_eq!(
        sql,
        "UPDATE \"users\" SET \"name\" = $1 WHERE \"id\" = $2 RETURNING *"
    );
    assert_eq!(binds.len(), 2);
    assert_eq!(binds[0], Value::Text("Alice Smith".into()));
}

#[test]
fn update_multiple_fields() {
    let q = UpdateQuery::new("users")
        .set("name", "Alice Smith")
        .set("active", false)
        .where_id(Value::from("abc-123"));
    let (sql, binds) = q.build();
    assert_eq!(
        sql,
        "UPDATE \"users\" SET \"name\" = $1, \"active\" = $2 WHERE \"id\" = $3 RETURNING *"
    );
    assert_eq!(binds.len(), 3);
}

#[test]
fn update_with_where_expr() {
    let col = Column::new("users", "role");
    let q = UpdateQuery::new("users")
        .set("active", false)
        .where_(col.eq("banned"));
    let (sql, binds) = q.build();
    assert_eq!(
        sql,
        "UPDATE \"users\" SET \"active\" = $1 WHERE \"users\".\"role\" = $2 RETURNING *"
    );
    assert_eq!(binds.len(), 2);
}

#[test]
fn update_no_returning() {
    let q = UpdateQuery::new("users")
        .set("name", "Alice")
        .where_id(Value::from("id-1"))
        .no_returning();
    let (sql, _) = q.build();
    assert!(sql.ends_with("WHERE \"id\" = $2"));
}