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

Function plan_delete

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

Plan a DELETE statement.

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

Source from the content-addressed store, hash-verified

298
299/// Plan a DELETE statement.
300pub fn plan_delete(stmt: &ast::Statement, catalog: &dyn SqlCatalog) -> Result<Vec<SqlPlan>> {
301 let ast::Statement::Delete(delete) = stmt else {
302 return Err(SqlError::Parse {
303 detail: "expected DELETE statement".into(),
304 });
305 };
306
307 let from_tables = match &delete.from {
308 ast::FromTable::WithFromKeyword(tables) | ast::FromTable::WithoutKeyword(tables) => tables,
309 };
310 let table_name =
311 extract_table_name_from_table_with_joins(from_tables.first().ok_or_else(|| {
312 SqlError::Parse {
313 detail: "DELETE requires a FROM table".into(),
314 }
315 })?)?;
316 let info = catalog
317 .get_collection(DatabaseId::DEFAULT, &table_name)?
318 .ok_or_else(|| SqlError::UnknownTable {
319 name: table_name.clone(),
320 })?;
321
322 let filters = match &delete.selection {
323 Some(expr) => super::super::select::convert_where_to_filters(expr)?,
324 None => Vec::new(),
325 };
326
327 let target_keys = extract_point_keys(delete.selection.as_ref(), &info);
328
329 let rules = engine_rules::resolve_engine_rules(info.engine);
330 rules.plan_delete(DeleteParams {
331 collection: table_name,
332 filters,
333 target_keys,
334 })
335}
336
337/// Plan a TRUNCATE statement.
338pub fn plan_truncate_stmt(stmt: &ast::Statement) -> Result<Vec<SqlPlan>> {

Callers 1

plan_statementsFunction · 0.85

Calls 9

convert_where_to_filtersFunction · 0.85
extract_point_keysFunction · 0.85
resolve_engine_rulesFunction · 0.85
firstMethod · 0.80
get_collectionMethod · 0.45
cloneMethod · 0.45
as_refMethod · 0.45
plan_deleteMethod · 0.45

Tested by

no test coverage detected