2015-12-15 75 views
2

定義一個固定的精確數字(Postgres中的十進制或數字)並將其傳遞給rust-postgres中的插入的正確方法是什麼?在rust-postgres中使用固定精確數字的正確方法是什麼?

transaction.execute("INSERT INTO commons_account(
      display_name, blocked, balance, blocked_balance, password, salt) 
      VALUES ($1, $2, $3, $4, $5, $6);", &[&"bob", &false, &0, &0, &"dfasdfsa", &"dfsdsa"]).unwrap(); 

兩個平衡和阻止平衡是numeric並運行該代碼給出了這樣的錯誤

thread 'test' panicked at 'called `Result::unwrap()` on an `Err` value: WrongType(Numeric)' 

回答

2

Numeric不在supported types。 您需要實現性狀ToSql自己喜歡的東西:

struct Float64(f64); 

impl ToSql for Float64 { // Or a fixed-precision type. 
    to_sql_checked!(); 

    fn to_sql<W: Write + ?Sized>(&self, _: &Type, mut w: &mut W, _: &SessionInfo) -> Result<IsNull> { 
     let num = 0; 
     try!(w.write_f64::<BigEndian>(num)); 
     *self = Float64(num); 
     Ok(IsNull::No) 
    } 

    accepts!(Type::Numeric); 
} 
+0

我剛剛發現,鏽不具有一個內置的十進制類型,這只是做的一切更加困難 – ibrabeicker

+0

@ibrabeicker,有https://開頭WWW .reddit.com/R /防鏽/評論/ 3wfhro/decimal_d128_type_for_rust_for_decimal_floating /;另見https://www.reddit.com/r/rust/comments/3wubj0/numeric_types_in_rust/ – ArtemGr

相關問題