[Bug](function) fix now(int) use_default_implementation_for_nulls && fix dround signature (#16238)

This commit is contained in:
Pxl
2023-01-30 18:01:26 +08:00
committed by GitHub
parent c59a8cb15d
commit 322dc2a104
3 changed files with 8 additions and 3 deletions

View File

@ -89,7 +89,7 @@ using FunctionLocalTimestamp =
FunctionCurrentDateOrDateTime<CurrentDateTimeImpl<LocalTimestampFunctionName, false>>;
using FunctionNowWithPrecision =
FunctionCurrentDateOrDateTime<CurrentDateTimeImpl<NowFunctionName, true>>;
FunctionCurrentDateOrDateTime<CurrentDateTimeImpl<NowFunctionName, true>, false>;
using FunctionCurrentTimestampWithPrecision =
FunctionCurrentDateOrDateTime<CurrentDateTimeImpl<CurrentTimestampFunctionName, true>>;
using FunctionLocalTimeWithPrecision =

View File

@ -583,7 +583,7 @@ public:
}
};
template <typename FunctionImpl>
template <typename FunctionImpl, bool DefaultNullable = true>
class FunctionCurrentDateOrDateTime : public IFunction {
public:
static constexpr bool has_variadic_argument =
@ -596,6 +596,8 @@ public:
size_t get_number_of_arguments() const override { return 0; }
bool use_default_implementation_for_nulls() const override { return DefaultNullable; }
DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments) const override {
return std::make_shared<typename FunctionImpl::ReturnType>();
}
@ -603,7 +605,9 @@ public:
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();
if constexpr (has_variadic_argument) {
return FunctionImpl::get_variadic_argument_types();
}
return {};
}

View File

@ -431,6 +431,7 @@ void register_function_math(SimpleFunctionFactory& factory) {
REGISTER_ROUND_FUNCTIONS(DecimalRoundTwoImpl)
REGISTER_ROUND_FUNCTIONS(DoubleRoundOneImpl)
REGISTER_ROUND_FUNCTIONS(DoubleRoundTwoImpl)
factory.register_alias("round", "dround");
factory.register_function<FunctionAcos>();
factory.register_function<FunctionAsin>();
factory.register_function<FunctionAtan>();