GOOGLE ADS

Mittwoch, 27. April 2022

Rost: Korrekte Verwendung des Dezimaltyps in Diesel

Lösung des Problems

Laut Dokumentation diesel::sql_types::Unsigned<T>bietet Diesel keine eingebaute Unterstützung für Unsigned<Decimal>. (Auf dieser Seite sind keine spezifischen ToSql/ FromSql/ AsExpressionimpls aufgeführt, im Gegensatz zu beispielsweise Unsigned<Integer>.) Dasselbe gilt für rust_numeric::Decimal(Auch nur ein FromSql/ ToSqlimpl für Numeric/ Decimalno one for Unsigned<Decimal>.

Das alles bedeutet, dass keine der Kisten eine Unsigned<Decimal>Säule aus der Box trägt. Sie können solche Spalten unterstützen, indem Sie die entsprechenden Eigenschaften selbst implementieren. Das bedeutet die Implementierung von FromSql/ ToSql+ Ableitung AsExpression/ FromSqlRowfür den entsprechenden Wrapper des neuen Typs.

Das würde zu folgendem Code führen:

use diesel::sql_types::{Unsigned, Decimal};
use diesel::serialize::{self, ToSql};
use diesel::deserialize::{self, FromSql};
use diesel::mysql::Mysql;
#[derive(AsExpression, FromSqlRow)]
#[sql_type = "Unsigned<Decimal>"]
struct DecimalWrapper(rust_decimal::Decimal);
impl FromSql<Unsigned<Decimal>, Mysql> for DecimalWrapper {
fn from_sql(bytes: Option<&[u8]>) -> deserialize::Result<Self> {
<rust_decimal::Decimal as FromSql<Decimal, Mysql>>::from_sql(bytes).map(Self)
}
}
impl ToSql<Unsigned<Decimal>, Mysql> for DecimalWrapper {
fn to_sql<W: Write>(&self, out: &mut serialize::Output<'_, W, DB>) -> serialize::Result {
<_ as ToSql<Decimal, Mysql>>::to_sql(&self.0, out)
}
}

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...