ormdantic-dialects 2.0.1

SQL dialect support for Ormdantic
Documentation
use ormdantic_dialects::{
    Dialect, MariaDbDialect, MsSqlDialect, MySqlDialect, OracleDialect, PostgresDialect,
    SqliteDialect,
};

#[test]
fn renders_upsert_conflict_clauses_by_backend() {
    assert_eq!(
        SqliteDialect
            .upsert_conflict_clause("id", &["name".to_string()])
            .unwrap(),
        r#"ON CONFLICT ("id") DO UPDATE SET "name" = excluded."name""#
    );
    assert_eq!(
        PostgresDialect.upsert_conflict_clause("id", &[]).unwrap(),
        r#"ON CONFLICT ("id") DO NOTHING"#
    );
    assert_eq!(
        MySqlDialect
            .upsert_conflict_clause("id", &["name".to_string()])
            .unwrap(),
        "ON DUPLICATE KEY UPDATE `name` = VALUES(`name`)"
    );
    assert_eq!(
        MariaDbDialect
            .upsert_conflict_clause("id", &["name".to_string()])
            .unwrap(),
        "ON DUPLICATE KEY UPDATE `name` = VALUES(`name`)"
    );
    assert_eq!(
        MySqlDialect.upsert_conflict_clause("id", &[]).unwrap(),
        "ON DUPLICATE KEY UPDATE 1 = 1"
    );
}

#[test]
fn rejects_insert_conflict_clauses_for_merge_upsert_dialects() {
    for error in [
        MsSqlDialect
            .upsert_conflict_clause("id", &["name".to_string()])
            .expect_err("sql server upsert is rendered as MERGE"),
        OracleDialect
            .upsert_conflict_clause("id", &["name".to_string()])
            .expect_err("oracle upsert is rendered as MERGE"),
    ] {
        assert!(error.to_string().contains("INSERT conflict-clause upsert"));
    }
}