tank_core/query/builder/
insert_into.rs1use crate::{Driver, DynQuery, Entity, NA, SqlWriter};
2use std::marker::PhantomData;
3
4pub struct InsertIntoQueryBuilder<E: Entity, Values, Update> {
5 pub(crate) values: Values,
6 pub(crate) update: bool,
7 pub(crate) _table: PhantomData<E>,
8 pub(crate) _update: PhantomData<Update>,
9}
10
11impl<E: Entity> InsertIntoQueryBuilder<E, NA, NA> {
12 pub fn values<'a, Values>(self, values: Values) -> InsertIntoQueryBuilder<E, Values, NA>
13 where
14 E: 'a,
15 Values: IntoIterator<Item = &'a E>,
16 {
17 InsertIntoQueryBuilder {
18 values,
19 update: false,
20 _table: Default::default(),
21 _update: Default::default(),
22 }
23 }
24}
25
26impl<'a, E, V, U> InsertIntoQueryBuilder<E, V, U>
27where
28 E: Entity + 'a,
29 V: IntoIterator<Item = &'a E> + Clone,
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::<E>(&mut query, self.values.clone(), self.update);
43 query.into_buffer()
44 }
45
46 pub fn build_into<D: Driver>(&self, driver: &D, out: &mut DynQuery) {
47 let writer = driver.sql_writer();
48 writer.write_create_table::<E>(out, self.update);
49 }
50}