mirror of
https://github.com/TaKO8Ki/gobang.git
synced 2021-09-19 22:32:56 +03:00
reduce duplicate codes bacause of try_get() to make it a little easier to read.
This commit is contained in:
@@ -49,3 +49,10 @@ pub trait TableRow: std::marker::Send {
|
||||
fn fields(&self) -> Vec<String>;
|
||||
fn columns(&self) -> Vec<String>;
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! get_or_null {
|
||||
($value:expr) => {
|
||||
return Ok($value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use crate::get_or_null;
|
||||
|
||||
use super::{Pool, TableRow, RECORDS_LIMIT_PER_PAGE};
|
||||
use async_trait::async_trait;
|
||||
use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
|
||||
@@ -7,6 +9,8 @@ use sqlx::mysql::{MySqlColumn, MySqlPoolOptions, MySqlRow};
|
||||
use sqlx::{Column as _, Row as _, TypeInfo as _};
|
||||
use std::time::Duration;
|
||||
|
||||
const NULL: &str = "NULL";
|
||||
|
||||
pub struct MySqlPool {
|
||||
pool: sqlx::mysql::MySqlPool,
|
||||
}
|
||||
@@ -353,85 +357,69 @@ impl Pool for MySqlPool {
|
||||
|
||||
fn convert_column_value_to_string(row: &MySqlRow, column: &MySqlColumn) -> anyhow::Result<String> {
|
||||
let column_name = column.name();
|
||||
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<String> = value;
|
||||
return Ok(value.unwrap_or_else(|| "NULL".to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
Ok(value.unwrap_or_else(|| NULL.to_string()))
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<&str> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i8> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i16> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i32> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i64> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<f32> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<f64> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<u8> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<u16> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<u32> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<u64> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<rust_decimal::Decimal> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveDate> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveTime> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveDateTime> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<chrono::DateTime<chrono::Utc>> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<serde_json::Value> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
get_or_null!(value)
|
||||
} else if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<bool> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
} else {
|
||||
anyhow::bail!(
|
||||
"column type not implemented: `{}` {}",
|
||||
column_name,
|
||||
column.type_info().clone().name()
|
||||
)
|
||||
}
|
||||
Err(anyhow::anyhow!(
|
||||
"column type not implemented: `{}` {}",
|
||||
column_name,
|
||||
column.type_info().clone().name()
|
||||
))
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use crate::get_or_null;
|
||||
|
||||
use super::{Pool, TableRow, RECORDS_LIMIT_PER_PAGE};
|
||||
use async_trait::async_trait;
|
||||
use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
|
||||
@@ -467,19 +469,19 @@ fn convert_column_value_to_string(row: &PgRow, column: &PgColumn) -> anyhow::Res
|
||||
let column_name = column.name();
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i16> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i32> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i64> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<rust_decimal::Decimal> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<&[u8]> = value;
|
||||
@@ -495,7 +497,7 @@ fn convert_column_value_to_string(row: &PgRow, column: &PgColumn) -> anyhow::Res
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveDate> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: String = value;
|
||||
@@ -503,31 +505,31 @@ fn convert_column_value_to_string(row: &PgRow, column: &PgColumn) -> anyhow::Res
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<chrono::DateTime<chrono::Utc>> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<chrono::DateTime<chrono::Local>> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveDateTime> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveDate> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveTime> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<serde_json::Value> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get::<Option<bool>, _>(column_name) {
|
||||
let value: Option<bool> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<Vec<String>> = value;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use crate::get_or_null;
|
||||
|
||||
use super::{Pool, TableRow, RECORDS_LIMIT_PER_PAGE};
|
||||
use async_trait::async_trait;
|
||||
use chrono::NaiveDateTime;
|
||||
@@ -351,43 +353,43 @@ fn convert_column_value_to_string(
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<&str> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i16> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i32> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<i64> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<f32> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<f64> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<chrono::DateTime<chrono::Utc>> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<chrono::DateTime<chrono::Local>> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<NaiveDateTime> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
if let Ok(value) = row.try_get(column_name) {
|
||||
let value: Option<bool> = value;
|
||||
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
|
||||
get_or_null!(value)
|
||||
}
|
||||
Err(anyhow::anyhow!(
|
||||
"column type not implemented: `{}` {}",
|
||||
|
||||
Reference in New Issue
Block a user