add multi_get_or_create_shorteventids()
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
b4080de749
commit
678d87ced1
3 changed files with 38 additions and 0 deletions
|
@ -21,6 +21,38 @@ impl service::rooms::short::Data for KeyValueDatabase {
|
||||||
Ok(short)
|
Ok(short)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn multi_get_or_create_shorteventid(&self, event_ids: &[&EventId]) -> Result<Vec<u64>> {
|
||||||
|
let mut ret: Vec<u64> = Vec::with_capacity(event_ids.len());
|
||||||
|
let keys = event_ids
|
||||||
|
.iter()
|
||||||
|
.map(|id| id.as_bytes())
|
||||||
|
.collect::<Vec<&[u8]>>();
|
||||||
|
for (i, short) in self
|
||||||
|
.eventid_shorteventid
|
||||||
|
.multi_get(&keys)?
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
{
|
||||||
|
match short {
|
||||||
|
Some(short) => ret.push(
|
||||||
|
utils::u64_from_bytes(short).map_err(|_| Error::bad_database("Invalid shorteventid in db."))?,
|
||||||
|
),
|
||||||
|
None => {
|
||||||
|
let short = services().globals.next_count()?;
|
||||||
|
self.eventid_shorteventid
|
||||||
|
.insert(keys[i], &short.to_be_bytes())?;
|
||||||
|
self.shorteventid_eventid
|
||||||
|
.insert(&short.to_be_bytes(), keys[i])?;
|
||||||
|
|
||||||
|
debug_assert!(ret.len() == i, "position of result must match input");
|
||||||
|
ret.push(short);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(ret)
|
||||||
|
}
|
||||||
|
|
||||||
fn get_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<Option<u64>> {
|
fn get_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<Option<u64>> {
|
||||||
let mut statekey_vec = event_type.to_string().as_bytes().to_vec();
|
let mut statekey_vec = event_type.to_string().as_bytes().to_vec();
|
||||||
statekey_vec.push(0xFF);
|
statekey_vec.push(0xFF);
|
||||||
|
|
|
@ -7,6 +7,8 @@ use crate::Result;
|
||||||
pub trait Data: Send + Sync {
|
pub trait Data: Send + Sync {
|
||||||
fn get_or_create_shorteventid(&self, event_id: &EventId) -> Result<u64>;
|
fn get_or_create_shorteventid(&self, event_id: &EventId) -> Result<u64>;
|
||||||
|
|
||||||
|
fn multi_get_or_create_shorteventid(&self, event_id: &[&EventId]) -> Result<Vec<u64>>;
|
||||||
|
|
||||||
fn get_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<Option<u64>>;
|
fn get_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<Option<u64>>;
|
||||||
|
|
||||||
fn get_or_create_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<u64>;
|
fn get_or_create_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<u64>;
|
||||||
|
|
|
@ -15,6 +15,10 @@ impl Service {
|
||||||
self.db.get_or_create_shorteventid(event_id)
|
self.db.get_or_create_shorteventid(event_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn multi_get_or_create_shorteventid(&self, event_ids: &[&EventId]) -> Result<Vec<u64>> {
|
||||||
|
self.db.multi_get_or_create_shorteventid(event_ids)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<Option<u64>> {
|
pub fn get_shortstatekey(&self, event_type: &StateEventType, state_key: &str) -> Result<Option<u64>> {
|
||||||
self.db.get_shortstatekey(event_type, state_key)
|
self.db.get_shortstatekey(event_type, state_key)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue