From d2cd833b8675f68b9d088623c31d296ed2b52ff3 Mon Sep 17 00:00:00 2001 From: PThorpe92 Date: Tue, 16 Sep 2025 15:45:49 -0400 Subject: [PATCH] Rewrite exprs in set + where clause for UPSERT --- core/translate/insert.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/core/translate/insert.rs b/core/translate/insert.rs index 06f3e2bc1..25a8a1b55 100644 --- a/core/translate/insert.rs +++ b/core/translate/insert.rs @@ -120,7 +120,6 @@ pub fn translate_insert( let inserting_multiple_rows = match &mut body { InsertBody::Select(select, upsert) => { - upsert_opt = upsert.as_deref().cloned(); match &mut select.body.select { // TODO see how to avoid clone OneSelect::Values(values_expr) if values_expr.len() <= 1 => { @@ -149,6 +148,21 @@ pub fn translate_insert( } rewrite_expr(expr, &mut param_idx)?; } + if let Some(ref mut upsert) = upsert { + if let UpsertDo::Set { + ref mut sets, + ref mut where_clause, + } = &mut upsert.do_clause + { + for set in sets.iter_mut() { + rewrite_expr(set.expr.as_mut(), &mut param_idx)?; + } + if let Some(ref mut where_expr) = where_clause { + rewrite_expr(where_expr.as_mut(), &mut param_idx)?; + } + } + } + upsert_opt = upsert.as_deref().cloned(); values = values_expr.pop(); false }