This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit 75c1bd146fd0a3f3a08912d2e0610d440c4c5f3d Author: luozenglin <37725793+luozeng...@users.noreply.github.com> AuthorDate: Wed Jan 4 14:33:53 2023 +0800 [fix](bitmapfilter) fix bitmap filter not pushing down (#15532) --- be/src/exprs/runtime_filter.cpp | 7 +------ be/src/vec/exec/scan/vscan_node.cpp | 2 +- .../src/main/java/org/apache/doris/planner/RuntimeFilter.java | 4 ++++ 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/be/src/exprs/runtime_filter.cpp b/be/src/exprs/runtime_filter.cpp index 0444d3cc42..89e0181c0c 100644 --- a/be/src/exprs/runtime_filter.cpp +++ b/be/src/exprs/runtime_filter.cpp @@ -1325,12 +1325,7 @@ Status IRuntimeFilter::init_with_desc(const TRuntimeFilterDesc* desc, const TQue doris::vectorized::VExprContext* bitmap_target_ctx = nullptr; RETURN_IF_ERROR(doris::vectorized::VExpr::create_expr_tree(_pool, desc->bitmap_target_expr, &bitmap_target_ctx)); - auto type = const_cast<vectorized::VExpr*>( - vectorized::VExpr::expr_without_cast(bitmap_target_ctx->root())) - ->type(); - // The bitmap filter evaluates only integers. - params.column_return_type = - type.is_integer_type() ? type.type : bitmap_target_ctx->root()->type().type; + params.column_return_type = bitmap_target_ctx->root()->type().type; if (desc->__isset.bitmap_filter_not_in) { params.bitmap_filter_not_in = desc->bitmap_filter_not_in; diff --git a/be/src/vec/exec/scan/vscan_node.cpp b/be/src/vec/exec/scan/vscan_node.cpp index d849c67edd..bbe0a75523 100644 --- a/be/src/vec/exec/scan/vscan_node.cpp +++ b/be/src/vec/exec/scan/vscan_node.cpp @@ -504,7 +504,7 @@ Status VScanNode::_normalize_bloom_filter(VExpr* expr, VExprContext* expr_ctx, S Status VScanNode::_normalize_bitmap_filter(VExpr* expr, VExprContext* expr_ctx, SlotDescriptor* slot, PushDownType* pdt) { - if (TExprNodeType::BITMAP_PRED == expr->node_type() && expr->type().is_integer_type()) { + if (TExprNodeType::BITMAP_PRED == expr->node_type()) { DCHECK(expr->children().size() == 1); PushDownType temp_pdt = _should_push_down_bitmap_filter(); if (temp_pdt != PushDownType::UNACCEPTABLE) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java index e68e71f6ad..ad92f2245f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java @@ -20,6 +20,7 @@ package org.apache.doris.planner; import org.apache.doris.analysis.Analyzer; import org.apache.doris.analysis.BinaryPredicate; import org.apache.doris.analysis.BitmapFilterPredicate; +import org.apache.doris.analysis.CastExpr; import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.Predicate; import org.apache.doris.analysis.SlotId; @@ -336,6 +337,9 @@ public final class RuntimeFilter { if (targetSlots.isEmpty()) { return null; } + while (targetExpr instanceof CastExpr && targetExpr.getChild(0).getType().isIntegerType()) { + targetExpr = targetExpr.getChild(0); + } RuntimeFilter runtimeFilter = new RuntimeFilter(idGen.getNextId(), filterSrcNode, srcExpr, exprOrder, targetExpr, targetSlots, --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org