1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

Доработка компоненты MySQL

This commit is contained in:
Anton Titovets
2025-02-10 11:21:17 +03:00
parent 2bc14c9dc0
commit 4735b2dd86

View File

@@ -188,10 +188,18 @@ fn rows_to_json(rows: Vec<postgres::Row>) -> String {
.map(|v| Value::Number(v.into())) .map(|v| Value::Number(v.into()))
.unwrap_or(Value::Null), .unwrap_or(Value::Null),
"float4" | "real" => row.get::<_, Option<f32>>(column_name) "float4" | "real" => row.get::<_, Option<f32>>(column_name)
.map(|v| serde_json::Number::from_f64(v as f64).map(Value::Number).unwrap_or(Value::Null)) .map(|v| match v {
v if v.is_nan() => Value::String("NaN".to_string()),
v if v.is_infinite() => Value::String("Infinity".to_string()),
_ => serde_json::Number::from_f64(v as f64).map(Value::Number).unwrap_or(Value::Null),
})
.unwrap_or(Value::Null), .unwrap_or(Value::Null),
"float8" | "double precision" => row.get::<_, Option<f64>>(column_name) "float8" | "double precision" => row.get::<_, Option<f64>>(column_name)
.map(|v| serde_json::Number::from_f64(v).map(Value::Number).unwrap_or(Value::Null)) .map(|v| match v {
v if v.is_nan() => Value::String("NaN".to_string()),
v if v.is_infinite() => Value::String("Infinity".to_string()),
_ => serde_json::Number::from_f64(v).map(Value::Number).unwrap_or(Value::Null),
})
.unwrap_or(Value::Null), .unwrap_or(Value::Null),
"varchar" | "text" | "char" | "citext" | "name" | "unknown" => row.get::<_, Option<String>>(column_name) "varchar" | "text" | "char" | "citext" | "name" | "unknown" => row.get::<_, Option<String>>(column_name)
.map(Value::String) .map(Value::String)
@@ -211,12 +219,13 @@ fn rows_to_json(rows: Vec<postgres::Row>) -> String {
"timestamp" | "timestamptz" => row.get::<_, Option<SystemTime>>(column_name) "timestamp" | "timestamptz" => row.get::<_, Option<SystemTime>>(column_name)
.map(|time| { .map(|time| {
match time.duration_since(SystemTime::UNIX_EPOCH) { match time.duration_since(SystemTime::UNIX_EPOCH) {
Ok(d) => Value::Number(d.as_secs().into()), Ok(d) => Value::Number(d.as_secs().into()), // Положительное значение для времени после UNIX_EPOCH
Err(_) => match SystemTime::UNIX_EPOCH.duration_since(time) { Err(_) => match SystemTime::UNIX_EPOCH.duration_since(time) {
Ok(d) => Value::Number(-(d.as_secs() as i64).into()), // Отрицательное значение для даты до UNIX_EPOCH Ok(d) => Value::Number((-(d.as_secs() as i64)).into()), // Отрицательное значение для даты до UNIX_EPOCH
Err(_) => Value::Null, // Это вообще не должно произойти Err(_) => Value::Null, // Это вообще не должно произойти
}, },
} }
}) })
.unwrap_or(Value::Null), .unwrap_or(Value::Null),
"inet" => row.get::<_, Option<IpAddr>>(column_name) "inet" => row.get::<_, Option<IpAddr>>(column_name)