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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#![warn(rust_2018_idioms)]
pub mod inspect;
pub mod pq;
mod array;
mod config;
mod connection;
mod entity;
mod errors;
mod from_sql;
#[cfg(feature = "date")]
mod interval;
mod model;
mod pager;
mod pgpass;
mod pool;
mod projection;
mod rows;
mod structure;
mod to_sql;
mod tuple;
pub use array::*;
pub use config::*;
pub use connection::*;
pub use elephantry_derive::*;
pub use entity::*;
pub use errors::*;
pub use from_sql::*;
#[cfg(feature = "date")]
pub use interval::*;
pub use model::*;
pub use pager::*;
pub use pool::*;
pub use projection::*;
pub use rows::*;
pub use structure::*;
pub use to_sql::*;
pub use tuple::*;
use pgpass::*;
#[macro_export]
macro_rules! pk {
($($pk:ident),+ $(,)?) => {
$crate::pk!($(
$pk => $pk,
)*)
};
($($key:expr => $value:expr),+ $(,)?) => {{
let mut hash = std::collections::HashMap::new();
$(
hash.insert(stringify!($key), &$value as &dyn $crate::ToSql);
)*
hash
}}
}
#[cfg(test)]
mod test {
static INIT: std::sync::Once = std::sync::Once::new();
pub fn dsn() -> String {
std::env::var("DATABASE_URL")
.unwrap_or_else(|_| "host=localhost".to_string())
}
pub fn new_conn() -> crate::Pool {
INIT.call_once(|| {
pretty_env_logger::init();
});
crate::Pool::new(&dsn()).unwrap()
}
#[test]
fn test_pk_one() {
let uuid = "1234";
let pk = crate::pk!(uuid);
assert_eq!(pk.len(), 1);
assert!(pk.contains_key("uuid"));
}
#[test]
fn test_pk_multi() {
let uuid = "1234";
let name = "name";
let pk = crate::pk![uuid, name,];
assert_eq!(pk.len(), 2);
assert!(pk.contains_key("uuid"));
assert!(pk.contains_key("name"));
}
#[test]
fn test_pk_hash() {
let pk = crate::pk! {
uuid => "1234",
name => "name",
};
assert_eq!(pk.len(), 2);
assert!(pk.contains_key("uuid"));
assert!(pk.contains_key("name"));
}
}