sql_query_builder 2.6.2

Write SQL queries in a simple and composable way
Documentation
mod insert_command {
  use pretty_assertions::assert_eq;
  use sql_query_builder as sql;

  #[test]
  fn method_select_should_add_a_select_clause() {
    let query = sql::Insert::new()
      .insert_into("users (login, name)")
      .select(
        sql::Select::new()
          .select("login, name")
          .from("users_bk")
          .where_clause("active = true"),
      )
      .as_string();

    let expected_query = "\
      INSERT INTO users (login, name) \
      SELECT login, name \
      FROM users_bk \
      WHERE active = true\
    ";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_select_should_override_value_on_consecutive_calls() {
    let query = sql::Insert::new()
      .insert_into("users")
      .select(sql::Select::new().select("login, name"))
      .select(sql::Select::new().select("*"))
      .as_string();

    let expected_query = "INSERT INTO users SELECT *";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_raw_before_should_add_raw_sql_before_select_clause() {
    let query = sql::Insert::new()
      .raw_before(sql::InsertClause::Select, "insert into users")
      .select(sql::Select::new().select("*"))
      .as_string();

    let expected_query = "insert into users SELECT *";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_raw_after_should_add_raw_sql_after_select_clause() {
    let query = sql::Insert::new()
      .insert_into("users")
      .select(sql::Select::new().select("*"))
      .raw_after(sql::InsertClause::Select, "from users_bk")
      .as_string();
    let expected_query = "INSERT INTO users SELECT * from users_bk";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn clause_select_should_be_after_insert_into_clause() {
    let query = sql::Insert::new()
      .select(sql::Select::new().select("login, name"))
      .insert_into("users (login, name)")
      .as_string();
    let expected_query = "INSERT INTO users (login, name) SELECT login, name";

    assert_eq!(expected_query, query);
  }
}

mod select_command {
  use pretty_assertions::assert_eq;
  use sql_query_builder as sql;

  #[test]
  fn method_select_should_add_the_select_clause() {
    let query = sql::Select::new().select("id, login").as_string();
    let expected_query = "SELECT id, login";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_select_should_accumulate_values_on_consecutive_calls() {
    let query = sql::Select::new().select("id, login").select("created_at").as_string();
    let expected_query = "SELECT id, login, created_at";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_select_should_not_accumulate_values_when_column_name_is_empty() {
    let query = sql::Select::new()
      .select("")
      .select("created_at")
      .select("")
      .as_string();
    let expected_query = "SELECT created_at";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_select_should_trim_space_of_the_argument() {
    let query = sql::Select::new().select("  login, name  ").as_string();
    let expected_query = "SELECT login, name";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_select_should_not_accumulate_arguments_with_the_same_content() {
    let query = sql::Select::new()
      .select("login, name")
      .select("login, name")
      .as_string();
    let expected_query = "SELECT login, name";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_raw_before_should_add_raw_sql_before_select_clause() {
    let query = sql::Select::new()
      .raw_before(sql::SelectClause::Select, "/* list orders */")
      .select("id, name")
      .as_string();
    let expected_query = "/* list orders */ SELECT id, name";

    assert_eq!(expected_query, query);
  }

  #[test]
  fn method_raw_after_should_add_raw_sql_after_select_clause() {
    let query = sql::Select::new()
      .select("id, name")
      .raw_after(sql::SelectClause::Select, "from addresses")
      .as_string();
    let expected_query = "SELECT id, name from addresses";

    assert_eq!(expected_query, query);
  }
}