Skip to content

Commit 841d8da

Browse files
committed
fix
1 parent df99e77 commit 841d8da

File tree

4 files changed

+14
-10
lines changed

4 files changed

+14
-10
lines changed

src/core/databend/util.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use std::io::Write;
1818

1919
use byteorder::BigEndian;
2020
use byteorder::WriteBytesExt;
21-
use ethnum::i256;
21+
use i256::i256;
2222

2323
use super::constants::*;
2424
use super::jentry::JEntry;
@@ -437,7 +437,7 @@ impl ExtensionValue<'_> {
437437
ExtensionValue::Timestamp(Timestamp { offset, value })
438438
}
439439
EXTENSION_INTERVAL => {
440-
if len != 8 {
440+
if len != 16 {
441441
return Err(Error::InvalidJsonbNumber);
442442
}
443443
let months = i32::from_be_bytes(bytes[1..5].try_into().unwrap());

src/extension.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ impl Display for Interval {
9191
let mut date_parts = vec![];
9292
let years = self.months / MONTHS_PER_YEAR;
9393
let months = self.months % MONTHS_PER_YEAR;
94-
9594
match years.cmp(&1) {
9695
Ordering::Equal => {
9796
date_parts.push((years, "year"));
@@ -119,7 +118,7 @@ impl Display for Interval {
119118
}
120119
_ => {}
121120
}
122-
if date_parts.is_empty() {
121+
if !date_parts.is_empty() {
123122
for (i, (val, name)) in date_parts.into_iter().enumerate() {
124123
if i > 0 {
125124
write!(f, " ")?;

src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ pub use error::Error;
8282
pub use extension::*;
8383
#[allow(unused_imports)]
8484
pub use from::*;
85-
pub use number::Number;
8685
pub use number::Decimal128;
8786
pub use number::Decimal256;
87+
pub use number::Number;
8888
pub use owned::to_owned_jsonb;
8989
pub use owned::OwnedJsonb;
9090
pub use parser::from_slice;

src/number.rs

+10-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use serde::de::Visitor;
2828
use serde::ser::Serialize;
2929
use serde::ser::Serializer;
3030

31-
use ethnum::i256;
31+
use i256::i256;
3232

3333
#[derive(Debug, Clone)]
3434
pub struct Decimal128 {
@@ -53,8 +53,9 @@ pub struct Decimal256 {
5353

5454
impl Decimal256 {
5555
pub fn to_float64(&self) -> f64 {
56-
let div = 10_f64.powi(self.scale as i32);
57-
self.value.as_f64() / div
56+
//let div = 10_f64.powi(self.scale as i32);
57+
//self.value.as_f64() / div
58+
todo!()
5859
}
5960
}
6061

@@ -196,9 +197,13 @@ impl Number {
196197
Ok(Number::Decimal128(neg_dec))
197198
}
198199
Number::Decimal256(v) => {
200+
let (neg_value, is_overflow) = v.value.overflowing_neg();
201+
if is_overflow {
202+
return Err(Error::Message("Decimal256 overflow".to_string()));
203+
}
199204
let neg_dec = Decimal256 {
200205
scale: v.scale,
201-
value: v.value * -1,
206+
value: neg_value,
202207
};
203208
Ok(Number::Decimal256(neg_dec))
204209
}
@@ -521,7 +526,7 @@ impl Display for Number {
521526
} else {
522527
let pow_scale = i256::from(10).pow(v.scale as u32);
523528
// -1/10 = 0
524-
if v.value >= 0 {
529+
if v.value >= i256::from(0) {
525530
write!(
526531
f,
527532
"{}.{:0>width$}",

0 commit comments

Comments
 (0)