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

Method process_node_pattern

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

Process a node pattern element

(
        &mut self,
        node_pattern: &crate::ast::Node,
        variables: &mut HashMap<String, VariableInfo>,
    )

Source from the content-addressed store, hash-verified

86
87 /// Process a node pattern element
88 fn process_node_pattern(
89 &mut self,
90 node_pattern: &crate::ast::Node,
91 variables: &mut HashMap<String, VariableInfo>,
92 ) -> Result<Option<InsertPattern>, PlanningError> {
93 // Check if this is a reference to an already-defined node
94 if let Some(ref identifier) = node_pattern.identifier {
95 if self.defined_identifiers.contains(identifier) {
96 log::debug!(
97 "Node '{}' is a reference to existing definition, skipping node creation",
98 identifier
99 );
100 return Ok(None); // This is a reference, not a new node
101 }
102 }
103
104 // Extract properties
105 let properties = if let Some(ref prop_map) = node_pattern.properties {
106 self.extract_properties(prop_map)?
107 } else {
108 HashMap::new()
109 };
110
111 // Generate content-based storage ID
112 let storage_id = Self::generate_node_content_id(&node_pattern.labels, &properties);
113
114 // If there's an identifier, add it to our mappings and mark as defined
115 if let Some(ref identifier) = node_pattern.identifier {
116 self.identifier_mappings.insert(
117 identifier.clone(),
118 NodeIdentifier {
119 storage_id: storage_id.clone(),
120 labels: node_pattern.labels.clone(),
121 is_reference: false,
122 },
123 );
124 self.defined_identifiers.insert(identifier.clone());
125
126 // Add to variables
127 variables.insert(
128 identifier.clone(),
129 VariableInfo {
130 name: identifier.clone(),
131 entity_type: EntityType::Node,
132 labels: node_pattern.labels.clone(),
133 required_properties: properties.keys().cloned().collect(),
134 },
135 );
136 }
137
138 log::debug!("Creating node pattern with storage_id: {}", storage_id);
139
140 Ok(Some(InsertPattern::CreateNode {
141 storage_id,
142 labels: node_pattern.labels.clone(),
143 properties,
144 original_identifier: node_pattern.identifier.clone(),
145 }))

Callers 1

plan_insertMethod · 0.80

Calls 4

containsMethod · 0.80
cloneMethod · 0.80
extract_propertiesMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected