sqlm-postgres-macros 0.1.0

macros for `sqlm-postgres`
Documentation
use std::fmt::Debug;

use sqlm_postgres::{sql, Sql};

#[test]
fn parameter_reuse_named() {
    let sql: Sql<'_, _, ()> = sql!(
        "SELECT * FROM users \
         WHERE id > {after} AND id < {after} + 42",
        after = 8,
    );
    assert_eq!(
        sql.query,
        "SELECT * FROM users WHERE id > $1 AND id < $1 + 42",
    );
    assert_eq!(
        sql.parameters.iter().map(fmt_debug).collect::<Vec<_>>(),
        vec!["8"]
    );
}

#[test]
fn parameter_reuse_positional() {
    let sql: Sql<'_, _, ()> = sql!(
        "SELECT * FROM users \
         WHERE id > {} AND id < {0} + 42",
        8,
    );
    assert_eq!(
        sql.query,
        "SELECT * FROM users WHERE id > $1 AND id < $1 + 42",
    );
    assert_eq!(
        sql.parameters.iter().map(fmt_debug).collect::<Vec<_>>(),
        vec!["8"]
    );
}

#[test]
fn parameter_reuse_variable() {
    let after = 8;
    let sql: Sql<'_, _, ()> = sql!(
        "SELECT * FROM users \
         WHERE id > {after} AND id < {after} + 42",
    );
    assert_eq!(
        sql.query,
        "SELECT * FROM users WHERE id > $1 AND id < $1 + 42",
    );
    assert_eq!(
        sql.parameters.iter().map(fmt_debug).collect::<Vec<_>>(),
        vec!["8"]
    );
}

fn fmt_debug(v: impl Debug) -> String {
    format!("{:?}", v)
}