Enhance change_falukant_user_money: Switch to literal SQL execution for update_money to resolve serialization issues with parameterized calls, improving reliability.

This commit is contained in:
Torsten Schulz (local)
2025-12-08 16:39:57 +01:00
parent 180431b130
commit 78b5527b15

View File

@@ -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(())
}
}