sea_query/raw_sql/
seaql.rs1use crate::{Value, Values};
2
3#[derive(Debug)]
4pub struct Query {
5 pub sql: String,
6 pub values: Values,
7}
8
9pub fn query(sql: &str) -> Query {
10 Query {
11 sql: sql.to_owned(),
12 values: Values(Default::default()),
13 }
14}
15
16impl Query {
17 pub fn bind<V: Into<Value> + Clone>(mut self, v: &V) -> Self {
18 self.values.0.push(v.to_owned().into());
19 self
20 }
21
22 pub fn into_parts(self) -> (String, Values) {
24 (self.sql, self.values)
25 }
26}
27
28pub struct DebugQuery {
29 pub sql: String,
30 pub params: Vec<String>,
31}
32
33pub fn debug(sql: &str) -> DebugQuery {
34 DebugQuery {
35 sql: sql.to_owned(),
36 params: Default::default(),
37 }
38}
39
40impl DebugQuery {
41 pub fn bind<V: std::fmt::Debug>(mut self, v: V) -> Self {
43 self.params.push(format!("{v:?}"));
44 self
45 }
46}
47
48impl std::fmt::Debug for DebugQuery {
49 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
50 write!(f, "sql!(")?;
51 write!(f, "{}", self.sql)?;
52 writeln!(f, ")")?;
53 write!(f, " .params(")?;
54 for (i, p) in self.params.iter().enumerate() {
55 if i > 0 {
56 write!(f, ", ")?;
57 }
58 write!(f, "{p}")?;
59 }
60 write!(f, ")")
61 }
62}