From 49eae844db8955e5713b59eb470ae4e3a3d33324 Mon Sep 17 00:00:00 2001 From: zhaochangle Date: Tue, 26 Mar 2024 06:28:39 +0800 Subject: [PATCH] 1 --- be/src/agent/be_exec_version_manager.h | 1 + .../function_date_or_datetime_computation.cpp | 5 +++ .../function_date_or_datetime_computation.h | 35 +++++++++++++++++++ .../vec/functions/simple_function_factory.h | 2 +- 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/be/src/agent/be_exec_version_manager.h b/be/src/agent/be_exec_version_manager.h index 470d78ee981934..32a520cc4bd223 100644 --- a/be/src/agent/be_exec_version_manager.h +++ b/be/src/agent/be_exec_version_manager.h @@ -69,6 +69,7 @@ class BeExecVersionManager { * e. change shuffle serialize/deserialize way * f. shrink some function's nullable mode. * g. do local merge of remote runtime filter + * h. "now": ALWAYS_NOT_NULLABLE -> DEPEND_ON_ARGUMENTS */ constexpr inline int BeExecVersionManager::max_be_exec_version = 4; constexpr inline int BeExecVersionManager::min_be_exec_version = 0; diff --git a/be/src/vec/functions/function_date_or_datetime_computation.cpp b/be/src/vec/functions/function_date_or_datetime_computation.cpp index 8fdfad8646592e..6ec5db65889866 100644 --- a/be/src/vec/functions/function_date_or_datetime_computation.cpp +++ b/be/src/vec/functions/function_date_or_datetime_computation.cpp @@ -97,6 +97,9 @@ using FunctionLocalTimeWithPrecision = using FunctionLocalTimestampWithPrecision = FunctionCurrentDateOrDateTime>; +using FunctionNowWithPrecisionOld = + FunctionCurrentDateOrDateTimeOld>; + struct CurDateFunctionName { static constexpr auto name = "curdate"; }; @@ -182,6 +185,8 @@ void register_function_date_time_computation(SimpleFunctionFactory& factory) { factory.register_function(); factory.register_function(); + factory.register_alternative_function(); + // alias factory.register_alias("days_add", "date_add"); factory.register_alias("days_add", "adddate"); diff --git a/be/src/vec/functions/function_date_or_datetime_computation.h b/be/src/vec/functions/function_date_or_datetime_computation.h index 383fb10e34ad1d..dc119821beb988 100644 --- a/be/src/vec/functions/function_date_or_datetime_computation.h +++ b/be/src/vec/functions/function_date_or_datetime_computation.h @@ -993,6 +993,41 @@ struct CurrentDateTimeImpl { } }; +template +class FunctionCurrentDateOrDateTimeOld : public IFunction { +public: + static constexpr bool has_variadic_argument = + !std::is_void_v()))>; + + static constexpr auto name = FunctionImpl::name; + static FunctionPtr create() { return std::make_shared(); } + + String get_name() const override { return name; } + + size_t get_number_of_arguments() const override { return 0; } + + // the only diff in old version is it's ALWAYS_NOT_NULLABLE + bool use_default_implementation_for_nulls() const override { return false; } + + DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments) const override { + return std::make_shared(); + } + + bool is_variadic() const override { return true; } + + DataTypes get_variadic_argument_types_impl() const override { + if constexpr (has_variadic_argument) { + return FunctionImpl::get_variadic_argument_types(); + } + return {}; + } + + Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments, + size_t result, size_t input_rows_count) const override { + return FunctionImpl::execute(context, block, arguments, result, input_rows_count); + } +}; + template struct CurrentDateImpl { using ReturnType = DateType; diff --git a/be/src/vec/functions/simple_function_factory.h b/be/src/vec/functions/simple_function_factory.h index e71bab4b5823ee..a18b0beb8dbe2b 100644 --- a/be/src/vec/functions/simple_function_factory.h +++ b/be/src/vec/functions/simple_function_factory.h @@ -151,7 +151,7 @@ class SimpleFunctionFactory { /// @TEMPORARY: for be_exec_version=3 template void register_alternative_function() { - static std::string suffix {"_old_for_version_before_3_0"}; + static std::string suffix {"_old_for_version_before_4_0"}; function_to_replace[Function::name] = Function::name + suffix; register_function(Function::name + suffix, &createDefaultFunction); }