Skip to main content

ngb_sqlbuilder/
delete.rs

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