gchdb 0.2.8

Provides a record abstraction for storing chat records extracted by different chat software, and provides full-text search feature
Documentation
use super::*;

fn check_blob(conn: &SqliteConnection, hash: i64) -> ChatRecordResult<bool> {
    use schema::blobs::dsl;
    Ok(select(exists(dsl::blobs.filter(dsl::hash.eq(hash))))
        .get_result(conn)
        .unwrap_or(false))
}

fn insert_blob_inner(conn: &SqliteConnection, blob: &Blob) -> ChatRecordResult<usize> {
    Ok(insert_into(blobs::table).values(blob).execute(conn)?)
}

pub fn insert_blob(conn: &SqliteConnection, blob: &Blob) -> ChatRecordResult<bool> {
    Ok(if check_blob(&conn, blob.hash)? {
        true
    } else {
        insert_blob_inner(conn, &blob)? == 1
    })
}

pub fn get_blob(conn: &SqliteConnection, blob_hash: i64) -> ChatRecordResult<Vec<u8>> {
    use schema::blobs::dsl::*;
    Ok(blobs
        .filter(hash.eq(blob_hash))
        .select(blob)
        .get_result::<Vec<u8>>(conn)?)
}

pub fn remove_blob(conn: &SqliteConnection, hash: i64) -> ChatRecordResult<usize> {
    use schema::blobs::{dsl, table};
    Ok(delete(table).filter(dsl::hash.eq(hash)).execute(conn)?)
}