From c23fdc15859da7ea93c5c4909807520f0dbc19e9 Mon Sep 17 00:00:00 2001 From: HugoCasa Date: Mon, 15 Apr 2024 14:26:17 +0200 Subject: [PATCH] fix: add mysql decimal support (#3557) --- backend/windmill-worker/src/mysql_executor.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/windmill-worker/src/mysql_executor.rs b/backend/windmill-worker/src/mysql_executor.rs index e9855381ae..f637037e3e 100644 --- a/backend/windmill-worker/src/mysql_executor.rs +++ b/backend/windmill-worker/src/mysql_executor.rs @@ -145,7 +145,16 @@ pub async fn do_mysql( Value::Number(n) if n.is_u64() && arg_t == "uint" => { mysql_async::Value::UInt(n.as_u64().unwrap()) } - Value::Number(n) if n.is_f64() && arg_t == "real" => n.as_f64().into(), + Value::Number(n) + if n.is_f64() && (arg_t == "real" || arg_t == "dec" || arg_t == "fixed") => + { + n.as_f64().unwrap().into() + } + Value::Number(n) + if n.is_i64() && (arg_t == "real" || arg_t == "dec" || arg_t == "fixed") => + { + (n.as_i64().unwrap() as f64).into() + } value @ _ => { return Err(Error::ExecutionErr(format!( "Unsupported type in query: {:?} and signature {arg_t:?}", @@ -272,6 +281,9 @@ fn convert_mysql_value_to_json(v: mysql_async::Value, c: ColumnType) -> serde_js ColumnType::MYSQL_TYPE_FLOAT | ColumnType::MYSQL_TYPE_DOUBLE => { conversion_error(f64::from_value_opt(v)) } + ColumnType::MYSQL_TYPE_DECIMAL | ColumnType::MYSQL_TYPE_NEWDECIMAL => { + conversion_error(rust_decimal::Decimal::from_value_opt(v)) + } ColumnType::MYSQL_TYPE_TINY | ColumnType::MYSQL_TYPE_SHORT | ColumnType::MYSQL_TYPE_LONG