1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#[macro_use]
use macros;
use mysql::Pool;
use mysql::Error;
use mysql::PooledConn;
use meta::OrmMeta;
use entity::Entity;
// use session::Session;
pub struct Db {
pool: Pool,
orm_meta: &'static OrmMeta,
}
impl Db {
pub fn new(pool: Pool, orm_meta: &'static OrmMeta) -> Self {
Db {
pool: pool,
orm_meta: orm_meta,
}
}
pub fn rebuild(&self) -> Result<u64, Error> {
try!(self.drop());
Ok(try!(self.create()))
}
pub fn create(&self) -> Result<u64, Error> {
let mut ret = 0;
for entity_meta in self.orm_meta.get_entities().iter() {
let sql = entity_meta.sql_create_table();
log!("{}", sql);
match self.pool.prep_exec(sql, ()) {
Ok(res) => ret += res.affected_rows(),
Err(err) => {
return Err(err);
}
}
}
return Ok(ret);
}
pub fn drop(&self) -> Result<u64, Error> {
let mut ret = 0;
for entity_meta in self.orm_meta.get_entities().iter() {
let sql = entity_meta.sql_drop_table();
log!("{}", sql);
match self.pool.prep_exec(sql, ()) {
Ok(res) => ret += res.affected_rows(),
Err(err) => {
return Err(err);
}
}
}
return Ok(ret);
}
pub fn get_conn(&self) -> PooledConn {
self.pool.get_conn().unwrap()
}
// fn session_guard<F, R>(&self, f: F) -> R
// where F: Fn(&Session) -> R
// {
// let session = self.open_session();
// let res = f(&session);
// session.close();
// res
// }
// pub fn open_session(&self) -> Session {
// let conn = self.pool.get_conn();
// Session::new(conn.unwrap())
// }
// pub fn insert<E: Entity>(&self, entity: &E) -> Result<(), Error> {
// self.session_guard(|session| session.insert(entity))
// }
// pub fn update<E: Entity>(&self, entity: &E) -> Result<(), Error> {
// self.session_guard(|session| session.update(entity))
// }
// pub fn delete<E: Entity>(&self, entity: &E) -> Result<(), Error> {
// self.session_guard(|session| session.delete(entity))
// }
// pub fn get<E: Entity>(&self, id: u64) -> Result<Option<E>, Error> {
// self.session_guard(|session| session.get::<E>(id))
// }
}