Skip to main content

toolu_orm_query/
delete.rs

1//! DELETE query builder with dialect-aware SQL generation.
2
3use toolu_orm_core::dialect::Dialect;
4use toolu_orm_core::expr::Expr;
5use toolu_orm_core::value::Value;
6
7use crate::where_clause::{append_where_for, cfg_single_backend, impl_filter};
8
9cfg_single_backend! {
10  use crate::exec_helpers::impl_execute;
11}
12
13// ── DeleteBuilder ─────────────────────────────────────────────────────────────
14
15pub struct DeleteBuilder {
16  table: String,
17  filters: Vec<Expr>,
18}
19
20impl_filter!(DeleteBuilder);
21
22impl DeleteBuilder {
23  pub fn new(table: &str) -> Self {
24    Self {
25      table: table.to_owned(),
26      filters: Vec::new(),
27    }
28  }
29
30  pub fn to_sql_for(&self, dialect: Dialect) -> (String, Vec<Value>) {
31    let mut sql = String::new();
32    let mut params: Vec<Value> = Vec::new();
33
34    sql.push_str(&format!(r#"DELETE FROM "{}""#, self.table));
35    append_where_for(&self.filters, &mut sql, &mut params, dialect);
36
37    (sql, params)
38  }
39
40  pub fn to_sql(&self) -> (String, Vec<Value>) {
41    self.to_sql_for(Dialect::CURRENT)
42  }
43}
44
45cfg_single_backend! {
46  impl_execute!(DeleteBuilder, "DELETE");
47}