postgres_querybuilder/
lib.rs

1//! # Postgres QueryBuilder
2//!
3//! `postgres-querybuilder` is a tool to help you build sql queries that you can then use with [rust-postgres](https://github.com/sfackler/rust-postgres)
4// --snip--
5
6#[cfg(test)]
7#[macro_use]
8extern crate serial_test;
9
10pub mod bucket;
11pub mod prelude;
12mod select_builder;
13mod update_builder;
14
15pub use select_builder::SelectBuilder;
16pub use update_builder::UpdateBuilder;
17
18#[cfg(test)]
19mod test {
20  use super::prelude::*;
21  use super::select_builder::SelectBuilder;
22  use super::*;
23  use postgres::{Client, Error, NoTls};
24  use std::env;
25
26  fn get_url() -> String {
27    match env::var("DATABASE_URL") {
28      Ok(value) => value,
29      Err(_) => "postgres://postgres:password@localhost/postgres".into(),
30    }
31  }
32
33  fn prepare(client: &mut Client) {
34    client.execute("DROP TABLE IF EXISTS users;", &[]).unwrap();
35    client
36      .execute(
37        "CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT UNIQUE NOT NULL);",
38        &[],
39      )
40      .unwrap();
41  }
42
43  fn get_connection() -> Client {
44    let url = get_url();
45    let mut client = Client::connect(url.as_str(), NoTls).unwrap();
46    prepare(&mut client);
47    client
48  }
49
50  fn execute<T: QueryBuilder>(builder: T) -> Result<u64, Error> {
51    let mut client = get_connection();
52    let stmt = builder.get_query();
53    let params = builder.get_ref_params();
54    client.execute(stmt.as_str(), &params)
55  }
56
57  #[serial]
58  #[test]
59  fn select_limit_offset() {
60    let mut builder = SelectBuilder::new("users");
61    builder.select("id");
62    builder.select("name");
63    builder.limit(3);
64    builder.offset(1);
65    execute(builder).unwrap();
66  }
67
68  #[serial]
69  #[test]
70  fn select_where() {
71    let mut builder = SelectBuilder::new("users");
72    builder.select("id");
73    builder.select("name");
74    builder.where_eq("id", 42);
75    execute(builder).unwrap();
76  }
77}