@@ -20,7 +20,9 @@ use vortex_error::vortex_err;
2020use vortex_mask:: Mask ;
2121use vortex_vector:: BoolDatum ;
2222use vortex_vector:: Datum ;
23+ use vortex_vector:: ScalarOps ;
2324use vortex_vector:: Vector ;
25+ use vortex_vector:: VectorMutOps ;
2426use vortex_vector:: VectorOps ;
2527use vortex_vector:: bool:: BoolVector ;
2628use vortex_vector:: listview:: ListViewScalar ;
@@ -128,14 +130,19 @@ impl VTable for ListContains {
128130
129131 let matches = match ( lhs. as_scalar ( ) . is_some ( ) , rhs. as_scalar ( ) . is_some ( ) ) {
130132 ( true , true ) => {
131- todo ! ( "Implement ListContains for two scalars" )
133+ let list = lhs. into_scalar ( ) . vortex_expect ( "scalar" ) . into_list ( ) ;
134+ let needle = rhs. into_scalar ( ) . vortex_expect ( "scalar" ) ;
135+ // Convert the needle scalar to a single-element vector and reuse
136+ // constant_list_scalar_contains
137+ let needle_vector = needle. repeat ( 1 ) . freeze ( ) ;
138+ constant_list_scalar_contains ( list, needle_vector)
132139 }
133140 ( true , false ) => constant_list_scalar_contains (
134141 lhs. into_scalar ( ) . vortex_expect ( "scalar" ) . into_list ( ) ,
135142 rhs. into_vector ( ) . vortex_expect ( "vector" ) ,
136143 ) ,
137144 ( false , true ) => list_contains_scalar (
138- lhs. ensure_vector ( args. row_count ) . into_list ( ) ,
145+ lhs. unwrap_into_vector ( args. row_count ) . into_list ( ) ,
139146 rhs. into_scalar ( ) . vortex_expect ( "scalar" ) . into_list ( ) ,
140147 ) ,
141148 ( false , false ) => {
@@ -234,7 +241,7 @@ fn list_contains_scalar(list: ListViewVector, value: ListViewScalar) -> VortexRe
234241 row_count : elems. len ( ) ,
235242 return_dtype : DType :: Bool ( Nullability :: Nullable ) ,
236243 } ) ?
237- . ensure_vector ( elems. len ( ) )
244+ . unwrap_into_vector ( elems. len ( ) )
238245 . into_bool ( )
239246 . into_bits ( ) ;
240247
@@ -311,7 +318,7 @@ fn constant_list_scalar_contains(list: ListViewScalar, values: Vector) -> Vortex
311318 } ) ?
312319 . into_bool ( ) ;
313320 let compared = Datum :: from ( compared)
314- . ensure_vector ( values. len ( ) )
321+ . unwrap_into_vector ( values. len ( ) )
315322 . into_bool ( ) ;
316323
317324 result = LogicalOr :: or ( & result, & compared) ;
0 commit comments