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}