MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / substitute

Method substitute

nodedb/src/control/planner/procedural/executor/bindings.rs:175–209  ·  view source on GitHub ↗

Substitute NEW.field, OLD.field, TG_OP, TG_TABLE_NAME, TG_WHEN in SQL text. Replaces: - `NEW.field_name` → SQL literal of the field value - `OLD.field_name` → SQL literal of the field value - `TG_OP` → 'INSERT' / 'UPDATE' / 'DELETE' - `TG_TABLE_NAME` → 'collection_name' - `TG_WHEN` → 'BEFORE' / 'AFTER' - `COALESCE(NEW.field, OLD.field)` handled naturally since each is replaced

(&self, sql: &str)

Source from the content-addressed store, hash-verified

173 /// - `TG_WHEN` → 'BEFORE' / 'AFTER'
174 /// - `COALESCE(NEW.field, OLD.field)` handled naturally since each is replaced
175 pub fn substitute(&self, sql: &str) -> String {
176 let mut result = sql.to_string();
177
178 // Replace NEW.field references.
179 if let Some(ref new_row) = self.new_row {
180 for (field, value) in new_row {
181 let literal = value.to_sql_literal();
182 result = replace_qualified_field_reference(&result, "NEW", field, &literal);
183 }
184 }
185
186 // Replace OLD.field references.
187 if let Some(ref old_row) = self.old_row {
188 for (field, value) in old_row {
189 let literal = value.to_sql_literal();
190 result = replace_qualified_field_reference(&result, "OLD", field, &literal);
191 }
192 }
193
194 // Replace user-defined variables (loop vars, procedure params).
195 for (name, value) in &self.variables {
196 result = replace_case_insensitive(&result, name, value);
197 }
198
199 // Replace statement-level variables.
200 result = replace_case_insensitive(&result, "TG_OP", &format!("'{}'", self.tg_op));
201 result = replace_case_insensitive(
202 &result,
203 "TG_TABLE_NAME",
204 &format!("'{}'", self.tg_table_name),
205 );
206 result = replace_case_insensitive(&result, "TG_WHEN", &format!("'{}'", self.tg_when));
207
208 result
209 }
210}
211
212fn replace_qualified_field_reference(

Callers 15

substitute_new_fieldsFunction · 0.45
substitute_tg_opFunction · 0.45
substitute_null_valueFunction · 0.45
execute_statementMethod · 0.45
execute_ifMethod · 0.45
execute_whileMethod · 0.45
execute_forMethod · 0.45
execute_assignMethod · 0.45
execute_returnMethod · 0.45
execute_sqlMethod · 0.45
fire_triggersFunction · 0.45

Calls 4

to_stringMethod · 0.80
to_sql_literalMethod · 0.80
replace_case_insensitiveFunction · 0.70