tank_core/query/builder/
create_table.rs1use 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}