tank_core/query/builder/
insert_into.rs

1use 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}