use crate::Syntax;
use crate::query::builder::ManualParam;
use crate::query::builder::QueryBuilder;
use crate::WeldsModel;
#[derive(Debug, Default, WeldsModel)]
#[welds(table = "nums")]
#[welds_path(crate)] struct Product {
#[welds(primary_key)]
pub id: i32,
pub a: i32,
pub b: i32,
}
#[test]
fn should_be_able_to_write_simple_set_value() {
futures::executor::block_on(async move {
let q = QueryBuilder::<Product>::new();
let bulk = q.set(|p| p.a, 1);
let client = welds_connections::noop::build(Syntax::Postgres);
let _ = bulk.run(&client).await;
let ran_sql = client
.last_sql()
.expect("Expected to get SQL back from client");
let expected = "UPDATE nums SET \"a\"=$1";
assert_eq!(expected, &ran_sql);
assert_eq!(client.args_count().unwrap(), 1);
});
}
#[test]
fn should_be_able_to_write_complex_set_values() {
futures::executor::block_on(async move {
let q = QueryBuilder::<Product>::new().where_col(|c| c.id.gt(10));
let bulk = q.set(|p| p.a, 1).set(|p| p.b, 2);
let client = welds_connections::noop::build(Syntax::Postgres);
let _ = bulk.run(&client).await;
let ran_sql = client
.last_sql()
.expect("Expected to get SQL back from client");
let expected = "UPDATE nums SET \"a\"=$1, \"b\"=$2 WHERE ( nums.\"id\" > $3 )";
assert_eq!(expected, &ran_sql);
assert_eq!(client.args_count().unwrap(), 3);
});
}
#[test]
fn should_be_able_to_write_complex_set_col_values() {
futures::executor::block_on(async move {
let q = QueryBuilder::<Product>::new().where_col(|c| c.id.gt(10));
let bulk = q.set_col(|x| x.a.equal(2)).set_col(|p| p.b.equal(2));
let client = welds_connections::noop::build(Syntax::Postgres);
let _ = bulk.run(&client).await;
let ran_sql = client
.last_sql()
.expect("Expected to get SQL back from client");
let expected = "UPDATE nums SET \"a\"=$1, \"b\"=$2 WHERE ( nums.\"id\" > $3 )";
assert_eq!(expected, &ran_sql);
});
}
#[test]
fn should_be_able_to_write_a_custom_set_statement() {
futures::executor::block_on(async move {
let params = ManualParam::new().push(42);
let q = QueryBuilder::<Product>::new()
.where_col(|c| c.id.gt(10))
.set_manual(|p| p.a, "$.b + ?", params);
let client = welds_connections::noop::build(Syntax::Postgres);
let _ = q.run(&client).await;
let ran_sql = client
.last_sql()
.expect("Expected to get SQL back from client");
let expected = "UPDATE nums SET \"a\" = ( nums.b + $1 ) WHERE ( nums.\"id\" > $2 )";
assert_eq!(expected, &ran_sql);
});
}