Skip to content

Commit e6f5495

Browse files
committed
refactor(types): keep value as a string in case of error when parsing Text
Signed-off-by: Florian Valeye <[email protected]>
1 parent 09ecc07 commit e6f5495

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

crates/duckdb/src/types/from_sql.rs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,12 @@ macro_rules! from_sql_integral(
101101
ValueRef::Date32(i) => <$t as cast::From<i32>>::cast(i).into_result(FromSqlError::OutOfRange(i as i128)),
102102
ValueRef::Time64(TimeUnit::Microsecond, i) => <$t as cast::From<i64>>::cast(i).into_result(FromSqlError::OutOfRange(i as i128)),
103103
ValueRef::Text(_) => {
104-
let v = value.as_str()?.parse::<$t>();
105-
match v {
106-
Ok(i) => Ok(i),
107-
Err(_) => {
108-
let v = value.as_str()?.parse::<i128>();
109-
match v {
110-
Ok(i) => Err(FromSqlError::OutOfRange(i)),
111-
_ => Err(FromSqlError::InvalidType),
112-
}
113-
},
114-
}
104+
let s = value.as_str()?;
105+
s.parse::<$t>().or_else(|_| {
106+
s.parse::<i128>()
107+
.map_err(|_| FromSqlError::InvalidType)
108+
.and_then(|i| Err(FromSqlError::OutOfRange(i)))
109+
})
115110
}
116111
_ => Err(FromSqlError::InvalidType),
117112
}

0 commit comments

Comments
 (0)