-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathmod.rs
72 lines (62 loc) · 1.83 KB
/
mod.rs
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
use async_trait::async_trait;
use dbconnection::DbConnection;
use std::sync::Arc;
pub mod dbconnection;
#[cfg(feature = "duckdb")]
pub mod duckdbpool;
#[cfg(feature = "mysql")]
pub mod mysqlpool;
#[cfg(feature = "odbc")]
pub mod odbcpool;
#[cfg(feature = "postgres")]
pub mod postgrespool;
#[cfg(feature = "sqlite")]
pub mod sqlitepool;
pub type Error = Box<dyn std::error::Error + Send + Sync>;
type Result<T, E = Error> = std::result::Result<T, E>;
/// Controls whether join pushdown is allowed, and under what conditions
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum JoinPushDown {
/// This connection pool should not allow join push down. (i.e. we don't know under what conditions it is safe to send a join query to the database)
Disallow,
/// Allows join push down for other tables that share the same context.
///
/// The context can be part of the connection string that uniquely identifies the server.
AllowedFor(String),
}
#[async_trait]
pub trait DbConnectionPool<T, P: 'static> {
async fn connect(&self) -> Result<Box<dyn DbConnection<T, P>>>;
fn join_push_down(&self) -> JoinPushDown;
}
#[derive(Default, Clone, Copy, PartialEq, Eq, Debug)]
pub enum Mode {
#[default]
Memory,
File,
}
impl From<&str> for Mode {
fn from(m: &str) -> Self {
match m {
"file" => Mode::File,
"memory" => Mode::Memory,
_ => Mode::default(),
}
}
}
/// A key that uniquely identifies a database instance.
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DbInstanceKey {
/// The database is a file on disk, with the given path.
File(Arc<str>),
/// The database is in memory.
Memory,
}
impl DbInstanceKey {
pub fn memory() -> Self {
DbInstanceKey::Memory
}
pub fn file(path: Arc<str>) -> Self {
DbInstanceKey::File(path)
}
}