use toasty_core::stmt::{self, VisitMut};
pub(super) struct LiftUpdateQuery;
impl LiftUpdateQuery {
pub(super) fn new() -> Self {
Self
}
pub(super) fn rewrite(&mut self, stmt: &mut stmt::Statement) {
self.visit_mut(stmt);
}
}
impl VisitMut for LiftUpdateQuery {
fn visit_stmt_update_mut(&mut self, stmt: &mut stmt::Update) {
if let stmt::UpdateTarget::Query(query) = &mut stmt.target {
let stmt::ExprSet::Select(select) = &mut query.body else {
todo!()
};
assert!(select.returning.is_model());
stmt.filter.add_filter(select.filter.take());
stmt.target = stmt::UpdateTarget::Model(select.source.model_id_unwrap());
}
stmt::visit_mut::visit_stmt_update_mut(self, stmt);
}
}