This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new bef1b55  [feature][fix](vec)(function) Fix multi args function call 
the DATETIME type not effective in DATE type and add the alias function (#8050)
bef1b55 is described below

commit bef1b55c1f86ec4e3efe9eee57497127d6d9648c
Author: HappenLee <[email protected]>
AuthorDate: Thu Feb 17 10:49:25 2022 +0800

    [feature][fix](vec)(function) Fix multi args function call the DATETIME 
type not effective in DATE type and add the alias function (#8050)
    
    1. Support some function alias of mod/fmod, adddate/add_data
    2. Support some function of multi args: week, yearweek
    3. Fix bug of multi args function call the DATETIME type not effective in 
DATE type
---
 be/src/olap/block_column_predicate.h               |  1 -
 be/src/vec/data_types/data_type_date.h             |  3 +-
 be/src/vec/data_types/data_type_date_time.cpp      |  4 ---
 be/src/vec/data_types/data_type_date_time.h        |  2 +-
 be/src/vec/functions/date_time_transforms.h        | 22 ++++++++++--
 .../function_date_or_datetime_computation.cpp      | 11 ++++++
 .../function_date_or_datetime_computation.h        | 32 ++++++++++++++++-
 .../function_date_or_datetime_to_something.h       |  7 ++++
 be/src/vec/functions/modulo.cpp                    |  1 +
 be/src/vec/functions/simple_function_factory.h     | 10 +++---
 be/src/vec/functions/time_of_function.cpp          |  3 +-
 be/src/vec/functions/to_time_function.cpp          |  2 +-
 be/test/vec/function/function_time_test.cpp        | 42 ++++++++++++++++++++++
 gensrc/script/doris_builtins_functions.py          | 20 +++++------
 14 files changed, 133 insertions(+), 27 deletions(-)

diff --git a/be/src/olap/block_column_predicate.h 
b/be/src/olap/block_column_predicate.h
index ef2a4ca..6f679db 100644
--- a/be/src/olap/block_column_predicate.h
+++ b/be/src/olap/block_column_predicate.h
@@ -29,7 +29,6 @@ namespace doris {
 // in the future
 // TODO: support do predicate on Bitmap and ZoneMap, So we can use index of 
column to do predicate on
 // page and segment
-
 class BlockColumnPredicate {
 public:
     BlockColumnPredicate() = default;
diff --git a/be/src/vec/data_types/data_type_date.h 
b/be/src/vec/data_types/data_type_date.h
index b5d148b..685363c 100644
--- a/be/src/vec/data_types/data_type_date.h
+++ b/be/src/vec/data_types/data_type_date.h
@@ -27,7 +27,8 @@ namespace doris::vectorized {
 class DataTypeDate final : public DataTypeNumberBase<Int64> {
 public:
     TypeIndex get_type_id() const override { return TypeIndex::Date; }
-    const char* get_family_name() const override { return "Date"; }
+    const char* get_family_name() const override { return "DateTime"; }
+    std::string do_get_name() const override {return "Date"; }
 
     bool can_be_used_as_version() const override { return true; }
     bool can_be_inside_nullable() const override { return true; }
diff --git a/be/src/vec/data_types/data_type_date_time.cpp 
b/be/src/vec/data_types/data_type_date_time.cpp
index ae6c94d..4b26194 100644
--- a/be/src/vec/data_types/data_type_date_time.cpp
+++ b/be/src/vec/data_types/data_type_date_time.cpp
@@ -28,10 +28,6 @@ namespace doris::vectorized {
 
 DataTypeDateTime::DataTypeDateTime() {}
 
-std::string DataTypeDateTime::do_get_name() const {
-    return "DateTime";
-}
-
 bool DataTypeDateTime::equals(const IDataType& rhs) const {
     return typeid(rhs) == typeid(*this);
 }
diff --git a/be/src/vec/data_types/data_type_date_time.h 
b/be/src/vec/data_types/data_type_date_time.h
index 6b6af04..a0b21f1 100644
--- a/be/src/vec/data_types/data_type_date_time.h
+++ b/be/src/vec/data_types/data_type_date_time.h
@@ -52,7 +52,7 @@ public:
     DataTypeDateTime();
 
     const char* get_family_name() const override { return "DateTime"; }
-    std::string do_get_name() const override;
+    std::string do_get_name() const override {return "DateTime"; }
     TypeIndex get_type_id() const override { return TypeIndex::DateTime; }
 
     bool can_be_used_as_version() const override { return true; }
diff --git a/be/src/vec/functions/date_time_transforms.h 
b/be/src/vec/functions/date_time_transforms.h
index eaab918..7640a27 100644
--- a/be/src/vec/functions/date_time_transforms.h
+++ b/be/src/vec/functions/date_time_transforms.h
@@ -27,8 +27,10 @@
 #include "vec/columns/column_vector.h"
 #include "vec/common/exception.h"
 #include "vec/core/types.h"
+#include "vec/data_types/data_type_date_time.h"
 #include "vec/functions/function_helpers.h"
 #include "vec/runtime/vdatetime_value.h"
+
 namespace doris::vectorized {
 
 #define TIME_FUNCTION_IMPL(CLASS, UNIT, FUNCTION)                     \
@@ -46,7 +48,6 @@ namespace doris::vectorized {
 TO_TIME_FUNCTION(ToYearImpl, year);
 TO_TIME_FUNCTION(ToQuarterImpl, quarter);
 TO_TIME_FUNCTION(ToMonthImpl, month);
-TO_TIME_FUNCTION(ToWeekImpl, week);
 TO_TIME_FUNCTION(ToDayImpl, day);
 TO_TIME_FUNCTION(ToHourImpl, hour);
 TO_TIME_FUNCTION(ToMinuteImpl, minute);
@@ -58,7 +59,24 @@ TIME_FUNCTION_IMPL(DayOfMonthImpl, dayofmonth, day());
 TIME_FUNCTION_IMPL(DayOfWeekImpl, dayofweek, day_of_week());
 // TODO: the method should be always not nullable
 TIME_FUNCTION_IMPL(ToDaysImpl, to_days, daynr());
-TIME_FUNCTION_IMPL(ToYearWeekImpl, yearweek, year_week(mysql_week_mode(0)));
+
+#define TIME_FUNCTION_ONE_ARG_IMPL(CLASS, UNIT, FUNCTION)             \
+    struct CLASS {                                                    \
+        static constexpr auto name = #UNIT;                           \
+        static inline auto execute(const Int64& t, bool& is_null) {   \
+            const auto& date_time_value = 
(doris::vectorized::VecDateTimeValue&)(t); \
+            is_null = !date_time_value.is_valid_date();               \
+            return date_time_value.FUNCTION;                          \
+        }                                                             \
+                                                                      \
+        static DataTypes get_variadic_argument_types() {              \
+             return {std::make_shared<DataTypeDateTime>()};           \
+        }                                                             \
+    }
+
+TIME_FUNCTION_ONE_ARG_IMPL(ToWeekOneArgImpl, week, week(mysql_week_mode(0)));
+TIME_FUNCTION_ONE_ARG_IMPL(ToYearWeekOneArgImpl, yearweek, 
year_week(mysql_week_mode(0)));
+
 struct ToDateImpl {
     static constexpr auto name = "to_date";
 
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 ecab986..3de24ab 100644
--- a/be/src/vec/functions/function_date_or_datetime_computation.cpp
+++ b/be/src/vec/functions/function_date_or_datetime_computation.cpp
@@ -49,6 +49,9 @@ using FunctionHoursDiff = 
FunctionDateOrDateTimeComputation<HoursDiffImpl>;
 using FunctionMinutesDiff = FunctionDateOrDateTimeComputation<MintueSDiffImpl>;
 using FunctionSecondsDiff = FunctionDateOrDateTimeComputation<SecondsDiffImpl>;
 
+using FunctionToYearWeekTwoArgs = 
FunctionDateOrDateTimeComputation<ToYearWeekTwoArgsImpl>;
+using FunctionToWeekTwoArgs = 
FunctionDateOrDateTimeComputation<ToWeekTwoArgsImpl>;
+
 struct NowFunctionName {
     static constexpr auto name = "now";
 };
@@ -103,6 +106,8 @@ void 
register_function_date_time_computation(SimpleFunctionFactory& factory) {
     factory.register_function<FunctionAddMinutes>();
     factory.register_function<FunctionAddHours>();
     factory.register_function<FunctionAddDays>();
+    factory.register_alias("days_add", "add_dates");
+    factory.register_alias("days_add", "date_add");
     factory.register_function<FunctionAddWeeks>();
     factory.register_function<FunctionAddMonths>();
     factory.register_function<FunctionAddYears>();
@@ -112,6 +117,8 @@ void 
register_function_date_time_computation(SimpleFunctionFactory& factory) {
     factory.register_function<FunctionSubMinutes>();
     factory.register_function<FunctionSubHours>();
     factory.register_function<FunctionSubDays>();
+    factory.register_alias("days_sub", "subdate");
+    factory.register_alias("days_sub", "date_sub");
     factory.register_function<FunctionSubMonths>();
     factory.register_function<FunctionSubYears>();
     factory.register_function<FunctionSubQuarters>();
@@ -126,6 +133,10 @@ void 
register_function_date_time_computation(SimpleFunctionFactory& factory) {
     factory.register_function<FunctionHoursDiff>();
     factory.register_function<FunctionMinutesDiff>();
     factory.register_function<FunctionSecondsDiff>();
+
+    factory.register_function<FunctionToYearWeekTwoArgs>();
+    factory.register_function<FunctionToWeekTwoArgs>();
+
     factory.register_function<FunctionNow>();
     factory.register_function<FunctionCurrentTimestamp>();
     factory.register_function<FunctionLocalTime>();
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 607039c..7fdffef 100644
--- a/be/src/vec/functions/function_date_or_datetime_computation.h
+++ b/be/src/vec/functions/function_date_or_datetime_computation.h
@@ -145,6 +145,24 @@ TIME_DIFF_FUNCTION_IMPL(HoursDiffImpl, hours_diff, HOUR);
 TIME_DIFF_FUNCTION_IMPL(MintueSDiffImpl, minutes_diff, MINUTE);
 TIME_DIFF_FUNCTION_IMPL(SecondsDiffImpl, seconds_diff, SECOND);
 
+#define TIME_FUNCTION_TWO_ARGS_IMPL(CLASS, NAME, FUNCTION)                     
              \
+    struct CLASS {                                                             
              \
+        using ReturnType = DataTypeInt32;                                      
              \
+        static constexpr auto name = #NAME;                                    
              \
+        static constexpr auto is_nullable = false;                             
              \
+        static inline int64_t execute(const Int64& t0, const Int32 mode, bool& 
is_null) {    \
+            const auto& ts0 = reinterpret_cast<const 
doris::vectorized::VecDateTimeValue&>(t0);           \
+            is_null = !ts0.is_valid_date();                                    
                \
+            return ts0.FUNCTION;                                               
                \
+        }                                                                      
                \
+        static DataTypes get_variadic_argument_types() {                       
                \
+            return {std::make_shared<DataTypeDateTime>(), 
std::make_shared<DataTypeInt32>()};  \
+        }                                                                      
                \
+    }
+
+TIME_FUNCTION_TWO_ARGS_IMPL(ToYearWeekTwoArgsImpl, yearweek, 
year_week(mysql_week_mode(mode)));
+TIME_FUNCTION_TWO_ARGS_IMPL(ToWeekTwoArgsImpl, week, 
week(mysql_week_mode(mode)));
+
 template <typename FromType, typename ToType, typename Transform>
 struct DateTimeOp {
     // use for (DateTime, DateTime) -> other_type
@@ -245,10 +263,14 @@ struct DateTimeAddIntervalImpl {
                     Op::vector_constant(sources->get_data(), 
col_to->get_data(),
                                         null_map->get_data(),
                                         
delta_const_column->get_field().get<Int128>());
-                } else {
+                } else if (delta_const_column->get_field().get_type() == 
Field::Types::Int64) {
                     Op::vector_constant(sources->get_data(), 
col_to->get_data(),
                                         null_map->get_data(),
                                         
delta_const_column->get_field().get<Int64>());
+                } else {
+                    Op::vector_constant(sources->get_data(), 
col_to->get_data(),
+                                        null_map->get_data(),
+                                        
delta_const_column->get_field().get<Int32>());
                 }
             } else {
                 if (const auto* delta_vec_column0 =
@@ -296,6 +318,9 @@ template <typename Transform>
 class FunctionDateOrDateTimeComputation : public IFunction {
 public:
     static constexpr auto name = Transform::name;
+    static constexpr bool has_variadic_argument =
+            
!std::is_void_v<decltype(has_variadic_argument_types(std::declval<Transform>()))>;
+
     static FunctionPtr create() { return 
std::make_shared<FunctionDateOrDateTimeComputation>(); }
 
     String get_name() const override { return name; }
@@ -303,6 +328,11 @@ public:
     bool is_variadic() const override { return true; }
     size_t get_number_of_arguments() const override { return 0; }
 
+    DataTypes get_variadic_argument_types_impl() const override {
+        if constexpr (has_variadic_argument) return 
Transform::get_variadic_argument_types();
+        return {};
+    }
+
     DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments) 
const override {
         if (arguments.size() != 2 && arguments.size() != 3) {
             LOG(FATAL) << fmt::format(
diff --git a/be/src/vec/functions/function_date_or_datetime_to_something.h 
b/be/src/vec/functions/function_date_or_datetime_to_something.h
index 31e87b1..efef7c3 100644
--- a/be/src/vec/functions/function_date_or_datetime_to_something.h
+++ b/be/src/vec/functions/function_date_or_datetime_to_something.h
@@ -30,12 +30,19 @@ template <typename ToDataType, typename Transform>
 class FunctionDateOrDateTimeToSomething : public IFunction {
 public:
     static constexpr auto name = Transform::name;
+    static constexpr bool has_variadic_argument =
+            
!std::is_void_v<decltype(has_variadic_argument_types(std::declval<Transform>()))>;
+
     static FunctionPtr create() { return 
std::make_shared<FunctionDateOrDateTimeToSomething>(); }
 
     String get_name() const override { return name; }
 
     bool is_variadic() const override { return true; }
     size_t get_number_of_arguments() const override { return 0; }
+    DataTypes get_variadic_argument_types_impl() const override {
+        if constexpr (has_variadic_argument) return 
Transform::get_variadic_argument_types();
+        return {};
+    }
 
     DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments) 
const override {
         if (arguments.size() == 1) {
diff --git a/be/src/vec/functions/modulo.cpp b/be/src/vec/functions/modulo.cpp
index 8fbfb8b..3bd15c3 100644
--- a/be/src/vec/functions/modulo.cpp
+++ b/be/src/vec/functions/modulo.cpp
@@ -183,6 +183,7 @@ using FunctionPModulo = 
FunctionBinaryArithmeticToNullType<PModuloImpl, NamePMod
 void register_function_modulo(SimpleFunctionFactory& factory) {
     factory.register_function<FunctionModulo>();
     factory.register_function<FunctionPModulo>();
+    factory.register_alias("mod", "fmod");
 }
 
 } // namespace doris::vectorized
diff --git a/be/src/vec/functions/simple_function_factory.h 
b/be/src/vec/functions/simple_function_factory.h
index 5b9f0fd..ab3968c 100644
--- a/be/src/vec/functions/simple_function_factory.h
+++ b/be/src/vec/functions/simple_function_factory.h
@@ -74,7 +74,7 @@ class SimpleFunctionFactory {
     using FunctionIsVariadic = phmap::flat_hash_set<std::string>;
 
 public:
-    void register_function(const std::string& name, Creator ptr) {
+    void register_function(const std::string& name, const Creator& ptr) {
         DataTypes types = ptr()->get_variadic_argument_types();
         // types.empty() means function is not variadic
         if (!types.empty()) {
@@ -83,8 +83,8 @@ public:
 
         std::string key_str = name;
         if (!types.empty()) {
-            for (auto type : types) {
-                key_str.append(type->get_name());
+            for (const auto& type : types) {
+                key_str.append(type->get_family_name());
             }
         }
         function_creators[key_str] = ptr;
@@ -116,8 +116,8 @@ public:
                 key_str.append(arg.type->is_nullable()
                                        ? reinterpret_cast<const 
DataTypeNullable*>(arg.type.get())
                                                  ->get_nested_type()
-                                                 ->get_name()
-                                       : arg.type->get_name());
+                                                 ->get_family_name()
+                                       : arg.type->get_family_name());
             }
         }
 
diff --git a/be/src/vec/functions/time_of_function.cpp 
b/be/src/vec/functions/time_of_function.cpp
index f6d17ae..d3a677a 100644
--- a/be/src/vec/functions/time_of_function.cpp
+++ b/be/src/vec/functions/time_of_function.cpp
@@ -26,7 +26,8 @@ using FunctionWeekOfYear = 
FunctionDateOrDateTimeToSomething<DataTypeInt32, Week
 using FunctionDayOfYear = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
DayOfYearImpl>;
 using FunctionDayOfWeek = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
DayOfWeekImpl>;
 using FunctionDayOfMonth = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
DayOfMonthImpl>;
-using FunctionYearWeek = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToYearWeekImpl>;
+using FunctionYearWeek = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToYearWeekOneArgImpl>;
+
 void register_function_time_of_fuction(SimpleFunctionFactory& factory) {
     factory.register_function<FunctionDayOfWeek>();
     factory.register_function<FunctionDayOfMonth>();
diff --git a/be/src/vec/functions/to_time_function.cpp 
b/be/src/vec/functions/to_time_function.cpp
index c6940cc..e73ab3f 100644
--- a/be/src/vec/functions/to_time_function.cpp
+++ b/be/src/vec/functions/to_time_function.cpp
@@ -27,7 +27,7 @@ using FunctionYear = 
FunctionDateOrDateTimeToSomething<DataTypeInt32, ToYearImpl
 using FunctionQuarter = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToQuarterImpl>;
 using FunctionMonth = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToMonthImpl>;
 using FunctionDay = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToDayImpl>;
-using FunctionWeek = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToWeekImpl>;
+using FunctionWeek = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToWeekOneArgImpl>;
 using FunctionHour = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToHourImpl>;
 using FunctionMinute = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToMinuteImpl>;
 using FunctionSecond = FunctionDateOrDateTimeToSomething<DataTypeInt32, 
ToSecondImpl>;
diff --git a/be/test/vec/function/function_time_test.cpp 
b/be/test/vec/function/function_time_test.cpp
index df6747a..31b2350 100644
--- a/be/test/vec/function/function_time_test.cpp
+++ b/be/test/vec/function/function_time_test.cpp
@@ -478,6 +478,48 @@ TEST(TimestampFunctionsTest, date_test) {
     check_function<DataTypeDate, true>(func_name, input_types, data_set);
 }
 
+TEST(TimestampFunctionsTest, week_test) {
+    std::string func_name = "week";
+
+    InputTypeSet input_types = {TypeIndex::DateTime};
+
+    DataSet data_set = {
+            {{std::string("1989-03-21 06:00:00")}, 12},
+            {{std::string("")}, Null()},
+            {{std::string("9999-12-12 00:00:00")}, 50}};
+
+    check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+    InputTypeSet new_input_types = {TypeIndex::Date};
+    DataSet new_data_set = {
+            {{std::string("1989-03-21")}, 12},
+            {{std::string("")}, Null()},
+            {{std::string("9999-12-12")}, 50}};
+
+    check_function<DataTypeInt32, true>(func_name, new_input_types, 
new_data_set);
+}
+
+TEST(TimestampFunctionsTest, yearweek_test) {
+    std::string func_name = "yearweek";
+
+    InputTypeSet input_types = {TypeIndex::DateTime};
+
+    DataSet data_set = {
+            {{std::string("1989-03-21 06:00:00")}, 198912},
+            {{std::string("")}, Null()},
+            {{std::string("9999-12-12 00:00:00")}, 999950}};
+
+    check_function<DataTypeInt32, true>(func_name, input_types, data_set);
+
+    InputTypeSet new_input_types = {TypeIndex::Date};
+    DataSet new_data_set = {
+            {{std::string("1989-03-21")}, 198912},
+            {{std::string("")}, Null()},
+            {{std::string("9999-12-12")}, 999950}};
+
+    check_function<DataTypeInt32, true>(func_name, new_input_types, 
new_data_set);
+}
+
 TEST(TimestampFunctionsTest, makedate_test) {
     std::string func_name = "makedate";
 
diff --git a/gensrc/script/doris_builtins_functions.py 
b/gensrc/script/doris_builtins_functions.py
index b82925f..5da020e 100755
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -206,13 +206,13 @@ visible_functions = [
         '', '', 'vec', 'ALWAYS_NULLABLE'],
     [['yearweek'], 'INT', ['DATETIME', 'INT'],
         
'_ZN5doris18TimestampFunctions9year_weekEPN9doris_udf15FunctionContextERKNS1_11DateTimeValERKNS1_6IntValE',
-        '', '', '', ''],
+        '', '', 'vec', 'ALWAYS_NULLABLE'],
     [['week'], 'INT', ['DATETIME'],
         
'_ZN5doris18TimestampFunctions4weekEPN9doris_udf15FunctionContextERKNS1_11DateTimeValE',
         '', '', 'vec', 'ALWAYS_NULLABLE'],
     [['week'], 'INT', ['DATETIME', 'INT'],
         
'_ZN5doris18TimestampFunctions4weekEPN9doris_udf15FunctionContextERKNS1_11DateTimeValERKNS1_6IntValE',
-        '', '', '', 'ALWAYS_NULLABLE'],
+        '', '', 'vec', 'ALWAYS_NULLABLE'],
     [['hour'], 'INT', ['DATETIME'],
         
'_ZN5doris18TimestampFunctions4hourEPN9doris_udf15FunctionContextERKNS1_11DateTimeValE',
         '', '', 'vec', 'ALWAYS_NULLABLE'],
@@ -643,28 +643,28 @@ visible_functions = [
             '15FunctionContextERKNS1_9DoubleValES6_', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['mod'], 'TINYINT', ['TINYINT', 'TINYINT'],
             '_ZN5doris9Operators29mod_tiny_int_val_tiny_int_valEPN9doris_udf'
-            '15FunctionContextERKNS1_10TinyIntValES6_', '', '', '', 
'ALWAYS_NULLABLE'],
+            '15FunctionContextERKNS1_10TinyIntValES6_', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['mod'], 'SMALLINT', ['SMALLINT', 'SMALLINT'],
             '_ZN5doris9Operators31mod_small_int_val_small_int_valEPN9doris_udf'
-            '15FunctionContextERKNS1_11SmallIntValES6_', '', '', '', 
'ALWAYS_NULLABLE'],
+            '15FunctionContextERKNS1_11SmallIntValES6_', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['mod'], 'INT', ['INT', 'INT'],
             '_ZN5doris9Operators19mod_int_val_int_valEPN9doris_udf'
-            '15FunctionContextERKNS1_6IntValES6_', '', '', '', 
'ALWAYS_NULLABLE'],
+            '15FunctionContextERKNS1_6IntValES6_', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['mod'], 'BIGINT', ['BIGINT', 'BIGINT'],
             '_ZN5doris9Operators27mod_big_int_val_big_int_valEPN9doris_udf'
-            '15FunctionContextERKNS1_9BigIntValES6_', '', '', '', 
'ALWAYS_NULLABLE'],
+            '15FunctionContextERKNS1_9BigIntValES6_', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['mod'], 'LARGEINT', ['LARGEINT', 'LARGEINT'],
             '_ZN5doris9Operators31mod_large_int_val_large_int_valEPN9doris_udf'
-            '15FunctionContextERKNS1_11LargeIntValES6_', '', '', '', 
'ALWAYS_NULLABLE'],
+            '15FunctionContextERKNS1_11LargeIntValES6_', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['mod'], 'DECIMALV2', ['DECIMALV2', 'DECIMALV2'],
             
'_ZN5doris18DecimalV2Operators31mod_decimalv2_val_decimalv2_valEPN9doris_udf'
-            '15FunctionContextERKNS1_12DecimalV2ValES6_', '', '', '', 
'ALWAYS_NULLABLE'],
+            '15FunctionContextERKNS1_12DecimalV2ValES6_', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['mod', 'fmod'], 'FLOAT', ['FLOAT', 'FLOAT'],
         
'_ZN5doris13MathFunctions10fmod_floatEPN9doris_udf15FunctionContextERKNS1_8FloatValES6_',
-        '', '', '', 'ALWAYS_NULLABLE'],
+        '', '', 'vec', 'ALWAYS_NULLABLE'],
     [['mod', 'fmod'], 'DOUBLE', ['DOUBLE', 'DOUBLE'],
         
'_ZN5doris13MathFunctions11fmod_doubleEPN9doris_udf15FunctionContextERKNS1_9DoubleValES6_',
-        '', '', '', 'ALWAYS_NULLABLE'],
+        '', '', 'vec', 'ALWAYS_NULLABLE'],
 
     [['positive'], 'BIGINT', ['BIGINT'],
             '_ZN5doris13MathFunctions15positive_bigintEPN9doris_udf'

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to