list_path also fetches attrs of attrs
This commit is contained in:
parent
bf4e0efd2c
commit
1194a4439e
1 changed files with 25 additions and 16 deletions
|
@ -9,7 +9,7 @@ use lru::LruCache;
|
|||
use serde_json::Value;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::addressing::Address;
|
||||
use crate::addressing::{Address, Addressable};
|
||||
use crate::database::constants::{
|
||||
HIER_ADDR, HIER_HAS_ATTR, HIER_INVARIANT, IS_OF_TYPE_ATTR, LABEL_ATTR, TYPE_ADDR, TYPE_HAS_ATTR,
|
||||
};
|
||||
|
@ -78,15 +78,15 @@ impl std::fmt::Display for UPath {
|
|||
}
|
||||
|
||||
trait EntryList {
|
||||
fn extract_addresses(&self) -> Vec<Address>;
|
||||
fn extract_pointers(&self) -> Vec<(Address, Address)>;
|
||||
}
|
||||
|
||||
impl EntryList for Vec<Entry> {
|
||||
fn extract_addresses(&self) -> Vec<Address> {
|
||||
fn extract_pointers(&self) -> Vec<(Address, Address)> {
|
||||
self.iter()
|
||||
.filter_map(|e| {
|
||||
if let EntryValue::Address(address) = &e.value {
|
||||
Some(address.clone())
|
||||
Some((e.address().unwrap(), address.clone()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
@ -113,7 +113,10 @@ pub fn list_orphans<C: Connection<Backend = Sqlite>>(connection: &C) -> Result<V
|
|||
value: QueryComponent::Any,
|
||||
})),
|
||||
)?
|
||||
.extract_addresses();
|
||||
.extract_pointers()
|
||||
.into_iter()
|
||||
.map(|(_, val)| val)
|
||||
.collect();
|
||||
|
||||
Ok(all_directories
|
||||
.into_iter()
|
||||
|
@ -128,8 +131,7 @@ pub async fn list_path<C: Connection<Backend = Sqlite>>(
|
|||
) -> Result<Vec<Entry>> {
|
||||
let resolved_path: Vec<Address> = resolve_path(connection, path, false)?;
|
||||
let entry_addresses = match resolved_path.last() {
|
||||
Some(last) =>
|
||||
query(
|
||||
Some(last) => query(
|
||||
connection,
|
||||
Query::SingleQuery(QueryPart::Matches(EntryQuery {
|
||||
entity: QueryComponent::Exact(last.clone()),
|
||||
|
@ -137,7 +139,11 @@ pub async fn list_path<C: Connection<Backend = Sqlite>>(
|
|||
value: QueryComponent::Any,
|
||||
})),
|
||||
)?
|
||||
.extract_addresses(),
|
||||
.extract_pointers()
|
||||
.into_iter()
|
||||
.map(|(addr, val)| [addr, val])
|
||||
.flatten()
|
||||
.collect(),
|
||||
None => list_orphans(connection)?,
|
||||
};
|
||||
|
||||
|
@ -189,7 +195,10 @@ pub fn fetch_or_create_dir<C: Connection<Backend = Sqlite>>(
|
|||
value: QueryComponent::Any,
|
||||
})),
|
||||
)?
|
||||
.extract_addresses(),
|
||||
.extract_pointers()
|
||||
.into_iter()
|
||||
.map(|(_, val)| val)
|
||||
.collect(),
|
||||
None => list_orphans(connection)?,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue