1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#[macro_export] macro_rules! fmt_query { ($a:literal) => { sqlink::format_query_postgres($a.into(), vec![]) }; ($a:literal, $($x:tt), *) => { sqlink::format_query_postgres($a.into(), vec![$(&($x)), *]) }; } #[cfg(test)] mod tests { use sqlink::{PostgresBuilder}; #[test] fn test_insert_builder_derive() { let user_spouse: Option<String> = None; let mut sql_insert = PostgresBuilder::insert(); let qbuild = sql_insert .table("user") .set("spouse", &user_spouse) .set("age", &1337) .set_raw("name", fmt_query!("LOWER({})", "foo")) .build().unwrap(); assert_eq!(qbuild.query, "INSERT INTO \"user\"(\"spouse\",\"age\",\"name\") VALUES ($1,$2,LOWER($3))"); assert_eq!(format!("{:?}", qbuild.parameters), "[None, 1337, \"foo\"]"); } #[test] fn test_select_builder_derive() { let mut sql_select = PostgresBuilder::select(); let qbuild = sql_select .select("u.id") .select("ub.account_no") .and_where(fmt_query!("u.id = {}", 1)) .table(("user", "u")) .left_join(("user_bank", "ub"), fmt_query!("u.user_id = ub.user_id and ub.code = {}", "abc")) .build().unwrap(); assert_eq!(qbuild.query, "SELECT u.id, ub.account_no FROM \"user\" AS u LEFT JOIN \"user_bank\" AS ub ON u.user_id = ub.user_id and ub.code = $1 WHERE u.id = $2"); assert_eq!(format!("{:?}", qbuild.parameters), "[\"abc\", 1]"); } }