tank_core/query/builder/
insert_into.rs1use crate::{AsEntity, Driver, DynQuery, NA, SqlWriter};
2use std::marker::PhantomData;
3
4pub struct InsertIntoQueryBuilder<Values, Update> {
5 pub(crate) values: Values,
6 pub(crate) update: bool,
7 pub(crate) _update: PhantomData<Update>,
8}
9
10impl InsertIntoQueryBuilder<NA, NA> {
11 pub fn values<Values>(self, values: Values) -> InsertIntoQueryBuilder<Values, NA>
12 where
13 Values: IntoIterator + Send,
14 Values::IntoIter: Send,
15 Values::Item: AsEntity,
16 {
17 InsertIntoQueryBuilder {
18 values,
19 update: false,
20 _update: Default::default(),
21 }
22 }
23}
24
25impl<V, U> InsertIntoQueryBuilder<V, U>
26where
27 V: IntoIterator + Clone + Send,
28 V::IntoIter: Send,
29 V::Item: AsEntity,
30{
31 pub fn get_values(&self) -> V {
32 self.values.clone()
33 }
34
35 pub fn get_update(&self) -> bool {
36 self.update
37 }
38
39 pub fn build<D: Driver>(&self, driver: &D) -> String {
40 let writer = driver.sql_writer();
41 let mut query = DynQuery::default();
42 writer.write_insert(&mut query, self.values.clone(), self.update);
43 query.into()
44 }
45
46 pub fn build_into<D: Driver>(&self, driver: &D, out: &mut DynQuery) {
47 let writer = driver.sql_writer();
48 writer.write_insert(out, self.values.clone(), self.update);
49 }
50}