@@ -176,22 +176,25 @@ fn regexp_match_scalar_pattern(args: &[ColumnarValue]) -> Result<Option<ArrayRef
176176 else {
177177 return Ok ( None ) ;
178178 } ;
179- let flags = match flags {
180- Some ( ColumnarValue :: Array ( _) ) => return Ok ( None ) ,
181- Some ( ColumnarValue :: Scalar ( flags) ) => Some ( flags) ,
182- None => None ,
183- } ;
184-
185- let value_type = values. data_type ( ) ;
186-
187- if !matches ! ( pattern. try_as_str( ) , Some ( Some ( _) ) )
188- || & pattern. data_type ( ) != value_type
189- || flags. is_some_and ( |flags| {
190- flags. try_as_str ( ) == Some ( Some ( "g" ) ) || & flags. data_type ( ) != value_type
191- } )
192- {
193- return Ok ( None ) ;
194- }
179+ let flags = match flags {
180+ // An array of flags has to be zipped with the values row by row.
181+ Some ( ColumnarValue :: Array ( _) ) => return Ok ( None ) ,
182+ Some ( ColumnarValue :: Scalar ( flags) ) => Some ( flags) ,
183+ None => None ,
184+ } ;
185+
186+ // The kernel requires the values, the pattern and the flags to share one
187+ // string type.
188+ let value_type = values. data_type ( ) ;
189+
190+ if !matches ! ( pattern. try_as_str( ) , Some ( Some ( _) ) )
191+ || & pattern. data_type ( ) != value_type
192+ || flags. is_some_and ( |flags| {
193+ flags. try_as_str ( ) == Some ( Some ( "g" ) ) || & flags. data_type ( ) != value_type
194+ } )
195+ {
196+ return Ok ( None ) ;
197+ }
195198
196199 let pattern = pattern. to_scalar ( ) ?;
197200 let flags = flags. map ( ScalarValue :: to_scalar) . transpose ( ) ?;
0 commit comments