diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt index cfe4a46383..15f8466c4e 100644 --- a/be/CMakeLists.txt +++ b/be/CMakeLists.txt @@ -826,6 +826,7 @@ if (${MAKE_TEST} STREQUAL "ON") add_subdirectory(${TEST_DIR}/udf) add_subdirectory(${TEST_DIR}/util) add_subdirectory(${TEST_DIR}/vec/core) + add_subdirectory(${TEST_DIR}/vec/exec) add_subdirectory(${TEST_DIR}/vec/exprs) add_subdirectory(${TEST_DIR}/vec/function) add_subdirectory(${TEST_DIR}/vec/runtime) diff --git a/be/src/util/sm3.cpp b/be/src/util/sm3.cpp index c2a6f8e9fc..c124a99a5f 100644 --- a/be/src/util/sm3.cpp +++ b/be/src/util/sm3.cpp @@ -27,6 +27,10 @@ SM3Digest::SM3Digest() { EVP_DigestInit_ex(_ctx, _md, NULL); } +SM3Digest::~SM3Digest() { + EVP_MD_CTX_free(_ctx); +} + void SM3Digest::update(const void* data, size_t length) { EVP_DigestUpdate(_ctx, data, length); } diff --git a/be/src/util/sm3.h b/be/src/util/sm3.h index 910841072e..d2e93988ce 100644 --- a/be/src/util/sm3.h +++ b/be/src/util/sm3.h @@ -28,7 +28,7 @@ namespace doris { class SM3Digest { public: SM3Digest(); - + ~SM3Digest(); void update(const void* data, size_t length); void digest(); diff --git a/be/src/vec/functions/function.h b/be/src/vec/functions/function.h index cf00c08b5e..0ea494a06b 100644 --- a/be/src/vec/functions/function.h +++ b/be/src/vec/functions/function.h @@ -491,6 +491,10 @@ public: return function->prepare(context, scope); } + Status close(FunctionContext* context, FunctionContext::FunctionStateScope scope) override { + return function->close(context, scope); + } + bool is_suitable_for_constant_folding() const override { return function->is_suitable_for_constant_folding(); } diff --git a/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp b/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp index 10eaf63f95..7045708efa 100644 --- a/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp +++ b/be/test/olap/rowset/segment_v2/column_reader_writer_test.cpp @@ -126,31 +126,31 @@ void test_nullable_data(uint8_t* src_data, uint8_t* src_is_null, int num_rows, const TypeInfo* type_info = get_scalar_type_info(type); // read and check { - // read and check - ColumnReaderOptions reader_opts; - FilePathDesc path_desc; - path_desc.filepath = fname; - std::unique_ptr reader; - auto st = ColumnReader::create(reader_opts, meta, num_rows, path_desc, &reader); - ASSERT_TRUE(st.ok()); - - ColumnIterator* iter = nullptr; - st = reader->new_iterator(&iter); - ASSERT_TRUE(st.ok()); - std::unique_ptr rblock; - fs::BlockManager* block_manager = fs::fs_util::block_manager(TStorageMedium::HDD); - block_manager->open_block(path_desc, &rblock); - - ASSERT_TRUE(st.ok()); - ColumnIteratorOptions iter_opts; - OlapReaderStatistics stats; - iter_opts.stats = &stats; - iter_opts.rblock = rblock.get(); - iter_opts.mem_tracker = std::make_shared(); - st = iter->init(iter_opts); - ASSERT_TRUE(st.ok()); // sequence read { + ColumnReaderOptions reader_opts; + FilePathDesc path_desc; + path_desc.filepath = fname; + std::unique_ptr reader; + auto st = ColumnReader::create(reader_opts, meta, num_rows, path_desc, &reader); + ASSERT_TRUE(st.ok()); + + ColumnIterator* iter = nullptr; + st = reader->new_iterator(&iter); + ASSERT_TRUE(st.ok()); + std::unique_ptr rblock; + fs::BlockManager* block_manager = fs::fs_util::block_manager(TStorageMedium::HDD); + block_manager->open_block(path_desc, &rblock); + + ASSERT_TRUE(st.ok()); + ColumnIteratorOptions iter_opts; + OlapReaderStatistics stats; + iter_opts.stats = &stats; + iter_opts.rblock = rblock.get(); + iter_opts.mem_tracker = std::make_shared(); + st = iter->init(iter_opts); + ASSERT_TRUE(st.ok()); + st = iter->seek_to_first(); ASSERT_TRUE(st.ok()) << st.to_string(); @@ -185,9 +185,33 @@ void test_nullable_data(uint8_t* src_data, uint8_t* src_is_null, int num_rows, break; } } + delete iter; } { + ColumnReaderOptions reader_opts; + FilePathDesc path_desc; + path_desc.filepath = fname; + std::unique_ptr reader; + auto st = ColumnReader::create(reader_opts, meta, num_rows, path_desc, &reader); + ASSERT_TRUE(st.ok()); + + ColumnIterator* iter = nullptr; + st = reader->new_iterator(&iter); + ASSERT_TRUE(st.ok()); + std::unique_ptr rblock; + fs::BlockManager* block_manager = fs::fs_util::block_manager(TStorageMedium::HDD); + block_manager->open_block(path_desc, &rblock); + + ASSERT_TRUE(st.ok()); + ColumnIteratorOptions iter_opts; + OlapReaderStatistics stats; + iter_opts.stats = &stats; + iter_opts.rblock = rblock.get(); + iter_opts.mem_tracker = std::make_shared(); + st = iter->init(iter_opts); + ASSERT_TRUE(st.ok()); + auto tracker = std::make_shared(); MemPool pool(tracker.get()); std::unique_ptr cvb; @@ -219,9 +243,8 @@ void test_nullable_data(uint8_t* src_data, uint8_t* src_is_null, int num_rows, idx++; } } + delete iter; } - - delete iter; } } diff --git a/be/test/runtime/CMakeLists.txt b/be/test/runtime/CMakeLists.txt index 4f54556374..28eff33cac 100644 --- a/be/test/runtime/CMakeLists.txt +++ b/be/test/runtime/CMakeLists.txt @@ -63,4 +63,4 @@ ADD_BE_TEST(memory/chunk_allocator_test) ADD_BE_TEST(memory/system_allocator_test) ADD_BE_TEST(cache/partition_cache_test) ADD_BE_TEST(collection_value_test) -ADD_BE_TEST(minidump_test) +#ADD_BE_TEST(minidump_test) diff --git a/be/test/vec/aggregate_functions/agg_test.cpp b/be/test/vec/aggregate_functions/agg_test.cpp index 9bf9f8f42a..33e6c4301d 100644 --- a/be/test/vec/aggregate_functions/agg_test.cpp +++ b/be/test/vec/aggregate_functions/agg_test.cpp @@ -52,6 +52,9 @@ TEST(AggTest, basic_test) { } ASSERT_EQ(ans, *(int32_t*)place); agg_function->destroy(place); + if(place) { + free(place); + } } } // namespace doris::vectorized diff --git a/be/test/vec/exprs/vexpr_test.cpp b/be/test/vec/exprs/vexpr_test.cpp index d9a5e4d01a..c0d7bcc25a 100644 --- a/be/test/vec/exprs/vexpr_test.cpp +++ b/be/test/vec/exprs/vexpr_test.cpp @@ -79,6 +79,12 @@ TEST(TEST_VEXPR, ABSTEST) { auto block = row_batch.convert_to_vec_block(); int ts = -1; context->execute(&block, &ts); + + FunctionContext* fun_ct = context->fn_context(0); + context->close(&runtime_stat); + if(fun_ct) { + delete fun_ct; + } } TEST(TEST_VEXPR, ABSTEST2) { @@ -124,6 +130,12 @@ TEST(TEST_VEXPR, ABSTEST2) { auto block = row_batch.convert_to_vec_block(); int ts = -1; context->execute(&block, &ts); + + FunctionContext* fun_ct = context->fn_context(0); + context->close(&runtime_stat); + if(fun_ct) { + delete fun_ct; + } } namespace doris { diff --git a/be/test/vec/function/function_bitmap_test.cpp b/be/test/vec/function/function_bitmap_test.cpp index 7a2c3c8e6f..12d10c6ccd 100644 --- a/be/test/vec/function/function_bitmap_test.cpp +++ b/be/test/vec/function/function_bitmap_test.cpp @@ -35,6 +35,9 @@ TEST(function_bitmap_test, function_bitmap_min_test) { {{Null()}, Null()}}; check_function(func_name, input_types, data_set); + delete bitmap1; + delete bitmap2; + delete empty_bitmap; } TEST(function_bitmap_test, function_bitmap_max_test) { std::string func_name = "bitmap_max"; @@ -49,6 +52,9 @@ TEST(function_bitmap_test, function_bitmap_max_test) { {{Null()}, Null()}}; check_function(func_name, input_types, data_set); + delete bitmap1; + delete bitmap2; + delete empty_bitmap; } TEST(function_bitmap_test, function_bitmap_to_string_test) { @@ -64,6 +70,9 @@ TEST(function_bitmap_test, function_bitmap_to_string_test) { {{Null()}, Null()}}; check_function(func_name, input_types, data_set); + delete bitmap1; + delete bitmap2; + delete empty_bitmap; } TEST(function_bitmap_test, function_bitmap_and_count) { @@ -77,6 +86,9 @@ TEST(function_bitmap_test, function_bitmap_and_count) { {{bitmap1, bitmap2}, (int64_t)1}}; check_function(func_name, input_types, data_set); + delete bitmap1; + delete bitmap2; + delete empty_bitmap; } TEST(function_bitmap_test, function_bitmap_or_count) { @@ -91,6 +103,10 @@ TEST(function_bitmap_test, function_bitmap_or_count) { {{bitmap1, bitmap3}, (int64_t)3}}; check_function(func_name, input_types, data_set); + delete bitmap1; + delete bitmap2; + delete bitmap3; + delete empty_bitmap; } TEST(function_bitmap_test, function_bitmap_xor_count) { @@ -106,6 +122,11 @@ TEST(function_bitmap_test, function_bitmap_xor_count) { {{bitmap1, bitmap4}, (int64_t)2}}; check_function(func_name, input_types, data_set); + delete bitmap1; + delete bitmap2; + delete bitmap3; + delete bitmap4; + delete empty_bitmap; } } // namespace doris::vectorized diff --git a/run-be-ut.sh b/run-be-ut.sh index 4cd603fa29..66b4b67835 100755 --- a/run-be-ut.sh +++ b/run-be-ut.sh @@ -127,7 +127,7 @@ else fi cd ${CMAKE_BUILD_DIR} -${CMAKE_CMD} -DCMAKE_MAKE_PROGRAM="${BUILD_SYSTEM}" ../ -DWITH_MYSQL=OFF -DMAKE_TEST=ON -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \ +${CMAKE_CMD} -G "${GENERATOR}" ../ -DWITH_MYSQL=OFF -DMAKE_TEST=ON -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \ -DGLIBC_COMPATIBILITY=${GLIBC_COMPATIBILITY} ${CMAKE_USE_CCACHE} ${BUILD_SYSTEM} -j ${PARALLEL} $RUN_FILE