pub struct GraphView<'a> {
pub ids: &'a IdMap,
pub syms: &'a Interner,
pub labels: &'a [u32],
pub props: ColumnsView<'a>,
pub topo: TopologyView<'a>,
pub edge_props: EdgePropsView<'a>,
pub mask: Option<&'a VisibleSet>,
pub prop_index: Option<&'a PropertyIndex>,
pub layer: Option<&'a NodeLayer>,
}Expand description
Read-only twin of GraphMut. Holds only borrowed graph state.
Read node identity through the methods (node_id,
try_key_of, label_syms,
sym, …), not the ids / syms / labels fields: under a
layer those fields are the state below it — a reader
snapshot’s fold, under its delta tail and any transaction’s writes — and
only the methods lay the layer over them. props, topo and edge_props
carry their own layer and read correctly either way.
Fields§
§ids: &'a IdMap§syms: &'a Interner§labels: &'a [u32]§props: ColumnsView<'a>Overlay-over-base column store view. For V5–V7 snapshots and fresh
databases, base is None and all column reads go to the overlay.
For V8 snapshots, base holds the archived columns from the mmap.
topo: TopologyView<'a>Overlay-over-base topology view. For V5–V7 snapshots and fresh
databases, base is None and all topology reads go to the owned
overlay. For V8 snapshots, base holds the archived CSR from the
mmap, and WAL-replayed edges accumulate in the overlay.
edge_props: EdgePropsView<'a>Overlay-over-base edge-property view. For V8 snapshots the base section is consulted zero-copy; the overlay holds only post-snapshot changes. Tombstones in the overlay mask deleted-from-base entries.
mask: Option<&'a VisibleSet>Optional query-scoped node visibility set. None = all nodes visible.
When Some(set), only dense ids present in set are accessible.
VisibleSet carries its own representation choice, so this field is
one probe whichever shape the mask took; see that type for the rule.
prop_index: Option<&'a PropertyIndex>Optional equality index over scalar properties. Some on the primary
locked read path; None for MVCC reader snapshots (which fall back to a
scan). IndexScan consults it only when the (label, field) is declared.
layer: Option<&'a NodeLayer>Node inserts, deletes, relabels and renames, and interned symbols,
laid over ids, labels and syms: a reader snapshot’s unfolded
delta tail, plus an open transaction’s own writes. None reads the
fields alone.
Implementations§
Source§impl<'a> GraphView<'a>
impl<'a> GraphView<'a>
Sourcepub fn visible(&self, id: u32) -> bool
pub fn visible(&self, id: u32) -> bool
Returns true if id is visible under the current mask.
Always true when no mask is set.
pub fn node_id(&self, key: &str) -> Option<u32>
pub fn key_of(&self, id: u32) -> &str
Sourcepub fn try_key_of(&self, id: u32) -> Option<&str>
pub fn try_key_of(&self, id: u32) -> Option<&str>
The key of id, or None for an id that is retired or was never
allocated.
Sourcepub fn label_syms(&self) -> LabelSyms<'_> ⓘ
pub fn label_syms(&self) -> LabelSyms<'_> ⓘ
The label symbol of every node slot, in dense-id order (u32::MAX for
a deleted or unlabelled slot) — what a label scan walks.
Sourcepub fn label_sym(&self, id: u32) -> Option<u32>
pub fn label_sym(&self, id: u32) -> Option<u32>
The label symbol of node id, None for a deleted or unlabelled slot.
pub fn label_of(&self, id: u32) -> Option<&str>
Sourcepub fn nodes_with_prop(
&self,
label: &str,
field: &str,
value: &Value,
) -> Option<Vec<u32>>
pub fn nodes_with_prop( &self, label: &str, field: &str, value: &Value, ) -> Option<Vec<u32>>
Indexed lookup of node ids of label whose scalar field equals
value, filtered by the active mask. Returns None when no equality
index covers (label, field) (the caller should fall back to a scan);
Some(ids) — possibly empty — when the index answers the query.
Sourcepub fn range_index(&self, label: &str, field: &str) -> Option<&UnifiedIndex>
pub fn range_index(&self, label: &str, field: &str) -> Option<&UnifiedIndex>
The range index a range or ordered scan of (label, field) may read:
Some only when a range index is declared on the pair, and the index
describes exactly the nodes this view reads: it is not a reader’s
layered index (whose range lookups see only the layer’s own entries),
and no node layer (a delta tail, a transaction’s writes) lies over the
view. None means scan. The caller applies the mask.
pub fn nodes_with_label(&self, label: &str) -> Vec<u32>
Sourcepub fn nodes_all(&self) -> Vec<u32>
pub fn nodes_all(&self) -> Vec<u32>
All non-tombstoned node ids regardless of label.
Respects the query-scoped mask: when a mask is active only ids present in the mask are returned, consistent with every other node accessor.
Sourcepub fn prop(&self, id: u32, field: &str) -> Option<ValueRef<'_>>
pub fn prop(&self, id: u32, field: &str) -> Option<ValueRef<'_>>
Look up the property field for node id.
Returns ValueRef::Borrowed for overlay hits (zero allocation) and
ValueRef::Owned for base-section hits (value materialised from
archived data). Returns None when neither overlay nor base has a
value for (id, field).
Auto Trait Implementations§
impl<'a> Forget for GraphView<'a>
impl<'a> Freeze for GraphView<'a>
impl<'a> RefUnwindSafe for GraphView<'a>
impl<'a> Send for GraphView<'a>
impl<'a> Sync for GraphView<'a>
impl<'a> Unpin for GraphView<'a>
impl<'a> UnsafeUnpin for GraphView<'a>
impl<'a> UnwindSafe for GraphView<'a>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.