sqlutil 0.1.3

A utility library for building SQL queries
Documentation
use crate::{build_select_sql, make_column, make_order, make_table, make_where};

pub fn make_query(
    tables: &[&str],
    columns: &[&str],
    wheres: &[&str],
    orders: &[&str],
    offset: Option<i64>,
    limit: Option<i64>,
) -> String {
    build_select_sql(
        &make_table(tables),
        Some(&make_column(columns)),
        Some(&make_where(wheres)),
        Some(&make_order(orders)),
        offset,
        limit,
    )
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_make_query_basic() {
        let sql = make_query(&["users"], &["*"], &[], &[], None, None);
        assert_eq!(sql, "SELECT * FROM \"users\"");
    }

    #[test]
    fn test_make_query_select_columns() {
        let sql = make_query(&["users"], &["id", "name", "email"], &[], &[], None, None);
        assert_eq!(sql, "SELECT id , name , email FROM \"users\"");
    }

    #[test]
    fn test_make_query_with_where() {
        let sql = make_query(&["users"], &["*"], &["age > 18", "active = 1"], &[], None, None);
        assert_eq!(sql, "SELECT * FROM \"users\" WHERE age > 18 AND active = 1");
    }

    #[test]
    fn test_make_query_with_order() {
        let sql = make_query(&["users"], &["*"], &[], &["created_at DESC", "id ASC"], None, None);
        assert_eq!(sql, "SELECT * FROM \"users\" ORDER BY created_at DESC , id ASC");
    }

    #[test]
    fn test_make_query_with_limit_offset() {
        let sql = make_query(&["users"], &["*"], &[], &[], Some(20), Some(10));
        assert_eq!(sql, "SELECT * FROM \"users\" OFFSET 20 LIMIT 10");
    }

    #[test]
    fn test_make_query_full() {
        let sql = make_query(
            &["users"],
            &["id", "email"],
            &["active = 1"],
            &["id ASC"],
            Some(0),
            Some(25),
        );
        assert_eq!(
            sql,
            "SELECT id , email FROM \"users\" WHERE active = 1 ORDER BY id ASC OFFSET 0 LIMIT 25"
        );
    }

    #[test]
    fn test_make_query_empty_slices() {
        let sql = make_query(&["logs"], &[], &[], &[], None, None);
        assert_eq!(sql, "SELECT  FROM \"logs\"");
    }
}