@@ -247,6 +247,16 @@ macro_rules! varchar_cast {
247
247
} ;
248
248
}
249
249
250
+ macro_rules! numeric_to_boolean {
251
+ ( $value: expr) => {
252
+ match $value {
253
+ Some ( 0 ) => Ok ( DataValue :: Boolean ( Some ( false ) ) ) ,
254
+ Some ( 1 ) => Ok ( DataValue :: Boolean ( Some ( true ) ) ) ,
255
+ _ => Err ( DatabaseError :: CastFail ) ,
256
+ }
257
+ } ;
258
+ }
259
+
250
260
impl DataValue {
251
261
pub fn date ( & self ) -> Option < NaiveDate > {
252
262
if let DataValue :: Date32 ( Some ( val) ) = self {
@@ -670,6 +680,7 @@ impl DataValue {
670
680
671
681
decimal
672
682
} ) ) ) ,
683
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
673
684
_ => Err ( DatabaseError :: CastFail ) ,
674
685
} ,
675
686
DataValue :: Int16 ( value) => match to {
@@ -696,6 +707,7 @@ impl DataValue {
696
707
697
708
decimal
698
709
} ) ) ) ,
710
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
699
711
_ => Err ( DatabaseError :: CastFail ) ,
700
712
} ,
701
713
DataValue :: Int32 ( value) => match to {
@@ -721,6 +733,7 @@ impl DataValue {
721
733
722
734
decimal
723
735
} ) ) ) ,
736
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
724
737
_ => Err ( DatabaseError :: CastFail ) ,
725
738
} ,
726
739
DataValue :: Int64 ( value) => match to {
@@ -745,6 +758,7 @@ impl DataValue {
745
758
746
759
decimal
747
760
} ) ) ) ,
761
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
748
762
_ => Err ( DatabaseError :: CastFail ) ,
749
763
} ,
750
764
DataValue :: UInt8 ( value) => match to {
@@ -765,6 +779,7 @@ impl DataValue {
765
779
766
780
decimal
767
781
} ) ) ) ,
782
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
768
783
_ => Err ( DatabaseError :: CastFail ) ,
769
784
} ,
770
785
DataValue :: UInt16 ( value) => match to {
@@ -783,6 +798,7 @@ impl DataValue {
783
798
784
799
decimal
785
800
} ) ) ) ,
801
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
786
802
_ => Err ( DatabaseError :: CastFail ) ,
787
803
} ,
788
804
DataValue :: UInt32 ( value) => match to {
@@ -799,6 +815,7 @@ impl DataValue {
799
815
800
816
decimal
801
817
} ) ) ) ,
818
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
802
819
_ => Err ( DatabaseError :: CastFail ) ,
803
820
} ,
804
821
DataValue :: UInt64 ( value) => match to {
@@ -813,6 +830,7 @@ impl DataValue {
813
830
814
831
decimal
815
832
} ) ) ) ,
833
+ LogicalType :: Boolean => numeric_to_boolean ! ( value) ,
816
834
_ => Err ( DatabaseError :: CastFail ) ,
817
835
} ,
818
836
DataValue :: Utf8 ( value) => match to {
0 commit comments