This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push: new 6a13fd85b27 branch-3.0: [Fix](ShortCircuite) fix point query crash with prepared statement when encounter delete sign #47178 (#47222) 6a13fd85b27 is described below commit 6a13fd85b2743210767a1b15235757a65cce6ef7 Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> AuthorDate: Thu Jan 23 13:13:34 2025 +0800 branch-3.0: [Fix](ShortCircuite) fix point query crash with prepared statement when encounter delete sign #47178 (#47222) Cherry-picked from #47178 Co-authored-by: lihangyu <lihan...@selectdb.com> --- be/src/service/point_query_executor.cpp | 25 ++++++++++++++------- .../data/point_query_p0/test_point_query.out | Bin 9833 -> 9896 bytes .../suites/point_query_p0/test_point_query.groovy | 7 ++++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/be/src/service/point_query_executor.cpp b/be/src/service/point_query_executor.cpp index 1aee7f3604c..d3935745882 100644 --- a/be/src/service/point_query_executor.cpp +++ b/be/src/service/point_query_executor.cpp @@ -517,14 +517,23 @@ Status PointQueryExecutor::_lookup_row_data() { } // filter rows by delete sign if (_row_hits > 0 && _reusable->delete_sign_idx() != -1) { - vectorized::ColumnPtr delete_filter_columns = - _result_block->get_columns()[_reusable->delete_sign_idx()]; - const auto& filter = - assert_cast<const vectorized::ColumnInt8*>(delete_filter_columns.get())->get_data(); - size_t count = filter.size() - simd::count_zero_num((int8_t*)filter.data(), filter.size()); - if (count == filter.size()) { - _result_block->clear(); - } else if (count > 0) { + size_t filtered = 0; + size_t total = 0; + { + // clear_column_data will check reference of ColumnPtr, so we need to release + // reference before clear_column_data + vectorized::ColumnPtr delete_filter_columns = + _result_block->get_columns()[_reusable->delete_sign_idx()]; + const auto& filter = + assert_cast<const vectorized::ColumnInt8*>(delete_filter_columns.get()) + ->get_data(); + filtered = filter.size() - simd::count_zero_num((int8_t*)filter.data(), filter.size()); + total = filter.size(); + } + + if (filtered == total) { + _result_block->clear_column_data(); + } else if (filtered > 0) { return Status::NotSupported("Not implemented since only single row at present"); } } diff --git a/regression-test/data/point_query_p0/test_point_query.out b/regression-test/data/point_query_p0/test_point_query.out index 6707291aa38..30e1198451d 100644 Binary files a/regression-test/data/point_query_p0/test_point_query.out and b/regression-test/data/point_query_p0/test_point_query.out differ diff --git a/regression-test/suites/point_query_p0/test_point_query.groovy b/regression-test/suites/point_query_p0/test_point_query.groovy index 237103435a9..0463d9aa8f7 100644 --- a/regression-test/suites/point_query_p0/test_point_query.groovy +++ b/regression-test/suites/point_query_p0/test_point_query.groovy @@ -395,6 +395,13 @@ suite("test_point_query", "nonConcurrent") { qe_point_select partial_prepared_stmt qe_point_select partial_prepared_stmt + partial_prepared_stmt = prepareStatement " select * from regression_test_point_query_p0.table_3821461 where col1 = ? and col2 = ? and loc3 = 'aabc'" + partial_prepared_stmt.setInt(1, 10) + partial_prepared_stmt.setInt(2, 20) + qe_point_select partial_prepared_stmt + qe_point_select partial_prepared_stmt + qe_point_select partial_prepared_stmt + // test prepared statement should not be short-circuited plan which use nondeterministic function try (PreparedStatement pstmt = prepareStatement("select now(3) data_time from regression_test_point_query_p0.test_partial_prepared_statement where sk = 'sk' and user_guid = 'user_guid' and feature = 'feature'")) { def result1 = "" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org