fix(mysql): handle nullable view collation
This commit is contained in:
parent
71a30e921e
commit
9e0ec7b7ef
|
|
@ -142,8 +142,10 @@ fn nonblank(value: String) -> Option<String> {
|
|||
}
|
||||
|
||||
async fn query_first_nonblank_string(conn: &mut mysql_async::Conn, sql: &str) -> Option<String> {
|
||||
match conn.query_first::<String, _>(sql).await {
|
||||
Ok(Some(value)) => nonblank(value),
|
||||
// MySQL reports nullable metadata such as TABLE_COLLATION as NULL for views.
|
||||
// Reading it as String makes mysql_async panic during row conversion.
|
||||
match conn.query_first::<Option<String>, _>(sql).await {
|
||||
Ok(Some(value)) => value.and_then(nonblank),
|
||||
Ok(None) => None,
|
||||
Err(error) => {
|
||||
log::debug!("Failed to read optional MySQL database information with `{sql}`: {error}");
|
||||
|
|
@ -4951,6 +4953,14 @@ mod tests {
|
|||
assert!(!sql.contains("AS ENUM_VALUES"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mysql_nullable_table_collation_uses_optional_string_conversion() {
|
||||
let collation = mysql_async::from_value_opt::<Option<String>>(mysql_async::Value::NULL)
|
||||
.expect("Option<String> must accept NULL MySQL metadata values");
|
||||
|
||||
assert_eq!(collation, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mysql_column_charset_metadata_clears_values_matching_table_default() {
|
||||
let mut columns = vec![
|
||||
|
|
|
|||
Loading…
Reference in New Issue