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

Function classify_on_conflict

nodedb-sql/src/planner/dml.rs:33–59  ·  view source on GitHub ↗
(ins: &ast::Insert)

Source from the content-addressed store, hash-verified

31}
32
33fn classify_on_conflict(ins: &ast::Insert) -> Result<OnConflict> {
34 let Some(on) = ins.on.as_ref() else {
35 return Ok(OnConflict::None);
36 };
37 let ast::OnInsert::OnConflict(oc) = on else {
38 return Ok(OnConflict::None);
39 };
40 match &oc.action {
41 ast::OnConflictAction::DoNothing => Ok(OnConflict::DoNothing),
42 ast::OnConflictAction::DoUpdate(do_update) => {
43 let mut pairs = Vec::with_capacity(do_update.assignments.len());
44 for a in &do_update.assignments {
45 let name = match &a.target {
46 ast::AssignmentTarget::ColumnName(obj) => normalize_object_name_checked(obj)?,
47 _ => {
48 return Err(SqlError::Unsupported {
49 detail: "ON CONFLICT DO UPDATE SET target must be a column name".into(),
50 });
51 }
52 };
53 let expr = convert_expr(&a.value)?;
54 pairs.push((name, expr));
55 }
56 Ok(OnConflict::DoUpdate(pairs))
57 }
58 }
59}
60
61/// Plan an INSERT statement.
62pub fn plan_insert(ins: &ast::Insert, catalog: &dyn SqlCatalog) -> Result<Vec<SqlPlan>> {

Callers 1

plan_insertFunction · 0.85

Calls 5

convert_exprFunction · 0.85
as_refMethod · 0.45
lenMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected