tank_core/query/builder/
create_table.rs

1use crate::{Driver, DynQuery, Entity, NA, SqlWriter};
2use std::marker::PhantomData;
3
4pub struct CreateTableQueryBuilder<Table: Entity, Exists> {
5    pub(crate) if_not_exists: bool,
6    pub(crate) _table: PhantomData<Table>,
7    pub(crate) _e: PhantomData<Exists>,
8}
9
10impl<T: Entity> CreateTableQueryBuilder<T, NA> {
11    pub fn if_not_exists(self) -> CreateTableQueryBuilder<T, bool> {
12        CreateTableQueryBuilder {
13            if_not_exists: true,
14            _table: self._table,
15            _e: Default::default(),
16        }
17    }
18}
19
20impl<T: Entity, E> CreateTableQueryBuilder<T, E> {
21    pub fn get_not_exists(&self) -> bool {
22        self.if_not_exists
23    }
24
25    pub fn build<D: Driver>(&self, driver: &D) -> String {
26        let writer = driver.sql_writer();
27        let mut query = DynQuery::default();
28        writer.write_create_table::<T>(&mut query, self.if_not_exists);
29        query.into_buffer()
30    }
31
32    pub fn build_into<D: Driver>(&self, driver: &D, out: &mut DynQuery) {
33        let writer = driver.sql_writer();
34        writer.write_create_table::<T>(out, self.if_not_exists);
35    }
36}
37
38pub trait CreateTableQuery<Table: Entity> {
39    fn get_not_exists(&self) -> bool;
40}
41
42impl<T: Entity, E> CreateTableQuery<T> for CreateTableQueryBuilder<T, E> {
43    fn get_not_exists(&self) -> bool {
44        self.get_not_exists()
45    }
46}