File tree 4 files changed +14
-10
lines changed
4 files changed +14
-10
lines changed Original file line number Diff line number Diff line change @@ -18,7 +18,7 @@ use std::io::Write;
18
18
19
19
use byteorder:: BigEndian ;
20
20
use byteorder:: WriteBytesExt ;
21
- use ethnum :: i256;
21
+ use i256 :: i256;
22
22
23
23
use super :: constants:: * ;
24
24
use super :: jentry:: JEntry ;
@@ -437,7 +437,7 @@ impl ExtensionValue<'_> {
437
437
ExtensionValue :: Timestamp ( Timestamp { offset, value } )
438
438
}
439
439
EXTENSION_INTERVAL => {
440
- if len != 8 {
440
+ if len != 16 {
441
441
return Err ( Error :: InvalidJsonbNumber ) ;
442
442
}
443
443
let months = i32:: from_be_bytes ( bytes[ 1 ..5 ] . try_into ( ) . unwrap ( ) ) ;
Original file line number Diff line number Diff line change @@ -91,7 +91,6 @@ impl Display for Interval {
91
91
let mut date_parts = vec ! [ ] ;
92
92
let years = self . months / MONTHS_PER_YEAR ;
93
93
let months = self . months % MONTHS_PER_YEAR ;
94
-
95
94
match years. cmp ( & 1 ) {
96
95
Ordering :: Equal => {
97
96
date_parts. push ( ( years, "year" ) ) ;
@@ -119,7 +118,7 @@ impl Display for Interval {
119
118
}
120
119
_ => { }
121
120
}
122
- if date_parts. is_empty ( ) {
121
+ if ! date_parts. is_empty ( ) {
123
122
for ( i, ( val, name) ) in date_parts. into_iter ( ) . enumerate ( ) {
124
123
if i > 0 {
125
124
write ! ( f, " " ) ?;
Original file line number Diff line number Diff line change @@ -82,9 +82,9 @@ pub use error::Error;
82
82
pub use extension:: * ;
83
83
#[ allow( unused_imports) ]
84
84
pub use from:: * ;
85
- pub use number:: Number ;
86
85
pub use number:: Decimal128 ;
87
86
pub use number:: Decimal256 ;
87
+ pub use number:: Number ;
88
88
pub use owned:: to_owned_jsonb;
89
89
pub use owned:: OwnedJsonb ;
90
90
pub use parser:: from_slice;
Original file line number Diff line number Diff line change @@ -28,7 +28,7 @@ use serde::de::Visitor;
28
28
use serde:: ser:: Serialize ;
29
29
use serde:: ser:: Serializer ;
30
30
31
- use ethnum :: i256;
31
+ use i256 :: i256;
32
32
33
33
#[ derive( Debug , Clone ) ]
34
34
pub struct Decimal128 {
@@ -53,8 +53,9 @@ pub struct Decimal256 {
53
53
54
54
impl Decimal256 {
55
55
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 ! ( )
58
59
}
59
60
}
60
61
@@ -196,9 +197,13 @@ impl Number {
196
197
Ok ( Number :: Decimal128 ( neg_dec) )
197
198
}
198
199
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
+ }
199
204
let neg_dec = Decimal256 {
200
205
scale : v. scale ,
201
- value : v . value * - 1 ,
206
+ value : neg_value ,
202
207
} ;
203
208
Ok ( Number :: Decimal256 ( neg_dec) )
204
209
}
@@ -521,7 +526,7 @@ impl Display for Number {
521
526
} else {
522
527
let pow_scale = i256:: from ( 10 ) . pow ( v. scale as u32 ) ;
523
528
// -1/10 = 0
524
- if v. value >= 0 {
529
+ if v. value >= i256 :: from ( 0 ) {
525
530
write ! (
526
531
f,
527
532
"{}.{:0>width$}" ,
You can’t perform that action at this time.
0 commit comments