not panic but return error

pull/32/head
Takayuki Maeda 3 years ago
parent 3f2787da7c
commit 640b62dc05

@ -99,12 +99,11 @@ impl Pool for MySqlPool {
.iter()
.map(|column| column.name().to_string())
.collect();
records.push(
row.columns()
.iter()
.map(|col| convert_column_value_to_string(&row, col))
.collect::<Vec<String>>(),
)
let mut new_row = vec![];
for column in row.columns() {
new_row.push(convert_column_value_to_string(&row, column)?)
}
records.push(new_row)
}
Ok((headers, records))
}
@ -124,12 +123,11 @@ impl Pool for MySqlPool {
.iter()
.map(|column| column.name().to_string())
.collect();
records.push(
row.columns()
.iter()
.map(|col| convert_column_value_to_string(&row, col))
.collect::<Vec<String>>(),
)
let mut new_row = vec![];
for column in row.columns() {
new_row.push(convert_column_value_to_string(&row, column)?)
}
records.push(new_row)
}
Ok((headers, records))
}
@ -147,78 +145,56 @@ pub async fn get_tables(database: String, pool: &MPool) -> anyhow::Result<Vec<Ta
Ok(tables)
}
pub fn convert_column_value_to_string(row: &MySqlRow, column: &MySqlColumn) -> String {
pub fn convert_column_value_to_string(
row: &MySqlRow,
column: &MySqlColumn,
) -> anyhow::Result<String> {
let column_name = column.name();
match column.type_info().clone().name() {
"INT" | "SMALLINT" | "BIGINT" => match row.try_get(column_name) {
Ok(value) => {
"INT" | "SMALLINT" | "BIGINT" => {
if let Ok(value) = row.try_get(column_name) {
let value: Option<i64> = value;
value.map_or("NULL".to_string(), |v| v.to_string())
}
Err(err) => unimplemented!(
"not implemented column type: {}, error: {}",
column.type_info().clone().name(),
err
),
},
"DECIMAL" => match row.try_get(column_name) {
Ok(value) => {
let value: Option<rust_decimal::Decimal> = value;
value.map_or("NULL".to_string(), |v| v.to_string())
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
}
Err(err) => unimplemented!(
"not implemented column type: {}, error: {}",
column.type_info().clone().name(),
err
),
},
"INT UNSIGNED" => match row.try_get(column_name) {
Ok(value) => {
}
// "DECIMAL" => {
// 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()));
// }
// }
"INT UNSIGNED" => {
if let Ok(value) = row.try_get(column_name) {
let value: Option<u64> = value;
value.map_or("NULL".to_string(), |v| v.to_string())
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
}
Err(_) => unimplemented!(
"not implemented column type: {}",
column.type_info().clone().name()
),
},
}
"VARCHAR" | "CHAR" | "ENUM" | "TEXT" | "LONGTEXT" => {
row.try_get(column_name).unwrap_or("NULL".to_string())
return Ok(row.try_get(column_name).unwrap_or("NULL".to_string()))
}
"DATE" => match row.try_get(column_name) {
Ok(value) => {
"DATE" => {
if let Ok(value) = row.try_get(column_name) {
let value: Option<NaiveDate> = value;
value.map_or("NULL".to_string(), |v| v.to_string())
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
}
Err(_) => unimplemented!(
"not implemented column type: {}",
column.type_info().clone().name()
),
},
"TIMESTAMP" => match row.try_get(column_name) {
Ok(value) => {
}
"TIMESTAMP" => {
if let Ok(value) = row.try_get(column_name) {
let value: Option<chrono::DateTime<chrono::Utc>> = value;
value.map_or("NULL".to_string(), |v| v.to_string())
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
}
Err(err) => match err {
sqlx::Error::ColumnDecode { .. } => "NULL".to_string(),
err => unimplemented!(
"not implemented column type: {}, error: {}",
column.type_info().clone().name(),
err
),
},
},
"BOOLEAN" => match row.try_get(column_name) {
Ok(value) => {
}
"BOOLEAN" => {
if let Ok(value) = row.try_get(column_name) {
let value: Option<bool> = value;
value.map_or("NULL".to_string(), |v| v.to_string())
return Ok(value.map_or("NULL".to_string(), |v| v.to_string()));
}
Err(_) => unimplemented!(
"not implemented column type: {}",
column.type_info().clone().name()
),
},
column_type => unimplemented!("not implemented column type: {}", column_type),
}
_ => (),
}
Err(anyhow::anyhow!(
"column type not implemented: `{}` {}",
column_name,
column.type_info().clone().name()
))
}

Loading…
Cancel
Save