opentalk_database/
query_helper.rs1use diesel::{backend::Backend, query_builder::*, result::QueryResult, RunQueryDsl};
6
7#[derive(Debug, Clone)]
11pub struct DropDatabaseStatement {
12 db_name: String,
13 if_exists: bool,
14}
15
16impl DropDatabaseStatement {
17 pub fn new(db_name: &str) -> Self {
18 DropDatabaseStatement {
19 db_name: db_name.to_owned(),
20 if_exists: false,
21 }
22 }
23
24 pub fn if_exists(self) -> Self {
25 DropDatabaseStatement {
26 if_exists: true,
27 ..self
28 }
29 }
30}
31
32impl<DB: Backend> QueryFragment<DB> for DropDatabaseStatement {
33 fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, DB>) -> QueryResult<()> {
34 out.push_sql("DROP DATABASE ");
35 if self.if_exists {
36 out.push_sql("IF EXISTS ");
37 }
38 out.push_identifier(&self.db_name)?;
39 Ok(())
40 }
41}
42
43impl<Conn> RunQueryDsl<Conn> for DropDatabaseStatement {}
44
45impl QueryId for DropDatabaseStatement {
46 type QueryId = ();
47
48 const HAS_STATIC_QUERY_ID: bool = false;
49}
50
51#[derive(Debug, Clone)]
55pub struct CreateDatabaseStatement {
56 db_name: String,
57}
58
59impl CreateDatabaseStatement {
60 pub fn new(db_name: &str) -> Self {
61 CreateDatabaseStatement {
62 db_name: db_name.to_owned(),
63 }
64 }
65}
66
67impl<DB: Backend> QueryFragment<DB> for CreateDatabaseStatement {
68 fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, DB>) -> QueryResult<()> {
69 out.push_sql("CREATE DATABASE ");
70 out.push_identifier(&self.db_name)?;
71 Ok(())
72 }
73}
74
75impl<Conn> RunQueryDsl<Conn> for CreateDatabaseStatement {}
76
77impl QueryId for CreateDatabaseStatement {
78 type QueryId = ();
79
80 const HAS_STATIC_QUERY_ID: bool = false;
81}
82
83pub fn drop_database(db_name: &str) -> DropDatabaseStatement {
85 DropDatabaseStatement::new(db_name)
86}
87
88pub fn create_database(db_name: &str) -> CreateDatabaseStatement {
90 CreateDatabaseStatement::new(db_name)
91}