From 78b5527b153aa2e4634318b4ab87a0482f5e6b12 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 8 Dec 2025 16:39:57 +0100 Subject: [PATCH] Enhance change_falukant_user_money: Switch to literal SQL execution for update_money to resolve serialization issues with parameterized calls, improving reliability. --- src/worker/base.rs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/worker/base.rs b/src/worker/base.rs index 8f1a0a5..3accee4 100644 --- a/src/worker/base.rs +++ b/src/worker/base.rs @@ -201,19 +201,29 @@ impl BaseWorker { let uid_i32: i32 = falukant_user_id; let money_str = format!("{:.2}", adjusted_money_change); - let p1: &(dyn ToSql + Sync) = &uid_i32; - let p2: &(dyn ToSql + Sync) = &money_str; - let p3: &(dyn ToSql + Sync) = &action; + // Note: we intentionally avoid parameterized call due to serialization + // issues in this environment and instead execute a literal SQL below. eprintln!( - "[BaseWorker] change_falukant_user_money: update_money(user_id={}, money_change='{}', action={})", + "[BaseWorker] change_falukant_user_money: executing literal update_money(user_id={}, money_change='{}', action={})", uid_i32, money_str, action ); - // Execute parameterized - let _ = conn.execute("update_money", &[p1, p2, p3])?; + // Use a literal SQL call because parameterized execution keeps failing + // with "error serializing parameter 1" in this environment. + fn escape_sql_literal(s: &str) -> String { + s.replace('\'', "''") + } + let escaped_action = escape_sql_literal(action); + let sql = format!( + "SELECT falukant_data.update_money({uid}, {money}::numeric, '{act}');", + uid = uid_i32, + money = money_str, + act = escaped_action + ); - Ok(()) + let _ = conn.query(&sql)?; + Ok(()) } }