@@ -6,7 +6,10 @@ use vortex_vector::BoolDatum;
66use vortex_vector:: Datum ;
77use vortex_vector:: DecimalDatum ;
88use vortex_vector:: PrimitiveDatum ;
9+ use vortex_vector:: ScalarOps ;
910use vortex_vector:: TypedDatum ;
11+ use vortex_vector:: VectorMutOps ;
12+ use vortex_vector:: VectorOps ;
1013use vortex_vector:: binaryview:: BinaryType ;
1114use vortex_vector:: binaryview:: BinaryViewScalar ;
1215use vortex_vector:: binaryview:: BinaryViewType ;
5356 fn compare ( self , rhs : Self ) -> Self :: Output {
5457 match ( self , rhs) {
5558 ( BoolDatum :: Scalar ( sc1) , BoolDatum :: Scalar ( sc2) ) => BoolDatum :: Scalar ( sc1. compare ( sc2) ) ,
56- ( BoolDatum :: Vector ( sc1) , BoolDatum :: Vector ( sc2) ) => BoolDatum :: Vector ( sc1. compare ( sc2) ) ,
57- _ => unreachable ! ( "" ) ,
59+ ( BoolDatum :: Vector ( vec) , BoolDatum :: Scalar ( sc) ) => {
60+ let repeated: BoolVector = sc. repeat ( vec. len ( ) ) . into_bool ( ) . freeze ( ) ;
61+ BoolDatum :: Vector ( vec. compare ( repeated) )
62+ }
63+ ( BoolDatum :: Scalar ( sc) , BoolDatum :: Vector ( vec) ) => {
64+ let repeated: BoolVector = sc. repeat ( vec. len ( ) ) . into_bool ( ) . freeze ( ) ;
65+ BoolDatum :: Vector ( repeated. compare ( vec) )
66+ }
67+ ( BoolDatum :: Vector ( vec1) , BoolDatum :: Vector ( vec2) ) => {
68+ BoolDatum :: Vector ( vec1. compare ( vec2) )
69+ }
5870 }
5971 }
6072}
@@ -71,10 +83,17 @@ where
7183 ( PrimitiveDatum :: Scalar ( sc1) , PrimitiveDatum :: Scalar ( sc2) ) => {
7284 BoolDatum :: Scalar ( sc1. compare ( sc2) )
7385 }
74- ( PrimitiveDatum :: Vector ( sc1) , PrimitiveDatum :: Vector ( sc2) ) => {
75- BoolDatum :: Vector ( sc1. compare ( sc2) )
86+ ( PrimitiveDatum :: Vector ( vec) , PrimitiveDatum :: Scalar ( sc) ) => {
87+ let repeated: PrimitiveVector = sc. repeat ( vec. len ( ) ) . into_primitive ( ) . freeze ( ) ;
88+ BoolDatum :: Vector ( vec. compare ( repeated) )
89+ }
90+ ( PrimitiveDatum :: Scalar ( sc) , PrimitiveDatum :: Vector ( vec) ) => {
91+ let repeated: PrimitiveVector = sc. repeat ( vec. len ( ) ) . into_primitive ( ) . freeze ( ) ;
92+ BoolDatum :: Vector ( repeated. compare ( vec) )
93+ }
94+ ( PrimitiveDatum :: Vector ( vec1) , PrimitiveDatum :: Vector ( vec2) ) => {
95+ BoolDatum :: Vector ( vec1. compare ( vec2) )
7696 }
77- _ => unreachable ! ( "" ) ,
7897 }
7998 }
8099}
@@ -91,10 +110,17 @@ where
91110 ( DecimalDatum :: Scalar ( sc1) , DecimalDatum :: Scalar ( sc2) ) => {
92111 BoolDatum :: Scalar ( sc1. compare ( sc2) )
93112 }
94- ( DecimalDatum :: Vector ( sc1) , DecimalDatum :: Vector ( sc2) ) => {
95- BoolDatum :: Vector ( sc1. compare ( sc2) )
113+ ( DecimalDatum :: Vector ( vec) , DecimalDatum :: Scalar ( sc) ) => {
114+ let repeated = sc. repeat ( vec. len ( ) ) . into_decimal ( ) . freeze ( ) ;
115+ BoolDatum :: Vector ( vec. compare ( repeated) )
116+ }
117+ ( DecimalDatum :: Scalar ( sc) , DecimalDatum :: Vector ( vec) ) => {
118+ let repeated = sc. repeat ( vec. len ( ) ) . into_decimal ( ) . freeze ( ) ;
119+ BoolDatum :: Vector ( repeated. compare ( vec) )
120+ }
121+ ( DecimalDatum :: Vector ( vec1) , DecimalDatum :: Vector ( vec2) ) => {
122+ BoolDatum :: Vector ( vec1. compare ( vec2) )
96123 }
97- _ => unreachable ! ( "" ) ,
98124 }
99125 }
100126}
@@ -112,10 +138,17 @@ where
112138 ( BinaryViewDatum :: Scalar ( sc1) , BinaryViewDatum :: Scalar ( sc2) ) => {
113139 BoolDatum :: Scalar ( sc1. compare ( sc2) )
114140 }
115- ( BinaryViewDatum :: Vector ( sc1) , BinaryViewDatum :: Vector ( sc2) ) => {
116- BoolDatum :: Vector ( sc1. compare ( sc2) )
141+ ( BinaryViewDatum :: Vector ( vec) , BinaryViewDatum :: Scalar ( sc) ) => {
142+ let repeated = T :: downcast ( sc. repeat ( vec. len ( ) ) ) . freeze ( ) ;
143+ BoolDatum :: Vector ( vec. compare ( repeated) )
144+ }
145+ ( BinaryViewDatum :: Scalar ( sc) , BinaryViewDatum :: Vector ( vec) ) => {
146+ let repeated = T :: downcast ( sc. repeat ( vec. len ( ) ) ) . freeze ( ) ;
147+ BoolDatum :: Vector ( repeated. compare ( vec) )
148+ }
149+ ( BinaryViewDatum :: Vector ( vec1) , BinaryViewDatum :: Vector ( vec2) ) => {
150+ BoolDatum :: Vector ( vec1. compare ( vec2) )
117151 }
118- _ => unreachable ! ( "" ) ,
119152 }
120153 }
121154}
0 commit comments