sntl 0.1.0

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

#[test]
fn insert_single_row() {
    let q = InsertQuery::new("users")
        .column("email", "alice@example.com")
        .column("name", "Alice");
    let (sql, binds) = q.build();
    assert_eq!(
        sql,
        "INSERT INTO \"users\" (\"email\", \"name\") VALUES ($1, $2) RETURNING *"
    );
    assert_eq!(binds.len(), 2);
    assert_eq!(binds[0], Value::Text("alice@example.com".into()));
    assert_eq!(binds[1], Value::Text("Alice".into()));
}

#[test]
fn insert_with_returning_specific() {
    let q = InsertQuery::new("users")
        .column("email", "alice@example.com")
        .returning(vec!["id", "email"]);
    let (sql, _) = q.build();
    assert_eq!(
        sql,
        "INSERT INTO \"users\" (\"email\") VALUES ($1) RETURNING \"id\", \"email\""
    );
}

#[test]
fn insert_with_no_returning() {
    let q = InsertQuery::new("users")
        .column("email", "alice@example.com")
        .no_returning();
    let (sql, _) = q.build();
    assert_eq!(sql, "INSERT INTO \"users\" (\"email\") VALUES ($1)");
}

#[test]
fn insert_on_conflict_do_nothing() {
    let q = InsertQuery::new("users")
        .column("email", "alice@example.com")
        .on_conflict_do_nothing("email");
    let (sql, _) = q.build();
    assert_eq!(
        sql,
        "INSERT INTO \"users\" (\"email\") VALUES ($1) \
         ON CONFLICT (\"email\") DO NOTHING RETURNING *"
    );
}

#[test]
fn insert_multiple_values() {
    let q = InsertQuery::new("users")
        .column("email", "alice@example.com")
        .column("name", "Alice")
        .column("active", true);
    let (sql, binds) = q.build();
    assert_eq!(
        sql,
        "INSERT INTO \"users\" (\"email\", \"name\", \"active\") VALUES ($1, $2, $3) RETURNING *"
    );
    assert_eq!(binds.len(), 3);
}