Skip to content

Commit 78041ea

Browse files
committed
feat: implement question/question_pipe/question_and
1 parent bb7d94d commit 78041ea

File tree

2 files changed

+685
-14
lines changed

2 files changed

+685
-14
lines changed

datafusion/physical-expr/src/expressions/binary.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717

1818
mod kernels;
1919

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+
};
2126
use crate::expressions::binary::kernels::select::{
2227
cast_to_string_array, collection_select_dyn_scalar, collection_select_path_dyn_scalar,
2328
};
@@ -599,6 +604,11 @@ impl BinaryExpr {
599604
HashArrow => collection_select_path_dyn_scalar(array, scalar),
600605
HashLongArrow => collection_select_path_dyn_scalar(array, scalar)
601606
.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),
602612
// if scalar operation is not supported - fallback to array implementation
603613
_ => None,
604614
};
@@ -654,8 +664,11 @@ impl BinaryExpr {
654664
StringConcat => concat_elements(left, right),
655665
AtArrow => collection_contains_dyn(left, right),
656666
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),
657670
Arrow | LongArrow | HashArrow | HashLongArrow | AtAt | HashMinus
658-
| AtQuestion | Question | QuestionAnd | QuestionPipe | IntegerDivide => {
671+
| AtQuestion | IntegerDivide => {
659672
not_impl_err!(
660673
"Binary operator '{:?}' is not supported in the physical expr",
661674
self.op

0 commit comments

Comments
 (0)