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

Function plan_update

nodedb-sql/src/planner/dml_update_delete.rs:21–57  ·  view source on GitHub ↗

Plan an UPDATE statement.

(stmt: &ast::Statement, catalog: &dyn SqlCatalog)

Source from the content-addressed store, hash-verified

19
20/// Plan an UPDATE statement.
21pub fn plan_update(stmt: &ast::Statement, catalog: &dyn SqlCatalog) -> Result<Vec<SqlPlan>> {
22 let ast::Statement::Update(update) = stmt else {
23 return Err(SqlError::Parse {
24 detail: "expected UPDATE statement".into(),
25 });
26 };
27
28 // Delegate to the UPDATE...FROM path when a FROM clause is present.
29 if update.from.is_some() {
30 return plan_update_from(update, catalog);
31 }
32
33 let table_name = extract_table_name_from_table_with_joins(&update.table)?;
34 let info = catalog
35 .get_collection(DatabaseId::DEFAULT, &table_name)?
36 .ok_or_else(|| SqlError::UnknownTable {
37 name: table_name.clone(),
38 })?;
39
40 let assigns = convert_assignments(&update.assignments)?;
41
42 let filters = match &update.selection {
43 Some(expr) => super::super::select::convert_where_to_filters(expr)?,
44 None => Vec::new(),
45 };
46
47 let target_keys = extract_point_keys(update.selection.as_ref(), &info);
48
49 let rules = engine_rules::resolve_engine_rules(info.engine);
50 rules.plan_update(UpdateParams {
51 collection: table_name,
52 assignments: assigns,
53 filters,
54 target_keys,
55 returning: update.returning.is_some(),
56 })
57}
58
59/// Plan `UPDATE target SET ... FROM src WHERE target.col = src.col ...`.
60fn plan_update_from(update: &ast::Update, catalog: &dyn SqlCatalog) -> Result<Vec<SqlPlan>> {

Callers 1

plan_statementsFunction · 0.85

Calls 10

plan_update_fromFunction · 0.85
convert_assignmentsFunction · 0.85
convert_where_to_filtersFunction · 0.85
extract_point_keysFunction · 0.85
resolve_engine_rulesFunction · 0.85
get_collectionMethod · 0.45
cloneMethod · 0.45
as_refMethod · 0.45
plan_updateMethod · 0.45

Tested by

no test coverage detected