Live sync KV stores over Iroh
This commit is contained in:
parent
68153be5d5
commit
f85039367c
9 changed files with 473 additions and 13 deletions
|
|
@ -335,6 +335,21 @@ impl Store {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn list_kv_stores(&self) -> Result<Vec<StoredKvStore>, StoreError> {
|
||||
let mut stmt = self
|
||||
.conn
|
||||
.prepare("SELECT kv_id, resource_id, name FROM kv_stores ORDER BY name")?;
|
||||
let rows = stmt.query_map([], |row| {
|
||||
Ok(StoredKvStore {
|
||||
kv_id: row.get(0)?,
|
||||
resource_id: row.get(1)?,
|
||||
name: row.get(2)?,
|
||||
})
|
||||
})?;
|
||||
rows.collect::<Result<Vec<_>, _>>()
|
||||
.map_err(StoreError::from)
|
||||
}
|
||||
|
||||
pub fn set_kv_entry(&self, entry: &StoredKvEntry) -> Result<(), StoreError> {
|
||||
self.conn.execute(
|
||||
r#"INSERT OR REPLACE INTO kv_entries(kv_id, key, value, updated_at_ms)
|
||||
|
|
@ -366,6 +381,29 @@ impl Store {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn list_kv_entries_since(
|
||||
&self,
|
||||
kv_id: &str,
|
||||
since_ms: i64,
|
||||
) -> Result<Vec<StoredKvEntry>, StoreError> {
|
||||
let mut stmt = self.conn.prepare(
|
||||
r#"SELECT kv_id, key, value, updated_at_ms
|
||||
FROM kv_entries
|
||||
WHERE kv_id = ?1 AND updated_at_ms >= ?2
|
||||
ORDER BY updated_at_ms, key"#,
|
||||
)?;
|
||||
let rows = stmt.query_map(params![kv_id, since_ms], |row| {
|
||||
Ok(StoredKvEntry {
|
||||
kv_id: row.get(0)?,
|
||||
key: row.get(1)?,
|
||||
value: row.get(2)?,
|
||||
updated_at_ms: row.get(3)?,
|
||||
})
|
||||
})?;
|
||||
rows.collect::<Result<Vec<_>, _>>()
|
||||
.map_err(StoreError::from)
|
||||
}
|
||||
|
||||
pub fn insert_document_resource(
|
||||
&self,
|
||||
document: &StoredDocumentResource,
|
||||
|
|
@ -1518,6 +1556,7 @@ mod tests {
|
|||
store.get_kv_store_by_name("prefs").expect("get kv"),
|
||||
Some(kv.clone())
|
||||
);
|
||||
assert_eq!(store.list_kv_stores().expect("list kv"), vec![kv.clone()]);
|
||||
|
||||
let entry = StoredKvEntry {
|
||||
kv_id: kv.kv_id.clone(),
|
||||
|
|
@ -1530,7 +1569,13 @@ mod tests {
|
|||
store
|
||||
.get_kv_entry("kv:prefs", "apps/foo/theme")
|
||||
.expect("get entry"),
|
||||
Some(entry)
|
||||
Some(entry.clone())
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.list_kv_entries_since("kv:prefs", 1)
|
||||
.expect("list entries since"),
|
||||
vec![entry]
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue