dbx_core/sql/planner/logical/
update.rs1use crate::error::{DbxError, DbxResult};
4use crate::sql::planner::types::*;
5use sqlparser::ast::Statement;
6
7use super::LogicalPlanner;
8
9impl LogicalPlanner {
10 pub(super) fn plan_update(&self, statement: &Statement) -> DbxResult<LogicalPlan> {
12 if let Statement::Update {
13 table,
14 assignments,
15 selection,
16 ..
17 } = statement
18 {
19 let table_name = table.relation.to_string();
20
21 let mut parsed_assignments = Vec::new();
23 for assignment in assignments {
24 let column = assignment.target.to_string();
25 let value = self.plan_expr(&assignment.value)?;
26 parsed_assignments.push((column, value));
27 }
28
29 let filter = if let Some(sel) = selection {
31 Some(self.plan_expr(sel)?)
32 } else {
33 None
34 };
35
36 Ok(LogicalPlan::Update {
37 table: table_name,
38 assignments: parsed_assignments,
39 filter,
40 })
41 } else {
42 Err(DbxError::SqlNotSupported {
43 feature: "UPDATE statement".to_string(),
44 hint: "Expected UPDATE statement".to_string(),
45 })
46 }
47 }
48}