This is an automated email from the ASF dual-hosted git repository.
morrysnow 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 71951fe9f64 [refactor](fe) Replace TFunctionBinaryType with
Function.BinaryType to decouple from Thrift (#61786)
71951fe9f64 is described below
commit 71951fe9f64118669ff9e1091851ae2afa5c5b94
Author: morrySnow <[email protected]>
AuthorDate: Fri Mar 27 12:00:45 2026 +0800
[refactor](fe) Replace TFunctionBinaryType with Function.BinaryType to
decouple from Thrift (#61786)
### What problem does this PR solve?
Problem Summary:
`Function` and its subclasses were tightly coupled to the Thrift class
`TFunctionBinaryType`. This refactoring introduces a pure-Java
`BinaryType` enum inside `Function`, replaces all internal usages of
`TFunctionBinaryType` with it, and confines Thrift conversion to
`FunctionToThriftConverter` only.
**Changes:**
- Added `Function.BinaryType` enum (pure Java, no Thrift dependency)
with 8 values: BUILTIN, HIVE, NATIVE, IR, RPC, JAVA_UDF, AGG_STATE,
PYTHON_UDF
- Added `toThriftBinaryType()` and `fromThriftBinaryType()` conversion
methods in `FunctionToThriftConverter`
- Updated 17 files to replace `TFunctionBinaryType` with
`Function.BinaryType`
- `TFunctionBinaryType` now only appears in
`FunctionToThriftConverter.java` (the Thrift serialization boundary)
### Release note
None
Co-authored-by: Copilot <[email protected]>
---
.../apache/doris/catalog/AggregateFunction.java | 11 +++--
.../org/apache/doris/catalog/AliasFunction.java | 3 +-
.../java/org/apache/doris/catalog/Function.java | 22 +++++++---
.../doris/catalog/FunctionToSqlConverter.java | 7 ++--
.../doris/catalog/FunctionToThriftConverter.java | 44 ++++++++++++++++---
.../org/apache/doris/catalog/FunctionUtil.java | 13 +++---
.../org/apache/doris/catalog/ScalarFunction.java | 11 +++--
.../glue/translator/ExpressionTranslator.java | 19 ++++-----
.../trees/expressions/functions/udf/JavaUdaf.java | 5 +--
.../trees/expressions/functions/udf/JavaUdf.java | 5 +--
.../trees/expressions/functions/udf/JavaUdtf.java | 5 +--
.../expressions/functions/udf/PythonUdaf.java | 5 +--
.../trees/expressions/functions/udf/PythonUdf.java | 5 +--
.../expressions/functions/udf/PythonUdtf.java | 5 +--
.../plans/commands/CreateFunctionCommand.java | 49 +++++++++++-----------
.../doris/catalog/FunctionToSqlConverterTest.java | 36 ++++++++--------
.../catalog/FunctionToThriftConverterTest.java | 35 ++++++++--------
17 files changed, 156 insertions(+), 124 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
index 05b3f60408c..d5c3f90fb70 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
@@ -18,7 +18,6 @@
package org.apache.doris.catalog;
import org.apache.doris.common.util.URI;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.gson.annotations.SerializedName;
@@ -77,7 +76,7 @@ public class AggregateFunction extends Function {
URI location, String updateFnSymbol, String initFnSymbol,
String serializeFnSymbol, String mergeFnSymbol, String
getValueFnSymbol,
String removeFnSymbol, String finalizeFnSymbol, boolean
ignoresDistinct,
- boolean isAnalyticFn, boolean returnsNonNullOnEmpty,
TFunctionBinaryType binaryType,
+ boolean isAnalyticFn, boolean returnsNonNullOnEmpty, BinaryType
binaryType,
boolean userVisible, boolean vectorized, NullableMode
nullableMode) {
// only `count` is always not nullable, other aggregate function is
always nullable
super(0, fnName, argTypes, retType, hasVarArgs, binaryType,
userVisible, vectorized, nullableMode);
@@ -129,7 +128,7 @@ public class AggregateFunction extends Function {
}
public static class AggregateFunctionBuilder {
- TFunctionBinaryType binaryType;
+ BinaryType binaryType;
FunctionName name;
Type[] argTypes;
Type retType;
@@ -145,12 +144,12 @@ public class AggregateFunction extends Function {
String getValueFnSymbol;
String symbolName;
- private AggregateFunctionBuilder(TFunctionBinaryType binaryType) {
+ private AggregateFunctionBuilder(BinaryType binaryType) {
this.binaryType = binaryType;
}
public static AggregateFunctionBuilder createUdfBuilder() {
- return new AggregateFunctionBuilder(TFunctionBinaryType.JAVA_UDF);
+ return new AggregateFunctionBuilder(BinaryType.JAVA_UDF);
}
public AggregateFunctionBuilder name(FunctionName name) {
@@ -218,7 +217,7 @@ public class AggregateFunction extends Function {
return this;
}
- public AggregateFunctionBuilder binaryType(TFunctionBinaryType
binaryType) {
+ public AggregateFunctionBuilder binaryType(BinaryType binaryType) {
this.binaryType = binaryType;
return this;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java
index 1f6c624c86d..a627a7fc08e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/AliasFunction.java
@@ -18,7 +18,6 @@
package org.apache.doris.catalog;
import org.apache.doris.analysis.Expr;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.gson.annotations.SerializedName;
import org.apache.logging.log4j.LogManager;
@@ -62,7 +61,7 @@ public class AliasFunction extends Function {
public static AliasFunction createFunction(FunctionName functionName,
Type[] argTypes, Type retType,
boolean hasVarArgs, List<String> parameters, Expr originFunction,
Map<String, String> sessionVariables) {
AliasFunction aliasFunction = new AliasFunction(functionName,
Arrays.asList(argTypes), retType, hasVarArgs);
- aliasFunction.setBinaryType(TFunctionBinaryType.JAVA_UDF);
+ aliasFunction.setBinaryType(BinaryType.JAVA_UDF);
aliasFunction.setUserVisible(true);
aliasFunction.originFunction = originFunction;
aliasFunction.parameters = parameters;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Function.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Function.java
index 4865db349b8..568fbb51c3b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Function.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Function.java
@@ -22,7 +22,6 @@ import org.apache.doris.common.io.Text;
import org.apache.doris.common.io.Writable;
import org.apache.doris.common.util.URI;
import org.apache.doris.persist.gson.GsonUtils;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
@@ -52,6 +51,17 @@ public class Function implements Writable {
ALWAYS_NOT_NULLABLE
}
+ public enum BinaryType {
+ BUILTIN,
+ HIVE,
+ NATIVE,
+ IR,
+ RPC,
+ JAVA_UDF,
+ AGG_STATE,
+ PYTHON_UDF
+ }
+
// Function id, every function has a unique id. Now all built-in
functions' id is 0
@SerializedName("id")
private long id = 0;
@@ -79,7 +89,7 @@ public class Function implements Writable {
@SerializedName("l")
private URI location;
@SerializedName("bt")
- private TFunctionBinaryType binaryType;
+ private BinaryType binaryType;
@SerializedName("nm")
protected NullableMode nullableMode = NullableMode.DEPEND_ON_ARGUMENT;
@@ -119,7 +129,7 @@ public class Function implements Writable {
}
public Function(long id, FunctionName name, List<Type> argTypes, Type
retType, boolean hasVarArgs,
- TFunctionBinaryType binaryType, boolean userVisible, boolean
vectorized, NullableMode mode) {
+ BinaryType binaryType, boolean userVisible, boolean vectorized,
NullableMode mode) {
this.id = id;
this.name = name;
this.hasVarArgs = hasVarArgs;
@@ -137,7 +147,7 @@ public class Function implements Writable {
public Function(long id, FunctionName name, List<Type> argTypes, Type
retType,
boolean hasVarArgs, boolean vectorized, NullableMode mode) {
- this(id, name, argTypes, retType, hasVarArgs,
TFunctionBinaryType.BUILTIN, true, vectorized, mode);
+ this(id, name, argTypes, retType, hasVarArgs, BinaryType.BUILTIN,
true, vectorized, mode);
}
public Function(Function other) {
@@ -215,11 +225,11 @@ public class Function implements Writable {
this.name = name;
}
- public TFunctionBinaryType getBinaryType() {
+ public BinaryType getBinaryType() {
return binaryType;
}
- public void setBinaryType(TFunctionBinaryType type) {
+ public void setBinaryType(BinaryType type) {
binaryType = type;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToSqlConverter.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToSqlConverter.java
index c599a3f9eb2..8709eb5b6de 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToSqlConverter.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToSqlConverter.java
@@ -22,7 +22,6 @@ import org.apache.doris.analysis.ExprToSqlVisitor;
import org.apache.doris.analysis.SlotRef;
import org.apache.doris.analysis.ToSqlParams;
import org.apache.doris.catalog.Function.NullableMode;
-import org.apache.doris.thrift.TFunctionBinaryType;
import java.util.List;
import java.util.stream.Collectors;
@@ -71,7 +70,7 @@ public class FunctionToSqlConverter {
sb.append(",\n \"CLOSE_FN\"=").append("\"" +
fn.getCloseFnSymbol() + "\"");
}
- if (fn.getBinaryType() == TFunctionBinaryType.JAVA_UDF) {
+ if (fn.getBinaryType() == Function.BinaryType.JAVA_UDF) {
sb.append(",\n \"FILE\"=")
.append("\"" + (fn.getLocation() == null ? "" :
fn.getLocation().toString()) + "\"");
boolean isReturnNull = fn.getNullableMode() ==
NullableMode.ALWAYS_NULLABLE;
@@ -106,7 +105,7 @@ public class FunctionToSqlConverter {
}
sb.append(" PROPERTIES (");
- if (fn.getBinaryType() != TFunctionBinaryType.JAVA_UDF) {
+ if (fn.getBinaryType() != Function.BinaryType.JAVA_UDF) {
sb.append("\n \"INIT_FN\"=\"" + fn.getInitFnSymbol() + "\",")
.append("\n \"UPDATE_FN\"=\"" + fn.getUpdateFnSymbol() +
"\",")
.append("\n \"MERGE_FN\"=\"" + fn.getMergeFnSymbol() +
"\",");
@@ -121,7 +120,7 @@ public class FunctionToSqlConverter {
sb.append("\n \"SYMBOL\"=\"" + fn.getSymbolName() + "\",");
}
- if (fn.getBinaryType() == TFunctionBinaryType.JAVA_UDF) {
+ if (fn.getBinaryType() == Function.BinaryType.JAVA_UDF) {
sb.append("\n \"FILE\"=")
.append("\"" + (fn.getLocation() == null ? "" :
fn.getLocation().toString()) + "\",");
boolean isReturnNull = fn.getNullableMode() ==
NullableMode.ALWAYS_NULLABLE;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToThriftConverter.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToThriftConverter.java
index 4a33d93fa78..5c4ca6f8be9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToThriftConverter.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionToThriftConverter.java
@@ -31,6 +31,40 @@ import com.google.common.collect.Lists;
*/
public class FunctionToThriftConverter {
+ /**
+ * Converts a {@link Function.BinaryType} to its Thrift representation.
+ */
+ public static TFunctionBinaryType toThriftBinaryType(Function.BinaryType
binaryType) {
+ switch (binaryType) {
+ case BUILTIN: return TFunctionBinaryType.BUILTIN;
+ case HIVE: return TFunctionBinaryType.HIVE;
+ case NATIVE: return TFunctionBinaryType.NATIVE;
+ case IR: return TFunctionBinaryType.IR;
+ case RPC: return TFunctionBinaryType.RPC;
+ case JAVA_UDF: return TFunctionBinaryType.JAVA_UDF;
+ case AGG_STATE: return TFunctionBinaryType.AGG_STATE;
+ case PYTHON_UDF: return TFunctionBinaryType.PYTHON_UDF;
+ default: throw new IllegalArgumentException("Unknown BinaryType: "
+ binaryType);
+ }
+ }
+
+ /**
+ * Converts a Thrift {@link TFunctionBinaryType} to {@link
Function.BinaryType}.
+ */
+ public static Function.BinaryType fromThriftBinaryType(TFunctionBinaryType
thriftType) {
+ switch (thriftType) {
+ case BUILTIN: return Function.BinaryType.BUILTIN;
+ case HIVE: return Function.BinaryType.HIVE;
+ case NATIVE: return Function.BinaryType.NATIVE;
+ case IR: return Function.BinaryType.IR;
+ case RPC: return Function.BinaryType.RPC;
+ case JAVA_UDF: return Function.BinaryType.JAVA_UDF;
+ case AGG_STATE: return Function.BinaryType.AGG_STATE;
+ case PYTHON_UDF: return Function.BinaryType.PYTHON_UDF;
+ default: throw new IllegalArgumentException("Unknown
TFunctionBinaryType: " + thriftType);
+ }
+ }
+
/**
* Converts a {@link Function} (or subclass) to its Thrift representation.
* Uses instanceof checks to dispatch to the appropriate subclass handler.
@@ -52,13 +86,13 @@ public class FunctionToThriftConverter {
Boolean[] realArgTypeNullables) {
TFunction tfn = toThriftBase(fn, realReturnType, realArgTypes,
realArgTypeNullables);
tfn.setScalarFn(new TScalarFunction());
- if (fn.getBinaryType() == TFunctionBinaryType.JAVA_UDF ||
fn.getBinaryType() == TFunctionBinaryType.RPC
- || fn.getBinaryType() == TFunctionBinaryType.PYTHON_UDF) {
+ if (fn.getBinaryType() == Function.BinaryType.JAVA_UDF ||
fn.getBinaryType() == Function.BinaryType.RPC
+ || fn.getBinaryType() == Function.BinaryType.PYTHON_UDF) {
tfn.getScalarFn().setSymbol(fn.getSymbolName());
} else {
tfn.getScalarFn().setSymbol("");
}
- if (fn.getBinaryType() == TFunctionBinaryType.PYTHON_UDF) {
+ if (fn.getBinaryType() == Function.BinaryType.PYTHON_UDF) {
if (!Strings.isNullOrEmpty(fn.getFunctionCode())) {
tfn.setFunctionCode(fn.getFunctionCode());
}
@@ -105,7 +139,7 @@ public class FunctionToThriftConverter {
tfn.setAggregateFn(aggFn);
// Set runtime_version and function_code for Python UDAF
- if (fn.getBinaryType() == TFunctionBinaryType.PYTHON_UDF) {
+ if (fn.getBinaryType() == Function.BinaryType.PYTHON_UDF) {
if (!Strings.isNullOrEmpty(fn.getFunctionCode())) {
tfn.setFunctionCode(fn.getFunctionCode());
}
@@ -123,7 +157,7 @@ public class FunctionToThriftConverter {
tName.setDbName(fn.getFunctionName().getDb());
tName.setFunctionName(fn.getFunctionName().getFunction());
tfn.setName(tName);
- tfn.setBinaryType(fn.getBinaryType());
+ tfn.setBinaryType(toThriftBinaryType(fn.getBinaryType()));
if (fn.getLocation() != null) {
tfn.setHdfsLocation(fn.getLocation().getLocation());
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java
index 6a75179d151..c9ef0e81f14 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java
@@ -29,7 +29,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.udf.PythonUdaf;
import org.apache.doris.nereids.trees.expressions.functions.udf.PythonUdf;
import org.apache.doris.nereids.trees.expressions.functions.udf.PythonUdtf;
import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -195,22 +194,22 @@ public class FunctionUtil {
AliasUdf.translateToNereidsFunction(dbName, ((AliasFunction)
function));
} else if (function instanceof ScalarFunction) {
if (function.isUDTFunction()) {
- if (function.getBinaryType() == TFunctionBinaryType.JAVA_UDF) {
+ if (function.getBinaryType() == Function.BinaryType.JAVA_UDF) {
JavaUdtf.translateToNereidsFunction(dbName,
((ScalarFunction) function));
- } else if (function.getBinaryType() ==
TFunctionBinaryType.PYTHON_UDF) {
+ } else if (function.getBinaryType() ==
Function.BinaryType.PYTHON_UDF) {
PythonUdtf.translateToNereidsFunction(dbName,
((ScalarFunction) function));
}
} else {
- if (function.getBinaryType() == TFunctionBinaryType.JAVA_UDF) {
+ if (function.getBinaryType() == Function.BinaryType.JAVA_UDF) {
JavaUdf.translateToNereidsFunction(dbName,
((ScalarFunction) function));
- } else if (function.getBinaryType() ==
TFunctionBinaryType.PYTHON_UDF) {
+ } else if (function.getBinaryType() ==
Function.BinaryType.PYTHON_UDF) {
PythonUdf.translateToNereidsFunction(dbName,
(ScalarFunction) function);
}
}
} else if (function instanceof AggregateFunction) {
- if (function.getBinaryType() == TFunctionBinaryType.JAVA_UDF) {
+ if (function.getBinaryType() == Function.BinaryType.JAVA_UDF) {
JavaUdaf.translateToNereidsFunction(dbName,
((AggregateFunction) function));
- } else if (function.getBinaryType() ==
TFunctionBinaryType.PYTHON_UDF) {
+ } else if (function.getBinaryType() ==
Function.BinaryType.PYTHON_UDF) {
PythonUdaf.translateToNereidsFunction(dbName,
((AggregateFunction) function));
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java
index cafe90f2e51..7feb8eeb5ec 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java
@@ -19,7 +19,6 @@ package org.apache.doris.catalog;
import org.apache.doris.common.util.URI;
import org.apache.doris.thrift.TDictFunction;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.gson.annotations.SerializedName;
import org.apache.logging.log4j.LogManager;
@@ -53,16 +52,16 @@ public class ScalarFunction extends Function {
public ScalarFunction(FunctionName fnName, List<Type> argTypes, Type
retType, boolean hasVarArgs,
boolean userVisible) {
- this(fnName, argTypes, retType, hasVarArgs,
TFunctionBinaryType.BUILTIN, userVisible, true);
+ this(fnName, argTypes, retType, hasVarArgs, BinaryType.BUILTIN,
userVisible, true);
}
public ScalarFunction(FunctionName fnName, List<Type> argTypes, Type
retType, boolean hasVarArgs,
boolean userVisible, boolean isVec) {
- this(fnName, argTypes, retType, hasVarArgs,
TFunctionBinaryType.BUILTIN, userVisible, isVec);
+ this(fnName, argTypes, retType, hasVarArgs, BinaryType.BUILTIN,
userVisible, isVec);
}
public ScalarFunction(FunctionName fnName, List<Type> argTypes, Type
retType, boolean hasVarArgs,
- TFunctionBinaryType binaryType, boolean userVisible, boolean
isVec) {
+ BinaryType binaryType, boolean userVisible, boolean isVec) {
super(0, fnName, argTypes, retType, hasVarArgs, binaryType,
userVisible, isVec,
NullableMode.DEPEND_ON_ARGUMENT);
}
@@ -71,7 +70,7 @@ public class ScalarFunction extends Function {
* nerieds custom scalar function
*/
public ScalarFunction(FunctionName fnName, List<Type> argTypes, Type
retType, boolean hasVarArgs, String symbolName,
- TFunctionBinaryType binaryType, boolean userVisible, boolean
isVec, NullableMode nullableMode) {
+ BinaryType binaryType, boolean userVisible, boolean isVec,
NullableMode nullableMode) {
super(0, fnName, argTypes, retType, hasVarArgs, binaryType,
userVisible, isVec, nullableMode);
this.symbolName = symbolName;
}
@@ -150,7 +149,7 @@ public class ScalarFunction extends Function {
}
public static ScalarFunction createUdf(
- TFunctionBinaryType binaryType,
+ BinaryType binaryType,
FunctionName name, Type[] args,
Type returnType, boolean isVariadic,
URI location, String symbol, String prepareFnSymbol, String
closeFnSymbol) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
index f21eb6b195b..acc9e59c680 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
@@ -110,7 +110,6 @@ import
org.apache.doris.nereids.trees.expressions.literal.Literal;
import
org.apache.doris.nereids.trees.expressions.visitor.DefaultExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
import org.apache.doris.thrift.TDictFunction;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -484,7 +483,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
function.hasVarArguments(),
null, "", "", null, "",
null, "", null, false,
- isAnalyticFunction, false, TFunctionBinaryType.BUILTIN,
+ isAnalyticFunction, false, Function.BinaryType.BUILTIN,
true, true, nullableMode
);
@@ -621,7 +620,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
org.apache.doris.catalog.ScalarFunction catalogFunction = new
org.apache.doris.catalog.ScalarFunction(
new FunctionName(dictGet.getName()), argTypes,
signature.returnType.toCatalogDataType(),
- dictGet.hasVarArguments(), "", TFunctionBinaryType.BUILTIN,
true, true,
+ dictGet.hasVarArguments(), "", Function.BinaryType.BUILTIN,
true, true,
NullableMode.ALWAYS_NOT_NULLABLE);
// set special fields
@@ -648,7 +647,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
org.apache.doris.catalog.ScalarFunction catalogFunction = new
org.apache.doris.catalog.ScalarFunction(
new FunctionName(dictGetMany.getName()), argTypes,
signature.returnType.toCatalogDataType(),
- dictGetMany.hasVarArguments(), "",
TFunctionBinaryType.BUILTIN, true, true,
+ dictGetMany.hasVarArguments(), "",
Function.BinaryType.BUILTIN, true, true,
NullableMode.ALWAYS_NOT_NULLABLE);
// set special fields
@@ -712,7 +711,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
org.apache.doris.catalog.ScalarFunction catalogFunction = new
org.apache.doris.catalog.ScalarFunction(
new FunctionName(function.getName()), argTypes,
function.getDataType().toCatalogDataType(),
function.hasVarArguments(),
- "", TFunctionBinaryType.BUILTIN, true, true, nullableMode);
+ "", Function.BinaryType.BUILTIN, true, true, nullableMode);
// create catalog FunctionCallExpr without analyze again
return new FunctionCallExpr(catalogFunction, new FunctionParams(false,
arguments), function.nullable());
@@ -757,7 +756,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
org.apache.doris.catalog.ScalarFunction catalogFunction = new
org.apache.doris.catalog.ScalarFunction(
new FunctionName(function.getName()), argTypes,
function.getDataType().toCatalogDataType(),
function.hasVarArguments(),
- "", TFunctionBinaryType.BUILTIN, true, true, nullableMode);
+ "", Function.BinaryType.BUILTIN, true, true, nullableMode);
// create catalog FunctionCallExpr without analyze again
return new FunctionCallExpr(catalogFunction, new FunctionParams(false,
arguments), function.nullable());
@@ -827,7 +826,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
argTypes, argNullables, returnNullable),
aggFunction.hasVarArgs(), aggFunction.isUserVisible());
fn.setNullableMode(NullableMode.ALWAYS_NOT_NULLABLE);
- fn.setBinaryType(TFunctionBinaryType.AGG_STATE);
+ fn.setBinaryType(Function.BinaryType.AGG_STATE);
return new FunctionCallExpr(fn, new
FunctionParams(fnCall.getChildren()), false);
}
@@ -845,7 +844,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
Function aggFunction = fnCall.getFn();
aggFunction.setName(new FunctionName(name));
aggFunction.setArgs(Arrays.asList(fnCall.getChildren().get(0).getType()));
- aggFunction.setBinaryType(TFunctionBinaryType.AGG_STATE);
+ aggFunction.setBinaryType(Function.BinaryType.AGG_STATE);
return fnCall;
}
@@ -863,7 +862,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
Function aggFunction = fnCall.getFn();
aggFunction.setName(new FunctionName(name));
aggFunction.setArgs(Arrays.asList(fnCall.getChildren().get(0).getType()));
- aggFunction.setBinaryType(TFunctionBinaryType.AGG_STATE);
+ aggFunction.setBinaryType(Function.BinaryType.AGG_STATE);
aggFunction.setNullableMode(NullableMode.ALWAYS_NOT_NULLABLE);
aggFunction.setReturnType(fnCall.getChildren().get(0).getType());
fnCall.setType(fnCall.getChildren().get(0).getType());
@@ -910,7 +909,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
argTypes,
function.getDataType().toCatalogDataType(),
function.getIntermediateTypes().toCatalogDataType(),
function.hasVarArguments(), null, "", "", null, "", null, "",
null, false, false, false,
- TFunctionBinaryType.BUILTIN, true, true,
+ Function.BinaryType.BUILTIN, true, true,
function.nullable() ? NullableMode.ALWAYS_NULLABLE :
NullableMode.ALWAYS_NOT_NULLABLE);
return new FunctionCallExpr(catalogFunction,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdaf.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdaf.java
index 9fa2b2e66eb..c3eebfc283f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdaf.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdaf.java
@@ -32,7 +32,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.Udf;
import
org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -47,7 +46,7 @@ import java.util.stream.Collectors;
public class JavaUdaf extends AggregateFunction implements
ExplicitlyCastableSignature, Udf {
private final String dbName;
private final long functionId;
- private final TFunctionBinaryType binaryType;
+ private final Function.BinaryType binaryType;
private final FunctionSignature signature;
private final DataType intermediateType;
private final NullableMode nullableMode;
@@ -67,7 +66,7 @@ public class JavaUdaf extends AggregateFunction implements
ExplicitlyCastableSig
/**
* Constructor of UDAF
*/
- public JavaUdaf(String name, long functionId, String dbName,
TFunctionBinaryType binaryType,
+ public JavaUdaf(String name, long functionId, String dbName,
Function.BinaryType binaryType,
FunctionSignature signature,
DataType intermediateType, NullableMode nullableMode,
String objectFile, String symbol,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdf.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdf.java
index 7582c65f67d..07cd4556324 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdf.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdf.java
@@ -32,7 +32,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.Udf;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ScalarFunction;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -47,7 +46,7 @@ import java.util.stream.Collectors;
public class JavaUdf extends ScalarFunction implements
ExplicitlyCastableSignature, Udf {
private final String dbName;
private final long functionId;
- private final TFunctionBinaryType binaryType;
+ private final Function.BinaryType binaryType;
private final FunctionSignature signature;
private final NullableMode nullableMode;
private final String objectFile;
@@ -61,7 +60,7 @@ public class JavaUdf extends ScalarFunction implements
ExplicitlyCastableSignatu
/**
* Constructor of UDF
*/
- public JavaUdf(String name, long functionId, String dbName,
TFunctionBinaryType binaryType,
+ public JavaUdf(String name, long functionId, String dbName,
Function.BinaryType binaryType,
FunctionSignature signature,
NullableMode nullableMode, String objectFile, String symbol,
String prepareFn, String closeFn,
String checkSum, boolean isStaticLoad, long expirationTime,
Expression... args) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdtf.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdtf.java
index 3bc113df512..2e04dec1d68 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdtf.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdtf.java
@@ -32,7 +32,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.Udf;
import
org.apache.doris.nereids.trees.expressions.functions.generator.TableGeneratingFunction;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -47,7 +46,7 @@ import java.util.stream.Collectors;
public class JavaUdtf extends TableGeneratingFunction implements
ExplicitlyCastableSignature, Udf {
private final String dbName;
private final long functionId;
- private final TFunctionBinaryType binaryType;
+ private final Function.BinaryType binaryType;
private final FunctionSignature signature;
private final NullableMode nullableMode;
private final String objectFile;
@@ -61,7 +60,7 @@ public class JavaUdtf extends TableGeneratingFunction
implements ExplicitlyCasta
/**
* Constructor of UDTF
*/
- public JavaUdtf(String name, long functionId, String dbName,
TFunctionBinaryType binaryType,
+ public JavaUdtf(String name, long functionId, String dbName,
Function.BinaryType binaryType,
FunctionSignature signature,
NullableMode nullableMode, String objectFile, String symbol,
String prepareFn, String closeFn,
String checkSum, boolean isStaticLoad, long expirationTime,
Expression... args) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdaf.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdaf.java
index 1e78297975e..456e0f1a6ea 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdaf.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdaf.java
@@ -32,7 +32,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.Udf;
import
org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -47,7 +46,7 @@ import java.util.stream.Collectors;
public class PythonUdaf extends AggregateFunction implements
ExplicitlyCastableSignature, Udf {
private final String dbName;
private final long functionId;
- private final TFunctionBinaryType binaryType;
+ private final Function.BinaryType binaryType;
private final FunctionSignature signature;
private final DataType intermediateType;
private final NullableMode nullableMode;
@@ -69,7 +68,7 @@ public class PythonUdaf extends AggregateFunction implements
ExplicitlyCastableS
/**
* Constructor of UDAF
*/
- public PythonUdaf(String name, long functionId, String dbName,
TFunctionBinaryType binaryType,
+ public PythonUdaf(String name, long functionId, String dbName,
Function.BinaryType binaryType,
FunctionSignature signature,
DataType intermediateType, NullableMode nullableMode,
String objectFile, String symbol,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdf.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdf.java
index b505db5aceb..98a9e161308 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdf.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdf.java
@@ -32,7 +32,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.Udf;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ScalarFunction;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -47,7 +46,7 @@ import java.util.stream.Collectors;
public class PythonUdf extends ScalarFunction implements
ExplicitlyCastableSignature, Udf {
private final String dbName;
private final long functionId;
- private final TFunctionBinaryType binaryType;
+ private final Function.BinaryType binaryType;
private final FunctionSignature signature;
private final NullableMode nullableMode;
private final String objectFile;
@@ -63,7 +62,7 @@ public class PythonUdf extends ScalarFunction implements
ExplicitlyCastableSigna
/**
* Constructor of UDF
*/
- public PythonUdf(String name, long functionId, String dbName,
TFunctionBinaryType binaryType,
+ public PythonUdf(String name, long functionId, String dbName,
Function.BinaryType binaryType,
FunctionSignature signature,
NullableMode nullableMode, String objectFile, String
symbol, String prepareFn, String closeFn,
String checkSum, boolean isStaticLoad, long
expirationTime,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdtf.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdtf.java
index 24ea3e0d664..74e662aee72 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdtf.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdtf.java
@@ -32,7 +32,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.Udf;
import
org.apache.doris.nereids.trees.expressions.functions.generator.TableGeneratingFunction;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -47,7 +46,7 @@ import java.util.stream.Collectors;
public class PythonUdtf extends TableGeneratingFunction implements
ExplicitlyCastableSignature, Udf {
private final String dbName;
private final long functionId;
- private final TFunctionBinaryType binaryType;
+ private final Function.BinaryType binaryType;
private final FunctionSignature signature;
private final NullableMode nullableMode;
private final String objectFile;
@@ -63,7 +62,7 @@ public class PythonUdtf extends TableGeneratingFunction
implements ExplicitlyCas
/**
* Constructor of Python UDTF
*/
- public PythonUdtf(String name, long functionId, String dbName,
TFunctionBinaryType binaryType,
+ public PythonUdtf(String name, long functionId, String dbName,
Function.BinaryType binaryType,
FunctionSignature signature,
NullableMode nullableMode, String objectFile, String symbol,
String prepareFn, String closeFn,
String checkSum, boolean isStaticLoad, long expirationTime,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateFunctionCommand.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateFunctionCommand.java
index 3a59c4cea2f..eaacae8aaa6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateFunctionCommand.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateFunctionCommand.java
@@ -82,7 +82,6 @@ import org.apache.doris.proto.Types;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.ConnectContextUtil;
import org.apache.doris.qe.StmtExecutor;
-import org.apache.doris.thrift.TFunctionBinaryType;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -166,7 +165,7 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
private final Map<String, String> properties;
private final List<String> parameters;
private final Expression originFunction;
- private TFunctionBinaryType binaryType = TFunctionBinaryType.JAVA_UDF;
+ private Function.BinaryType binaryType = Function.BinaryType.JAVA_UDF;
// needed item set after analyzed
private String userFile;
private String originalUserFile; // Keep original jar name for BE
@@ -320,10 +319,10 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
userFile = properties.getOrDefault(FILE_KEY,
properties.get(OBJECT_FILE_KEY));
originalUserFile = userFile; // Keep original jar name for BE
// Convert userFile to realUrl only for FE checksum calculation
- if (!Strings.isNullOrEmpty(userFile) && binaryType !=
TFunctionBinaryType.RPC) {
+ if (!Strings.isNullOrEmpty(userFile) && binaryType !=
Function.BinaryType.RPC) {
userFile = getRealUrl(userFile);
}
- if (!Strings.isNullOrEmpty(userFile) && binaryType !=
TFunctionBinaryType.RPC) {
+ if (!Strings.isNullOrEmpty(userFile) && binaryType !=
Function.BinaryType.RPC) {
try {
computeObjectChecksum();
} catch (IOException | NoSuchAlgorithmException e) {
@@ -334,7 +333,7 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
throw new AnalysisException("library's checksum is not equal
with input, checksum=" + checksum);
}
}
- if (binaryType == TFunctionBinaryType.JAVA_UDF) {
+ if (binaryType == Function.BinaryType.JAVA_UDF) {
FunctionUtil.checkEnableJavaUdf();
// always_nullable the default value is true, equal null means true
@@ -348,7 +347,7 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
isStaticLoad = true;
}
extractExpirationTime();
- } else if (binaryType == TFunctionBinaryType.PYTHON_UDF) {
+ } else if (binaryType == Function.BinaryType.PYTHON_UDF) {
FunctionUtil.checkEnablePythonUdf();
// always_nullable the default value is true, equal null means true
@@ -457,9 +456,9 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
if (!returnType.isArrayType()) {
throw new AnalysisException("JAVA_UDTF OR PYTHON_UDTF return type
must be array type");
}
- if (binaryType == TFunctionBinaryType.JAVA_UDF) {
+ if (binaryType == Function.BinaryType.JAVA_UDF) {
analyzeJavaUdf(symbol);
- } else if (binaryType == TFunctionBinaryType.PYTHON_UDF) {
+ } else if (binaryType == Function.BinaryType.PYTHON_UDF) {
analyzePythonUdtf(symbol);
}
URI location;
@@ -494,19 +493,19 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
.hasVarArgs(argsDef.isVariadic()).intermediateType(intermediateType.toCatalogDataType())
.location(location);
String initFnSymbol = properties.get(INIT_KEY);
- if (initFnSymbol == null && !(binaryType ==
TFunctionBinaryType.JAVA_UDF
- || binaryType == TFunctionBinaryType.PYTHON_UDF
- || binaryType == TFunctionBinaryType.RPC)) {
+ if (initFnSymbol == null && !(binaryType ==
Function.BinaryType.JAVA_UDF
+ || binaryType == Function.BinaryType.PYTHON_UDF
+ || binaryType == Function.BinaryType.RPC)) {
throw new AnalysisException("No 'init_fn' in properties");
}
String updateFnSymbol = properties.get(UPDATE_KEY);
- if (updateFnSymbol == null && !(binaryType ==
TFunctionBinaryType.JAVA_UDF
- || binaryType == TFunctionBinaryType.PYTHON_UDF)) {
+ if (updateFnSymbol == null && !(binaryType ==
Function.BinaryType.JAVA_UDF
+ || binaryType == Function.BinaryType.PYTHON_UDF)) {
throw new AnalysisException("No 'update_fn' in properties");
}
String mergeFnSymbol = properties.get(MERGE_KEY);
- if (mergeFnSymbol == null && !(binaryType ==
TFunctionBinaryType.JAVA_UDF
- || binaryType == TFunctionBinaryType.PYTHON_UDF)) {
+ if (mergeFnSymbol == null && !(binaryType ==
Function.BinaryType.JAVA_UDF
+ || binaryType == Function.BinaryType.PYTHON_UDF)) {
throw new AnalysisException("No 'merge_fn' in properties");
}
String serializeFnSymbol = properties.get(SERIALIZE_KEY);
@@ -514,7 +513,7 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
String getValueFnSymbol = properties.get(GET_VALUE_KEY);
String removeFnSymbol = properties.get(REMOVE_KEY);
String symbol = properties.get(SYMBOL_KEY);
- if (binaryType == TFunctionBinaryType.RPC &&
!userFile.contains("://")) {
+ if (binaryType == Function.BinaryType.RPC &&
!userFile.contains("://")) {
if (initFnSymbol != null) {
checkRPCUdf(initFnSymbol);
}
@@ -532,12 +531,12 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
if (removeFnSymbol != null) {
checkRPCUdf(removeFnSymbol);
}
- } else if (binaryType == TFunctionBinaryType.JAVA_UDF) {
+ } else if (binaryType == Function.BinaryType.JAVA_UDF) {
if (Strings.isNullOrEmpty(symbol)) {
throw new AnalysisException("No 'symbol' in properties of
java-udaf");
}
analyzeJavaUdaf(symbol);
- } else if (binaryType == TFunctionBinaryType.PYTHON_UDF) {
+ } else if (binaryType == Function.BinaryType.PYTHON_UDF) {
analyzePythonUdaf(symbol);
}
function =
builder.initFnSymbol(initFnSymbol).updateFnSymbol(updateFnSymbol).mergeFnSymbol(mergeFnSymbol)
@@ -562,14 +561,14 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
String closeFnSymbol = properties.get(CLOSE_SYMBOL_KEY);
// TODO(yangzhg) support check function in FE when function service
behind load balancer
// the format for load balance can ref
https://github.com/apache/incubator-brpc/blob/master/docs/en/client.md#connect-to-a-cluster
- if (binaryType == TFunctionBinaryType.RPC &&
!userFile.contains("://")) {
+ if (binaryType == Function.BinaryType.RPC &&
!userFile.contains("://")) {
if (StringUtils.isNotBlank(prepareFnSymbol) ||
StringUtils.isNotBlank(closeFnSymbol)) {
throw new AnalysisException("prepare and close in RPC UDF are
not supported.");
}
checkRPCUdf(symbol);
- } else if (binaryType == TFunctionBinaryType.JAVA_UDF) {
+ } else if (binaryType == Function.BinaryType.JAVA_UDF) {
analyzeJavaUdf(symbol);
- } else if (binaryType == TFunctionBinaryType.PYTHON_UDF) {
+ } else if (binaryType == Function.BinaryType.PYTHON_UDF) {
analyzePythonUdf(symbol);
}
URI location;
@@ -1037,10 +1036,10 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
return typeBuilder.build();
}
- private TFunctionBinaryType getFunctionBinaryType(String type) {
- TFunctionBinaryType binaryType = null;
+ private Function.BinaryType getFunctionBinaryType(String type) {
+ Function.BinaryType binaryType = null;
try {
- binaryType = TFunctionBinaryType.valueOf(type);
+ binaryType = Function.BinaryType.valueOf(type);
} catch (IllegalArgumentException e) {
// ignore enum Exception
}
@@ -1258,7 +1257,7 @@ public class CreateFunctionCommand extends Command
implements ForwardWithSync {
org.apache.doris.catalog.ScalarFunction catalogFunction = new
org.apache.doris.catalog.ScalarFunction(
new FunctionName(name), argTypes,
expression.getDataType().toCatalogDataType(),
hasVarArguments,
- "", TFunctionBinaryType.BUILTIN, true, true, nullableMode);
+ "", Function.BinaryType.BUILTIN, true, true, nullableMode);
// create catalog FunctionCallExpr without analyze again
return new FunctionCallExpr(catalogFunction, new
FunctionParams(false, arguments), expression.nullable());
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToSqlConverterTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToSqlConverterTest.java
index 87cb12798bc..26b22fa1bae 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToSqlConverterTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToSqlConverterTest.java
@@ -17,8 +17,8 @@
package org.apache.doris.catalog;
+import org.apache.doris.catalog.Function.BinaryType;
import org.apache.doris.catalog.Function.NullableMode;
-import org.apache.doris.thrift.TFunctionBinaryType;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -33,7 +33,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_javaUdf_basicSql() {
FunctionName name = new FunctionName("testDb", "my_add");
Type[] argTypes = {Type.INT, Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "com.example.MyAdd", null, null);
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -54,7 +54,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_javaUdf_alwaysNullable() {
FunctionName name = new FunctionName("testDb", "nullable_fn");
Type[] argTypes = {Type.STRING};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.STRING, false, null, "com.example.NullFn", null, null);
fn.setNullableMode(NullableMode.ALWAYS_NULLABLE);
@@ -67,7 +67,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_javaUdf_dependOnArgument() {
FunctionName name = new FunctionName("testDb", "notnull_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "com.example.NotNullFn", null, null);
// Default NullableMode is DEPEND_ON_ARGUMENT
@@ -80,7 +80,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_javaUdf_withPrepareFnAndCloseFn() {
FunctionName name = new FunctionName("testDb", "prepared_fn");
Type[] argTypes = {Type.DOUBLE};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.DOUBLE, false, null, "com.example.Fn",
"com.example.Prepare", "com.example.Close");
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -93,7 +93,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_javaUdf_withoutPrepareFnAndCloseFn() {
FunctionName name = new FunctionName("testDb", "simple_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "sym", null, null);
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -108,7 +108,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_ifNotExists() {
FunctionName name = new FunctionName("testDb", "my_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "sym", null, null);
String sql = FunctionToSqlConverter.toSql(fn, true);
@@ -123,7 +123,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_native_usesObjectFile() {
FunctionName name = new FunctionName("testDb", "native_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.NATIVE, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.NATIVE, name,
argTypes,
Type.INT, false, null, "native_sym", null, null);
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -140,7 +140,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_global() {
FunctionName name = new FunctionName("testDb", "global_fn");
Type[] argTypes = {Type.BIGINT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.BIGINT, false, null, "com.example.GlobalFn", null, null);
fn.setGlobal(true);
@@ -153,7 +153,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_global_ifNotExists() {
FunctionName name = new FunctionName("testDb", "global_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "sym", null, null);
fn.setGlobal(true);
@@ -222,7 +222,7 @@ public class FunctionToSqlConverterTest {
"my_init", "my_update", "my_merge",
"my_serialize", "my_finalize",
"my_get_value", "my_remove");
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -246,7 +246,7 @@ public class FunctionToSqlConverterTest {
Type.INT, null,
"init_fn", "update_fn", "merge_fn",
null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -266,7 +266,7 @@ public class FunctionToSqlConverterTest {
Type.STRING, null,
"init", "update", "merge",
null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -284,7 +284,7 @@ public class FunctionToSqlConverterTest {
Type.BIGINT, null,
"init", "update", "merge",
null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -342,7 +342,7 @@ public class FunctionToSqlConverterTest {
void testDispatcher_routesScalarFunction() {
FunctionName name = new FunctionName("testDb", "dispatch_scalar");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "sym", null, null);
// Call via the dispatcher overload: toSql(Function, boolean)
@@ -393,7 +393,7 @@ public class FunctionToSqlConverterTest {
Type.INT, null,
"init", "update", "merge",
null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
fn.setSymbolName("native_sym");
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -410,7 +410,7 @@ public class FunctionToSqlConverterTest {
Type.INT, null,
"init", "update", "merge",
null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
// symbolName is null by default
String sql = FunctionToSqlConverter.toSql(fn, false);
@@ -424,7 +424,7 @@ public class FunctionToSqlConverterTest {
void testScalarFunction_sqlEndsWithSemicolon() {
FunctionName name = new FunctionName("testDb", "end_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "sym", null, null);
String sql = FunctionToSqlConverter.toSql(fn, false);
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToThriftConverterTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToThriftConverterTest.java
index 972b94bc815..2aafc93c8ea 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToThriftConverterTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/catalog/FunctionToThriftConverterTest.java
@@ -17,6 +17,7 @@
package org.apache.doris.catalog;
+import org.apache.doris.catalog.Function.BinaryType;
import org.apache.doris.thrift.TAggregateFunction;
import org.apache.doris.thrift.TFunction;
import org.apache.doris.thrift.TFunctionBinaryType;
@@ -32,7 +33,7 @@ public class FunctionToThriftConverterTest {
void testScalarFunctionJavaUdf_symbolIsPopulated() {
FunctionName name = new FunctionName("db1", "java_udf_fn");
Type[] argTypes = {Type.INT, Type.STRING};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.DOUBLE, false, null, "com.example.MyFn", null, null);
TFunction result = FunctionToThriftConverter.toThrift(
@@ -47,7 +48,7 @@ public class FunctionToThriftConverterTest {
void testScalarFunctionRpc_symbolIsPopulated() {
FunctionName name = new FunctionName("db1", "rpc_fn");
Type[] argTypes = {Type.BIGINT};
- ScalarFunction fn = ScalarFunction.createUdf(TFunctionBinaryType.RPC,
name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.RPC, name,
argTypes,
Type.INT, false, null, "rpc_symbol_name", null, null);
TFunction result = FunctionToThriftConverter.toThrift(
@@ -61,7 +62,7 @@ public class FunctionToThriftConverterTest {
void testScalarFunctionNative_symbolIsEmpty() {
FunctionName name = new FunctionName("db1", "native_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.NATIVE, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.NATIVE, name,
argTypes,
Type.INT, false, null, "ignored_symbol", null, null);
TFunction result = FunctionToThriftConverter.toThrift(
@@ -82,7 +83,7 @@ public class FunctionToThriftConverterTest {
Type.BIGINT, null,
"init_fn", "update_fn", "merge_fn",
"serialize_fn", "finalize_fn", "get_value_fn", "remove_fn");
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
TFunction result = FunctionToThriftConverter.toThrift(
fn, Type.BIGINT, argTypes, new Boolean[]{true});
@@ -108,7 +109,7 @@ public class FunctionToThriftConverterTest {
name, argTypes, Type.BIGINT, false,
Type.STRING, null,
"init", "update", "merge", null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
TFunction result = FunctionToThriftConverter.toThrift(
fn, Type.BIGINT, argTypes, new Boolean[]{true});
@@ -126,7 +127,7 @@ public class FunctionToThriftConverterTest {
name, argTypes, Type.BIGINT, false,
Type.BIGINT, null,
"init", "update", "merge", null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
// Clear intermediateType so the converter falls back to returnType
fn.setIntermediateType(null);
@@ -147,7 +148,7 @@ public class FunctionToThriftConverterTest {
Type.DOUBLE, null,
"init", "update", "merge",
null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
TFunction result = FunctionToThriftConverter.toThrift(
fn, Type.DOUBLE, argTypes, new Boolean[]{true});
@@ -169,7 +170,7 @@ public class FunctionToThriftConverterTest {
void testBaseFields_nameHandling() {
FunctionName name = new FunctionName("test_db", "test_func");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "sym", null, null);
TFunction result = FunctionToThriftConverter.toThrift(
@@ -184,7 +185,7 @@ public class FunctionToThriftConverterTest {
void testBaseFields_signatureAndBinaryType() {
FunctionName name = new FunctionName("db1", "sig_fn");
Type[] argTypes = {Type.INT, Type.DOUBLE};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.STRING, false, null, "sym", null, null);
TFunction result = FunctionToThriftConverter.toThrift(
@@ -199,7 +200,7 @@ public class FunctionToThriftConverterTest {
void testBaseFields_functionProperties() {
FunctionName name = new FunctionName("db1", "prop_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, true, null, "sym", null, null);
fn.setId(42L);
fn.setChecksum("abc123");
@@ -222,7 +223,7 @@ public class FunctionToThriftConverterTest {
void testBaseFields_emptyChecksum_notSet() {
FunctionName name = new FunctionName("db1", "no_checksum_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.NATIVE, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.NATIVE, name,
argTypes,
Type.INT, false, null, "", null, null);
// Default checksum is "" — should NOT be set on the thrift object
@@ -238,7 +239,7 @@ public class FunctionToThriftConverterTest {
void testRealReturnTypeWithPrecision_usesRealReturnType() {
FunctionName name = new FunctionName("db1", "decimal_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.NATIVE, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.NATIVE, name,
argTypes,
Type.DOUBLE, false, null, "", null, null);
ScalarType realReturnType = ScalarType.createDecimalV3Type(18, 6);
@@ -254,7 +255,7 @@ public class FunctionToThriftConverterTest {
void testRealReturnTypeWithoutPrecision_usesFunctionReturnType() {
FunctionName name = new FunctionName("db1", "simple_fn");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.NATIVE, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.NATIVE, name,
argTypes,
Type.DOUBLE, false, null, "", null, null);
// Type.INT does not contain precision, so fn.getReturnType() (DOUBLE)
should be used
@@ -270,7 +271,7 @@ public class FunctionToThriftConverterTest {
void testDispatcher_routesScalarFunctionCorrectly() {
FunctionName name = new FunctionName("db1", "dispatch_scalar");
Type[] argTypes = {Type.INT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.JAVA_UDF, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.JAVA_UDF,
name, argTypes,
Type.INT, false, null, "sym", null, null);
// Call the dispatcher overload that takes Function (not
ScalarFunction)
@@ -290,7 +291,7 @@ public class FunctionToThriftConverterTest {
name, argTypes, Type.INT, false,
Type.INT, null,
"init", "update", "merge", null, null, null, null);
- fn.setBinaryType(TFunctionBinaryType.NATIVE);
+ fn.setBinaryType(BinaryType.NATIVE);
// Call the dispatcher overload that takes Function (not
AggregateFunction)
TFunction result = FunctionToThriftConverter.toThrift(
@@ -306,7 +307,7 @@ public class FunctionToThriftConverterTest {
void testArgTypes_realArgTypesSameLength() {
FunctionName name = new FunctionName("db1", "arg_fn");
Type[] argTypes = {Type.INT, Type.BIGINT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.NATIVE, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.NATIVE, name,
argTypes,
Type.INT, false, null, "", null, null);
Type[] realArgTypes = {Type.INT, Type.BIGINT};
@@ -321,7 +322,7 @@ public class FunctionToThriftConverterTest {
void testArgTypes_realArgTypesDifferentLength() {
FunctionName name = new FunctionName("db1", "vararg_fn");
Type[] argTypes = {Type.INT, Type.BIGINT};
- ScalarFunction fn =
ScalarFunction.createUdf(TFunctionBinaryType.NATIVE, name, argTypes,
+ ScalarFunction fn = ScalarFunction.createUdf(BinaryType.NATIVE, name,
argTypes,
Type.INT, true, null, "", null, null);
// Pass different number of realArgTypes to trigger the alternate
branch
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]