| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | use crate::history::RevisionHistoryDiskCache;use flowy_error::{internal_error, FlowyResult};use flowy_sqlite::{    prelude::*,    schema::{rev_history, rev_history::dsl},    ConnectionPool,};use revision_model::Revision;use std::sync::Arc;pub struct SQLiteRevisionHistoryPersistence {    object_id: String,    pool: Arc<ConnectionPool>,}impl SQLiteRevisionHistoryPersistence {    pub fn new(object_id: &str, pool: Arc<ConnectionPool>) -> Self {        let object_id = object_id.to_owned();        Self { object_id, pool }    }}impl RevisionHistoryDiskCache for SQLiteRevisionHistoryPersistence {    fn write_history(&self, revision: Revision) -> FlowyResult<()> {        let record = (            dsl::object_id.eq(revision.object_id),            dsl::start_rev_id.eq(revision.base_rev_id),            dsl::end_rev_id.eq(revision.rev_id),            dsl::data.eq(revision.delta_data),        );        let conn = self.pool.get().map_err(internal_error)?;        let _ = insert_or_ignore_into(dsl::rev_history)            .values(vec![record])            .execute(&*conn)?;        Ok(())    }    fn read_histories(&self) -> FlowyResult<Vec<RevisionHistory>> {        let conn = self.pool.get().map_err(internal_error)?;        let records: Vec<RevisionRecord> = dsl::rev_history            .filter(dsl::object_id.eq(&self.object_id))            .load::<RevisionRecord>(&*conn)?;        Ok(records            .into_iter()            .map(|record| record.into())            .collect::<Vec<RevisionHistory>>())    }}#[derive(PartialEq, Clone, Debug, Queryable, Identifiable, Insertable, Associations)]#[table_name = "rev_history"]struct RevisionRecord {    id: i32,    object_id: String,    start_rev_id: i64,    end_rev_id: i64,    data: Vec<u8>,}pub struct RevisionHistory {    pub object_id: String,    pub start_rev_id: i64,    pub end_rev_id: i64,    pub data: Vec<u8>,}impl std::convert::From<RevisionRecord> for RevisionHistory {    fn from(record: RevisionRecord) -> Self {        RevisionHistory {            object_id: record.object_id,            start_rev_id: record.start_rev_id,            end_rev_id: record.end_rev_id,            data: record.data,        }    }}
 |