@@ -16,6 +16,8 @@ use vortex_error::vortex_bail;
1616use vortex_scalar:: Scalar ;
1717use vortex_scalar:: ScalarValue ;
1818use vortex_vector:: Datum ;
19+ use vortex_vector:: Scalar as VectorScalar ;
20+ use vortex_vector:: bool:: BoolScalar ;
1921
2022use crate :: Array ;
2123use crate :: ArrayRef ;
@@ -24,6 +26,7 @@ use crate::arrays::ConstantArray;
2426use crate :: compute:: Operator ;
2527use crate :: compute:: compare;
2628use crate :: expr:: Arity ;
29+ use crate :: expr:: Binary ;
2730use crate :: expr:: ChildName ;
2831use crate :: expr:: ExecutionArgs ;
2932use crate :: expr:: ExprId ;
@@ -115,8 +118,26 @@ impl VTable for DynamicComparison {
115118 . into_array ( ) )
116119 }
117120
118- fn execute ( & self , _data : & Self :: Options , _args : ExecutionArgs ) -> VortexResult < Datum > {
119- todo ! ( )
121+ fn execute ( & self , data : & Self :: Options , args : ExecutionArgs ) -> VortexResult < Datum > {
122+ if let Some ( scalar) = data. rhs . scalar ( ) {
123+ let [ lhs] : [ Datum ; _] = args
124+ . datums
125+ . try_into ( )
126+ . map_err ( |_| vortex_error:: vortex_err!( "Wrong arg count for DynamicComparison" ) ) ?;
127+ let rhs_vector_scalar = scalar. to_vector_scalar ( ) ;
128+ let rhs = Datum :: Scalar ( rhs_vector_scalar) ;
129+
130+ return Binary . bind ( data. operator . into ( ) ) . execute ( ExecutionArgs {
131+ datums : vec ! [ lhs, rhs] ,
132+ dtypes : args. dtypes ,
133+ row_count : args. row_count ,
134+ return_dtype : args. return_dtype ,
135+ } ) ;
136+ }
137+
138+ Ok ( Datum :: Scalar ( VectorScalar :: Bool ( BoolScalar :: new ( Some (
139+ data. default ,
140+ ) ) ) ) )
120141 }
121142
122143 fn stat_falsification (
0 commit comments