update functions
* introduce async handling * use r2d2 as connection handler Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
@@ -1,18 +1,21 @@
|
|||||||
/*
|
/*
|
||||||
* advotracker - Hotline tackingtool for Advocats
|
* advotracker - Hotline tackingtool for Advocats
|
||||||
*
|
*
|
||||||
* Copyright 2019 Ralf Zerres <ralf.zerres@networkx.de>
|
* Copyright 2021 Ralf Zerres <ralf.zerres@networkx.de>
|
||||||
* SPDX-License-Identifier: (0BSD or MIT)
|
* SPDX-License-Identifier: (0BSD or MIT)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//use diesel::debug_query;
|
//use diesel::debug_query;
|
||||||
use diesel::prelude::*;
|
use diesel::{
|
||||||
|
prelude::*,
|
||||||
|
r2d2::{Builder, ConnectionManager, Pool},
|
||||||
|
};
|
||||||
use diesel::sqlite::SqliteConnection;
|
use diesel::sqlite::SqliteConnection;
|
||||||
use diesel::sqlite::Sqlite;
|
use diesel::sqlite::Sqlite;
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
/// establish a sqlite connection
|
/// establish a connection
|
||||||
pub fn establish_connection() -> SqliteConnection {
|
pub fn establish_connection() -> SqliteConnection {
|
||||||
// load our .env file
|
// load our .env file
|
||||||
dotenv().ok();
|
dotenv().ok();
|
||||||
@@ -22,7 +25,8 @@ pub fn establish_connection() -> SqliteConnection {
|
|||||||
|
|
||||||
// establish a new SQLite connection (taking the reference from database_url)
|
// establish a new SQLite connection (taking the reference from database_url)
|
||||||
SqliteConnection::establish(&database_url)
|
SqliteConnection::establish(&database_url)
|
||||||
.unwrap_or_else(|_| panic!("Error connecting to {}", &database_url))
|
.unwrap_or_else(|_| panic!("Error connecting to {}", &database_url));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* WIP: integrate tracing!
|
* WIP: integrate tracing!
|
||||||
trace!(
|
trace!(
|
||||||
@@ -33,6 +37,31 @@ pub fn establish_connection() -> SqliteConnection {
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 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
|
/// show the sql query
|
||||||
pub fn show_query<T>(query: &T)
|
pub fn show_query<T>(query: &T)
|
||||||
where
|
where
|
||||||
@@ -5,9 +5,8 @@
|
|||||||
* SPDX-License-Identifier: (0BSD or MIT)
|
* SPDX-License-Identifier: (0BSD or MIT)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// table specific functions
|
/// module handling configuratio of database
|
||||||
/// module handling database connections
|
pub mod config;
|
||||||
pub mod db_connection;
|
|
||||||
|
|
||||||
/// module handling harms
|
/// module handling harms
|
||||||
pub mod harms;
|
pub mod harms;
|
||||||
|
|||||||
@@ -7,9 +7,14 @@
|
|||||||
|
|
||||||
//#[cfg(test)]
|
//#[cfg(test)]
|
||||||
|
|
||||||
|
use async_std::*;
|
||||||
|
use async_diesel::*;
|
||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
use diesel::debug_query;
|
use diesel::debug_query;
|
||||||
use diesel::prelude::*;
|
use diesel::{
|
||||||
|
prelude::*,
|
||||||
|
r2d2::Pool,
|
||||||
|
};
|
||||||
use diesel::sqlite::{Sqlite, SqliteConnection};
|
use diesel::sqlite::{Sqlite, SqliteConnection};
|
||||||
use diesel::{QueryDsl, RunQueryDsl};
|
use diesel::{QueryDsl, RunQueryDsl};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
@@ -22,17 +27,17 @@ use crate::schema::roles::dsl::*;
|
|||||||
use crate::schema::roles::*;
|
use crate::schema::roles::*;
|
||||||
|
|
||||||
impl Role {
|
impl Role {
|
||||||
// implement CRUD-Functions for our trait
|
// implement CRUD-Functions
|
||||||
// new- -> Create
|
// new- -> Create
|
||||||
// show- -> Read
|
// show- -> Read
|
||||||
// update- -> Update
|
// update- -> Update
|
||||||
// delete- -> Delete
|
// delete- -> Delete
|
||||||
|
|
||||||
/// create a new role record
|
/// create a new role record
|
||||||
pub fn new(
|
pub async fn new(
|
||||||
param_role_name: &str,
|
param_role_name: &str,
|
||||||
param_id_user_changed: i32,
|
param_id_user_changed: i32,
|
||||||
connection: &SqliteConnection,
|
pool: &Pool,
|
||||||
) -> Result<(), Box<dyn Error>> {
|
) -> Result<(), Box<dyn Error>> {
|
||||||
//let row = Self::get(param_role_name, param_user_id_changed, &connection);
|
//let row = Self::get(param_role_name, param_user_id_changed, &connection);
|
||||||
//if row.len() == 0 {
|
//if row.len() == 0 {
|
||||||
@@ -45,12 +50,8 @@ impl Role {
|
|||||||
};
|
};
|
||||||
diesel::insert_into(roles::table)
|
diesel::insert_into(roles::table)
|
||||||
.values(struct_role)
|
.values(struct_role)
|
||||||
.execute(connection)?;
|
.execute_async(&pool)
|
||||||
|
.await?;
|
||||||
Ok(())
|
|
||||||
//else {
|
|
||||||
// Err(("row already exists!"))
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -6,11 +6,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use diesel::debug_query;
|
use async_std::*;
|
||||||
|
//use diesel::debug_query;
|
||||||
use diesel::dsl::*;
|
use diesel::dsl::*;
|
||||||
use diesel::prelude::*;
|
use diesel::prelude::*;
|
||||||
#[cfg(test)]
|
//#[cfg(test)]
|
||||||
use diesel::sqlite::Sqlite;
|
//use diesel::sqlite::Sqlite;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use diesel::sqlite::SqliteConnection;
|
use diesel::sqlite::SqliteConnection;
|
||||||
|
|
||||||
@@ -34,10 +35,10 @@ fn examine_set_users_default_values() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// set user defaults
|
/// set user defaults
|
||||||
pub fn set_roles_default_values(connection: &SqliteConnection) -> QueryResult<usize> {
|
pub async fn set_roles_default_values(pool: &pool) -> QueryResult<usize> {
|
||||||
use schema::roles::dsl::*;
|
use schema::roles::dsl::*;
|
||||||
|
|
||||||
insert_into(roles).default_values().execute(connection)
|
insert_into(roles).default_values().execute_async(&pool).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user