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}