From a14c1ae6e6bd33ace8bda47b7a8acb8caf583800 Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Wed, 16 Oct 2024 15:40:32 +0800 Subject: [PATCH 1/2] [bug](function)fix date_floor function return wrong result --- be/src/vec/functions/function_datetime_floor_ceil.cpp | 9 ++++++--- regression-test/data/correctness_p0/test_time_round.out | 5 +++++ .../suites/correctness_p0/test_time_round.groovy | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/be/src/vec/functions/function_datetime_floor_ceil.cpp b/be/src/vec/functions/function_datetime_floor_ceil.cpp index 4801c4aa53bb4c..e73417a900f5ec 100644 --- a/be/src/vec/functions/function_datetime_floor_ceil.cpp +++ b/be/src/vec/functions/function_datetime_floor_ceil.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -165,6 +166,8 @@ class FunctionDateTimeFloorCeil : public IFunction { col_to->get_data(), null_map->get_data()); } else { // time_round(datetime,const(period)) + LOG(INFO) << "asd time_round(datetime,const(period)) " << input_rows_count + << " " << delta_const_column->get_field().get(); Impl::template vector_constant_delta( sources->get_data(), delta_const_column->get_field().get(), col_to->get_data(), null_map->get_data()); @@ -293,7 +296,7 @@ struct FloorCeilImpl { PaddedPODArray& res, NullMap& null_map) { // time_round(datetime,const(period)) if (period < 1) { - null_map.resize_fill(dates.size(), true); + memset(null_map.data(), 1, sizeof(UInt8) * dates.size()); return; } for (int i = 0; i < dates.size(); ++i) { @@ -337,7 +340,7 @@ struct FloorCeilImpl { NativeType origin_date, PaddedPODArray& res, NullMap& null_map) { if (period < 1) { - null_map.resize_fill(dates.size(), true); + memset(null_map.data(), 1, sizeof(UInt8) * dates.size()); return; } switch (period) { @@ -424,7 +427,7 @@ struct FloorCeilImpl { const PaddedPODArray& origin_dates, PaddedPODArray& res, NullMap& null_map) { if (period < 1) { - null_map.resize_fill(dates.size(), true); + memset(null_map.data(), 1, sizeof(UInt8) * dates.size()); return; } for (int i = 0; i < dates.size(); ++i) { diff --git a/regression-test/data/correctness_p0/test_time_round.out b/regression-test/data/correctness_p0/test_time_round.out index face63a18a9168..41e268482ed730 100644 --- a/regression-test/data/correctness_p0/test_time_round.out +++ b/regression-test/data/correctness_p0/test_time_round.out @@ -123,3 +123,8 @@ 2020-02-02T11:45:14 2020-02-02T11:45:14 +-- !select_1 -- +2020-02-02T13:09:20 \N +2020-02-02T13:09:20 \N +2020-02-02T13:09:20 \N + diff --git a/regression-test/suites/correctness_p0/test_time_round.groovy b/regression-test/suites/correctness_p0/test_time_round.groovy index c042e0dd935888..4ab6a6f6473058 100644 --- a/regression-test/suites/correctness_p0/test_time_round.groovy +++ b/regression-test/suites/correctness_p0/test_time_round.groovy @@ -89,4 +89,5 @@ suite("test_time_round") { qt_select "select hour_floor(dt,2,o) from dbround order by id;" qt_select "select hour_floor(dt,p,'1919-08-10 11:45:14') from dbround order by id;" qt_select "select hour_floor(dt,2,'1919-08-10 11:45:14') from dbround order by id;" + qt_select_1 "select dt,hour_floor(dt,0) from dbround order by id;" } From 13fe6046686c488e5ce48e4f5d40c33d6d04c364 Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Wed, 16 Oct 2024 15:43:24 +0800 Subject: [PATCH 2/2] update --- be/src/vec/functions/function_datetime_floor_ceil.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/be/src/vec/functions/function_datetime_floor_ceil.cpp b/be/src/vec/functions/function_datetime_floor_ceil.cpp index e73417a900f5ec..bf74deaed1daeb 100644 --- a/be/src/vec/functions/function_datetime_floor_ceil.cpp +++ b/be/src/vec/functions/function_datetime_floor_ceil.cpp @@ -166,8 +166,6 @@ class FunctionDateTimeFloorCeil : public IFunction { col_to->get_data(), null_map->get_data()); } else { // time_round(datetime,const(period)) - LOG(INFO) << "asd time_round(datetime,const(period)) " << input_rows_count - << " " << delta_const_column->get_field().get(); Impl::template vector_constant_delta( sources->get_data(), delta_const_column->get_field().get(), col_to->get_data(), null_map->get_data());