polyglot-sql 0.3.11

SQL parsing, validating, formatting, and dialect translation library
Documentation
use polyglot_sql::builder::{cast, col};
use polyglot_sql::dialects::{Dialect, DialectType};
use polyglot_sql::transpile;

#[test]
fn test_tsql_and_fabric_nvarchar_generation_differ_by_target() {
    let expr = cast(col("x"), "NVARCHAR(MAX)").into_inner();

    let tsql = Dialect::get(DialectType::TSQL).generate(&expr).unwrap();
    assert_eq!(tsql, "CAST(x AS NVARCHAR(MAX))");

    let fabric = Dialect::get(DialectType::Fabric).generate(&expr).unwrap();
    assert_eq!(fabric, "CAST(x AS VARCHAR(MAX))");
}

#[test]
fn test_tsql_preserves_nvarchar_in_cast_parsing() {
    let result = transpile(
        "SELECT CAST(x AS NVARCHAR(100))",
        DialectType::TSQL,
        DialectType::TSQL,
    )
    .unwrap();

    assert_eq!(result[0], "SELECT CAST(x AS NVARCHAR(100))");
}

#[test]
fn test_fabric_maps_nvarchar_to_supported_varchar() {
    let result = transpile(
        "SELECT CAST(x AS NVARCHAR(MAX))",
        DialectType::Fabric,
        DialectType::Fabric,
    )
    .unwrap();

    assert_eq!(result[0], "SELECT CAST(x AS VARCHAR(MAX))");
}