* introduce async handling * use r2d2 as connection handler Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
72 lines
1.9 KiB
Rust
72 lines
1.9 KiB
Rust
/*
|
|
* advotracker - Hotline tackingtool for Advocats
|
|
*
|
|
* Copyright 2021 Ralf Zerres <ralf.zerres@networkx.de>
|
|
* SPDX-License-Identifier: (0BSD or MIT)
|
|
*/
|
|
|
|
//use diesel::debug_query;
|
|
use diesel::{
|
|
prelude::*,
|
|
r2d2::{Builder, ConnectionManager, Pool},
|
|
};
|
|
use diesel::sqlite::SqliteConnection;
|
|
use diesel::sqlite::Sqlite;
|
|
use dotenv::dotenv;
|
|
use std::env;
|
|
|
|
/// establish a connection
|
|
pub fn establish_connection() -> SqliteConnection {
|
|
// load our .env file
|
|
dotenv().ok();
|
|
|
|
// set database_url to the given DATABASE_URL env variable
|
|
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
|
|
|
// establish a new SQLite connection (taking the reference from database_url)
|
|
SqliteConnection::establish(&database_url)
|
|
.unwrap_or_else(|_| panic!("Error connecting to {}", &database_url));
|
|
|
|
/*
|
|
* WIP: integrate tracing!
|
|
trace!(
|
|
target: "diesel",
|
|
type: "Sqlite3",
|
|
status: "connected"
|
|
);
|
|
*/
|
|
}
|
|
|
|
/// establish a connection to a db pool
|
|
pub fn build() -> Result<Pool<M>, Error> {
|
|
// TODO: consume database_url
|
|
// precedence in decreasing order:
|
|
// 1: commandline
|
|
// 2: env
|
|
// 3: user_config
|
|
// 4: system_config
|
|
|
|
// load .env file
|
|
dotenv().ok();
|
|
|
|
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
|
|
|
// establish a new SQLite connection (taking the reference from database_url)
|
|
// SqliteConnection::establish(&database_url)
|
|
// .unwrap_or_else(|_| panic!("Error connecting to {}", &database_url))
|
|
|
|
// establish a new connection
|
|
let manager = ConnectionManager::<SqliteConnection>::new(&database_url);
|
|
let pool = Pool::builder.build(manager)?;
|
|
|
|
Ok(pool)
|
|
}
|
|
|
|
/// show the sql query
|
|
pub fn show_query<T>(query: &T)
|
|
where
|
|
T: diesel::query_builder::QueryFragment<Sqlite>,
|
|
{
|
|
dbg!(diesel::debug_query::<Sqlite, _>(&query));
|
|
}
|