toolu-orm-query 0.2.0

Type-safe query builders for toolu-orm
Documentation
use super::fixtures::ID;
use toolu_orm_core::dialect::Dialect;
use toolu_orm_core::query_column::CommonOps;
use toolu_orm_core::value::Value;
use toolu_orm_query::select::SelectBuilder;

#[test]
fn select_to_sql_for_postgres_uses_dollar_params() {
  let (sql, params) = SelectBuilder::new("users")
    .columns_raw(&["id", "name"])
    .filter(ID.eq("user-1"))
    .to_sql_for(Dialect::Postgres);
  assert_eq!(
    sql,
    r#"SELECT "id", "name" FROM "users" WHERE "users"."id" = $1"#
  );
  assert_eq!(params, vec![Value::Text("user-1".to_owned())]);
}

#[test]
fn select_to_sql_for_sqlite_uses_question_params() {
  let (sql, params) = SelectBuilder::new("users")
    .columns_raw(&["id", "name"])
    .filter(ID.eq("user-1"))
    .to_sql_for(Dialect::Sqlite);
  assert_eq!(
    sql,
    r#"SELECT "id", "name" FROM "users" WHERE "users"."id" = ?1"#
  );
  assert_eq!(params, vec![Value::Text("user-1".to_owned())]);
}

#[test]
fn select_limit_offset_postgres_params() {
  let (sql, params) = SelectBuilder::new("users")
    .columns_raw(&["id"])
    .filter(ID.eq("u1"))
    .limit(10)
    .offset(20)
    .to_sql_for(Dialect::Postgres);
  assert!(sql.contains("$1"));
  assert!(sql.contains("$2"));
  assert!(sql.contains("$3"));
  assert_eq!(params.len(), 3);
}

#[test]
fn select_to_sql_delegates_to_current() {
  let builder = SelectBuilder::new("users").columns_raw(&["id"]);
  let (via_default, _) = builder.to_sql();
  let (via_explicit, _) = builder.to_sql_for(Dialect::CURRENT);
  assert_eq!(via_default, via_explicit);
}