diff --git a/crates/dbx-core/src/db/postgres.rs b/crates/dbx-core/src/db/postgres.rs index c61d0e1c9..bec71c4fd 100644 --- a/crates/dbx-core/src/db/postgres.rs +++ b/crates/dbx-core/src/db/postgres.rs @@ -77,11 +77,35 @@ fn pg_value_to_json(row: &PgRow, idx: usize, type_name: &str) -> serde_json::Val .or_else(|_| row.try_get::(idx).map(super::safe_i64_to_json)) .or_else(|_| row.try_get::(idx).map(|v| serde_json::Value::Number(v.into()))) .or_else(|_| row.try_get::(idx).map(|v| serde_json::Value::Number(v.into()))) + .or_else(|_| row.try_get::(idx).map(|v| serde_json::Value::Number(v.into()))) + .or_else(|_| { + row.try_get::, _>(idx) + .map(|v| serde_json::Value::Array(v.into_iter().map(|v| serde_json::Value::Number(v.into())).collect())) + }) + .or_else(|_| { + row.try_get::, _>(idx) + .map(|v| serde_json::Value::Array(v.into_iter().map(|v| serde_json::Value::Number(v.into())).collect())) + }) + .or_else(|_| { + row.try_get::, _>(idx) + .map(|v| serde_json::Value::Array(v.into_iter().map(|v| serde_json::Value::Number(v.into())).collect())) + }) + .or_else(|_| { + row.try_get::, _>(idx) + .map(|v| serde_json::Value::Array(v.into_iter().map(|v| serde_json::Value::Number(v.into())).collect())) + }) .or_else(|_| { row.try_get::(idx).map(|v| { serde_json::Number::from_f64(v).map(serde_json::Value::Number).unwrap_or(serde_json::Value::Null) }) }) + .or_else(|_| { + row.try_get::(idx).map(|v| { + serde_json::Number::from_f64((v as f64 * 1_000_000.0).round() / 1_000_000.0) + .map(serde_json::Value::Number) + .unwrap_or(serde_json::Value::Null) + }) + }) .or_else(|_| row.try_get::(idx).map(serde_json::Value::Bool)) .or_else(|_| row.try_get::(idx).map(|v| serde_json::Value::String(v.to_string()))) .or_else(|e| pg_temporal_to_json_value(row, idx).ok_or(e))