This is an automated email from the ASF dual-hosted git repository. twalthr pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/flink.git
commit 07648939f45abb9a79528a50369c93bb6879fe1f Author: Ingo Bürk <[email protected]> AuthorDate: Mon May 31 13:48:56 2021 +0200 [hotfix][table-common][table-planner-blink] Support deferred runtime implementation for built-in functions We can have functions which will not be implemented through a runtime class, but we still want to use the new function stack for them. In order to do so, we flag them. --- .../table/functions/BuiltInFunctionDefinition.java | 26 +++++++++++++++++++--- .../catalog/FunctionCatalogOperatorTable.java | 2 +- .../converter/FunctionDefinitionConvertRule.java | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/BuiltInFunctionDefinition.java b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/BuiltInFunctionDefinition.java index 6136090..0ed3615 100644 --- a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/BuiltInFunctionDefinition.java +++ b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/BuiltInFunctionDefinition.java @@ -53,19 +53,23 @@ public final class BuiltInFunctionDefinition implements SpecializedFunction { private final boolean isDeterministic; - private @Nullable String runtimeClass; + private final boolean isRuntimeProvided; + + private final @Nullable String runtimeClass; private BuiltInFunctionDefinition( String name, FunctionKind kind, TypeInference typeInference, boolean isDeterministic, + boolean isRuntimeProvided, String runtimeClass) { this.name = Preconditions.checkNotNull(name, "Name must not be null."); this.kind = Preconditions.checkNotNull(kind, "Kind must not be null."); this.typeInference = Preconditions.checkNotNull(typeInference, "Type inference must not be null."); this.isDeterministic = isDeterministic; + this.isRuntimeProvided = isRuntimeProvided; this.runtimeClass = runtimeClass; } @@ -82,6 +86,10 @@ public final class BuiltInFunctionDefinition implements SpecializedFunction { return Optional.ofNullable(runtimeClass); } + public boolean hasRuntimeImplementation() { + return isRuntimeProvided || runtimeClass != null; + } + @Override public UserDefinedFunction specialize(SpecializedContext context) { if (runtimeClass == null) { @@ -140,10 +148,12 @@ public final class BuiltInFunctionDefinition implements SpecializedFunction { private FunctionKind kind; - private TypeInference.Builder typeInferenceBuilder = TypeInference.newBuilder(); + private final TypeInference.Builder typeInferenceBuilder = TypeInference.newBuilder(); private boolean isDeterministic = true; + private boolean isRuntimeProvided = false; + private String runtimeClass; public Builder() { @@ -185,6 +195,11 @@ public final class BuiltInFunctionDefinition implements SpecializedFunction { return this; } + public Builder runtimeProvided() { + this.isRuntimeProvided = true; + return this; + } + public Builder runtimeClass(String runtimeClass) { this.runtimeClass = runtimeClass; return this; @@ -192,7 +207,12 @@ public final class BuiltInFunctionDefinition implements SpecializedFunction { public BuiltInFunctionDefinition build() { return new BuiltInFunctionDefinition( - name, kind, typeInferenceBuilder.build(), isDeterministic, runtimeClass); + name, + kind, + typeInferenceBuilder.build(), + isDeterministic, + isRuntimeProvided, + runtimeClass); } } } diff --git a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/catalog/FunctionCatalogOperatorTable.java b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/catalog/FunctionCatalogOperatorTable.java index 452b93c..074e3ab 100644 --- a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/catalog/FunctionCatalogOperatorTable.java +++ b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/catalog/FunctionCatalogOperatorTable.java @@ -206,7 +206,7 @@ public class FunctionCatalogOperatorTable implements SqlOperatorTable { if (definition instanceof BuiltInFunctionDefinition) { final BuiltInFunctionDefinition builtInFunction = (BuiltInFunctionDefinition) definition; - if (!builtInFunction.getRuntimeClass().isPresent()) { + if (!builtInFunction.hasRuntimeImplementation()) { return false; } } diff --git a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/expressions/converter/FunctionDefinitionConvertRule.java b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/expressions/converter/FunctionDefinitionConvertRule.java index 79dfdf6..40c200b 100644 --- a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/expressions/converter/FunctionDefinitionConvertRule.java +++ b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/expressions/converter/FunctionDefinitionConvertRule.java @@ -42,7 +42,7 @@ public class FunctionDefinitionConvertRule implements CallExpressionConvertRule if (functionDefinition instanceof BuiltInFunctionDefinition) { final BuiltInFunctionDefinition builtInFunction = (BuiltInFunctionDefinition) functionDefinition; - if (!builtInFunction.getRuntimeClass().isPresent()) { + if (!builtInFunction.hasRuntimeImplementation()) { return Optional.empty(); } }
