Skip to main content

RelationshipManager

Struct RelationshipManager 

Source
pub struct RelationshipManager { /* private fields */ }
Expand description

Cell-based RelationshipManager for handling entity relationship cascades.

This manager discovers relationships via inventory at initialization, builds lookup indexes for efficient cascade processing, and provides methods for processing events and establishing relations on startup.

Unlike the actor-based version, this implementation uses CellServerCtx for queries and event publishing, keeping it decoupled from direct store and event processor access.

Implementations§

Source§

impl RelationshipManager

Source

pub fn new() -> RelationshipManager

Create a new RelationshipManager with lookup tables built from inventory.

Source

pub fn forward_set( &self, item: Arc<dyn AnyItem>, ctx: &CellServerCtx, ) -> Result<(), PersistError>

Forward a SET event for relationship processing.

Handles EnsureFor: when a dependency entity is created, ensures all derived entities exist for all combinations.

Source

pub fn forward_del( &self, item: Arc<dyn AnyItem>, ctx: &CellServerCtx, ) -> Result<(), PersistError>

Forward a DEL event for relationship processing.

Handles:

  • BelongsTo cascade deletes (parent deleted → delete children)
  • OwnsMany parent deletes (parent deleted → delete owned children)
  • OwnsMany child deletes (child deleted → update parent arrays)
Source

pub fn forward_del_batch( &self, items: &[Arc<dyn AnyItem>], ctx: &CellServerCtx, ) -> Result<(), PersistError>

Forward a batch of DEL events for relationship processing.

Items should all be the same entity type. This keeps cascade deletes grouped so downstream stores and views can process one wider delete wave instead of thousands of tiny per-parent cascades.

Source

pub fn establish_relations( &self, ctx: &CellServerCtx, ) -> Result<(), PersistError>

Establish relations on startup (called after durable backend catchup).

This performs:

  1. BelongsTo orphan cleanup: Delete children pointing to non-existent parents
  2. OwnsMany orphan cleanup: Delete children not referenced by any parent
  3. EnsureFor initialization: Create missing entities for all dependency combinations

Trait Implementations§

Source§

impl Default for RelationshipManager

Source§

fn default() -> RelationshipManager

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V