rjango 0.1.1

A full-stack Rust backend framework inspired by Django
Documentation
use sea_orm::sea_query::{Alias, Expr, ExprTrait, SimpleExpr};

pub fn count(field: &str) -> SimpleExpr {
    Expr::col(Alias::new(field)).count()
}

pub fn sum(field: &str) -> SimpleExpr {
    Expr::col(Alias::new(field)).sum()
}

pub fn avg(field: &str) -> SimpleExpr {
    Expr::col(Alias::new(field)).avg()
}

pub fn min(field: &str) -> SimpleExpr {
    Expr::col(Alias::new(field)).min()
}

pub fn max(field: &str) -> SimpleExpr {
    Expr::col(Alias::new(field)).max()
}

pub fn count_star() -> SimpleExpr {
    Expr::col(Alias::new("*")).count()
}

#[cfg(test)]
mod tests {
    use sea_orm::sea_query::{Alias, Query, SimpleExpr, SqliteQueryBuilder};

    use super::{avg, count, count_star, max, min, sum};

    fn render_select_expr(expr: SimpleExpr, alias: &str) -> String {
        Query::select()
            .expr_as(expr, Alias::new(alias))
            .from(Alias::new("widgets"))
            .to_owned()
            .to_string(SqliteQueryBuilder)
    }

    #[test]
    fn aggregate_helpers_render_sql_functions() {
        let count_sql = render_select_expr(count("id"), "total");
        let sum_sql = render_select_expr(sum("amount"), "total_amount");
        let avg_sql = render_select_expr(avg("score"), "average_score");
        let min_sql = render_select_expr(min("price"), "lowest_price");
        let max_sql = render_select_expr(max("price"), "highest_price");
        let count_star_sql = render_select_expr(count_star(), "all_rows");

        assert!(
            count_sql.contains("COUNT(\"id\")"),
            "expected COUNT SQL, got: {count_sql}"
        );
        assert!(
            sum_sql.contains("SUM(\"amount\")"),
            "expected SUM SQL, got: {sum_sql}"
        );
        assert!(
            avg_sql.contains("AVG(\"score\")"),
            "expected AVG SQL, got: {avg_sql}"
        );
        assert!(
            min_sql.contains("MIN(\"price\")"),
            "expected MIN SQL, got: {min_sql}"
        );
        assert!(
            max_sql.contains("MAX(\"price\")"),
            "expected MAX SQL, got: {max_sql}"
        );
        assert!(
            count_star_sql.contains("COUNT("),
            "expected COUNT in count_star SQL, got: {count_star_sql}"
        );
        assert!(
            count_star_sql.contains("*"),
            "expected star in count_star SQL, got: {count_star_sql}"
        );
    }
}