pub struct LpgStore { /* private fields */ }Expand description
The main LPG graph store.
This is the core storage for labeled property graphs, providing efficient node/edge storage and adjacency indexing.
Implementations§
Source§impl LpgStore
impl LpgStore
Sourcepub fn with_config(config: LpgStoreConfig) -> Self
pub fn with_config(config: LpgStoreConfig) -> Self
Creates a new LPG store with custom configuration.
Sourcepub fn current_epoch(&self) -> EpochId
pub fn current_epoch(&self) -> EpochId
Returns the current epoch.
Sourcepub fn create_node(&self, labels: &[&str]) -> NodeId
pub fn create_node(&self, labels: &[&str]) -> NodeId
Creates a new node with the given labels.
Uses the system transaction for non-transactional operations.
Sourcepub fn create_node_versioned(
&self,
labels: &[&str],
epoch: EpochId,
tx_id: TxId,
) -> NodeId
pub fn create_node_versioned( &self, labels: &[&str], epoch: EpochId, tx_id: TxId, ) -> NodeId
Creates a new node with the given labels within a transaction context.
Sourcepub fn create_node_with_props(
&self,
labels: &[&str],
properties: impl IntoIterator<Item = (impl Into<PropertyKey>, impl Into<Value>)>,
) -> NodeId
pub fn create_node_with_props( &self, labels: &[&str], properties: impl IntoIterator<Item = (impl Into<PropertyKey>, impl Into<Value>)>, ) -> NodeId
Creates a new node with labels and properties.
Sourcepub fn create_node_with_props_versioned(
&self,
labels: &[&str],
properties: impl IntoIterator<Item = (impl Into<PropertyKey>, impl Into<Value>)>,
epoch: EpochId,
tx_id: TxId,
) -> NodeId
pub fn create_node_with_props_versioned( &self, labels: &[&str], properties: impl IntoIterator<Item = (impl Into<PropertyKey>, impl Into<Value>)>, epoch: EpochId, tx_id: TxId, ) -> NodeId
Creates a new node with labels and properties within a transaction context.
Sourcepub fn get_node_at_epoch(&self, id: NodeId, epoch: EpochId) -> Option<Node>
pub fn get_node_at_epoch(&self, id: NodeId, epoch: EpochId) -> Option<Node>
Gets a node by ID at a specific epoch.
Sourcepub fn get_node_versioned(
&self,
id: NodeId,
epoch: EpochId,
tx_id: TxId,
) -> Option<Node>
pub fn get_node_versioned( &self, id: NodeId, epoch: EpochId, tx_id: TxId, ) -> Option<Node>
Gets a node visible to a specific transaction.
Sourcepub fn delete_node(&self, id: NodeId) -> bool
pub fn delete_node(&self, id: NodeId) -> bool
Deletes a node and all its edges (using latest epoch).
Sourcepub fn delete_node_at_epoch(&self, id: NodeId, epoch: EpochId) -> bool
pub fn delete_node_at_epoch(&self, id: NodeId, epoch: EpochId) -> bool
Deletes a node at a specific epoch.
Sourcepub fn delete_node_edges(&self, node_id: NodeId)
pub fn delete_node_edges(&self, node_id: NodeId)
Deletes all edges connected to a node (for DETACH DELETE).
Sourcepub fn set_node_property(&self, id: NodeId, key: &str, value: Value)
pub fn set_node_property(&self, id: NodeId, key: &str, value: Value)
Sets a property on a node.
Sourcepub fn set_edge_property(&self, id: EdgeId, key: &str, value: Value)
pub fn set_edge_property(&self, id: EdgeId, key: &str, value: Value)
Sets a property on an edge.
Sourcepub fn remove_node_property(&self, id: NodeId, key: &str) -> Option<Value>
pub fn remove_node_property(&self, id: NodeId, key: &str) -> Option<Value>
Removes a property from a node.
Returns the previous value if it existed, or None if the property didn’t exist.
Sourcepub fn remove_edge_property(&self, id: EdgeId, key: &str) -> Option<Value>
pub fn remove_edge_property(&self, id: EdgeId, key: &str) -> Option<Value>
Removes a property from an edge.
Returns the previous value if it existed, or None if the property didn’t exist.
Sourcepub fn add_label(&self, node_id: NodeId, label: &str) -> bool
pub fn add_label(&self, node_id: NodeId, label: &str) -> bool
Adds a label to a node.
Returns true if the label was added, false if the node doesn’t exist or already has the label.
Sourcepub fn remove_label(&self, node_id: NodeId, label: &str) -> bool
pub fn remove_label(&self, node_id: NodeId, label: &str) -> bool
Removes a label from a node.
Returns true if the label was removed, false if the node doesn’t exist or doesn’t have the label.
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Returns the number of nodes (non-deleted at current epoch).
Sourcepub fn node_ids(&self) -> Vec<NodeId>
pub fn node_ids(&self) -> Vec<NodeId>
Returns all node IDs in the store.
This returns a snapshot of current node IDs. The returned vector excludes deleted nodes.
Sourcepub fn create_edge(&self, src: NodeId, dst: NodeId, edge_type: &str) -> EdgeId
pub fn create_edge(&self, src: NodeId, dst: NodeId, edge_type: &str) -> EdgeId
Creates a new edge.
Sourcepub fn create_edge_versioned(
&self,
src: NodeId,
dst: NodeId,
edge_type: &str,
epoch: EpochId,
tx_id: TxId,
) -> EdgeId
pub fn create_edge_versioned( &self, src: NodeId, dst: NodeId, edge_type: &str, epoch: EpochId, tx_id: TxId, ) -> EdgeId
Creates a new edge within a transaction context.
Sourcepub fn create_edge_with_props(
&self,
src: NodeId,
dst: NodeId,
edge_type: &str,
properties: impl IntoIterator<Item = (impl Into<PropertyKey>, impl Into<Value>)>,
) -> EdgeId
pub fn create_edge_with_props( &self, src: NodeId, dst: NodeId, edge_type: &str, properties: impl IntoIterator<Item = (impl Into<PropertyKey>, impl Into<Value>)>, ) -> EdgeId
Creates a new edge with properties.
Sourcepub fn get_edge(&self, id: EdgeId) -> Option<Edge>
pub fn get_edge(&self, id: EdgeId) -> Option<Edge>
Gets an edge by ID (latest visible version).
Sourcepub fn get_edge_at_epoch(&self, id: EdgeId, epoch: EpochId) -> Option<Edge>
pub fn get_edge_at_epoch(&self, id: EdgeId, epoch: EpochId) -> Option<Edge>
Gets an edge by ID at a specific epoch.
Sourcepub fn get_edge_versioned(
&self,
id: EdgeId,
epoch: EpochId,
tx_id: TxId,
) -> Option<Edge>
pub fn get_edge_versioned( &self, id: EdgeId, epoch: EpochId, tx_id: TxId, ) -> Option<Edge>
Gets an edge visible to a specific transaction.
Sourcepub fn delete_edge(&self, id: EdgeId) -> bool
pub fn delete_edge(&self, id: EdgeId) -> bool
Deletes an edge (using latest epoch).
Sourcepub fn delete_edge_at_epoch(&self, id: EdgeId, epoch: EpochId) -> bool
pub fn delete_edge_at_epoch(&self, id: EdgeId, epoch: EpochId) -> bool
Deletes an edge at a specific epoch.
Sourcepub fn edge_count(&self) -> usize
pub fn edge_count(&self) -> usize
Returns the number of edges (non-deleted at current epoch).
Sourcepub fn discard_uncommitted_versions(&self, tx_id: TxId)
pub fn discard_uncommitted_versions(&self, tx_id: TxId)
Discards all uncommitted versions created by a transaction.
This is called during transaction rollback to clean up uncommitted changes. The method removes version chain entries created by the specified transaction.
Sourcepub fn label_count(&self) -> usize
pub fn label_count(&self) -> usize
Returns the number of distinct labels in the store.
Sourcepub fn property_key_count(&self) -> usize
pub fn property_key_count(&self) -> usize
Returns the number of distinct property keys in the store.
This counts unique property keys across both nodes and edges.
Sourcepub fn edge_type_count(&self) -> usize
pub fn edge_type_count(&self) -> usize
Returns the number of distinct edge types in the store.
Sourcepub fn neighbors(
&self,
node: NodeId,
direction: Direction,
) -> impl Iterator<Item = NodeId> + '_
pub fn neighbors( &self, node: NodeId, direction: Direction, ) -> impl Iterator<Item = NodeId> + '_
Returns an iterator over neighbors of a node.
Sourcepub fn edges_from(
&self,
node: NodeId,
direction: Direction,
) -> impl Iterator<Item = (NodeId, EdgeId)> + '_
pub fn edges_from( &self, node: NodeId, direction: Direction, ) -> impl Iterator<Item = (NodeId, EdgeId)> + '_
Returns edges from a node with their targets.
Returns an iterator of (target_node, edge_id) pairs.
Sourcepub fn nodes_by_label(&self, label: &str) -> Vec<NodeId>
pub fn nodes_by_label(&self, label: &str) -> Vec<NodeId>
Returns nodes with a specific label.
Sourcepub fn node_property_might_match(
&self,
property: &PropertyKey,
op: CompareOp,
value: &Value,
) -> bool
pub fn node_property_might_match( &self, property: &PropertyKey, op: CompareOp, value: &Value, ) -> bool
Checks if a node property predicate might match any nodes.
Uses zone maps for early filtering. Returns true if there might be
matching nodes, false if there definitely aren’t.
Sourcepub fn edge_property_might_match(
&self,
property: &PropertyKey,
op: CompareOp,
value: &Value,
) -> bool
pub fn edge_property_might_match( &self, property: &PropertyKey, op: CompareOp, value: &Value, ) -> bool
Checks if an edge property predicate might match any edges.
Sourcepub fn node_property_zone_map(
&self,
property: &PropertyKey,
) -> Option<ZoneMapEntry>
pub fn node_property_zone_map( &self, property: &PropertyKey, ) -> Option<ZoneMapEntry>
Gets the zone map for a node property.
Sourcepub fn edge_property_zone_map(
&self,
property: &PropertyKey,
) -> Option<ZoneMapEntry>
pub fn edge_property_zone_map( &self, property: &PropertyKey, ) -> Option<ZoneMapEntry>
Gets the zone map for an edge property.
Sourcepub fn rebuild_zone_maps(&self)
pub fn rebuild_zone_maps(&self)
Rebuilds zone maps for all properties.
Sourcepub fn statistics(&self) -> Statistics
pub fn statistics(&self) -> Statistics
Returns the current statistics.
Sourcepub fn compute_statistics(&self)
pub fn compute_statistics(&self)
Updates statistics from current data.
This scans all labels and edge types to compute cardinality statistics.
Sourcepub fn estimate_label_cardinality(&self, label: &str) -> f64
pub fn estimate_label_cardinality(&self, label: &str) -> f64
Estimates cardinality for a label scan.
Sourcepub fn estimate_avg_degree(&self, edge_type: &str, outgoing: bool) -> f64
pub fn estimate_avg_degree(&self, edge_type: &str, outgoing: bool) -> f64
Estimates average degree for an edge type.
Sourcepub fn create_node_with_id(&self, id: NodeId, labels: &[&str])
pub fn create_node_with_id(&self, id: NodeId, labels: &[&str])
Creates a node with a specific ID during recovery.
This is used for WAL recovery to restore nodes with their original IDs. The caller must ensure IDs don’t conflict with existing nodes.