This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new dd7affb8f9c branch-2.1 [Fix](ShortCircuite) fix point query crash with prepared statement when encounter delete sign (#47227) dd7affb8f9c is described below commit dd7affb8f9c2007710d32e44a7dd6bf2be176d4c Author: lihangyu <lihan...@selectdb.com> AuthorDate: Sat Jan 25 08:33:06 2025 +0800 branch-2.1 [Fix](ShortCircuite) fix point query crash with prepared statement when encounter delete sign (#47227) cherry-pick from #47178 --- be/src/service/point_query_executor.cpp | 25 ++++++++++++++------- .../data/point_query_p0/test_point_query.out | Bin 9868 -> 9931 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 4e9295ed53d..2138f03c43a 100644 --- a/be/src/service/point_query_executor.cpp +++ b/be/src/service/point_query_executor.cpp @@ -361,14 +361,23 @@ Status PointQueryExecutor::_lookup_row_data() { } // filter rows by delete sign if (_result_block->rows() > 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 d5045685851..292ce49cde4 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 6e4d79caedb..17a2d3e2033 100644 --- a/regression-test/suites/point_query_p0/test_point_query.groovy +++ b/regression-test/suites/point_query_p0/test_point_query.groovy @@ -396,6 +396,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