sql-middleware 0.9.0

Lightweight async wrappers for tokio-postgres, rusqlite, turso, and tiberius.
Documentation
use std::borrow::Cow;

use super::*;

#[test]
fn translates_sqlite_to_postgres() {
    let sql = "select * from t where a = ?1 and b = ?2";
    let res = translate_placeholders(sql, PlaceholderStyle::Postgres, true);
    assert_eq!(res, "select * from t where a = $1 and b = $2");
}

#[test]
fn translates_postgres_to_sqlite() {
    let sql = "insert into t values($1, $2)";
    let res = translate_placeholders(sql, PlaceholderStyle::Sqlite, true);
    assert_eq!(res, "insert into t values(?1, ?2)");
}

#[test]
fn skips_inside_literals_and_comments() {
    let sql = "select '?1', $1 -- $2\n/* ?3 */ from t where a = $1";
    let res = translate_placeholders(sql, PlaceholderStyle::Sqlite, true);
    assert_eq!(res, "select '?1', ?1 -- $2\n/* ?3 */ from t where a = ?1");
}

#[test]
fn skips_dollar_quoted_blocks() {
    let sql = "$foo$ select $1 from t $foo$ where a = $1";
    let res = translate_placeholders(sql, PlaceholderStyle::Sqlite, true);
    assert_eq!(res, "$foo$ select $1 from t $foo$ where a = ?1");
}

#[test]
fn respects_disabled_flag() {
    let sql = "select * from t where a = ?1";
    let res = translate_placeholders(sql, PlaceholderStyle::Postgres, false);
    assert!(matches!(res, Cow::Borrowed(_)));
    assert_eq!(res, sql);
}

#[test]
fn translation_mode_resolution() {
    assert!(TranslationMode::ForceOn.resolve(false));
    assert!(!TranslationMode::ForceOff.resolve(true));
    assert!(TranslationMode::PoolDefault.resolve(true));
    assert!(!TranslationMode::PoolDefault.resolve(false));
}