From 7d0d2163d20ec07ee3ed2a43fbade25a11506f38 Mon Sep 17 00:00:00 2001 From: Ruihang Xia Date: Tue, 9 Jan 2024 17:13:53 +0800 Subject: [PATCH] fix: expose unsupported datatype error on mysql protocol (#3121) Signed-off-by: Ruihang Xia --- src/servers/src/error.rs | 8 ++++++++ src/servers/src/mysql/writer.rs | 5 +++-- src/servers/src/postgres/types.rs | 5 +++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/servers/src/error.rs b/src/servers/src/error.rs index 022bfc52de..cbbe34b815 100644 --- a/src/servers/src/error.rs +++ b/src/servers/src/error.rs @@ -38,6 +38,12 @@ pub enum Error { #[snafu(display("Internal error: {}", err_msg))] Internal { err_msg: String }, + #[snafu(display("Unsupported data type: {}, reason: {}", data_type, reason))] + UnsupportedDataType { + data_type: ConcreteDataType, + reason: String, + }, + #[snafu(display("Internal IO error"))] InternalIo { #[snafu(source)] @@ -446,6 +452,8 @@ impl ErrorExt for Error { | GrpcReflectionService { .. } | BuildHttpResponse { .. } => StatusCode::Internal, + UnsupportedDataType { .. } => StatusCode::Unsupported, + #[cfg(not(windows))] UpdateJemallocMetrics { .. } => StatusCode::Internal, diff --git a/src/servers/src/mysql/writer.rs b/src/servers/src/mysql/writer.rs index 00c6ee08e0..e311324568 100644 --- a/src/servers/src/mysql/writer.rs +++ b/src/servers/src/mysql/writer.rs @@ -265,8 +265,9 @@ pub(crate) fn create_mysql_column( ConcreteDataType::Interval(_) => Ok(ColumnType::MYSQL_TYPE_VARCHAR), ConcreteDataType::Duration(_) => Ok(ColumnType::MYSQL_TYPE_TIME), ConcreteDataType::Decimal128(_) => Ok(ColumnType::MYSQL_TYPE_DECIMAL), - _ => error::InternalSnafu { - err_msg: format!("not implemented for column datatype {:?}", data_type), + _ => error::UnsupportedDataTypeSnafu { + data_type, + reason: "not implemented", } .fail(), }; diff --git a/src/servers/src/postgres/types.rs b/src/servers/src/postgres/types.rs index fd75d0c1cf..514fc1d732 100644 --- a/src/servers/src/postgres/types.rs +++ b/src/servers/src/postgres/types.rs @@ -135,8 +135,9 @@ pub(super) fn type_gt_to_pg(origin: &ConcreteDataType) -> Result { &ConcreteDataType::Decimal128(_) => Ok(Type::NUMERIC), &ConcreteDataType::Duration(_) | &ConcreteDataType::List(_) - | &ConcreteDataType::Dictionary(_) => error::InternalSnafu { - err_msg: format!("not implemented for column datatype {origin:?}"), + | &ConcreteDataType::Dictionary(_) => error::UnsupportedDataTypeSnafu { + data_type: origin, + reason: "not implemented", } .fail(), }