diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 59 |
1 files changed, 55 insertions, 4 deletions
@@ -6,11 +6,50 @@ use chrono::Utc; use diesel::connection::Connection; use diesel::pg::PgConnection; use diesel::ExpressionMethods; +use diesel::Insertable; use diesel::QueryDsl; use diesel::RunQueryDsl; pub const COST: u32 = 10; +#[macro_export] +macro_rules! insert { + ($conn:expr, $table:expr, $values:expr, $returning:expr, $t:ty) => {{ + use crate::diesel::RunQueryDsl; + let conn: &PgConnection = &$conn; + let r: Result<$t, Error> = diesel::insert_into($table) + .values($values) + .returning($returning) + .get_result(conn) + .map_err(From::from); + r + }}; + + ($conn:expr, $table:expr, $values:expr) => {{ + use crate::diesel::RunQueryDsl; + let conn: &PgConnection = &$conn; + let r: Result<usize, Error> = diesel::insert_into($table) + .values($values) + .execute(conn) + .map_err(From::from); + r + }}; + + (entries <= $conn:expr, $values:expr) => { + insert!( + $conn, + schema::entries::table, + $values, + schema::entries::id, + i64 + ) + }; + + (entry_data <= $conn:expr, $values:expr) => { + insert!($conn, schema::entry_data::table, $values) + }; +} + pub fn create_config(conn: &PgConnection, config: &models::Config) -> Result<(), Error> { use crate::schema::config; @@ -164,7 +203,21 @@ pub fn insert_data(conn: &PgConnection, data: &models::RawData) -> Result<usize, Ok(rows) } -pub fn get_raw_data(conn: &PgConnection, key: &models::RawDataKey) -> Result<models::RawData, Error> { +pub fn insert_entry_data( + conn: &PgConnection, + entry_data: &models::EntryData, +) -> Result<usize, Error> { + use crate::schema::entry_data; + let rows = diesel::insert_into(entry_data::table) + .values(entry_data) + .execute(conn)?; + Ok(rows) +} + +pub fn get_raw_data( + conn: &PgConnection, + key: &models::RawDataKey, +) -> Result<models::RawData, Error> { use crate::schema::raw_data; let data = raw_data::table .find((key.data_type, key.id)) @@ -175,9 +228,7 @@ pub fn get_raw_data(conn: &PgConnection, key: &models::RawDataKey) -> Result<mod pub fn get_raw_data_keys(conn: &PgConnection) -> Result<Vec<models::RawDataKey>, Error> { use crate::schema::raw_data; let rows = raw_data::table - .select((raw_data::data_type, - raw_data::id, - raw_data::username)) + .select((raw_data::data_type, raw_data::id, raw_data::username)) .get_results::<models::RawDataKey>(conn)?; Ok(rows) } |