wip: `of` is `in`, `of` denotes type attributes

feat/type-attributes
Tomáš Mládek 2023-06-22 22:34:58 +02:00
parent 0f2294b67c
commit e72f6b5243
3 changed files with 15 additions and 13 deletions

View File

@ -1,11 +1,13 @@
use crate::addressing::Address;
use crate::database::entry::InvariantEntry;
/// Attribute denoting (hierarchical) relation, in the upwards direction. For example, a file `OF` a group, an image `OF` photos, etc.
pub const IS_OF_ATTR: &str = "OF";
/// Attribute denoting (hierarchical) relation, in the "upwards" direction. For example, a file `IN` a group, an image `IN` photos, etc.
pub const ATTR_IN: &str = "IN";
/// Attribute denoting that an entry belongs to the set relating to a given (hierarchical) relation.
/// For example, a data blob may have a label entry, and to qualify that label within the context of belonging to a given hierarchical group, that label entry and the hierarchical entry will be linked with `BY`.
pub const ATTR_BY_ATTR: &str = "BY";
pub const ATTR_BY: &str = "BY";
/// Attribute denoting that an attribute belongs to a given "tagging" entity. If an entity belongs to (`IN`) a "tagging" entity, it is expected to have attributes that are `OF` that entity.
pub const ATTR_OF: &str = "OF";
/// Attribute denoting a human readable label.
pub const LABEL_ATTR: &str = "LBL";

View File

@ -11,7 +11,7 @@ use crate::database::constants::LABEL_ATTR;
use crate::database::entry::Entry;
use crate::database::lang::{PatternQuery, Query, QueryComponent, QueryPart};
use super::constants::{HIER_ROOT_ADDR, HIER_ROOT_INVARIANT, IS_OF_ATTR};
use super::constants::{ATTR_IN, HIER_ROOT_ADDR, HIER_ROOT_INVARIANT};
use super::UpEndConnection;
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
@ -80,7 +80,7 @@ pub fn list_roots(connection: &UpEndConnection) -> Result<Vec<Address>> {
Ok(connection
.query(Query::SingleQuery(QueryPart::Matches(PatternQuery {
entity: QueryComponent::Variable(None),
attribute: QueryComponent::Exact(IS_OF_ATTR.into()),
attribute: QueryComponent::Exact(ATTR_IN.into()),
value: QueryComponent::Exact((*HIER_ROOT_ADDR).clone().into()),
})))?
.into_iter()
@ -121,7 +121,7 @@ pub fn fetch_or_create_dir(
Some(parent) => connection
.query(Query::SingleQuery(QueryPart::Matches(PatternQuery {
entity: QueryComponent::Variable(None),
attribute: QueryComponent::Exact(IS_OF_ATTR.into()),
attribute: QueryComponent::Exact(ATTR_IN.into()),
value: QueryComponent::Exact(parent.into()),
})))?
.into_iter()
@ -151,7 +151,7 @@ pub fn fetch_or_create_dir(
connection.insert_entry(if let Some(parent) = parent {
Entry {
entity: new_directory_address.clone(),
attribute: String::from(IS_OF_ATTR),
attribute: String::from(ATTR_IN),
value: parent.into(),
provenance: "SYSTEM FS".to_string(),
timestamp: chrono::Utc::now().naive_utc(),
@ -159,7 +159,7 @@ pub fn fetch_or_create_dir(
} else {
Entry {
entity: new_directory_address.clone(),
attribute: String::from(IS_OF_ATTR),
attribute: String::from(ATTR_IN),
value: HIER_ROOT_ADDR.clone().into(),
provenance: "SYSTEM FS".to_string(),
timestamp: chrono::Utc::now().naive_utc(),

View File

@ -3,7 +3,7 @@ use self::db::files;
use super::{Blob, StoreError, UpStore, UpdatePathOutcome};
use crate::addressing::Address;
use crate::database::constants::{
ADDED_ATTR, ATTR_BY_ATTR, IS_OF_ATTR, LABEL_ATTR, TYPE_HASH_ADDRESS,
ADDED_ATTR, ATTR_BY, ATTR_IN, ATTR_OF, LABEL_ATTR, TYPE_HASH_ADDRESS,
};
use crate::database::entry::Entry;
use crate::database::hierarchies::{
@ -110,13 +110,13 @@ impl FsStore {
upend_insert_addr!(
upconnection,
Address::Attribute(FILE_SIZE_KEY.to_string()),
IS_OF_ATTR,
ATTR_OF,
TYPE_HASH_ADDRESS
)?;
upend_insert_addr!(
upconnection,
Address::Attribute(FILE_MIME_KEY.to_string()),
IS_OF_ATTR,
ATTR_OF,
TYPE_HASH_ADDRESS
)?;
@ -465,7 +465,7 @@ impl FsStore {
let dir_has_entry = Entry {
entity: blob_address.clone(),
attribute: IS_OF_ATTR.to_string(),
attribute: ATTR_IN.to_string(),
value: parent_dir.clone().into(),
provenance: "SYSTEM INIT".to_string(),
timestamp: chrono::Utc::now().naive_utc(),
@ -485,7 +485,7 @@ impl FsStore {
let alias_entry = Entry {
entity: dir_has_entry_addr,
attribute: ATTR_BY_ATTR.to_string(),
attribute: ATTR_BY.to_string(),
value: label_entry_addr.into(),
provenance: "SYSTEM INIT".to_string(),
timestamp: chrono::Utc::now().naive_utc(),