This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new 1ce24905a7f branch-4.0: [fix](scan) Fix missing predicate filter when
Native and JNI readers are mixed in FileScanner (#61802)
1ce24905a7f is described below
commit 1ce24905a7f979fa592238f681eef8f97002702f
Author: Wen Zhenghu <[email protected]>
AuthorDate: Fri Apr 3 11:26:38 2026 +0800
branch-4.0: [fix](scan) Fix missing predicate filter when Native and JNI
readers are mixed in FileScanner (#61802)
bp #61929
---
be/src/vec/exec/scan/file_scanner.cpp | 5 ++-
be/test/vec/exec/vfile_scanner_exception_test.cpp | 41 +++++++++++++++++++++++
2 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/be/src/vec/exec/scan/file_scanner.cpp
b/be/src/vec/exec/scan/file_scanner.cpp
index 5124f8ea631..d164112c6a9 100644
--- a/be/src/vec/exec/scan/file_scanner.cpp
+++ b/be/src/vec/exec/scan/file_scanner.cpp
@@ -360,7 +360,10 @@ Status FileScanner::_process_conjuncts() {
Status FileScanner::_process_late_arrival_conjuncts() {
if (_push_down_conjuncts.size() < _conjuncts.size()) {
_push_down_conjuncts = _conjuncts;
- _conjuncts.clear();
+ // Do not clear _conjuncts here!
+ // We must keep it for fallback filtering, especially when mixing
+ // Native readers (which use _push_down_conjuncts) and JNI readers
(which rely on _conjuncts).
+ // _conjuncts.clear();
RETURN_IF_ERROR(_process_conjuncts());
}
if (_applied_rf_num == _total_rf_num) {
diff --git a/be/test/vec/exec/vfile_scanner_exception_test.cpp
b/be/test/vec/exec/vfile_scanner_exception_test.cpp
index 6927a5076c1..cdd6f359f4b 100644
--- a/be/test/vec/exec/vfile_scanner_exception_test.cpp
+++ b/be/test/vec/exec/vfile_scanner_exception_test.cpp
@@ -300,5 +300,46 @@ TEST_F(VfileScannerExceptionTest, failure_case) {
WARN_IF_ERROR(scanner->close(&_runtime_state), "fail to close scanner");
}
+TEST_F(VfileScannerExceptionTest, process_late_arrival_conjuncts_retain) {
+ std::shared_ptr<FileScanner> scanner = nullptr;
+ generate_scanner(scanner);
+
+ // Simulate some conjuncts in scanner
+ // Let's create a dummy expr context to test the exact function
+ doris::TExprNode expr_node;
+ expr_node.node_type = TExprNodeType::BOOL_LITERAL;
+ expr_node.type = create_type_desc(PrimitiveType::TYPE_BOOLEAN);
+ expr_node.num_children = 0;
+ expr_node.__isset.bool_literal = true;
+ expr_node.bool_literal.value = true;
+
+ doris::TExpr texpr;
+ texpr.nodes.push_back(expr_node);
+
+ vectorized::VExprContextSPtr ctx;
+ Status st = vectorized::VExpr::create_expr_tree(texpr, ctx);
+ ASSERT_TRUE(st.ok());
+ st = ctx->prepare(&_runtime_state, RowDescriptor());
+ ASSERT_TRUE(st.ok());
+ st = ctx->open(&_runtime_state);
+ ASSERT_TRUE(st.ok());
+
+ scanner->_conjuncts.push_back(ctx);
+ ASSERT_EQ(scanner->_conjuncts.size(), 1);
+ ASSERT_EQ(scanner->_push_down_conjuncts.size(), 0);
+
+ // Call the function that used to clear conjuncts in branch-4.0
+ st = scanner->_process_late_arrival_conjuncts();
+ ASSERT_TRUE(st.ok());
+
+ // The key assertion: _conjuncts MUST NOT be cleared after this call!
+ // This guarantees that subsequent JNI scanners or other readers will
still have fallback filters.
+ ASSERT_EQ(scanner->_conjuncts.size(), 1);
+ // And push_down_conjuncts should be cloned/assigned successfully
+ ASSERT_EQ(scanner->_push_down_conjuncts.size(), 1);
+
+ WARN_IF_ERROR(scanner->close(&_runtime_state), "fail to close scanner");
+}
+
} // namespace vectorized
} // namespace doris
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]