HappenLee commented on code in PR #23058: URL: https://github.com/apache/doris/pull/23058#discussion_r1297955365
########## be/src/vec/functions/function_datetime_floor_ceil.cpp: ########## @@ -150,51 +150,67 @@ class FunctionDateTimeFloorCeil : public IFunction { null_map->get_data().resize_fill(input_rows_count, false); if constexpr (ArgNum == 1) { - Impl::template vector<NativeType>(sources->get_data(), col_to->get_data(), - null_map->get_data()); + Impl::template vector<NativeType>(sources->get_data(), col_to->get_data()); } else if constexpr (ArgNum == 2) { const IColumn& delta_column = *block.get_by_position(arguments[1]).column; if (const auto* delta_const_column = typeid_cast<const ColumnConst*>(&delta_column)) { if (block.get_by_position(arguments[1]).type->get_type_id() != TypeIndex::Int32) { + // time_round(datetime, const(origin)) Impl::template vector_constant<NativeType>( sources->get_data(), delta_const_column->get_field().get<NativeType>(), - col_to->get_data(), null_map->get_data()); + col_to->get_data()); } else { + // time_round(datetime,const(period)) Impl::template vector_constant_delta<NativeType, DeltaValueType>( sources->get_data(), delta_const_column->get_field().get<Int32>(), col_to->get_data(), null_map->get_data()); } } else { if (const auto* delta_vec_column0 = check_and_get_column<ColumnVector<NativeType>>(delta_column)) { + // time_round(datetime, origin) Impl::vector_vector(sources->get_data(), delta_vec_column0->get_data(), - col_to->get_data(), null_map->get_data()); + col_to->get_data()); } else { const auto* delta_vec_column1 = check_and_get_column<ColumnVector<DeltaValueType>>(delta_column); DCHECK(delta_vec_column1 != nullptr); + // time_round(datetime, period) Impl::vector_vector(sources->get_data(), delta_vec_column1->get_data(), col_to->get_data(), null_map->get_data()); } } } else { - auto arg1_column_ptr = block.get_by_position(arguments[1]) - .column->convert_to_full_column_if_const(); - auto arg2_column_ptr = block.get_by_position(arguments[2]) - .column->convert_to_full_column_if_const(); - - const auto arg1_column = - check_and_get_column<ColumnVector<DeltaValueType>>(*arg1_column_ptr); - const auto arg2_column = - check_and_get_column<ColumnVector<NativeType>>(*arg2_column_ptr); - DCHECK(arg1_column != nullptr); - DCHECK(arg2_column != nullptr); - Impl::template vector_vector<NativeType, DeltaValueType>( - sources->get_data(), arg1_column->get_data(), arg2_column->get_data(), - col_to->get_data(), null_map->get_data()); + ColumnPtr arg1_col, arg2_col; + bool arg1_const, arg2_const; + std::tie(arg1_col, arg1_const) = + unpack_if_const(block.get_by_position(arguments[1]).column); + std::tie(arg2_col, arg2_const) = + unpack_if_const(block.get_by_position(arguments[2]).column); + if (arg1_const && arg2_const) { + Field arg1, arg2; + arg1_col->get(0, arg1); + arg2_col->get(0, arg2); + // time_round(datetime,const(period) , const(origin)) + Impl::template vector_const_const<NativeType, DeltaValueType>( + sources->get_data(), arg1.get<Int32>(), arg2.get<NativeType>(), + col_to->get_data(), null_map->get_data()); + + } else { Review Comment: must dispose the 1 const 1 not ? ########## be/src/vec/functions/function_datetime_floor_ceil.cpp: ########## @@ -150,51 +150,67 @@ class FunctionDateTimeFloorCeil : public IFunction { null_map->get_data().resize_fill(input_rows_count, false); if constexpr (ArgNum == 1) { - Impl::template vector<NativeType>(sources->get_data(), col_to->get_data(), - null_map->get_data()); + Impl::template vector<NativeType>(sources->get_data(), col_to->get_data()); } else if constexpr (ArgNum == 2) { const IColumn& delta_column = *block.get_by_position(arguments[1]).column; if (const auto* delta_const_column = typeid_cast<const ColumnConst*>(&delta_column)) { if (block.get_by_position(arguments[1]).type->get_type_id() != TypeIndex::Int32) { + // time_round(datetime, const(origin)) Impl::template vector_constant<NativeType>( sources->get_data(), delta_const_column->get_field().get<NativeType>(), - col_to->get_data(), null_map->get_data()); + col_to->get_data()); } else { + // time_round(datetime,const(period)) Impl::template vector_constant_delta<NativeType, DeltaValueType>( sources->get_data(), delta_const_column->get_field().get<Int32>(), col_to->get_data(), null_map->get_data()); } } else { if (const auto* delta_vec_column0 = check_and_get_column<ColumnVector<NativeType>>(delta_column)) { + // time_round(datetime, origin) Impl::vector_vector(sources->get_data(), delta_vec_column0->get_data(), - col_to->get_data(), null_map->get_data()); + col_to->get_data()); } else { const auto* delta_vec_column1 = check_and_get_column<ColumnVector<DeltaValueType>>(delta_column); DCHECK(delta_vec_column1 != nullptr); + // time_round(datetime, period) Impl::vector_vector(sources->get_data(), delta_vec_column1->get_data(), col_to->get_data(), null_map->get_data()); } } } else { - auto arg1_column_ptr = block.get_by_position(arguments[1]) - .column->convert_to_full_column_if_const(); - auto arg2_column_ptr = block.get_by_position(arguments[2]) - .column->convert_to_full_column_if_const(); - - const auto arg1_column = - check_and_get_column<ColumnVector<DeltaValueType>>(*arg1_column_ptr); - const auto arg2_column = - check_and_get_column<ColumnVector<NativeType>>(*arg2_column_ptr); - DCHECK(arg1_column != nullptr); - DCHECK(arg2_column != nullptr); - Impl::template vector_vector<NativeType, DeltaValueType>( - sources->get_data(), arg1_column->get_data(), arg2_column->get_data(), - col_to->get_data(), null_map->get_data()); + ColumnPtr arg1_col, arg2_col; + bool arg1_const, arg2_const; + std::tie(arg1_col, arg1_const) = + unpack_if_const(block.get_by_position(arguments[1]).column); + std::tie(arg2_col, arg2_const) = + unpack_if_const(block.get_by_position(arguments[2]).column); + if (arg1_const && arg2_const) { + Field arg1, arg2; + arg1_col->get(0, arg1); + arg2_col->get(0, arg2); + // time_round(datetime,const(period) , const(origin)) + Impl::template vector_const_const<NativeType, DeltaValueType>( + sources->get_data(), arg1.get<Int32>(), arg2.get<NativeType>(), + col_to->get_data(), null_map->get_data()); + + } else { Review Comment: must dispose the 1 const 1 not ? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org