Skip to main content

ngb_sqlbuilder/
delete.rs

1use crate::clause::Clause;
2use crate::{Condition, SqlClause, wrap};
3
4pub struct Delete;
5pub struct DeleteWhere;
6
7pub fn delete_from<'q>(table: &str) -> Clause<'q, Delete> {
8    let mut sql = String::from("DELETE FROM ");
9    sql.push_str(&wrap(table));
10    Clause::new(sql, vec![])
11}
12impl<'q> Clause<'q, Delete> {
13    pub fn where_col(self, column: &str, value: Clause<'q, Condition>) -> Clause<'q, DeleteWhere> {
14        let (mut sql, mut params) = self.unwrap();
15        sql.push_str(" WHERE ");
16        sql.push_str(&wrap(column));
17        let (cond_sql, cond_params) = value.unwrap();
18        sql.push_str(&cond_sql);
19        params.extend_from_slice(&cond_params);
20        Clause::new(sql, params)
21    }
22
23    pub fn where_cond(self, cond: Clause<'q, Condition>) -> Clause<'q, DeleteWhere> {
24        let (mut sql, mut params) = self.unwrap();
25        let (cond_sql, cond_params) = cond.unwrap();
26        sql.push_str(" WHERE ");
27        sql.push_str(&cond_sql);
28        params.extend_from_slice(&cond_params);
29        Clause::new(sql, params)
30    }
31}
32
33#[cfg(test)]
34mod tests {
35    use crate::delete::delete_from;
36    use crate::eq;
37
38    #[test]
39    fn delete_test() {
40        let post_id = 123;
41        let (sql, params) = delete_from("Post")
42            .where_col("PostId", eq(&post_id))
43            .build();
44        println!("{}", sql);
45        println!("params: {:?}", params);
46    }
47}