1use super::builder::QueryBuilder;
4use super::types::*;
5use super::upsert::UpsertBuilder;
6use serde_json::Value;
7
8impl<M> QueryBuilder<M> {
9 pub fn insert_into(mut self, table: &str) -> Self {
11 self.query_type = QueryType::Insert;
12 self.insert_table = Some(table.to_string());
13 self
14 }
15
16 pub fn update(mut self, table: &str) -> Self {
18 self.query_type = QueryType::Update;
19 self.update_table = Some(table.to_string());
20 self
21 }
22
23 pub fn delete_from(mut self, table: &str) -> Self {
25 self.query_type = QueryType::Delete;
26 self.delete_table = Some(table.to_string());
27 self
28 }
29
30 pub fn set<T: Into<Value>>(mut self, column: &str, value: T) -> Self {
32 self.set_clauses.push(SetClause {
33 column: column.to_string(),
34 value: Some(value.into()),
35 });
36 self
37 }
38
39 pub fn set_null(mut self, column: &str) -> Self {
41 self.set_clauses.push(SetClause {
42 column: column.to_string(),
43 value: None,
44 });
45 self
46 }
47
48 pub fn set_values(mut self, values: Vec<(String, Value)>) -> Self {
50 for (column, value) in values {
51 self.set_clauses.push(SetClause {
52 column,
53 value: Some(value),
54 });
55 }
56 self
57 }
58
59 pub fn upsert(mut self, table: &str, conflict_columns: Vec<&str>) -> UpsertBuilder<M> {
61 self.query_type = QueryType::Insert;
62 self.insert_table = Some(table.to_string());
63
64 UpsertBuilder {
65 query_builder: self,
66 conflict_columns: conflict_columns
67 .into_iter()
68 .map(|s| s.to_string())
69 .collect(),
70 update_clauses: Vec::new(),
71 }
72 }
73}