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\"");
}
}