MCPcopy Create free account
hub / github.com/GraphLite-AI/GraphLite / process_edge_pattern

Method process_edge_pattern

graphlite/src/plan/builders/insert_builder.rs:149–209  ·  view source on GitHub ↗

Process an edge pattern element

(
        &mut self,
        edge_pattern: &crate::ast::Edge,
        all_elements: &[PatternElement],
        current_idx: usize,
        variables: &mut HashMap<String, VariableInfo>,
    )

Source from the content-addressed store, hash-verified

147
148 /// Process an edge pattern element
149 fn process_edge_pattern(
150 &mut self,
151 edge_pattern: &crate::ast::Edge,
152 all_elements: &[PatternElement],
153 current_idx: usize,
154 variables: &mut HashMap<String, VariableInfo>,
155 ) -> Result<Vec<InsertPattern>, PlanningError> {
156 // Find source and target nodes
157 let source_node_id = self.resolve_adjacent_node(all_elements, current_idx, -1)?;
158 let target_node_id = self.resolve_adjacent_node(all_elements, current_idx, 1)?;
159
160 // Extract edge properties
161 let properties = if let Some(ref prop_map) = edge_pattern.properties {
162 self.extract_properties(prop_map)?
163 } else {
164 HashMap::new()
165 };
166
167 let edge_label = edge_pattern
168 .labels
169 .first()
170 .cloned()
171 .unwrap_or_else(|| "CONNECTED".to_string());
172
173 // Generate content-based storage ID for the edge
174 let edge_storage_id = Self::generate_edge_content_id(
175 &source_node_id,
176 &target_node_id,
177 &edge_label,
178 &properties,
179 );
180
181 // Add edge variable if present
182 if let Some(ref identifier) = edge_pattern.identifier {
183 variables.insert(
184 identifier.clone(),
185 VariableInfo {
186 name: identifier.clone(),
187 entity_type: EntityType::Edge,
188 labels: edge_pattern.labels.clone(),
189 required_properties: properties.keys().cloned().collect(),
190 },
191 );
192 }
193
194 log::debug!(
195 "Creating edge pattern: {} -[{}]-> {}",
196 source_node_id,
197 edge_label,
198 target_node_id
199 );
200
201 Ok(vec![InsertPattern::CreateEdge {
202 storage_id: edge_storage_id,
203 from_node_id: source_node_id,
204 to_node_id: target_node_id,
205 label: edge_label,
206 properties,

Callers 1

plan_insertMethod · 0.80

Calls 5

resolve_adjacent_nodeMethod · 0.80
cloneMethod · 0.80
extract_propertiesMethod · 0.45
firstMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected