diesel/pg/query_builder/
mod.rs

1use super::backend::Pg;
2use query_builder::QueryBuilder;
3use result::QueryResult;
4
5mod distinct_on;
6mod query_fragment_impls;
7pub use self::distinct_on::DistinctOnClause;
8
9/// The PostgreSQL query builder
10#[allow(missing_debug_implementations)]
11#[derive(Default)]
12pub struct PgQueryBuilder {
13    sql: String,
14    bind_idx: u32,
15}
16
17impl PgQueryBuilder {
18    /// Constructs a new query builder with an empty query
19    pub fn new() -> Self {
20        PgQueryBuilder::default()
21    }
22}
23
24impl QueryBuilder<Pg> for PgQueryBuilder {
25    fn push_sql(&mut self, sql: &str) {
26        self.sql.push_str(sql);
27    }
28
29    fn push_identifier(&mut self, identifier: &str) -> QueryResult<()> {
30        self.push_sql("\"");
31        self.push_sql(&identifier.replace('"', "\"\""));
32        self.push_sql("\"");
33        Ok(())
34    }
35
36    fn push_bind_param(&mut self) {
37        self.bind_idx += 1;
38        let sql = format!("${}", self.bind_idx);
39        self.push_sql(&sql);
40    }
41
42    fn finish(self) -> String {
43        self.sql
44    }
45}