You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by en...@apache.org on 2024/09/13 10:29:10 UTC

(doris) branch master updated: [Refactor](Nereids) refactor fold constant framework on fe (#40772)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ffa96082221 [Refactor](Nereids) refactor fold constant framework on fe (#40772)
ffa96082221 is described below

commit ffa96082221834089577bbc05e171e74b3f2b2b1
Author: LiBinfeng <46...@users.noreply.github.com>
AuthorDate: Fri Sep 13 18:29:01 2024 +0800

    [Refactor](Nereids) refactor fold constant framework on fe (#40772)
    
    change matching of function by notation to matching by inputs datatype
---
 .../nereids/trees/expressions/ExecFunction.java    |  14 -
 .../trees/expressions/ExpressionEvaluator.java     | 205 +++++----------
 .../functions/executable/DateTimeAcquire.java      |  24 +-
 .../functions/executable/DateTimeArithmetic.java   | 122 ++++-----
 .../executable/DateTimeExtractAndTransform.java    | 276 ++++++++++----------
 .../functions/executable/ExecutableFunctions.java  |  26 +-
 .../functions/executable/NumericArithmetic.java    | 174 ++++++-------
 .../functions/executable/StringArithmetic.java     | 108 ++++----
 .../functions/executable/TimeRoundSeries.java      | 288 ++++++++++-----------
 9 files changed, 573 insertions(+), 664 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExecFunction.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExecFunction.java
index 126449f4b04..a5c656d5ffa 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExecFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExecFunction.java
@@ -34,18 +34,4 @@ public @interface ExecFunction {
      */
     String name();
 
-    /**
-     * args type
-     */
-    String[] argTypes();
-
-    /**
-     * return type
-     */
-    String returnType();
-
-    /**
-     * hasVarArgsc
-     */
-    boolean varArgs() default false;
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExpressionEvaluator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExpressionEvaluator.java
index f3d471b2abe..0c612e42dda 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExpressionEvaluator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ExpressionEvaluator.java
@@ -18,8 +18,6 @@
 package org.apache.doris.nereids.trees.expressions;
 
 import org.apache.doris.catalog.Env;
-import org.apache.doris.catalog.Type;
-import org.apache.doris.common.AnalysisException;
 import org.apache.doris.nereids.trees.expressions.functions.BoundFunction;
 import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
 import org.apache.doris.nereids.trees.expressions.functions.executable.DateTimeAcquire;
@@ -30,10 +28,10 @@ import org.apache.doris.nereids.trees.expressions.functions.executable.NumericAr
 import org.apache.doris.nereids.trees.expressions.functions.executable.StringArithmetic;
 import org.apache.doris.nereids.trees.expressions.functions.executable.TimeRoundSeries;
 import org.apache.doris.nereids.trees.expressions.literal.DateLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.Literal;
 import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
 import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.nereids.util.TypeCoercionUtils;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMultimap;
@@ -41,7 +39,6 @@ import com.google.common.collect.ImmutableMultimap;
 import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -52,7 +49,7 @@ public enum ExpressionEvaluator {
 
     INSTANCE;
 
-    private ImmutableMultimap<String, FunctionInvoker> functions;
+    private ImmutableMultimap<String, Method> functions;
 
     ExpressionEvaluator() {
         registerFunctions();
@@ -68,23 +65,16 @@ public enum ExpressionEvaluator {
         }
 
         String fnName = null;
-        DataType[] args = null;
         DataType ret = expression.getDataType();
         if (expression instanceof BinaryArithmetic) {
             BinaryArithmetic arithmetic = (BinaryArithmetic) expression;
             fnName = arithmetic.getLegacyOperator().getName();
-            args = new DataType[]{arithmetic.left().getDataType(), arithmetic.right().getDataType()};
         } else if (expression instanceof TimestampArithmetic) {
             TimestampArithmetic arithmetic = (TimestampArithmetic) expression;
             fnName = arithmetic.getFuncName();
-            args = new DataType[]{arithmetic.left().getDataType(), arithmetic.right().getDataType()};
         } else if (expression instanceof BoundFunction) {
             BoundFunction function = ((BoundFunction) expression);
             fnName = function.getName();
-            args = new DataType[function.arity()];
-            for (int i = 0; i < function.children().size(); i++) {
-                args[i] = function.child(i).getDataType();
-            }
         }
 
         if ((Env.getCurrentEnv().isNullResultWithOneNullParamFunction(fnName))) {
@@ -95,22 +85,26 @@ public enum ExpressionEvaluator {
             }
         }
 
-        return invoke(expression, fnName, args);
+        return invoke(expression, fnName);
     }
 
-    private Expression invoke(Expression expression, String fnName, DataType[] args) {
-        FunctionSignature signature = new FunctionSignature(fnName, args, null, false);
-        FunctionInvoker invoker = getFunction(signature);
-        if (invoker != null) {
+    private Expression invoke(Expression expression, String fnName) {
+        Method method = getFunction(fnName, expression.children());
+        if (method != null) {
             try {
-                if (invoker.getSignature().hasVarArgs()) {
-                    int fixedArgsSize = invoker.getSignature().getArgTypes().length - 1;
-                    int totalSize = expression.children().size();
-                    Class<?>[] parameterTypes = invoker.getMethod().getParameterTypes();
-                    Class<?> parameterType = parameterTypes[parameterTypes.length - 1];
+                int varSize = method.getParameterTypes().length;
+                if (varSize == 0) {
+                    return (Literal) method.invoke(null, expression.children().toArray());
+                }
+                boolean hasVarArgs = method.getParameterTypes()[varSize - 1].isArray();
+                if (hasVarArgs) {
+                    int fixedArgsSize = varSize - 1;
+                    int inputSize = expression.children().size();
+                    Class<?>[] parameterTypes = method.getParameterTypes();
+                    Class<?> parameterType = parameterTypes[varSize - 1];
                     Class<?> componentType = parameterType.getComponentType();
-                    Object varArgs = Array.newInstance(componentType, totalSize - fixedArgsSize);
-                    for (int i = fixedArgsSize; i < totalSize; i++) {
+                    Object varArgs = Array.newInstance(componentType, inputSize - fixedArgsSize);
+                    for (int i = fixedArgsSize; i < inputSize; i++) {
                         if (!(expression.children().get(i) instanceof NullLiteral)) {
                             Array.set(varArgs, i - fixedArgsSize, expression.children().get(i));
                         }
@@ -121,59 +115,70 @@ public enum ExpressionEvaluator {
                     }
                     objects[fixedArgsSize] = varArgs;
 
-                    return invoker.invokeVars(objects);
+                    return (Literal) method.invoke(null, varArgs);
                 }
-                return invoker.invoke(expression.children());
-            } catch (AnalysisException e) {
+                return (Literal) method.invoke(null, expression.children().toArray());
+            } catch (InvocationTargetException | IllegalAccessException | IllegalArgumentException e) {
                 return expression;
             }
         }
         return expression;
     }
 
-    private FunctionInvoker getFunction(FunctionSignature signature) {
-        Collection<FunctionInvoker> functionInvokers = functions.get(signature.getName());
-        for (FunctionInvoker candidate : functionInvokers) {
-            DataType[] candidateTypes = candidate.getSignature().getArgTypes();
-            DataType[] expectedTypes = signature.getArgTypes();
+    private boolean canDownCastTo(Class<?> expect, Class<?> input) {
+        if (DateLiteral.class.isAssignableFrom(expect)
+                || DateTimeLiteral.class.isAssignableFrom(expect)) {
+            return expect.equals(input);
+        }
+        return expect.isAssignableFrom(input);
+    }
 
-            if (candidate.getSignature().hasVarArgs()) {
-                if (candidateTypes.length > expectedTypes.length) {
+    private Method getFunction(String fnName, List<Expression> inputs) {
+        Collection<Method> expectMethods = functions.get(fnName);
+        for (Method expect : expectMethods) {
+            boolean match = true;
+            int varSize = expect.getParameterTypes().length;
+            if (varSize == 0) {
+                if (inputs.size() == 0) {
+                    return expect;
+                } else {
                     continue;
                 }
-                boolean match = true;
-                for (int i = 0; i < candidateTypes.length - 1; i++) {
-                    if (!(expectedTypes[i].toCatalogDataType().matchesType(candidateTypes[i].toCatalogDataType()))) {
+            }
+            boolean hasVarArgs = expect.getParameterTypes()[varSize - 1].isArray();
+            if (hasVarArgs) {
+                int fixedArgsSize = varSize - 1;
+                int inputSize = inputs.size();
+                if (inputSize <= fixedArgsSize) {
+                    continue;
+                }
+                Class<?>[] expectVarTypes = expect.getParameterTypes();
+                for (int i = 0; i < fixedArgsSize; i++) {
+                    if (!canDownCastTo(expectVarTypes[i], inputs.get(i).getClass())) {
                         match = false;
-                        break;
                     }
                 }
-                Type varType = candidateTypes[candidateTypes.length - 1].toCatalogDataType();
-                for (int i = candidateTypes.length - 1; i < expectedTypes.length; i++) {
-                    if (!(expectedTypes[i].toCatalogDataType().matchesType(varType))) {
+                Class<?> varArgsType = expectVarTypes[varSize - 1];
+                Class<?> varArgType = varArgsType.getComponentType();
+                for (int i = fixedArgsSize; i < inputSize; i++) {
+                    if (!canDownCastTo(varArgType, inputs.get(i).getClass())) {
                         match = false;
-                        break;
                     }
                 }
-                if (match) {
-                    return candidate;
-                } else {
+            } else {
+                int inputSize = inputs.size();
+                if (inputSize != varSize) {
                     continue;
                 }
-            }
-            if (candidateTypes.length != expectedTypes.length) {
-                continue;
-            }
-
-            boolean match = true;
-            for (int i = 0; i < candidateTypes.length; i++) {
-                if (!(expectedTypes[i].toCatalogDataType().matchesType(candidateTypes[i].toCatalogDataType()))) {
-                    match = false;
-                    break;
+                Class<?>[] expectVarTypes = expect.getParameterTypes();
+                for (int i = 0; i < varSize; i++) {
+                    if (!canDownCastTo(expectVarTypes[i], inputs.get(i).getClass())) {
+                        match = false;
+                    }
                 }
             }
             if (match) {
-                return candidate;
+                return expect;
             }
         }
         return null;
@@ -183,7 +188,7 @@ public enum ExpressionEvaluator {
         if (functions != null) {
             return;
         }
-        ImmutableMultimap.Builder<String, FunctionInvoker> mapBuilder = new ImmutableMultimap.Builder<>();
+        ImmutableMultimap.Builder<String, Method> mapBuilder = new ImmutableMultimap.Builder<>();
         List<Class<?>> classes = ImmutableList.of(
                 DateTimeAcquire.class,
                 DateTimeExtractAndTransform.class,
@@ -208,92 +213,10 @@ public enum ExpressionEvaluator {
         this.functions = mapBuilder.build();
     }
 
-    private void registerFEFunction(ImmutableMultimap.Builder<String, FunctionInvoker> mapBuilder,
+    private void registerFEFunction(ImmutableMultimap.Builder<String, Method> mapBuilder,
             Method method, ExecFunction annotation) {
         if (annotation != null) {
-            String name = annotation.name();
-            DataType returnType = DataType.convertFromString(annotation.returnType());
-            List<DataType> argTypes = new ArrayList<>();
-            for (String type : annotation.argTypes()) {
-                argTypes.add(TypeCoercionUtils.replaceDecimalV3WithWildcard(DataType.convertFromString(type)));
-            }
-            DataType[] array = new DataType[argTypes.size()];
-            for (int i = 0; i < argTypes.size(); i++) {
-                array[i] = argTypes.get(i);
-            }
-            FunctionSignature signature = new FunctionSignature(name, array, returnType, annotation.varArgs());
-            mapBuilder.put(name, new FunctionInvoker(method, signature));
-        }
-    }
-
-    /**
-     * function invoker.
-     */
-    public static class FunctionInvoker {
-        private final Method method;
-        private final FunctionSignature signature;
-
-        public FunctionInvoker(Method method, FunctionSignature signature) {
-            this.method = method;
-            this.signature = signature;
-        }
-
-        public Method getMethod() {
-            return method;
-        }
-
-        public FunctionSignature getSignature() {
-            return signature;
-        }
-
-        public Literal invoke(List<Expression> args) throws AnalysisException {
-            try {
-                return (Literal) method.invoke(null, args.toArray());
-            } catch (InvocationTargetException | IllegalAccessException | IllegalArgumentException e) {
-                throw new AnalysisException(e.getLocalizedMessage());
-            }
-        }
-
-        public Literal invokeVars(Object[] args) throws AnalysisException {
-            try {
-                return (Literal) method.invoke(null, args);
-            } catch (InvocationTargetException | IllegalAccessException | IllegalArgumentException e) {
-                throw new AnalysisException(e.getLocalizedMessage());
-            }
+            mapBuilder.put(annotation.name(), method);
         }
     }
-
-    /**
-     * function signature.
-     */
-    public static class FunctionSignature {
-        private final String name;
-        private final DataType[] argTypes;
-        private final DataType returnType;
-        private final boolean hasVarArgs;
-
-        public FunctionSignature(String name, DataType[] argTypes, DataType returnType, boolean hasVarArgs) {
-            this.name = name;
-            this.argTypes = argTypes;
-            this.returnType = returnType;
-            this.hasVarArgs = hasVarArgs;
-        }
-
-        public DataType[] getArgTypes() {
-            return argTypes;
-        }
-
-        public DataType getReturnType() {
-            return returnType;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public boolean hasVarArgs() {
-            return hasVarArgs;
-        }
-    }
-
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeAcquire.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeAcquire.java
index 17403bd83c0..98d2ebfaf76 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeAcquire.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeAcquire.java
@@ -36,12 +36,12 @@ public class DateTimeAcquire {
     /**
      * date acquire function: now
      */
-    @ExecFunction(name = "now", argTypes = {}, returnType = "DATETIME")
+    @ExecFunction(name = "now")
     public static Expression now() {
         return DateTimeLiteral.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     }
 
-    @ExecFunction(name = "now", argTypes = {"INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "now")
     public static Expression now(IntegerLiteral precision) {
         return DateTimeV2Literal.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()),
                 precision.getValue());
@@ -50,12 +50,12 @@ public class DateTimeAcquire {
     /**
      * date acquire function: current_timestamp
      */
-    @ExecFunction(name = "current_timestamp", argTypes = {}, returnType = "DATETIME")
+    @ExecFunction(name = "current_timestamp")
     public static Expression currentTimestamp() {
         return DateTimeLiteral.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     }
 
-    @ExecFunction(name = "current_timestamp", argTypes = {"INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "current_timestamp")
     public static Expression currentTimestamp(IntegerLiteral precision) {
         return DateTimeV2Literal.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()), precision.getValue());
     }
@@ -63,12 +63,12 @@ public class DateTimeAcquire {
     /**
      * date acquire function: localtime/localtimestamp
      */
-    @ExecFunction(name = "localtime", argTypes = {}, returnType = "DATETIME")
+    @ExecFunction(name = "localtime")
     public static Expression localTime() {
         return DateTimeLiteral.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     }
 
-    @ExecFunction(name = "localtimestamp", argTypes = {}, returnType = "DATETIME")
+    @ExecFunction(name = "localtimestamp")
     public static Expression localTimestamp() {
         return DateTimeV2Literal.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     }
@@ -76,12 +76,12 @@ public class DateTimeAcquire {
     /**
      * date acquire function: current_date
      */
-    @ExecFunction(name = "curdate", argTypes = {}, returnType = "DATE")
+    @ExecFunction(name = "curdate")
     public static Expression curDate() {
         return DateLiteral.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     }
 
-    @ExecFunction(name = "current_date", argTypes = {}, returnType = "DATE")
+    @ExecFunction(name = "current_date")
     public static Expression currentDate() {
         return DateLiteral.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     }
@@ -90,12 +90,12 @@ public class DateTimeAcquire {
     // /**
     //  * date acquire function: current_time
     //  */
-    // @ExecFunction(name = "curtime", argTypes = {}, returnType = "TIME")
+    // @ExecFunction(name = "curtime")
     // public static Expression curTime() {
     //     return DateTimeLiteral.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     // }
 
-    // @ExecFunction(name = "current_time", argTypes = {}, returnType = "TIME")
+    // @ExecFunction(name = "current_time")
     // public static Expression currentTime() {
     //     return DateTimeLiteral.fromJavaDateType(LocalDateTime.now(DateUtils.getTimeZone()));
     // }
@@ -103,7 +103,7 @@ public class DateTimeAcquire {
     /**
      * date transformation function: unix_timestamp
      */
-    @ExecFunction(name = "unix_timestamp", argTypes = {}, returnType = "INT")
+    @ExecFunction(name = "unix_timestamp")
     public static Expression unixTimestamp() {
         return new IntegerLiteral((int) (System.currentTimeMillis() / 1000L));
     }
@@ -111,7 +111,7 @@ public class DateTimeAcquire {
     /**
      * date transformation function: utc_timestamp
      */
-    @ExecFunction(name = "utc_timestamp", argTypes = {}, returnType = "INT")
+    @ExecFunction(name = "utc_timestamp")
     public static Expression utcTimestamp() {
         return DateTimeLiteral.fromJavaDateType(LocalDateTime.now(ZoneId.of("UTC+0")));
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java
index c10181a1040..15588871016 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeArithmetic.java
@@ -36,22 +36,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function date-add.
      */
-    @ExecFunction(name = "date_add", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "date_add")
     public static Expression dateAdd(DateLiteral date, IntegerLiteral day) {
         return daysAdd(date, day);
     }
 
-    @ExecFunction(name = "date_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "date_add")
     public static Expression dateAdd(DateTimeLiteral date, IntegerLiteral day) {
         return daysAdd(date, day);
     }
 
-    @ExecFunction(name = "date_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "date_add")
     public static Expression dateAdd(DateV2Literal date, IntegerLiteral day) {
         return daysAdd(date, day);
     }
 
-    @ExecFunction(name = "date_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "date_add")
     public static Expression dateAdd(DateTimeV2Literal date, IntegerLiteral day) {
         return daysAdd(date, day);
     }
@@ -59,22 +59,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function date-sub.
      */
-    @ExecFunction(name = "date_sub", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "date_sub")
     public static Expression dateSub(DateLiteral date, IntegerLiteral day) {
         return dateAdd(date, new IntegerLiteral(-day.getValue()));
     }
 
-    @ExecFunction(name = "date_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "date_sub")
     public static Expression dateSub(DateTimeLiteral date, IntegerLiteral day) {
         return dateAdd(date, new IntegerLiteral(-day.getValue()));
     }
 
-    @ExecFunction(name = "date_sub", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "date_sub")
     public static Expression dateSub(DateV2Literal date, IntegerLiteral day) {
         return dateAdd(date, new IntegerLiteral(-day.getValue()));
     }
 
-    @ExecFunction(name = "date_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "date_sub")
     public static Expression dateSub(DateTimeV2Literal date, IntegerLiteral day) {
         return dateAdd(date, new IntegerLiteral(-day.getValue()));
     }
@@ -82,22 +82,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function years-add.
      */
-    @ExecFunction(name = "years_add", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "years_add")
     public static Expression yearsAdd(DateLiteral date, IntegerLiteral year) {
         return date.plusYears(year.getValue());
     }
 
-    @ExecFunction(name = "years_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "years_add")
     public static Expression yearsAdd(DateTimeLiteral date, IntegerLiteral year) {
         return date.plusYears(year.getValue());
     }
 
-    @ExecFunction(name = "years_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "years_add")
     public static Expression yearsAdd(DateV2Literal date, IntegerLiteral year) {
         return date.plusYears(year.getValue());
     }
 
-    @ExecFunction(name = "years_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "years_add")
     public static Expression yearsAdd(DateTimeV2Literal date, IntegerLiteral year) {
         return date.plusYears(year.getValue());
     }
@@ -105,22 +105,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function months-add.
      */
-    @ExecFunction(name = "months_add", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "months_add")
     public static Expression monthsAdd(DateLiteral date, IntegerLiteral month) {
         return date.plusMonths(month.getValue());
     }
 
-    @ExecFunction(name = "months_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "months_add")
     public static Expression monthsAdd(DateTimeLiteral date, IntegerLiteral month) {
         return date.plusMonths(month.getValue());
     }
 
-    @ExecFunction(name = "months_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "months_add")
     public static Expression monthsAdd(DateV2Literal date, IntegerLiteral month) {
         return date.plusMonths(month.getValue());
     }
 
-    @ExecFunction(name = "months_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "months_add")
     public static Expression monthsAdd(DateTimeV2Literal date, IntegerLiteral month) {
         return date.plusMonths(month.getValue());
     }
@@ -128,22 +128,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function weeks-add.
      */
-    @ExecFunction(name = "weeks_add", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "weeks_add")
     public static Expression weeksAdd(DateLiteral date, IntegerLiteral weeks) {
         return date.plusWeeks(weeks.getValue());
     }
 
-    @ExecFunction(name = "weeks_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "weeks_add")
     public static Expression weeksAdd(DateTimeLiteral date, IntegerLiteral weeks) {
         return date.plusWeeks(weeks.getValue());
     }
 
-    @ExecFunction(name = "weeks_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "weeks_add")
     public static Expression weeksAdd(DateV2Literal date, IntegerLiteral weeks) {
         return date.plusWeeks(weeks.getValue());
     }
 
-    @ExecFunction(name = "weeks_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "weeks_add")
     public static Expression weeksAdd(DateTimeV2Literal date, IntegerLiteral weeks) {
         return date.plusWeeks(weeks.getValue());
     }
@@ -151,22 +151,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function days-add.
      */
-    @ExecFunction(name = "days_add", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "days_add")
     public static Expression daysAdd(DateLiteral date, IntegerLiteral day) {
         return date.plusDays(day.getValue());
     }
 
-    @ExecFunction(name = "days_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "days_add")
     public static Expression daysAdd(DateTimeLiteral date, IntegerLiteral day) {
         return date.plusDays(day.getValue());
     }
 
-    @ExecFunction(name = "days_add", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "days_add")
     public static Expression daysAdd(DateV2Literal date, IntegerLiteral day) {
         return date.plusDays(day.getValue());
     }
 
-    @ExecFunction(name = "days_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "days_add")
     public static Expression daysAdd(DateTimeV2Literal date, IntegerLiteral day) {
         return date.plusDays(day.getValue());
     }
@@ -174,12 +174,12 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function hours-add.
      */
-    @ExecFunction(name = "hours_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "hours_add")
     public static Expression hoursAdd(DateTimeLiteral date, IntegerLiteral hour) {
         return date.plusHours(hour.getValue());
     }
 
-    @ExecFunction(name = "hours_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hours_add")
     public static Expression hoursAdd(DateTimeV2Literal date, IntegerLiteral hour) {
         return date.plusHours(hour.getValue());
     }
@@ -187,12 +187,12 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function minutes-add.
      */
-    @ExecFunction(name = "minutes_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "minutes_add")
     public static Expression minutesAdd(DateTimeLiteral date, IntegerLiteral minute) {
         return date.plusMinutes(minute.getValue());
     }
 
-    @ExecFunction(name = "minutes_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minutes_add")
     public static Expression minutesAdd(DateTimeV2Literal date, IntegerLiteral minute) {
         return date.plusMinutes(minute.getValue());
     }
@@ -200,12 +200,12 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function seconds-add.
      */
-    @ExecFunction(name = "seconds_add", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "seconds_add")
     public static Expression secondsAdd(DateTimeLiteral date, IntegerLiteral second) {
         return date.plusSeconds(second.getValue());
     }
 
-    @ExecFunction(name = "seconds_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "seconds_add")
     public static Expression secondsAdd(DateTimeV2Literal date, IntegerLiteral second) {
         return date.plusSeconds(second.getValue());
     }
@@ -213,7 +213,7 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function microseconds-add.
      */
-    @ExecFunction(name = "microseconds_add", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "microseconds_add")
     public static Expression microSecondsAdd(DateTimeV2Literal date, IntegerLiteral microSecond) {
         return date.plusMicroSeconds(microSecond.getValue());
     }
@@ -221,7 +221,7 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function microseconds_sub.
      */
-    @ExecFunction(name = "microseconds_sub", argTypes = { "DATETIMEV2", "INT" }, returnType = "DATETIMEV2")
+    @ExecFunction(name = "microseconds_sub")
     public static Expression microSecondsSub(DateTimeV2Literal date, IntegerLiteral microSecond) {
         return date.plusMicroSeconds(-microSecond.getValue());
     }
@@ -229,7 +229,7 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function milliseconds_add.
      */
-    @ExecFunction(name = "milliseconds_add", argTypes = { "DATETIMEV2", "INT" }, returnType = "DATETIMEV2")
+    @ExecFunction(name = "milliseconds_add")
     public static Expression milliSecondsAdd(DateTimeV2Literal date, IntegerLiteral milliSecond) {
         return date.plusMilliSeconds(milliSecond.getValue());
     }
@@ -237,7 +237,7 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function milliseconds_sub.
      */
-    @ExecFunction(name = "milliseconds_sub", argTypes = { "DATETIMEV2", "INT" }, returnType = "DATETIMEV2")
+    @ExecFunction(name = "milliseconds_sub")
     public static Expression milliSecondsSub(DateTimeV2Literal date, IntegerLiteral milliSecond) {
         return date.plusMilliSeconds(-milliSecond.getValue());
     }
@@ -245,22 +245,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function years-sub.
      */
-    @ExecFunction(name = "years_sub", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "years_sub")
     public static Expression yearsSub(DateLiteral date, IntegerLiteral year) {
         return yearsAdd(date, new IntegerLiteral(-year.getValue()));
     }
 
-    @ExecFunction(name = "years_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "years_sub")
     public static Expression yearsSub(DateTimeLiteral date, IntegerLiteral year) {
         return yearsAdd(date, new IntegerLiteral(-year.getValue()));
     }
 
-    @ExecFunction(name = "years_sub", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "years_sub")
     public static Expression yearsSub(DateV2Literal date, IntegerLiteral year) {
         return yearsAdd(date, new IntegerLiteral(-year.getValue()));
     }
 
-    @ExecFunction(name = "years_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "years_sub")
     public static Expression yearsSub(DateTimeV2Literal date, IntegerLiteral year) {
         return yearsAdd(date, new IntegerLiteral(-year.getValue()));
     }
@@ -268,22 +268,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function months-sub
      */
-    @ExecFunction(name = "months_sub", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "months_sub")
     public static Expression monthsSub(DateLiteral date, IntegerLiteral month) {
         return monthsAdd(date, new IntegerLiteral(-month.getValue()));
     }
 
-    @ExecFunction(name = "months_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "months_sub")
     public static Expression monthsSub(DateTimeLiteral date, IntegerLiteral month) {
         return monthsAdd(date, new IntegerLiteral(-month.getValue()));
     }
 
-    @ExecFunction(name = "months_sub", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "months_sub")
     public static Expression monthsSub(DateV2Literal date, IntegerLiteral month) {
         return monthsAdd(date, new IntegerLiteral(-month.getValue()));
     }
 
-    @ExecFunction(name = "months_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "months_sub")
     public static Expression monthsSub(DateTimeV2Literal date, IntegerLiteral month) {
         return monthsAdd(date, new IntegerLiteral(-month.getValue()));
     }
@@ -291,22 +291,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function weeks-sub.
      */
-    @ExecFunction(name = "weeks_sub", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "weeks_sub")
     public static Expression weeksSub(DateLiteral date, IntegerLiteral weeks) {
         return date.plusWeeks(-weeks.getValue());
     }
 
-    @ExecFunction(name = "weeks_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "weeks_sub")
     public static Expression weeksSub(DateTimeLiteral date, IntegerLiteral weeks) {
         return date.plusWeeks(-weeks.getValue());
     }
 
-    @ExecFunction(name = "weeks_sub", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "weeks_sub")
     public static Expression weeksSub(DateV2Literal date, IntegerLiteral weeks) {
         return date.plusWeeks(-weeks.getValue());
     }
 
-    @ExecFunction(name = "weeks_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "weeks_sub")
     public static Expression weeksSub(DateTimeV2Literal date, IntegerLiteral weeks) {
         return date.plusWeeks(-weeks.getValue());
     }
@@ -314,22 +314,22 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function days-sub
      */
-    @ExecFunction(name = "days_sub", argTypes = {"DATE", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "days_sub")
     public static Expression daysSub(DateLiteral date, IntegerLiteral day) {
         return daysAdd(date, new IntegerLiteral(-day.getValue()));
     }
 
-    @ExecFunction(name = "days_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "days_sub")
     public static Expression daysSub(DateTimeLiteral date, IntegerLiteral day) {
         return daysAdd(date, new IntegerLiteral(-day.getValue()));
     }
 
-    @ExecFunction(name = "days_sub", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "days_sub")
     public static Expression daysSub(DateV2Literal date, IntegerLiteral day) {
         return daysAdd(date, new IntegerLiteral(-day.getValue()));
     }
 
-    @ExecFunction(name = "days_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "days_sub")
     public static Expression daysSub(DateTimeV2Literal date, IntegerLiteral day) {
         return daysAdd(date, new IntegerLiteral(-day.getValue()));
     }
@@ -337,12 +337,12 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function hours-sub
      */
-    @ExecFunction(name = "hours_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "hours_sub")
     public static Expression hoursSub(DateTimeLiteral date, IntegerLiteral hour) {
         return hoursAdd(date, new IntegerLiteral(-hour.getValue()));
     }
 
-    @ExecFunction(name = "hours_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hours_sub")
     public static Expression hoursSub(DateTimeV2Literal date, IntegerLiteral hour) {
         return hoursAdd(date, new IntegerLiteral(-hour.getValue()));
     }
@@ -350,12 +350,12 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function minutes-sub
      */
-    @ExecFunction(name = "minutes_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "minutes_sub")
     public static Expression minutesSub(DateTimeLiteral date, IntegerLiteral minute) {
         return minutesAdd(date, new IntegerLiteral(-minute.getValue()));
     }
 
-    @ExecFunction(name = "minutes_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minutes_sub")
     public static Expression minutesSub(DateTimeV2Literal date, IntegerLiteral minute) {
         return minutesAdd(date, new IntegerLiteral(-minute.getValue()));
     }
@@ -363,12 +363,12 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function seconds-sub
      */
-    @ExecFunction(name = "seconds_sub", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "seconds_sub")
     public static Expression secondsSub(DateTimeLiteral date, IntegerLiteral second) {
         return secondsAdd(date, new IntegerLiteral(-second.getValue()));
     }
 
-    @ExecFunction(name = "seconds_sub", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "seconds_sub")
     public static Expression secondsSub(DateTimeV2Literal date, IntegerLiteral second) {
         return secondsAdd(date, new IntegerLiteral(-second.getValue()));
     }
@@ -376,27 +376,27 @@ public class DateTimeArithmetic {
     /**
      * datetime arithmetic function datediff
      */
-    @ExecFunction(name = "datediff", argTypes = {"DATETIME", "DATETIME"}, returnType = "INT")
+    @ExecFunction(name = "datediff")
     public static Expression dateDiff(DateTimeLiteral date1, DateTimeLiteral date2) {
         return new IntegerLiteral(dateDiff(date1.toJavaDateType(), date2.toJavaDateType()));
     }
 
-    @ExecFunction(name = "datediff", argTypes = {"DATEV2", "DATEV2"}, returnType = "INT")
+    @ExecFunction(name = "datediff")
     public static Expression dateDiff(DateV2Literal date1, DateV2Literal date2) {
         return new IntegerLiteral(dateDiff(date1.toJavaDateType(), date2.toJavaDateType()));
     }
 
-    @ExecFunction(name = "datediff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "INT")
+    @ExecFunction(name = "datediff")
     public static Expression dateDiff(DateV2Literal date1, DateTimeV2Literal date2) {
         return new IntegerLiteral(dateDiff(date1.toJavaDateType(), date2.toJavaDateType()));
     }
 
-    @ExecFunction(name = "datediff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "INT")
+    @ExecFunction(name = "datediff")
     public static Expression dateDiff(DateTimeV2Literal date1, DateV2Literal date2) {
         return new IntegerLiteral(dateDiff(date1.toJavaDateType(), date2.toJavaDateType()));
     }
 
-    @ExecFunction(name = "datediff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "INT")
+    @ExecFunction(name = "datediff")
     public static Expression dateDiff(DateTimeV2Literal date1, DateTimeV2Literal date2) {
         return new IntegerLiteral(dateDiff(date1.toJavaDateType(), date2.toJavaDateType()));
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java
index 9742602a07a..440f93cac59 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java
@@ -67,7 +67,7 @@ public class DateTimeExtractAndTransform {
     /**
      * datetime arithmetic function date-v2
      */
-    @ExecFunction(name = "datev2", argTypes = {"DATETIMEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "datev2")
     public static Expression dateV2(DateTimeV2Literal dateTime) {
         return new DateV2Literal(dateTime.getYear(), dateTime.getMonth(), dateTime.getDay());
     }
@@ -75,22 +75,22 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract year
      */
-    @ExecFunction(name = "year", argTypes = {"DATE"}, returnType = "SMALLINT")
+    @ExecFunction(name = "year")
     public static Expression year(DateLiteral date) {
         return new SmallIntLiteral(((short) date.getYear()));
     }
 
-    @ExecFunction(name = "year", argTypes = {"DATETIME"}, returnType = "SMALLINT")
+    @ExecFunction(name = "year")
     public static Expression year(DateTimeLiteral date) {
         return new SmallIntLiteral(((short) date.getYear()));
     }
 
-    @ExecFunction(name = "year", argTypes = {"DATEV2"}, returnType = "SMALLINT")
+    @ExecFunction(name = "year")
     public static Expression year(DateV2Literal date) {
         return new SmallIntLiteral(((short) date.getYear()));
     }
 
-    @ExecFunction(name = "year", argTypes = {"DATETIMEV2"}, returnType = "SMALLINT")
+    @ExecFunction(name = "year")
     public static Expression year(DateTimeV2Literal date) {
         return new SmallIntLiteral(((short) date.getYear()));
     }
@@ -98,22 +98,22 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract quarter
      */
-    @ExecFunction(name = "quarter", argTypes = {"DATE"}, returnType = "TINYINT")
+    @ExecFunction(name = "quarter")
     public static Expression quarter(DateLiteral date) {
         return new TinyIntLiteral((byte) (((byte) date.getMonth() - 1) / 3 + 1));
     }
 
-    @ExecFunction(name = "quarter", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "quarter")
     public static Expression quarter(DateTimeLiteral date) {
         return new TinyIntLiteral((byte) ((date.getMonth() - 1) / 3 + 1));
     }
 
-    @ExecFunction(name = "quarter", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "quarter")
     public static Expression quarter(DateV2Literal date) {
         return new TinyIntLiteral((byte) ((date.getMonth() - 1) / 3 + 1));
     }
 
-    @ExecFunction(name = "quarter", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "quarter")
     public static Expression quarter(DateTimeV2Literal date) {
         return new TinyIntLiteral((byte) ((date.getMonth() - 1) / 3 + 1));
     }
@@ -121,22 +121,22 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract month
      */
-    @ExecFunction(name = "month", argTypes = {"DATE"}, returnType = "TINYINT")
+    @ExecFunction(name = "month")
     public static Expression month(DateLiteral date) {
         return new TinyIntLiteral((byte) date.getMonth());
     }
 
-    @ExecFunction(name = "month", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "month")
     public static Expression month(DateTimeLiteral date) {
         return new TinyIntLiteral((byte) date.getMonth());
     }
 
-    @ExecFunction(name = "month", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "month")
     public static Expression month(DateV2Literal date) {
         return new TinyIntLiteral((byte) date.getMonth());
     }
 
-    @ExecFunction(name = "month", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "month")
     public static Expression month(DateTimeV2Literal date) {
         return new TinyIntLiteral((byte) date.getMonth());
     }
@@ -144,22 +144,22 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract day
      */
-    @ExecFunction(name = "day", argTypes = {"DATE"}, returnType = "TINYINT")
+    @ExecFunction(name = "day")
     public static Expression day(DateLiteral date) {
         return new TinyIntLiteral((byte) date.getDay());
     }
 
-    @ExecFunction(name = "day", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "day")
     public static Expression day(DateTimeLiteral date) {
         return new TinyIntLiteral((byte) date.getDay());
     }
 
-    @ExecFunction(name = "day", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "day")
     public static Expression day(DateV2Literal date) {
         return new TinyIntLiteral((byte) date.getDay());
     }
 
-    @ExecFunction(name = "day", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "day")
     public static Expression day(DateTimeV2Literal date) {
         return new TinyIntLiteral((byte) date.getDay());
     }
@@ -167,12 +167,12 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract hour
      */
-    @ExecFunction(name = "hour", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "hour")
     public static Expression hour(DateTimeLiteral date) {
         return new TinyIntLiteral(((byte) date.getHour()));
     }
 
-    @ExecFunction(name = "hour", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "hour")
     public static Expression hour(DateTimeV2Literal date) {
         return new TinyIntLiteral(((byte) date.getHour()));
     }
@@ -180,12 +180,12 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract hour
      */
-    @ExecFunction(name = "minute", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "minute")
     public static Expression minute(DateTimeLiteral date) {
         return new TinyIntLiteral(((byte) date.getMinute()));
     }
 
-    @ExecFunction(name = "minute", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "minute")
     public static Expression minute(DateTimeV2Literal date) {
         return new TinyIntLiteral(((byte) date.getMinute()));
     }
@@ -193,12 +193,12 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract second
      */
-    @ExecFunction(name = "second", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "second")
     public static Expression second(DateTimeLiteral date) {
         return new TinyIntLiteral(((byte) date.getSecond()));
     }
 
-    @ExecFunction(name = "second", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "second")
     public static Expression second(DateTimeV2Literal date) {
         return new TinyIntLiteral(((byte) date.getSecond()));
     }
@@ -206,7 +206,7 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract microsecond
      */
-    @ExecFunction(name = "microsecond", argTypes = {"DATETIMEV2"}, returnType = "INT")
+    @ExecFunction(name = "microsecond")
     public static Expression microsecond(DateTimeV2Literal date) {
         return new IntegerLiteral(((int) date.getMicroSecond()));
     }
@@ -214,22 +214,22 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract dayofyear
      */
-    @ExecFunction(name = "dayofyear", argTypes = {"DATE"}, returnType = "SMALLINT")
+    @ExecFunction(name = "dayofyear")
     public static Expression dayOfYear(DateLiteral date) {
         return new SmallIntLiteral((short) date.getDayOfYear());
     }
 
-    @ExecFunction(name = "dayofyear", argTypes = {"DATETIME"}, returnType = "SMALLINT")
+    @ExecFunction(name = "dayofyear")
     public static Expression dayOfYear(DateTimeLiteral date) {
         return new SmallIntLiteral((short) date.getDayOfYear());
     }
 
-    @ExecFunction(name = "dayofyear", argTypes = {"DATEV2"}, returnType = "SMALLINT")
+    @ExecFunction(name = "dayofyear")
     public static Expression dayOfYear(DateV2Literal date) {
         return new SmallIntLiteral((short) date.getDayOfYear());
     }
 
-    @ExecFunction(name = "dayofyear", argTypes = {"DATETIMEV2"}, returnType = "SMALLINT")
+    @ExecFunction(name = "dayofyear")
     public static Expression dayOfYear(DateTimeV2Literal date) {
         return new SmallIntLiteral((short) date.getDayOfYear());
     }
@@ -237,22 +237,22 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract dayofmonth
      */
-    @ExecFunction(name = "dayofmonth", argTypes = {"DATE"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofmonth")
     public static Expression dayOfMonth(DateLiteral date) {
         return new TinyIntLiteral((byte) date.toJavaDateType().getDayOfMonth());
     }
 
-    @ExecFunction(name = "dayofmonth", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofmonth")
     public static Expression dayOfMonth(DateTimeLiteral date) {
         return new TinyIntLiteral((byte) date.toJavaDateType().getDayOfMonth());
     }
 
-    @ExecFunction(name = "dayofmonth", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofmonth")
     public static Expression dayOfMonth(DateV2Literal date) {
         return new TinyIntLiteral((byte) date.toJavaDateType().getDayOfMonth());
     }
 
-    @ExecFunction(name = "dayofmonth", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofmonth")
     public static Expression dayOfMonth(DateTimeV2Literal date) {
         return new TinyIntLiteral((byte) date.toJavaDateType().getDayOfMonth());
     }
@@ -260,22 +260,22 @@ public class DateTimeExtractAndTransform {
     /**
      * Executable datetime extract dayofweek
      */
-    @ExecFunction(name = "dayofweek", argTypes = {"DATE"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofweek")
     public static Expression dayOfWeek(DateLiteral date) {
         return new TinyIntLiteral((byte) (date.getDayOfWeek() % 7 + 1));
     }
 
-    @ExecFunction(name = "dayofweek", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofweek")
     public static Expression dayOfWeek(DateTimeLiteral date) {
         return new TinyIntLiteral((byte) (date.getDayOfWeek() % 7 + 1));
     }
 
-    @ExecFunction(name = "dayofweek", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofweek")
     public static Expression dayOfWeek(DateV2Literal date) {
         return new TinyIntLiteral((byte) (date.getDayOfWeek() % 7 + 1));
     }
 
-    @ExecFunction(name = "dayofweek", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "dayofweek")
     public static Expression dayOfWeek(DateTimeV2Literal date) {
         return new TinyIntLiteral((byte) (date.getDayOfWeek() % 7 + 1));
     }
@@ -291,26 +291,26 @@ public class DateTimeExtractAndTransform {
     /**
      * datetime arithmetic function date-format
      */
-    @ExecFunction(name = "date_format", argTypes = {"DATE", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "date_format")
     public static Expression dateFormat(DateLiteral date, StringLikeLiteral format) {
         return new VarcharLiteral(DateUtils.formatBuilder(format.getValue()).toFormatter().format(
                 java.time.LocalDate.of(((int) date.getYear()), ((int) date.getMonth()), ((int) date.getDay()))));
     }
 
-    @ExecFunction(name = "date_format", argTypes = {"DATETIME", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "date_format")
     public static Expression dateFormat(DateTimeLiteral date, StringLikeLiteral format) {
         return new VarcharLiteral(DateUtils.formatBuilder(format.getValue()).toFormatter().format(
                 java.time.LocalDateTime.of(((int) date.getYear()), ((int) date.getMonth()), ((int) date.getDay()),
                         ((int) date.getHour()), ((int) date.getMinute()), ((int) date.getSecond()))));
     }
 
-    @ExecFunction(name = "date_format", argTypes = {"DATEV2", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "date_format")
     public static Expression dateFormat(DateV2Literal date, StringLikeLiteral format) {
         return new VarcharLiteral(DateUtils.formatBuilder(format.getValue()).toFormatter().format(
                 java.time.LocalDate.of(((int) date.getYear()), ((int) date.getMonth()), ((int) date.getDay()))));
     }
 
-    @ExecFunction(name = "date_format", argTypes = {"DATETIMEV2", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "date_format")
     public static Expression dateFormat(DateTimeV2Literal date, StringLikeLiteral format) {
         return new VarcharLiteral(DateUtils.formatBuilder(format.getValue()).toFormatter().format(
                 java.time.LocalDateTime.of(((int) date.getYear()), ((int) date.getMonth()), ((int) date.getDay()),
@@ -320,12 +320,12 @@ public class DateTimeExtractAndTransform {
     /**
      * datetime arithmetic function date
      */
-    @ExecFunction(name = "date", argTypes = {"DATETIME"}, returnType = "DATE")
+    @ExecFunction(name = "date")
     public static Expression date(DateTimeLiteral dateTime) throws AnalysisException {
         return new DateLiteral(dateTime.getYear(), dateTime.getMonth(), dateTime.getDay());
     }
 
-    @ExecFunction(name = "date", argTypes = {"DATETIMEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "date")
     public static Expression date(DateTimeV2Literal dateTime) throws AnalysisException {
         return new DateV2Literal(dateTime.getYear(), dateTime.getMonth(), dateTime.getDay());
     }
@@ -333,22 +333,22 @@ public class DateTimeExtractAndTransform {
     /**
      * datetime arithmetic function date-trunc
      */
-    @ExecFunction(name = "date_trunc", argTypes = {"DATETIME", "VARCHAR"}, returnType = "DATETIME")
+    @ExecFunction(name = "date_trunc")
     public static Expression dateTrunc(DateTimeLiteral date, StringLikeLiteral trunc) {
         return DateTimeLiteral.fromJavaDateType(dateTruncHelper(date.toJavaDateType(), trunc.getValue()));
     }
 
-    @ExecFunction(name = "date_trunc", argTypes = {"DATETIMEV2", "VARCHAR"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "date_trunc")
     public static Expression dateTrunc(DateTimeV2Literal date, StringLikeLiteral trunc) {
         return DateTimeV2Literal.fromJavaDateType(dateTruncHelper(date.toJavaDateType(), trunc.getValue()));
     }
 
-    @ExecFunction(name = "date_trunc", argTypes = {"DATE", "VARCHAR"}, returnType = "DATE")
+    @ExecFunction(name = "date_trunc")
     public static Expression dateTrunc(DateLiteral date, StringLikeLiteral trunc) {
         return DateLiteral.fromJavaDateType(dateTruncHelper(date.toJavaDateType(), trunc.getValue()));
     }
 
-    @ExecFunction(name = "date_trunc", argTypes = {"DATEV2", "VARCHAR"}, returnType = "DATEV2")
+    @ExecFunction(name = "date_trunc")
     public static Expression dateTrunc(DateV2Literal date, StringLikeLiteral trunc) {
         return DateV2Literal.fromJavaDateType(dateTruncHelper(date.toJavaDateType(), trunc.getValue()));
     }
@@ -395,7 +395,7 @@ public class DateTimeExtractAndTransform {
     /**
      * from_days.
      */
-    @ExecFunction(name = "from_days", argTypes = {"INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "from_days")
     public static Expression fromDays(IntegerLiteral n) {
         // doris treat 0000AD as ordinary year but java LocalDateTime treat it as lunar year.
         LocalDateTime res = LocalDateTime.of(0, 1, 1, 0, 0, 0)
@@ -406,28 +406,28 @@ public class DateTimeExtractAndTransform {
         return DateV2Literal.fromJavaDateType(res);
     }
 
-    @ExecFunction(name = "last_day", argTypes = {"DATE"}, returnType = "DATE")
+    @ExecFunction(name = "last_day")
     public static Expression lastDay(DateLiteral date) {
         LocalDateTime nextMonthFirstDay = LocalDateTime.of((int) date.getYear(), (int) date.getMonth(), 1,
                 0, 0, 0).plusMonths(1);
         return DateLiteral.fromJavaDateType(nextMonthFirstDay.minusDays(1));
     }
 
-    @ExecFunction(name = "last_day", argTypes = {"DATETIME"}, returnType = "DATE")
+    @ExecFunction(name = "last_day")
     public static Expression lastDay(DateTimeLiteral date) {
         LocalDateTime nextMonthFirstDay = LocalDateTime.of((int) date.getYear(), (int) date.getMonth(), 1,
                 0, 0, 0).plusMonths(1);
         return DateLiteral.fromJavaDateType(nextMonthFirstDay.minusDays(1));
     }
 
-    @ExecFunction(name = "last_day", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "last_day")
     public static Expression lastDay(DateV2Literal date) {
         LocalDateTime nextMonthFirstDay = LocalDateTime.of((int) date.getYear(), (int) date.getMonth(), 1,
                 0, 0, 0).plusMonths(1);
         return DateV2Literal.fromJavaDateType(nextMonthFirstDay.minusDays(1));
     }
 
-    @ExecFunction(name = "last_day", argTypes = {"DATETIMEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "last_day")
     public static Expression lastDay(DateTimeV2Literal date) {
         LocalDateTime nextMonthFirstDay = LocalDateTime.of((int) date.getYear(), (int) date.getMonth(), 1,
                 0, 0, 0).plusMonths(1);
@@ -437,22 +437,22 @@ public class DateTimeExtractAndTransform {
     /**
      * datetime transformation function: to_monday
      */
-    @ExecFunction(name = "to_monday", argTypes = {"DATE"}, returnType = "DATE")
+    @ExecFunction(name = "to_monday")
     public static Expression toMonday(DateLiteral date) {
         return DateLiteral.fromJavaDateType(toMonday(date.toJavaDateType()));
     }
 
-    @ExecFunction(name = "to_monday", argTypes = {"DATETIME"}, returnType = "DATE")
+    @ExecFunction(name = "to_monday")
     public static Expression toMonday(DateTimeLiteral date) {
         return DateLiteral.fromJavaDateType(toMonday(date.toJavaDateType()));
     }
 
-    @ExecFunction(name = "to_monday", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "to_monday")
     public static Expression toMonday(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(toMonday(date.toJavaDateType()));
     }
 
-    @ExecFunction(name = "to_monday", argTypes = {"DATETIMEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "to_monday")
     public static Expression toMonday(DateTimeV2Literal date) {
         return DateV2Literal.fromJavaDateType(toMonday(date.toJavaDateType()));
     }
@@ -469,7 +469,7 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: from_unixtime
      */
-    @ExecFunction(name = "from_unixtime", argTypes = {"BIGINT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "from_unixtime")
     public static Expression fromUnixTime(BigIntLiteral second) {
         return fromUnixTime(second, new VarcharLiteral("%Y-%m-%d %H:%i:%s"));
     }
@@ -477,7 +477,7 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: from_unixtime
      */
-    @ExecFunction(name = "from_unixtime", argTypes = {"BIGINT", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "from_unixtime")
     public static Expression fromUnixTime(BigIntLiteral second, StringLikeLiteral format) {
         // 32536771199L is max valid timestamp of mysql from_unix_time
         if (second.getValue() < 0 || second.getValue() > 32536771199L) {
@@ -497,17 +497,17 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: unix_timestamp
      */
-    @ExecFunction(name = "unix_timestamp", argTypes = {"DATE"}, returnType = "INT")
+    @ExecFunction(name = "unix_timestamp")
     public static Expression unixTimestamp(DateLiteral date) {
         return new IntegerLiteral(Integer.parseInt(getTimestamp(date.toJavaDateType())));
     }
 
-    @ExecFunction(name = "unix_timestamp", argTypes = {"DATETIME"}, returnType = "INT")
+    @ExecFunction(name = "unix_timestamp")
     public static Expression unixTimestamp(DateTimeLiteral date) {
         return new IntegerLiteral(Integer.parseInt(getTimestamp(date.toJavaDateType())));
     }
 
-    @ExecFunction(name = "unix_timestamp", argTypes = {"DATEV2"}, returnType = "INT")
+    @ExecFunction(name = "unix_timestamp")
     public static Expression unixTimestamp(DateV2Literal date) {
         return new IntegerLiteral(Integer.parseInt(getTimestamp(date.toJavaDateType())));
     }
@@ -515,7 +515,7 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: unix_timestamp
      */
-    @ExecFunction(name = "unix_timestamp", argTypes = {"DATETIMEV2"}, returnType = "DECIMALV3")
+    @ExecFunction(name = "unix_timestamp")
     public static Expression unixTimestamp(DateTimeV2Literal date) {
         if (date.getMicroSecond() == 0) {
             return new DecimalV3Literal(DecimalV3Type.createDecimalV3TypeLooseCheck(10, 0),
@@ -529,7 +529,7 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: unix_timestamp
      */
-    @ExecFunction(name = "unix_timestamp", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "DECIMALV3")
+    @ExecFunction(name = "unix_timestamp")
     public static Expression unixTimestamp(StringLikeLiteral date, StringLikeLiteral format) {
         DateTimeFormatter formatter = DateUtils.formatBuilder(format.getValue()).toFormatter();
         LocalDateTime dateObj;
@@ -564,12 +564,12 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: to_date
      */
-    @ExecFunction(name = "to_date", argTypes = {"DATETIME"}, returnType = "DATE")
+    @ExecFunction(name = "to_date")
     public static Expression toDate(DateTimeLiteral date) {
         return new DateLiteral(date.getYear(), date.getMonth(), date.getDay());
     }
 
-    @ExecFunction(name = "to_date", argTypes = {"DATETIMEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "to_date")
     public static Expression toDate(DateTimeV2Literal date) {
         return new DateV2Literal(date.getYear(), date.getMonth(), date.getDay());
     }
@@ -577,25 +577,25 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: to_days
      */
-    @ExecFunction(name = "to_days", argTypes = {"DATE"}, returnType = "INT")
+    @ExecFunction(name = "to_days")
     public static Expression toDays(DateLiteral date) {
         return new IntegerLiteral(((int) Duration.between(
                 LocalDateTime.of(0, 1, 1, 0, 0, 0), date.toJavaDateType()).toDays()));
     }
 
-    @ExecFunction(name = "to_days", argTypes = {"DATETIME"}, returnType = "INT")
+    @ExecFunction(name = "to_days")
     public static Expression toDays(DateTimeLiteral date) {
         return new IntegerLiteral(((int) Duration.between(
                 LocalDateTime.of(0, 1, 1, 0, 0, 0), date.toJavaDateType()).toDays()));
     }
 
-    @ExecFunction(name = "to_days", argTypes = {"DATEV2"}, returnType = "INT")
+    @ExecFunction(name = "to_days")
     public static Expression toDays(DateV2Literal date) {
         return new IntegerLiteral(((int) Duration.between(
                 LocalDateTime.of(0, 1, 1, 0, 0, 0), date.toJavaDateType()).toDays()));
     }
 
-    @ExecFunction(name = "to_days", argTypes = {"DATETIMEV2"}, returnType = "INT")
+    @ExecFunction(name = "to_days")
     public static Expression toDays(DateTimeV2Literal date) {
         return new IntegerLiteral(((int) Duration.between(
                 LocalDateTime.of(0, 1, 1, 0, 0, 0), date.toJavaDateType()).toDays()));
@@ -604,7 +604,7 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: makedate
      */
-    @ExecFunction(name = "makedate", argTypes = {"INT", "INT"}, returnType = "DATE")
+    @ExecFunction(name = "makedate")
     public static Expression makeDate(IntegerLiteral year, IntegerLiteral dayOfYear) {
         int day = dayOfYear.getValue();
         return day > 0 ? DateLiteral.fromJavaDateType(LocalDateTime.of(year.getValue(), 1, 1, 0, 0, 0)
@@ -614,7 +614,7 @@ public class DateTimeExtractAndTransform {
     /**
      * date transformation function: str_to_date
      */
-    @ExecFunction(name = "str_to_date", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "str_to_date")
     public static Expression strToDate(StringLikeLiteral str, StringLikeLiteral format) {
         if (org.apache.doris.analysis.DateLiteral.hasTimePart(format.getStringValue())) {
             DataType returnType = DataType.fromCatalogType(ScalarType.getDefaultDateType(Type.DATETIME));
@@ -637,12 +637,12 @@ public class DateTimeExtractAndTransform {
         }
     }
 
-    @ExecFunction(name = "timestamp", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "timestamp")
     public static Expression timestamp(DateTimeLiteral datetime) {
         return datetime;
     }
 
-    @ExecFunction(name = "timestamp", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "timestamp")
     public static Expression timestamp(DateTimeV2Literal datetime) {
         return datetime;
     }
@@ -650,7 +650,7 @@ public class DateTimeExtractAndTransform {
     /**
      * convert_tz
      */
-    @ExecFunction(name = "convert_tz", argTypes = {"DATETIMEV2", "VARCHAR", "VARCHAR"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "convert_tz")
     public static Expression convertTz(DateTimeV2Literal datetime, StringLikeLiteral fromTz, StringLikeLiteral toTz) {
         DateTimeFormatter zoneFormatter = new DateTimeFormatterBuilder()
                 .parseCaseInsensitive()
@@ -665,52 +665,52 @@ public class DateTimeExtractAndTransform {
         return DateTimeV2Literal.fromJavaDateType(resultDateTime.toLocalDateTime(), datetime.getDataType().getScale());
     }
 
-    @ExecFunction(name = "weekday", argTypes = {"DATE"}, returnType = "TINYINT")
+    @ExecFunction(name = "weekday")
     public static Expression weekDay(DateLiteral date) {
         return new TinyIntLiteral((byte) ((date.toJavaDateType().getDayOfWeek().getValue() + 6) % 7));
     }
 
-    @ExecFunction(name = "weekday", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "weekday")
     public static Expression weekDay(DateTimeLiteral date) {
         return new TinyIntLiteral((byte) ((date.toJavaDateType().getDayOfWeek().getValue() + 6) % 7));
     }
 
-    @ExecFunction(name = "weekday", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "weekday")
     public static Expression weekDay(DateV2Literal date) {
         return new TinyIntLiteral((byte) ((date.toJavaDateType().getDayOfWeek().getValue() + 6) % 7));
     }
 
-    @ExecFunction(name = "weekday", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "weekday")
     public static Expression weekDay(DateTimeV2Literal date) {
         return new TinyIntLiteral((byte) ((date.toJavaDateType().getDayOfWeek().getValue() + 6) % 7));
     }
 
-    @ExecFunction(name = "week", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "week")
     public static Expression week(DateTimeV2Literal dateTime) {
         return week(dateTime.toJavaDateType(), 0);
     }
 
-    @ExecFunction(name = "week", argTypes = {"DATETIMEV2", "INT"}, returnType = "TINYINT")
+    @ExecFunction(name = "week")
     public static Expression week(DateTimeV2Literal dateTime, IntegerLiteral mode) {
         return week(dateTime.toJavaDateType(), mode.getIntValue());
     }
 
-    @ExecFunction(name = "week", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "week")
     public static Expression week(DateTimeLiteral dateTime) {
         return week(dateTime.toJavaDateType(), 0);
     }
 
-    @ExecFunction(name = "week", argTypes = {"DATETIME", "INT"}, returnType = "TINYINT")
+    @ExecFunction(name = "week")
     public static Expression week(DateTimeLiteral dateTime, IntegerLiteral mode) {
         return week(dateTime.toJavaDateType(), mode.getIntValue());
     }
 
-    @ExecFunction(name = "week", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "week")
     public static Expression week(DateV2Literal date) {
         return week(date.toJavaDateType(), 0);
     }
 
-    @ExecFunction(name = "week", argTypes = {"DATEV2", "INT"}, returnType = "TINYINT")
+    @ExecFunction(name = "week")
     public static Expression week(DateV2Literal date, IntegerLiteral mode) {
         return week(date.toJavaDateType(), mode.getIntValue());
     }
@@ -775,32 +775,32 @@ public class DateTimeExtractAndTransform {
                 && (localDateTime.getDayOfMonth() == 1 || localDateTime.getDayOfMonth() == 2);
     }
 
-    @ExecFunction(name = "yearweek", argTypes = {"DATEV2", "INT"}, returnType = "INT")
+    @ExecFunction(name = "yearweek")
     public static Expression yearWeek(DateV2Literal date, IntegerLiteral mode) {
         return yearWeek(date.toJavaDateType(), mode.getIntValue());
     }
 
-    @ExecFunction(name = "yearweek", argTypes = {"DATETIMEV2", "INT"}, returnType = "INT")
+    @ExecFunction(name = "yearweek")
     public static Expression yearWeek(DateTimeV2Literal dateTime, IntegerLiteral mode) {
         return yearWeek(dateTime.toJavaDateType(), mode.getIntValue());
     }
 
-    @ExecFunction(name = "yearweek", argTypes = {"DATETIME", "INT"}, returnType = "INT")
+    @ExecFunction(name = "yearweek")
     public static Expression yearWeek(DateTimeLiteral dateTime, IntegerLiteral mode) {
         return yearWeek(dateTime.toJavaDateType(), mode.getIntValue());
     }
 
-    @ExecFunction(name = "yearweek", argTypes = {"DATEV2"}, returnType = "INT")
+    @ExecFunction(name = "yearweek")
     public static Expression yearWeek(DateV2Literal date) {
         return yearWeek(date.toJavaDateType(), 0);
     }
 
-    @ExecFunction(name = "yearweek", argTypes = {"DATETIMEV2"}, returnType = "INT")
+    @ExecFunction(name = "yearweek")
     public static Expression yearWeek(DateTimeV2Literal dateTime) {
         return yearWeek(dateTime.toJavaDateType(), 0);
     }
 
-    @ExecFunction(name = "yearweek", argTypes = {"DATETIME"}, returnType = "INT")
+    @ExecFunction(name = "yearweek")
     public static Expression yearWeek(DateTimeLiteral dateTime) {
         return yearWeek(dateTime.toJavaDateType(), 0);
     }
@@ -868,7 +868,7 @@ public class DateTimeExtractAndTransform {
     /**
      * weekofyear
      */
-    @ExecFunction(name = "weekofyear", argTypes = {"DATETIMEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "weekofyear")
     public static Expression weekOfYear(DateTimeV2Literal dateTime) {
         if (dateTime.getYear() == 0 && dateTime.getDayOfWeek() == 1) {
             if (dateTime.getMonth() == 1 && dateTime.getDay() == 2) {
@@ -883,7 +883,7 @@ public class DateTimeExtractAndTransform {
     /**
      * weekofyear
      */
-    @ExecFunction(name = "weekofyear", argTypes = {"DATETIME"}, returnType = "TINYINT")
+    @ExecFunction(name = "weekofyear")
     public static Expression weekOfYear(DateTimeLiteral dateTime) {
         if (dateTime.getYear() == 0 && dateTime.getDayOfWeek() == 1) {
             if (dateTime.getMonth() == 1 && dateTime.getDay() == 2) {
@@ -898,7 +898,7 @@ public class DateTimeExtractAndTransform {
     /**
      * weekofyear
      */
-    @ExecFunction(name = "weekofyear", argTypes = {"DATEV2"}, returnType = "TINYINT")
+    @ExecFunction(name = "weekofyear")
     public static Expression weekOfYear(DateV2Literal date) {
         if (date.getYear() == 0 && date.getDayOfWeek() == 1) {
             if (date.getMonth() == 1 && date.getDay() == 2) {
@@ -909,53 +909,53 @@ public class DateTimeExtractAndTransform {
         return new TinyIntLiteral((byte) date.toJavaDateType().get(WeekFields.ISO.weekOfWeekBasedYear()));
     }
 
-    @ExecFunction(name = "dayname", argTypes = {"DATETIMEV2"}, returnType = "VARCHAR")
+    @ExecFunction(name = "dayname")
     public static Expression dayName(DateTimeV2Literal dateTime) {
         return new VarcharLiteral(dateTime.toJavaDateType().getDayOfWeek().getDisplayName(TextStyle.FULL,
                 Locale.getDefault()));
     }
 
-    @ExecFunction(name = "dayname", argTypes = {"DATETIME"}, returnType = "VARCHAR")
+    @ExecFunction(name = "dayname")
     public static Expression dayName(DateTimeLiteral dateTime) {
         return new VarcharLiteral(dateTime.toJavaDateType().getDayOfWeek().getDisplayName(TextStyle.FULL,
                 Locale.getDefault()));
     }
 
-    @ExecFunction(name = "dayname", argTypes = {"DATEV2"}, returnType = "VARCHAR")
+    @ExecFunction(name = "dayname")
     public static Expression dayName(DateV2Literal date) {
         return new VarcharLiteral(date.toJavaDateType().getDayOfWeek().getDisplayName(TextStyle.FULL,
                 Locale.getDefault()));
     }
 
-    @ExecFunction(name = "monthname", argTypes = {"DATETIMEV2"}, returnType = "VARCHAR")
+    @ExecFunction(name = "monthname")
     public static Expression monthName(DateTimeV2Literal dateTime) {
         return new VarcharLiteral(dateTime.toJavaDateType().getMonth().getDisplayName(TextStyle.FULL,
                 Locale.getDefault()));
     }
 
-    @ExecFunction(name = "monthname", argTypes = {"DATETIME"}, returnType = "VARCHAR")
+    @ExecFunction(name = "monthname")
     public static Expression monthName(DateTimeLiteral dateTime) {
         return new VarcharLiteral(dateTime.toJavaDateType().getMonth().getDisplayName(TextStyle.FULL,
                 Locale.getDefault()));
     }
 
-    @ExecFunction(name = "monthname", argTypes = {"DATEV2"}, returnType = "VARCHAR")
+    @ExecFunction(name = "monthname")
     public static Expression monthName(DateV2Literal date) {
         return new VarcharLiteral(date.toJavaDateType().getMonth().getDisplayName(TextStyle.FULL,
                 Locale.getDefault()));
     }
 
-    @ExecFunction(name = "from_second", argTypes = {"BIGINT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "from_second")
     public static Expression fromSecond(BigIntLiteral second) {
         return fromMicroSecond(second.getValue() * 1000 * 1000);
     }
 
-    @ExecFunction(name = "from_millisecond", argTypes = {"BIGINT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "from_millisecond")
     public static Expression fromMilliSecond(BigIntLiteral milliSecond) {
         return fromMicroSecond(milliSecond.getValue() * 1000);
     }
 
-    @ExecFunction(name = "from_microsecond", argTypes = {"BIGINT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "from_microsecond")
     public static Expression fromMicroSecond(BigIntLiteral microSecond) {
         return fromMicroSecond(microSecond.getValue());
     }
@@ -972,187 +972,187 @@ public class DateTimeExtractAndTransform {
                 dateTime.getMinute(), dateTime.getSecond(), dateTime.getNano() / 1000);
     }
 
-    @ExecFunction(name = "microseconds_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "microseconds_diff")
     public static Expression microsecondsDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MICROS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "milliseconds_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "milliseconds_diff")
     public static Expression millisecondsDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MILLIS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "seconds_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "seconds_diff")
     public static Expression secondsDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.SECONDS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "seconds_diff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "seconds_diff")
     public static Expression secondsDiff(DateTimeV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.SECONDS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "seconds_diff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "seconds_diff")
     public static Expression secondsDiff(DateV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.SECONDS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "seconds_diff", argTypes = {"DATEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "seconds_diff")
     public static Expression secondsDiff(DateV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.SECONDS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "seconds_diff", argTypes = {"DATETIME", "DATETIME"}, returnType = "BIGINT")
+    @ExecFunction(name = "seconds_diff")
     public static Expression secondsDiff(DateTimeLiteral t1, DateTimeLiteral t2) {
         return new BigIntLiteral(ChronoUnit.SECONDS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "minutes_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "minutes_diff")
     public static Expression minutesDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MINUTES.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "minutes_diff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "minutes_diff")
     public static Expression minutesDiff(DateTimeV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MINUTES.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "minutes_diff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "minutes_diff")
     public static Expression minutesDiff(DateV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MINUTES.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "minutes_diff", argTypes = {"DATEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "minutes_diff")
     public static Expression minutesDiff(DateV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MINUTES.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "minutes_diff", argTypes = {"DATETIME", "DATETIME"}, returnType = "BIGINT")
+    @ExecFunction(name = "minutes_diff")
     public static Expression minutesDiff(DateTimeLiteral t1, DateTimeLiteral t2) {
         return new BigIntLiteral(ChronoUnit.MINUTES.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "hours_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "hours_diff")
     public static Expression hoursDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.HOURS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "hours_diff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "hours_diff")
     public static Expression hoursDiff(DateTimeV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.HOURS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "hours_diff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "hours_diff")
     public static Expression hoursDiff(DateV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.HOURS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "hours_diff", argTypes = {"DATEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "hours_diff")
     public static Expression hoursDiff(DateV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.HOURS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "hours_diff", argTypes = {"DATETIME", "DATETIME"}, returnType = "BIGINT")
+    @ExecFunction(name = "hours_diff")
     public static Expression hoursDiff(DateTimeLiteral t1, DateTimeLiteral t2) {
         return new BigIntLiteral(ChronoUnit.HOURS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "days_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "days_diff")
     public static Expression daysDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.DAYS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "days_diff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "days_diff")
     public static Expression daysDiff(DateTimeV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.DAYS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "days_diff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "days_diff")
     public static Expression daysDiff(DateV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.DAYS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "days_diff", argTypes = {"DATEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "days_diff")
     public static Expression daysDiff(DateV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.DAYS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "days_diff", argTypes = {"DATETIME", "DATETIME"}, returnType = "BIGINT")
+    @ExecFunction(name = "days_diff")
     public static Expression daysDiff(DateTimeLiteral t1, DateTimeLiteral t2) {
         return new BigIntLiteral(ChronoUnit.DAYS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "weeks_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "weeks_diff")
     public static Expression weeksDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.WEEKS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "weeks_diff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "weeks_diff")
     public static Expression weeksDiff(DateTimeV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.WEEKS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "weeks_diff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "weeks_diff")
     public static Expression weeksDiff(DateV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.WEEKS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "weeks_diff", argTypes = {"DATEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "weeks_diff")
     public static Expression weeksDiff(DateV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.WEEKS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "weeks_diff", argTypes = {"DATETIME", "DATETIME"}, returnType = "BIGINT")
+    @ExecFunction(name = "weeks_diff")
     public static Expression weeksDiff(DateTimeLiteral t1, DateTimeLiteral t2) {
         return new BigIntLiteral(ChronoUnit.WEEKS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "months_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "months_diff")
     public static Expression monthsDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MONTHS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "months_diff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "months_diff")
     public static Expression monthsDiff(DateTimeV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MONTHS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "months_diff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "months_diff")
     public static Expression monthsDiff(DateV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MONTHS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "months_diff", argTypes = {"DATEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "months_diff")
     public static Expression monthsDiff(DateV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.MONTHS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "months_diff", argTypes = {"DATETIME", "DATETIME"}, returnType = "BIGINT")
+    @ExecFunction(name = "months_diff")
     public static Expression monthsDiff(DateTimeLiteral t1, DateTimeLiteral t2) {
         return new BigIntLiteral(ChronoUnit.MONTHS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "years_diff", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "years_diff")
     public static Expression yearsDiff(DateTimeV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.YEARS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "years_diff", argTypes = {"DATETIMEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "years_diff")
     public static Expression yearsDiff(DateTimeV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.YEARS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "years_diff", argTypes = {"DATEV2", "DATETIMEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "years_diff")
     public static Expression yearsDiff(DateV2Literal t1, DateTimeV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.YEARS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "years_diff", argTypes = {"DATEV2", "DATEV2"}, returnType = "BIGINT")
+    @ExecFunction(name = "years_diff")
     public static Expression yearsDiff(DateV2Literal t1, DateV2Literal t2) {
         return new BigIntLiteral(ChronoUnit.YEARS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
 
-    @ExecFunction(name = "years_diff", argTypes = {"DATETIME", "DATETIME"}, returnType = "BIGINT")
+    @ExecFunction(name = "years_diff")
     public static Expression yearsDiff(DateTimeLiteral t1, DateTimeLiteral t2) {
         return new BigIntLiteral(ChronoUnit.YEARS.between(t2.toJavaDateType(), t1.toJavaDateType()));
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/ExecutableFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/ExecutableFunctions.java
index 42ad228ad72..a86e933c9ff 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/ExecutableFunctions.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/ExecutableFunctions.java
@@ -47,47 +47,47 @@ public class ExecutableFunctions {
     /**
      * other scalar function
      */
-    @ExecFunction(name = "abs", argTypes = {"TINYINT"}, returnType = "SMALLINT")
+    @ExecFunction(name = "abs")
     public static Expression abs(TinyIntLiteral literal) {
         return new SmallIntLiteral((short) Math.abs(literal.getValue()));
     }
 
-    @ExecFunction(name = "abs", argTypes = {"SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "abs")
     public static Expression abs(SmallIntLiteral literal) {
         return new IntegerLiteral(Math.abs(literal.getValue()));
     }
 
-    @ExecFunction(name = "abs", argTypes = {"INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "abs")
     public static Expression abs(IntegerLiteral literal) {
         return new BigIntLiteral(Math.abs((long) literal.getValue()));
     }
 
-    @ExecFunction(name = "abs", argTypes = {"BIGINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "abs")
     public static Expression abs(BigIntLiteral literal) {
         return new LargeIntLiteral(BigInteger.valueOf(literal.getValue()).abs());
     }
 
-    @ExecFunction(name = "abs", argTypes = {"LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "abs")
     public static Expression abs(LargeIntLiteral literal) {
         return new LargeIntLiteral(literal.getValue().abs());
     }
 
-    @ExecFunction(name = "abs", argTypes = {"FLOAT"}, returnType = "FLOAT")
+    @ExecFunction(name = "abs")
     public static Expression abs(FloatLiteral literal) {
         return new FloatLiteral(Math.abs(literal.getValue()));
     }
 
-    @ExecFunction(name = "abs", argTypes = {"DOUBLE"}, returnType = "DOUBLE")
+    @ExecFunction(name = "abs")
     public static Expression abs(DoubleLiteral literal) {
         return new DoubleLiteral(Math.abs(literal.getValue()));
     }
 
-    @ExecFunction(name = "abs", argTypes = {"DECIMALV2"}, returnType = "DECIMALV2")
+    @ExecFunction(name = "abs")
     public static Expression abs(DecimalLiteral literal) {
         return new DecimalLiteral(literal.getValue().abs());
     }
 
-    @ExecFunction(name = "abs", argTypes = {"DECIMALV3"}, returnType = "DECIMALV3")
+    @ExecFunction(name = "abs")
     public static Expression abs(DecimalV3Literal literal) {
         return new DecimalV3Literal(literal.getValue().abs());
     }
@@ -95,7 +95,7 @@ public class ExecutableFunctions {
     /**
      * acos scalar function
      */
-    @ExecFunction(name = "acos", argTypes = {"DOUBLE"}, returnType = "DOUBLE")
+    @ExecFunction(name = "acos")
     public static Expression acos(DoubleLiteral literal) {
         double result = Math.acos(literal.getValue());
         if (Double.isNaN(result)) {
@@ -105,7 +105,7 @@ public class ExecutableFunctions {
         }
     }
 
-    @ExecFunction(name = "append_trailing_char_if_absent", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "append_trailing_char_if_absent")
     public static Expression appendTrailingIfCharAbsent(StringLikeLiteral literal, StringLikeLiteral chr) {
         if (literal.getValue().length() != 1) {
             return null;
@@ -114,12 +114,12 @@ public class ExecutableFunctions {
                 : new VarcharLiteral(literal.getValue() + chr.getValue());
     }
 
-    @ExecFunction(name = "e", argTypes = {}, returnType = "DOUBLE")
+    @ExecFunction(name = "e")
     public static Expression e() { // CHECKSTYLE IGNORE THIS LINE
         return new DoubleLiteral(Math.E);
     }
 
-    @ExecFunction(name = "p1", argTypes = {}, returnType = "DOUBLE")
+    @ExecFunction(name = "p1")
     public static Expression pi() {
         return new DoubleLiteral(Math.PI);
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java
index 9477de8ed1a..ba0b75e75dd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java
@@ -41,169 +41,169 @@ public class NumericArithmetic {
     /**
      * Executable arithmetic functions add
      */
-    @ExecFunction(name = "add", argTypes = {"TINYINT", "TINYINT"}, returnType = "SMALLINT")
+    @ExecFunction(name = "add")
     public static Expression addTinyIntTinyInt(TinyIntLiteral first, TinyIntLiteral second) {
         short result = (short) Math.addExact(first.getValue(), second.getValue());
         return new SmallIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"TINYINT", "SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "add")
     public static Expression addTinyIntSmallInt(TinyIntLiteral first, SmallIntLiteral second) {
         int result = Math.addExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"TINYINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addTinyIntInt(TinyIntLiteral first, IntegerLiteral second) {
         long result = Math.addExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"TINYINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addTinyIntBigInt(TinyIntLiteral first, BigIntLiteral second) {
         long result = Math.addExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"TINYINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addTinyIntLargeInt(TinyIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().add(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"SMALLINT", "TINYINT"}, returnType = "INT")
+    @ExecFunction(name = "add")
     public static Expression addSmallIntTinyInt(SmallIntLiteral first, TinyIntLiteral second) {
         int result = Math.addExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"SMALLINT", "SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "add")
     public static Expression addSmallIntSmallInt(SmallIntLiteral first, SmallIntLiteral second) {
         int result = Math.addExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"SMALLINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addSmallIntInt(SmallIntLiteral first, IntegerLiteral second) {
         long result = Math.addExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"SMALLINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addSmallIntBigInt(SmallIntLiteral first, BigIntLiteral second) {
         long result = Math.addExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"SMALLINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addSmallIntLargeInt(SmallIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().add(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"INT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addIntTinyInt(IntegerLiteral first, TinyIntLiteral second) {
         long result = Math.addExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"INT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addIntSmallInt(IntegerLiteral first, SmallIntLiteral second) {
         long result = Math.addExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"INT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addIntInt(IntegerLiteral first, IntegerLiteral second) {
         long result = Math.addExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"INT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addIntBigInt(IntegerLiteral first, BigIntLiteral second) {
         long result = Math.addExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"INT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addIntLargeInt(IntegerLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().add(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"BIGINT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addBigIntTinyInt(BigIntLiteral first, TinyIntLiteral second) {
         long result = Math.addExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"BIGINT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addBigIntSmallInt(BigIntLiteral first, SmallIntLiteral second) {
         long result = Math.addExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"BIGINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addBigIntInt(BigIntLiteral first, IntegerLiteral second) {
         long result = Math.addExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"BIGINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "add")
     public static Expression addBigIntBigInt(BigIntLiteral first, BigIntLiteral second) {
         long result = Math.addExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"BIGINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addBigIntLargeInt(BigIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().add(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"LARGEINT", "TINYINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addLargeIntTinyInt(LargeIntLiteral first, TinyIntLiteral second) {
         BigInteger result = first.getValue().add(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"LARGEINT", "SMALLINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addLargeIntSmallInt(LargeIntLiteral first, SmallIntLiteral second) {
         BigInteger result = first.getValue().add(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"LARGEINT", "INT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addLargeIntInt(LargeIntLiteral first, IntegerLiteral second) {
         BigInteger result = first.getValue().add(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"LARGEINT", "BIGINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addLargeIntBigInt(LargeIntLiteral first, BigIntLiteral second) {
         BigInteger result = first.getValue().add(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"LARGEINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "add")
     public static Expression addLargeIntLargeInt(LargeIntLiteral first, LargeIntLiteral second) {
         BigInteger result = first.getValue().add(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"DOUBLE", "DOUBLE"}, returnType = "DOUBLE")
+    @ExecFunction(name = "add")
     public static Expression addDoubleDouble(DoubleLiteral first, DoubleLiteral second) {
         double result = first.getValue() + second.getValue();
         return new DoubleLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"DECIMALV2", "DECIMALV2"}, returnType = "DECIMALV2")
+    @ExecFunction(name = "add")
     public static Expression addDecimalDecimal(DecimalLiteral first, DecimalLiteral second) {
         BigDecimal result = first.getValue().add(second.getValue());
         return new DecimalLiteral(result);
     }
 
-    @ExecFunction(name = "add", argTypes = {"DECIMALV3", "DECIMALV3"}, returnType = "DECIMALV3")
+    @ExecFunction(name = "add")
     public static Expression addDecimalV3DecimalV3(DecimalV3Literal first, DecimalV3Literal second) {
         BigDecimal result = first.getValue().add(second.getValue());
         return new DecimalV3Literal((DecimalV3Type) first.getDataType(), result);
@@ -212,169 +212,169 @@ public class NumericArithmetic {
     /**
      * Executable arithmetic functions subtract
      */
-    @ExecFunction(name = "subtract", argTypes = {"TINYINT", "TINYINT"}, returnType = "SMALLINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractTinyIntTinyInt(TinyIntLiteral first, TinyIntLiteral second) {
         short result = (short) Math.subtractExact(first.getValue(), second.getValue());
         return new SmallIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"TINYINT", "SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractTinyIntSmallInt(TinyIntLiteral first, SmallIntLiteral second) {
         int result = Math.subtractExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"TINYINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractTinyIntInt(TinyIntLiteral first, IntegerLiteral second) {
         long result = Math.subtractExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"TINYINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractTinyIntBigInt(TinyIntLiteral first, BigIntLiteral second) {
         long result = Math.subtractExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"TINYINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractTinyIntLargeInt(TinyIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().subtract(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"SMALLINT", "TINYINT"}, returnType = "INT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractSmallIntTinyInt(SmallIntLiteral first, TinyIntLiteral second) {
         int result = Math.subtractExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"SMALLINT", "SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractSmallIntSmallInt(SmallIntLiteral first, SmallIntLiteral second) {
         int result = Math.subtractExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"SMALLINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractSmallIntInt(SmallIntLiteral first, IntegerLiteral second) {
         long result = Math.subtractExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"SMALLINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractSmallIntBigInt(SmallIntLiteral first, BigIntLiteral second) {
         long result = Math.subtractExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"SMALLINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractSmallIntLargeInt(SmallIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().subtract(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"INT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractIntTinyInt(IntegerLiteral first, TinyIntLiteral second) {
         long result = Math.subtractExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"INT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractIntSmallInt(IntegerLiteral first, SmallIntLiteral second) {
         long result = Math.subtractExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"INT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractIntInt(IntegerLiteral first, IntegerLiteral second) {
         long result = Math.subtractExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"INT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractIntBigInt(IntegerLiteral first, BigIntLiteral second) {
         long result = Math.subtractExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"INT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractIntLargeInt(IntegerLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().subtract(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"BIGINT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractBigIntTinyInt(BigIntLiteral first, TinyIntLiteral second) {
         long result = Math.subtractExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"BIGINT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractBigIntSmallInt(BigIntLiteral first, SmallIntLiteral second) {
         long result = Math.subtractExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"BIGINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractBigIntInt(BigIntLiteral first, IntegerLiteral second) {
         long result = Math.subtractExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"BIGINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractBigIntBigInt(BigIntLiteral first, BigIntLiteral second) {
         long result = Math.subtractExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"BIGINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractBigIntLargeInt(BigIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().subtract(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"LARGEINT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractLargeIntTinyInt(LargeIntLiteral first, TinyIntLiteral second) {
         BigInteger result = first.getValue().subtract(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"LARGEINT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractLargeIntSmallInt(LargeIntLiteral first, SmallIntLiteral second) {
         BigInteger result = first.getValue().subtract(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"LARGEINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractLargeIntInt(LargeIntLiteral first, IntegerLiteral second) {
         BigInteger result = first.getValue().subtract(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"LARGEINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractLargeIntBigInt(LargeIntLiteral first, BigIntLiteral second) {
         BigInteger result = first.getValue().subtract(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"LARGEINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "subtract")
     public static Expression subtractLargeIntLargeInt(LargeIntLiteral first, LargeIntLiteral second) {
         BigInteger result = first.getValue().subtract(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"DOUBLE", "DOUBLE"}, returnType = "DOUBLE")
+    @ExecFunction(name = "subtract")
     public static Expression subtractDoubleDouble(DoubleLiteral first, DoubleLiteral second) {
         double result = first.getValue() - second.getValue();
         return new DoubleLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"DECIMALV2", "DECIMALV2"}, returnType = "DECIMALV2")
+    @ExecFunction(name = "subtract")
     public static Expression subtractDecimalDecimal(DecimalLiteral first, DecimalLiteral second) {
         BigDecimal result = first.getValue().subtract(second.getValue());
         return new DecimalLiteral(result);
     }
 
-    @ExecFunction(name = "subtract", argTypes = {"DECIMALV3", "DECIMALV3"}, returnType = "DECIMALV3")
+    @ExecFunction(name = "subtract")
     public static Expression subtractDecimalV3DecimalV3(DecimalV3Literal first, DecimalV3Literal second) {
         BigDecimal result = first.getValue().subtract(second.getValue());
         return new DecimalV3Literal((DecimalV3Type) first.getDataType(), result);
@@ -383,163 +383,163 @@ public class NumericArithmetic {
     /**
      * Executable arithmetic functions multiply
      */
-    @ExecFunction(name = "multiply", argTypes = {"TINYINT", "TINYINT"}, returnType = "SMALLINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyTinyIntTinyInt(TinyIntLiteral first, TinyIntLiteral second) {
         short result = (short) Math.multiplyExact(first.getValue(), second.getValue());
         return new SmallIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"TINYINT", "SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyTinyIntSmallInt(TinyIntLiteral first, SmallIntLiteral second) {
         int result = Math.multiplyExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"TINYINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyTinyIntInt(TinyIntLiteral first, IntegerLiteral second) {
         long result = Math.multiplyExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"TINYINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyTinyIntBigInt(TinyIntLiteral first, BigIntLiteral second) {
         long result = Math.multiplyExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"TINYINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyTinyIntLargeInt(TinyIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().multiply(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"SMALLINT", "TINYINT"}, returnType = "INT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplySmallIntTinyInt(SmallIntLiteral first, TinyIntLiteral second) {
         int result = Math.multiplyExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"SMALLINT", "SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplySmallIntSmallInt(SmallIntLiteral first, SmallIntLiteral second) {
         int result = Math.multiplyExact(first.getValue(), second.getValue());
         return new IntegerLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"SMALLINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplySmallIntInt(SmallIntLiteral first, IntegerLiteral second) {
         long result = Math.multiplyExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"SMALLINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplySmallIntBigInt(SmallIntLiteral first, BigIntLiteral second) {
         long result = Math.multiplyExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"SMALLINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplySmallIntLargeInt(SmallIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().multiply(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"INT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyIntTinyInt(IntegerLiteral first, TinyIntLiteral second) {
         long result = Math.multiplyExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"INT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyIntSmallInt(IntegerLiteral first, SmallIntLiteral second) {
         long result = Math.multiplyExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"INT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyIntInt(IntegerLiteral first, IntegerLiteral second) {
         long result = Math.multiplyExact((long) first.getValue(), (long) second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"INT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyIntBigInt(IntegerLiteral first, BigIntLiteral second) {
         long result = Math.multiplyExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"INT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyIntLargeInt(IntegerLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().multiply(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"BIGINT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyBigIntTinyInt(BigIntLiteral first, TinyIntLiteral second) {
         long result = Math.multiplyExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"BIGINT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyBigIntSmallInt(BigIntLiteral first, SmallIntLiteral second) {
         long result = Math.multiplyExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"BIGINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyBigIntInt(BigIntLiteral first, IntegerLiteral second) {
         long result = Math.multiplyExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"BIGINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyBigIntBigInt(BigIntLiteral first, BigIntLiteral second) {
         long result = Math.multiplyExact(first.getValue(), second.getValue());
         return new BigIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"BIGINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyBigIntLargeInt(BigIntLiteral first, LargeIntLiteral second) {
         BigInteger result = second.getValue().multiply(new BigInteger(first.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"LARGEINT", "TINYINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyLargeIntTinyInt(LargeIntLiteral first, TinyIntLiteral second) {
         BigInteger result = first.getValue().multiply(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"LARGEINT", "SMALLINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyLargeIntSmallInt(LargeIntLiteral first, SmallIntLiteral second) {
         BigInteger result = first.getValue().multiply(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"LARGEINT", "INT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyLargeIntInt(LargeIntLiteral first, IntegerLiteral second) {
         BigInteger result = first.getValue().multiply(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"LARGEINT", "BIGINT"}, returnType = "BIGINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyLargeIntBigInt(LargeIntLiteral first, BigIntLiteral second) {
         BigInteger result = first.getValue().multiply(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"LARGEINT", "LARGEINT"}, returnType = "LARGEINT")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyLargeIntLargeInt(LargeIntLiteral first, LargeIntLiteral second) {
         BigInteger result = first.getValue().multiply(new BigInteger(second.getValue().toString()));
         return new LargeIntLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"DOUBLE", "DOUBLE"}, returnType = "DOUBLE")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyDoubleDouble(DoubleLiteral first, DoubleLiteral second) {
         double result = first.getValue() * second.getValue();
         return new DoubleLiteral(result);
     }
 
-    @ExecFunction(name = "multiply", argTypes = {"DECIMALV2", "DECIMALV2"}, returnType = "DECIMALV2")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyDecimalDecimal(DecimalLiteral first, DecimalLiteral second) {
         BigDecimal result = first.getValue().multiply(second.getValue());
         return new DecimalLiteral(result);
@@ -548,7 +548,7 @@ public class NumericArithmetic {
     /**
      * decimalV3 multiply in FE
      */
-    @ExecFunction(name = "multiply", argTypes = {"DECIMALV3", "DECIMALV3"}, returnType = "DECIMALV3")
+    @ExecFunction(name = "multiply")
     public static Expression multiplyDecimalV3DecimalV3(DecimalV3Literal first, DecimalV3Literal second) {
         BigDecimal result = first.getValue().multiply(second.getValue());
         DecimalV3Type t1 = (DecimalV3Type) first.getDataType();
@@ -561,7 +561,7 @@ public class NumericArithmetic {
     /**
      * Executable arithmetic functions divide
      */
-    @ExecFunction(name = "divide", argTypes = {"DOUBLE", "DOUBLE"}, returnType = "DOUBLE")
+    @ExecFunction(name = "divide")
     public static Expression divideDouble(DoubleLiteral first, DoubleLiteral second) {
         if (second.getValue() == 0.0) {
             return new NullLiteral(first.getDataType());
@@ -573,7 +573,7 @@ public class NumericArithmetic {
     /**
      * Executable arithmetic functions divide
      */
-    @ExecFunction(name = "divide", argTypes = {"DECIMALV2", "DECIMALV2"}, returnType = "DECIMALV2")
+    @ExecFunction(name = "divide")
     public static Expression divideDecimal(DecimalLiteral first, DecimalLiteral second) {
         if (first.getValue().compareTo(BigDecimal.ZERO) == 0) {
             return new NullLiteral(first.getDataType());
@@ -585,7 +585,7 @@ public class NumericArithmetic {
     /**
      * decimalv3 divide in FE
      */
-    @ExecFunction(name = "divide", argTypes = {"DECIMALV3", "DECIMALV3"}, returnType = "DECIMALV3")
+    @ExecFunction(name = "divide")
     public static Expression divideDecimalV3(DecimalV3Literal first, DecimalV3Literal second) {
         if (second.getValue().compareTo(BigDecimal.ZERO) == 0) {
             return new NullLiteral(first.getDataType());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
index 6f2ff11ad9a..bc9cc29e7d0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
@@ -67,7 +67,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions concat
      */
-    @ExecFunction(name = "concat", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "concat")
     public static Expression concatVarcharVarchar(StringLikeLiteral first, StringLikeLiteral second) {
         String result = first.getValue() + second.getValue();
         return castStringLikeLiteral(first, result);
@@ -102,7 +102,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions substring
      */
-    @ExecFunction(name = "substring", argTypes = {"VARCHAR", "INT", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "substring")
     public static Expression substringVarcharIntInt(StringLikeLiteral first,
                                                         IntegerLiteral second, IntegerLiteral third) {
         return castStringLikeLiteral(first, substringImpl(first.getValue(), second.getValue(), third.getValue()));
@@ -111,7 +111,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions length
      */
-    @ExecFunction(name = "length", argTypes = {"VARCHAR"}, returnType = "INT")
+    @ExecFunction(name = "length")
     public static Expression lengthVarchar(StringLikeLiteral first) {
         return new IntegerLiteral(first.getValue().length());
     }
@@ -119,7 +119,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Lower
      */
-    @ExecFunction(name = "lower", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "lower")
     public static Expression lowerVarchar(StringLikeLiteral first) {
         return castStringLikeLiteral(first, first.getValue().toLowerCase());
     }
@@ -127,7 +127,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Upper
      */
-    @ExecFunction(name = "upper", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "upper")
     public static Expression upperVarchar(StringLikeLiteral first) {
         return castStringLikeLiteral(first, first.getValue().toUpperCase());
     }
@@ -153,7 +153,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Trim
      */
-    @ExecFunction(name = "trim", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "trim")
     public static Expression trimVarchar(StringLikeLiteral first) {
         return castStringLikeLiteral(first, trimImpl(first.getValue(), " ", true, true));
     }
@@ -161,7 +161,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Trim
      */
-    @ExecFunction(name = "trim", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "trim")
     public static Expression trimVarcharVarchar(StringLikeLiteral first, StringLikeLiteral second) {
         return castStringLikeLiteral(first, trimImpl(first.getValue(), second.getValue(), true, true));
     }
@@ -169,7 +169,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions ltrim
      */
-    @ExecFunction(name = "ltrim", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "ltrim")
     public static Expression ltrimVarchar(StringLikeLiteral first) {
         return castStringLikeLiteral(first, trimImpl(first.getValue(), " ", true, false));
     }
@@ -177,7 +177,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions ltrim
      */
-    @ExecFunction(name = "ltrim", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "ltrim")
     public static Expression ltrimVarcharVarchar(StringLikeLiteral first, StringLikeLiteral second) {
         return castStringLikeLiteral(first, trimImpl(first.getValue(), second.getValue(), true, false));
     }
@@ -185,7 +185,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions rtrim
      */
-    @ExecFunction(name = "rtrim", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "rtrim")
     public static Expression rtrimVarchar(StringLikeLiteral first) {
         return castStringLikeLiteral(first, trimImpl(first.getValue(), " ", false, true));
     }
@@ -193,7 +193,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions rtrim
      */
-    @ExecFunction(name = "rtrim", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "rtrim")
     public static Expression rtrimVarcharVarchar(StringLikeLiteral first, StringLikeLiteral second) {
         return castStringLikeLiteral(first, trimImpl(first.getValue(), second.getValue(), false, true));
     }
@@ -201,7 +201,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Replace
      */
-    @ExecFunction(name = "replace", argTypes = {"VARCHAR", "VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "replace")
     public static Expression replace(StringLikeLiteral first, StringLikeLiteral second, StringLikeLiteral third) {
         if (second.getValue().length() == 0) {
             return castStringLikeLiteral(first, first.getValue());
@@ -212,7 +212,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Left
      */
-    @ExecFunction(name = "left", argTypes = {"VARCHAR", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "left")
     public static Expression left(StringLikeLiteral first, IntegerLiteral second) {
         if (second.getValue() <= 0) {
             return castStringLikeLiteral(first, "");
@@ -226,7 +226,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Right
      */
-    @ExecFunction(name = "right", argTypes = {"VARCHAR", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "right")
     public static Expression right(StringLikeLiteral first, IntegerLiteral second) {
         if (second.getValue() < (- first.getValue().length()) || Math.abs(second.getValue()) == 0) {
             return castStringLikeLiteral(first, "");
@@ -246,7 +246,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Locate
      */
-    @ExecFunction(name = "locate", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "INT")
+    @ExecFunction(name = "locate")
     public static Expression locate(StringLikeLiteral first, StringLikeLiteral second) {
         return new IntegerLiteral(second.getValue().trim().indexOf(first.getValue()) + 1);
     }
@@ -254,7 +254,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Instr
      */
-    @ExecFunction(name = "instr", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "INT")
+    @ExecFunction(name = "instr")
     public static Expression instr(StringLikeLiteral first, StringLikeLiteral second) {
         return new IntegerLiteral(first.getValue().indexOf(second.getValue()) + 1);
     }
@@ -262,7 +262,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Ascii
      */
-    @ExecFunction(name = "ascii", argTypes = {"VARCHAR"}, returnType = "INT")
+    @ExecFunction(name = "ascii")
     public static Expression ascii(StringLikeLiteral first) {
         if (first.getValue().length() == 0) {
             return new IntegerLiteral(0);
@@ -274,7 +274,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions Bin
      */
-    @ExecFunction(name = "bin", argTypes = {"BIGINT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "bin")
     public static Expression bin(BigIntLiteral first) {
         return new VarcharLiteral(Long.toBinaryString(first.getValue()));
     }
@@ -282,7 +282,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions ConcatWs
      */
-    @ExecFunction(name = "concat_ws", argTypes = {"VARCHAR", "ARRAY<VARCHAR>"}, returnType = "VARCHAR")
+    @ExecFunction(name = "concat_ws")
     public static Expression concatWsVarcharArray(StringLikeLiteral first, ArrayLiteral second) {
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < second.getValue().size() - 1; i++) {
@@ -298,7 +298,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions ConcatWs
      */
-    @ExecFunction(varArgs = true, name = "concat_ws", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "concat_ws")
     public static Expression concatWsVarcharVarchar(StringLikeLiteral first, VarcharLiteral... second) {
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < second.length - 1; i++) {
@@ -312,7 +312,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions CharacterLength
      */
-    @ExecFunction(name = "character_length", argTypes = {"VARCHAR"}, returnType = "INT")
+    @ExecFunction(name = "character_length")
     public static Expression characterLength(StringLikeLiteral first) {
         return new IntegerLiteral(first.getValue().length());
     }
@@ -328,7 +328,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions initCap
      */
-    @ExecFunction(name = "initcap", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "initcap")
     public static Expression initCap(StringLikeLiteral first) {
         StringBuilder result = new StringBuilder(first.getValue().length());
         boolean capitalizeNext = true;
@@ -350,7 +350,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions md5
      */
-    @ExecFunction(name = "md5", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "md5")
     public static Expression md5(StringLikeLiteral first) {
         try {
             MessageDigest md = MessageDigest.getInstance("MD5");
@@ -365,7 +365,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions md5
      */
-    @ExecFunction(varArgs = true, name = "md5sum", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "md5sum")
     public static Expression md5Sum(VarcharLiteral... first) {
         try {
             // Step 1: Create a MessageDigest instance for MD5
@@ -419,7 +419,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"INT", "INT"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldInt(IntegerLiteral first, IntegerLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -427,7 +427,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"TINYINT", "TINYINT"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldTinyInt(TinyIntLiteral first, TinyIntLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -435,7 +435,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"SMALLINT", "SMALLINT"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldSmallInt(SmallIntLiteral first, SmallIntLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -443,7 +443,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"BIGINT", "BIGINT"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldBigInt(BigIntLiteral first, BigIntLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -451,7 +451,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"LARGEINT", "LARGEINT"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldLargeInt(LargeIntLiteral first, LargeIntLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -459,7 +459,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"FLOAT", "FLOAT"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldFloat(FloatLiteral first, FloatLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -467,7 +467,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"DOUBLE", "DOUBLE"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldDouble(DoubleLiteral first, DoubleLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -475,7 +475,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"DECIMAL", "DECIMAL"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldDecimalV2(DecimalLiteral first, DecimalLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -483,7 +483,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"DECIMALV3", "DECIMALV3"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldDecimalV3(DecimalV3Literal first, DecimalV3Literal... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -491,7 +491,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"DATETIME", "DATETIME"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldDateTime(DateTimeLiteral first, DateTimeLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -499,7 +499,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldDateTimeV2(DateTimeV2Literal first, DateTimeV2Literal... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -507,7 +507,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions field
      */
-    @ExecFunction(varArgs = true, name = "field", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "INT")
+    @ExecFunction(name = "field")
     public static Expression fieldVarchar(StringLikeLiteral first, VarcharLiteral... second) {
         return new IntegerLiteral(compareLiteral(first, second));
     }
@@ -525,7 +525,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions find_in_set
      */
-    @ExecFunction(name = "find_in_set", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "INT")
+    @ExecFunction(name = "find_in_set")
     public static Expression findInSetVarchar(StringLikeLiteral first, StringLikeLiteral second) {
         return new IntegerLiteral(findStringInSet(first.getValue(), second.getValue()));
     }
@@ -533,7 +533,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions repeat
      */
-    @ExecFunction(name = "repeat", argTypes = {"VARCHAR", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "repeat")
     public static Expression repeat(StringLikeLiteral first, IntegerLiteral second) {
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < second.getValue(); i++) {
@@ -545,7 +545,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions reverse
      */
-    @ExecFunction(name = "reverse", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "reverse")
     public static Expression reverseVarchar(StringLikeLiteral first) {
         StringBuilder sb = new StringBuilder();
         sb.append(first.getValue());
@@ -555,7 +555,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions space
      */
-    @ExecFunction(name = "space", argTypes = {"INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "space")
     public static Expression space(IntegerLiteral first) {
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < first.getValue(); i++) {
@@ -567,7 +567,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions split_by_char
      */
-    @ExecFunction(name = "split_by_char", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "ARRAY<VARCHAR>")
+    @ExecFunction(name = "split_by_char")
     public static Expression splitByChar(StringLikeLiteral first, StringLikeLiteral second) {
         String[] result = first.getValue().split(second.getValue());
         List<Literal> items = new ArrayList<>();
@@ -580,7 +580,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions split_part
      */
-    @ExecFunction(name = "split_part", argTypes = {"VARCHAR", "VARCHAR", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "split_part")
     public static Expression splitPart(StringLikeLiteral first, StringLikeLiteral chr, IntegerLiteral number) {
         if (first.getValue().equals(chr.getValue())) {
             if (Math.abs(number.getValue()) == 1 || Math.abs(number.getValue()) == 2) {
@@ -623,7 +623,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions substring_index
      */
-    @ExecFunction(name = "substring_index", argTypes = {"VARCHAR", "VARCHAR", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "substring_index")
     public static Expression substringIndex(StringLikeLiteral first, StringLikeLiteral chr, IntegerLiteral number) {
         String[] parts = first.getValue().split(chr.getValue());
         if (Math.abs(number.getValue()) >= parts.length) {
@@ -652,7 +652,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions strcmp
      */
-    @ExecFunction(name = "strcmp", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "TINYINT")
+    @ExecFunction(name = "strcmp")
     public static Expression strcmp(StringLikeLiteral first, StringLikeLiteral second) {
         int result = first.getValue().compareTo(second.getValue());
         if (result == 0) {
@@ -667,7 +667,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions strLeft
      */
-    @ExecFunction(name = "strleft", argTypes = {"VARCHAR", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "strleft")
     public static Expression strLeft(StringLikeLiteral first, IntegerLiteral second) {
         if (second.getValue() <= 0) {
             return castStringLikeLiteral(first, "");
@@ -681,7 +681,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions strRight
      */
-    @ExecFunction(name = "strright", argTypes = {"VARCHAR", "INT"}, returnType = "VARCHAR")
+    @ExecFunction(name = "strright")
     public static Expression strRight(StringLikeLiteral first, IntegerLiteral second) {
         if (second.getValue() < (- first.getValue().length()) || Math.abs(second.getValue()) == 0) {
             return castStringLikeLiteral(first, "");
@@ -701,7 +701,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions overlay
      */
-    @ExecFunction(name = "overlay", argTypes = {"VARCHAR", "INT", "INT", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "overlay")
     public static Expression overlay(StringLikeLiteral first,
                                         IntegerLiteral second, IntegerLiteral third, StringLikeLiteral four) {
         StringBuilder sb = new StringBuilder();
@@ -725,7 +725,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions parseurl
      */
-    @ExecFunction(name = "parse_url", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "parse_url")
     public static Expression parseurl(StringLikeLiteral first, StringLikeLiteral second) {
         URI uri = null;
         try {
@@ -780,7 +780,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions urldecode
      */
-    @ExecFunction(name = "url_decode", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "url_decode")
     public static Expression urlDecode(StringLikeLiteral first) {
         try {
             return castStringLikeLiteral(first, URLDecoder.decode(first.getValue(), StandardCharsets.UTF_8.name()));
@@ -792,7 +792,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions append_trailing_char_if_absent
      */
-    @ExecFunction(name = "append_trailing_char_if_absent", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "append_trailing_char_if_absent")
     public static Expression appendTrailingCharIfAbsent(StringLikeLiteral first, StringLikeLiteral second) {
         if (first.getValue().endsWith(second.getValue())) {
             return first;
@@ -804,7 +804,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions endsWith
      */
-    @ExecFunction(name = "ends_with", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "BOOLEAN")
+    @ExecFunction(name = "ends_with")
     public static Expression endsWith(StringLikeLiteral first, StringLikeLiteral second) {
         if (first.getValue().endsWith(second.getValue())) {
             return BooleanLiteral.TRUE;
@@ -816,7 +816,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions extractUrlParameter
      */
-    @ExecFunction(name = "extract_url_parameter", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "extract_url_parameter")
     public static Expression extractUrlParameter(StringLikeLiteral first, StringLikeLiteral second) {
         if (first.getValue() == null || first.getValue().indexOf('?') == -1) {
             return castStringLikeLiteral(first, "");
@@ -840,7 +840,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions quote
      */
-    @ExecFunction(name = "quote", argTypes = {"VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "quote")
     public static Expression quote(StringLikeLiteral first) {
         return castStringLikeLiteral(first, "\'" + first.getValue() + "\'");
     }
@@ -848,7 +848,7 @@ public class StringArithmetic {
     /**
      * Executable arithmetic functions replaceEmpty
      */
-    @ExecFunction(name = "replace_empty", argTypes = {"VARCHAR", "VARCHAR", "VARCHAR"}, returnType = "VARCHAR")
+    @ExecFunction(name = "replace_empty")
     public static Expression replaceEmpty(StringLikeLiteral first, StringLikeLiteral second, StringLikeLiteral third) {
         return castStringLikeLiteral(first, first.getValue().replace(second.getValue(), third.getValue()));
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java
index 3a98ee62527..41254428322 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java
@@ -137,73 +137,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function year-ceil
      */
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "year_ceil", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_ceil")
     public static Expression yearCeil(DateTimeV2Literal date, IntegerLiteral period, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
@@ -212,73 +212,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function month-ceil
      */
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "month_ceil", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_ceil")
     public static Expression monthCeil(DateTimeV2Literal date, IntegerLiteral period, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
@@ -287,73 +287,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function day-ceil
      */
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "day_ceil", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_ceil")
     public static Expression dayCeil(DateTimeV2Literal date, IntegerLiteral period, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
@@ -362,73 +362,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function hour-ceil
      */
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "hour_ceil", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_ceil")
     public static Expression hourCeil(DateTimeV2Literal date, IntegerLiteral period, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
@@ -437,73 +437,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function minute-ceil
      */
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "minute_ceil", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_ceil")
     public static Expression minuteCeil(DateTimeV2Literal date, IntegerLiteral period,
             DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
@@ -513,73 +513,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function SECOND-ceil
      */
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, origin.toJavaDateType(), true));
     }
 
-    @ExecFunction(name = "second_ceil", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_ceil")
     public static Expression secondCeil(DateTimeV2Literal date, IntegerLiteral period,
             DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
@@ -589,73 +589,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function year-floor
      */
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "year_floor", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "year_floor")
     public static Expression yearFloor(DateTimeV2Literal date, IntegerLiteral period, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.YEAR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
@@ -664,73 +664,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function month-floor
      */
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "month_floor", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "month_floor")
     public static Expression monthFloor(DateTimeV2Literal date, IntegerLiteral period,
             DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MONTH, date.toJavaDateType(),
@@ -740,73 +740,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function day-floor
      */
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "day_floor", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "day_floor")
     public static Expression dayFloor(DateTimeV2Literal date, IntegerLiteral period, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.DAY, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
@@ -815,73 +815,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function hour-floor
      */
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "hour_floor", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "hour_floor")
     public static Expression hourFloor(DateTimeV2Literal date, IntegerLiteral period, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.HOUR, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
@@ -890,73 +890,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function minute-floor
      */
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "minute_floor", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "minute_floor")
     public static Expression minuteFloor(DateTimeV2Literal date, IntegerLiteral period,
             DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.MINUTE, date.toJavaDateType(),
@@ -966,73 +966,73 @@ public class TimeRoundSeries {
     /**
      * datetime arithmetic function SECOND-floor
      */
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeLiteral date) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIME", "INT"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeLiteral date, IntegerLiteral period) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIME", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeLiteral date, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIME", "INT", "DATETIME"}, returnType = "DATETIME")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeLiteral date, IntegerLiteral period, DateTimeLiteral origin) {
         return DateTimeLiteral.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateV2Literal date) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATEV2", "INT"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateV2Literal date, IntegerLiteral period) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATEV2", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateV2Literal date, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATEV2", "INT", "DATEV2"}, returnType = "DATEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateV2Literal date, IntegerLiteral period, DateV2Literal origin) {
         return DateV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeV2Literal date) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIMEV2", "INT"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeV2Literal date, IntegerLiteral period) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 period.getValue(), START_ORIGINAL_DAY, false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIMEV2", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeV2Literal date, DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),
                 1, origin.toJavaDateType(), false));
     }
 
-    @ExecFunction(name = "second_floor", argTypes = {"DATETIMEV2", "INT", "DATETIMEV2"}, returnType = "DATETIMEV2")
+    @ExecFunction(name = "second_floor")
     public static Expression secondFloor(DateTimeV2Literal date, IntegerLiteral period,
             DateTimeV2Literal origin) {
         return DateTimeV2Literal.fromJavaDateType(getDateCeilOrFloor(DATE.SECOND, date.toJavaDateType(),


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org