diff --git a/src/worker/base.rs b/src/worker/base.rs index 78939d5..10e38f3 100644 --- a/src/worker/base.rs +++ b/src/worker/base.rs @@ -128,9 +128,9 @@ impl BaseWorker { } // Hinweis: In der bestehenden Datenbank ist `falukant_data.update_money` typischerweise -// so definiert, dass der Geldbetrag als NUMERIC erwartet wird. Um keine -// Signaturkonflikte zu erzeugen, casten wir den zweiten Parameter in SQL nach -// `numeric` und übergeben den Wert als Text. +// so definiert, dass der Geldbetrag als NUMERIC erwartet wird. Wir casten den +// zweiten Parameter in SQL nach `numeric`, damit der Aufruf auch mit einem +// f64-Wert funktioniert. const QUERY_UPDATE_MONEY: &str = r#" SELECT falukant_data.update_money( $1::int4, @@ -148,22 +148,17 @@ impl BaseWorker { money_change: f64, action: &str, ) -> Result<(), DbError> { - use postgres::types::ToSql; - let mut conn = self .pool .get() .map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?; - conn.prepare("update_money", QUERY_UPDATE_MONEY)?; - - let p1: &(dyn ToSql + Sync) = &falukant_user_id; - // Als String übergeben, damit die DB ihn nach NUMERIC casten kann. - let money_str = money_change.to_string(); - let p2: &(dyn ToSql + Sync) = &money_str; - let p3: &(dyn ToSql + Sync) = &action; - - conn.execute("update_money", &[p1, p2, p3])?; + // Direkter Aufruf ohne benannte Prepared-Statement-Caches, um + // Signaturkonflikte bei Schemaänderungen zu vermeiden. + conn.execute( + QUERY_UPDATE_MONEY, + &[&falukant_user_id, &money_change, &action], + )?; Ok(()) }