Skip to content

Commit

Permalink
feat: Implement ser/de for the remaining all
Browse files Browse the repository at this point in the history
  • Loading branch information
XuQianJin-Stars committed Sep 5, 2024
1 parent 88cd9dd commit 283f4d6
Showing 1 changed file with 33 additions and 24 deletions.
57 changes: 33 additions & 24 deletions crates/paimon/src/spec/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -476,31 +476,40 @@ impl FromStr for DecimalType {

let (open_bracket, close_bracket) = serde_utils::extract_brackets_pos(s, "DecimalType")?;
let precision_scale_str = &s[open_bracket + 1..close_bracket];
let parts = precision_scale_str.split(',').collect::<Vec<&str>>();
let (precision, scale) = if parts.len() == 2 {
let precision_str = parts[0].trim();
let scale_str = parts[1].trim();
let precision = precision_str
.parse::<u32>()
.map_err(|_| Error::DataTypeInvalid {
message: "Invalid DECIMAL precision. Unable to parse precision as a u32."
.to_string(),
})?;
let scale = scale_str
.parse::<u32>()
.map_err(|_| Error::DataTypeInvalid {
message: "Invalid DECIMAL scale. Unable to parse scale as a u32.".to_string(),
})?;
(precision, scale)
} else {
let precision_str = precision_scale_str.trim();
let precision = precision_str
.parse::<u32>()
.map_err(|_| Error::DataTypeInvalid {
message: "Invalid DECIMAL precision. Unable to parse precision as a u32."
.to_string(),
let (precision, scale) = match precision_scale_str
.split(',')
.collect::<Vec<&str>>()
.as_slice()
{
[precision_str, scale_str] => {
let precision =
precision_str
.trim()
.parse::<u32>()
.map_err(|_| Error::DataTypeInvalid {
message:
"Invalid DECIMAL precision. Unable to parse precision as a u32."
.to_string(),
})?;
let scale =
scale_str
.trim()
.parse::<u32>()
.map_err(|_| Error::DataTypeInvalid {
message: "Invalid DECIMAL scale. Unable to parse scale as a u32."
.to_string(),
})?;
(precision, scale)
}
_ => {
let precision = precision_scale_str.trim().parse::<u32>().map_err(|_| {
Error::DataTypeInvalid {
message: "Invalid DECIMAL precision. Unable to parse precision as a u32."
.to_string(),
}
})?;
(precision, DecimalType::DEFAULT_SCALE)
(precision, DecimalType::DEFAULT_SCALE)
}
};

let nullable = !s[close_bracket..].contains("NOT NULL");
Expand Down

0 comments on commit 283f4d6

Please sign in to comment.