|
17 | 17 |
|
18 | 18 | mod kernels; |
19 | 19 |
|
20 | | -use crate::expressions::binary::kernels::contains::collection_contains_dyn; |
| 20 | +use crate::expressions::binary::kernels::contains::{ |
| 21 | + collection_contains_all_strings_dyn, collection_contains_all_strings_dyn_scalar, |
| 22 | + collection_contains_any_string_dyn, collection_contains_any_string_dyn_scalar, |
| 23 | + collection_contains_dyn, collection_contains_dyn_scalar, |
| 24 | + collection_contains_string_dyn, collection_contains_string_dyn_scalar, |
| 25 | +}; |
21 | 26 | use crate::expressions::binary::kernels::select::{ |
22 | 27 | cast_to_string_array, collection_select_dyn_scalar, collection_select_path_dyn_scalar, |
23 | 28 | }; |
@@ -599,6 +604,11 @@ impl BinaryExpr { |
599 | 604 | HashArrow => collection_select_path_dyn_scalar(array, scalar), |
600 | 605 | HashLongArrow => collection_select_path_dyn_scalar(array, scalar) |
601 | 606 | .map(|arr| arr.and_then(cast_to_string_array)), |
| 607 | + AtArrow => collection_contains_dyn_scalar(&array, scalar), |
| 608 | + // TODO: ArrowAt |
| 609 | + Question => collection_contains_string_dyn_scalar(&array, scalar), |
| 610 | + QuestionPipe => collection_contains_any_string_dyn_scalar(&array, scalar), |
| 611 | + QuestionAnd => collection_contains_all_strings_dyn_scalar(&array, scalar), |
602 | 612 | // if scalar operation is not supported - fallback to array implementation |
603 | 613 | _ => None, |
604 | 614 | }; |
@@ -654,8 +664,11 @@ impl BinaryExpr { |
654 | 664 | StringConcat => concat_elements(left, right), |
655 | 665 | AtArrow => collection_contains_dyn(left, right), |
656 | 666 | ArrowAt => collection_contains_dyn(right, left), |
| 667 | + Question => collection_contains_string_dyn(left, right), |
| 668 | + QuestionPipe => collection_contains_any_string_dyn(left, right), |
| 669 | + QuestionAnd => collection_contains_all_strings_dyn(left, right), |
657 | 670 | Arrow | LongArrow | HashArrow | HashLongArrow | AtAt | HashMinus |
658 | | - | AtQuestion | Question | QuestionAnd | QuestionPipe | IntegerDivide => { |
| 671 | + | AtQuestion | IntegerDivide => { |
659 | 672 | not_impl_err!( |
660 | 673 | "Binary operator '{:?}' is not supported in the physical expr", |
661 | 674 | self.op |
|
0 commit comments