pub struct EntityGraph { /* private fields */ }Expand description
Core entity graph with bitmap tag indexing and bidirectional ref adjacency.
Implementations§
Source§impl EntityGraph
impl EntityGraph
Sourcepub fn new() -> Self
pub fn new() -> Self
Create an empty entity graph with standard Haystack fields auto-indexed and default changelog capacity (50,000).
Sourcepub fn with_changelog_capacity(capacity: usize) -> Self
pub fn with_changelog_capacity(capacity: usize) -> Self
Create an empty entity graph with a custom changelog capacity.
Sourcepub fn with_namespace(ns: DefNamespace) -> Self
pub fn with_namespace(ns: DefNamespace) -> Self
Create an entity graph with an ontology namespace.
Sourcepub fn index_field(&mut self, field: &str)
pub fn index_field(&mut self, field: &str)
Register a field for B-Tree value indexing. Enables O(log N) range
queries (e.g. temp > 72) for this field. Must be called before
entities are added, or followed by rebuild_value_index for existing data.
Sourcepub fn rebuild_value_index(&mut self)
pub fn rebuild_value_index(&mut self)
Rebuild the value index for all indexed fields from the current entities.
Sourcepub fn value_index(&self) -> &ValueIndex
pub fn value_index(&self) -> &ValueIndex
Returns a reference to the value index.
Sourcepub fn add(&mut self, entity: HDict) -> Result<String, GraphError>
pub fn add(&mut self, entity: HDict) -> Result<String, GraphError>
Add an entity to the graph.
The entity must have an id tag that is a Ref. Returns the ref
value string on success.
Sourcepub fn update(
&mut self,
ref_val: &str,
changes: HDict,
) -> Result<(), GraphError>
pub fn update( &mut self, ref_val: &str, changes: HDict, ) -> Result<(), GraphError>
Update an existing entity by merging changes into it.
Tags in changes overwrite existing tags; Kind::Remove tags are
deleted. The id tag cannot be changed.
Sourcepub fn remove(&mut self, ref_val: &str) -> Result<HDict, GraphError>
pub fn remove(&mut self, ref_val: &str) -> Result<HDict, GraphError>
Remove an entity from the graph. Returns the removed entity.
Sourcepub fn read(&self, filter_expr: &str, limit: usize) -> Result<HGrid, GraphError>
pub fn read(&self, filter_expr: &str, limit: usize) -> Result<HGrid, GraphError>
Run a filter expression and return matching entities as a grid.
Sourcepub fn read_all(
&self,
filter_expr: &str,
limit: usize,
) -> Result<Vec<&HDict>, GraphError>
pub fn read_all( &self, filter_expr: &str, limit: usize, ) -> Result<Vec<&HDict>, GraphError>
Run a filter expression and return matching entities as references.
Sourcepub fn refs_from(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
pub fn refs_from(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
Get ref values that the given entity points to.
Sourcepub fn refs_to(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
pub fn refs_to(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
Get ref values of entities that point to the given entity.
Sourcepub fn ref_chain(&self, ref_val: &str, ref_tags: &[&str]) -> Vec<&HDict>
pub fn ref_chain(&self, ref_val: &str, ref_tags: &[&str]) -> Vec<&HDict>
Walk a chain of ref tags starting from an entity.
For example, ref_chain("point-1", &["equipRef", "siteRef"]) follows
point-1 → its equipRef → that entity’s siteRef, returning the
ordered path of resolved entities (excluding the starting entity).
Sourcepub fn site_for(&self, ref_val: &str) -> Option<&HDict>
pub fn site_for(&self, ref_val: &str) -> Option<&HDict>
Resolve the site for any entity by walking equipRef → siteRef.
If the entity itself has a site marker, returns it directly.
Otherwise walks the standard Haystack ref chain.
Sourcepub fn children(&self, ref_val: &str) -> Vec<&HDict>
pub fn children(&self, ref_val: &str) -> Vec<&HDict>
All direct children: entities with any ref tag pointing to this entity.
Sourcepub fn equip_points(
&self,
equip_ref: &str,
filter: Option<&str>,
) -> Result<Vec<&HDict>, GraphError>
pub fn equip_points( &self, equip_ref: &str, filter: Option<&str>, ) -> Result<Vec<&HDict>, GraphError>
All points for an equip — children with the point marker.
Optionally filter further with a filter expression.
Sourcepub fn validate(&self) -> Vec<ValidationIssue>
pub fn validate(&self) -> Vec<ValidationIssue>
Validate all entities against the namespace and check for dangling refs.
Returns empty if no namespace is set and no dangling refs exist.
Sourcepub fn to_grid(&self, filter_expr: &str) -> Result<HGrid, GraphError>
pub fn to_grid(&self, filter_expr: &str) -> Result<HGrid, GraphError>
Convert matching entities to a grid.
If filter_expr is empty, exports all entities.
Otherwise, delegates to read.
Sourcepub fn from_grid(
grid: &HGrid,
namespace: Option<DefNamespace>,
) -> Result<Self, GraphError>
pub fn from_grid( grid: &HGrid, namespace: Option<DefNamespace>, ) -> Result<Self, GraphError>
Build an EntityGraph from a grid.
Rows without a valid id Ref tag are silently skipped.
Sourcepub fn changes_since(
&self,
version: u64,
) -> Result<Vec<&GraphDiff>, ChangelogGap>
pub fn changes_since( &self, version: u64, ) -> Result<Vec<&GraphDiff>, ChangelogGap>
Get changelog entries since a given version.
Returns Err(ChangelogGap) if the requested version has been evicted
from the changelog, signalling the subscriber must do a full resync.
Sourcepub fn floor_version(&self) -> u64
pub fn floor_version(&self) -> u64
The lowest version still retained in the changelog.
Returns 0 if no entries have been evicted.
Sourcepub fn changelog_capacity(&self) -> usize
pub fn changelog_capacity(&self) -> usize
The configured changelog capacity.
Sourcepub fn query_cache_capacity(&self) -> usize
pub fn query_cache_capacity(&self) -> usize
Current query cache capacity.
Sourcepub fn compact(&mut self)
pub fn compact(&mut self)
Shrink internal collections to fit their current size, reclaiming memory from previous bulk removals. Call this after removing many entities.
Sourcepub fn contains(&self, ref_val: &str) -> bool
pub fn contains(&self, ref_val: &str) -> bool
Returns true if an entity with the given ref value exists.
Sourcepub fn hierarchy_tree(
&self,
root: &str,
max_depth: usize,
) -> Option<HierarchyNode>
pub fn hierarchy_tree( &self, root: &str, max_depth: usize, ) -> Option<HierarchyNode>
Build a full hierarchy subtree as a structured tree.
root is the entity ref, max_depth limits recursion (0 = root only).