From 50adb7ff006868a864bbfd8b2336bb6a36dc10a2 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Fri, 10 Jul 2020 18:31:13 -0700 Subject: [PATCH 01/11] initial version --- .../builder/FunctionNameListTableBuilder.java | 56 +++++++++++++------ .../function/AggregateFunctionFactory.java | 1 + .../ksql/function/udf/UdfMetadata.java | 16 +++++- .../ksql/function/UdfFactoryTest.java | 2 +- .../ksql/function/udf/UdfMetadataTest.java | 34 +++++------ .../confluent/ksql/function/UdafLoader.java | 1 + .../io/confluent/ksql/function/UdfLoader.java | 1 + .../ksql/function/UdfLoaderUtil.java | 1 + .../confluent/ksql/function/UdtfLoader.java | 1 + .../function/udf/array/ArrayDistinct.java | 2 + .../ksql/function/udf/array/ArrayExcept.java | 2 + .../function/udf/array/ArrayIntersect.java | 2 + .../ksql/function/udf/array/ArrayJoin.java | 2 + .../ksql/function/udf/array/ArrayLength.java | 2 + .../ksql/function/udf/array/ArrayMax.java | 2 + .../ksql/function/udf/array/ArrayMin.java | 2 + .../ksql/function/udf/array/ArraySort.java | 2 + .../ksql/function/udf/array/ArrayUnion.java | 2 + .../ksql/function/udf/array/Entries.java | 2 + .../function/udf/array/GenerateSeries.java | 2 + .../function/udf/datetime/DateToString.java | 2 + .../function/udf/datetime/StringToDate.java | 2 + .../udf/datetime/StringToTimestamp.java | 3 +- .../udf/datetime/TimestampToString.java | 2 + .../ksql/function/udf/datetime/UnixDate.java | 2 + .../function/udf/datetime/UnixTimestamp.java | 2 + .../function/udf/json/JsonArrayContains.java | 2 + .../function/udf/json/JsonExtractString.java | 2 + .../ksql/function/udf/list/ArrayContains.java | 2 + .../ksql/function/udf/list/Slice.java | 2 + .../ksql/function/udf/map/AsMap.java | 2 + .../ksql/function/udf/map/MapKeys.java | 2 + .../ksql/function/udf/map/MapUnion.java | 2 + .../ksql/function/udf/map/MapValues.java | 2 + .../confluent/ksql/function/udf/math/Abs.java | 2 + .../ksql/function/udf/math/Ceil.java | 2 + .../confluent/ksql/function/udf/math/Exp.java | 2 + .../ksql/function/udf/math/Floor.java | 2 + .../confluent/ksql/function/udf/math/Ln.java | 2 + .../ksql/function/udf/math/Random.java | 2 + .../ksql/function/udf/math/Round.java | 2 + .../ksql/function/udf/math/Sign.java | 2 + .../ksql/function/udf/math/Sqrt.java | 2 + .../ksql/function/udf/nulls/Coalesce.java | 2 + .../ksql/function/udf/nulls/IfNull.java | 2 + .../ksql/function/udf/string/Chr.java | 2 + .../ksql/function/udf/string/Concat.java | 2 + .../ksql/function/udf/string/ConcatWS.java | 2 + .../ksql/function/udf/string/Elt.java | 2 + .../ksql/function/udf/string/Encode.java | 2 + .../ksql/function/udf/string/Field.java | 2 + .../ksql/function/udf/string/InitCap.java | 3 +- .../ksql/function/udf/string/Instr.java | 2 + .../ksql/function/udf/string/LCase.java | 2 + .../ksql/function/udf/string/LPad.java | 2 + .../ksql/function/udf/string/Len.java | 2 + .../ksql/function/udf/string/Mask.java | 2 + .../function/udf/string/MaskKeepLeft.java | 2 + .../function/udf/string/MaskKeepRight.java | 2 + .../ksql/function/udf/string/MaskLeft.java | 2 + .../ksql/function/udf/string/MaskRight.java | 2 + .../ksql/function/udf/string/RPad.java | 2 + .../function/udf/string/RegexpExtract.java | 2 + .../function/udf/string/RegexpExtractAll.java | 2 + .../function/udf/string/RegexpReplace.java | 2 + .../udf/string/RegexpSplitToArray.java | 2 + .../ksql/function/udf/string/Replace.java | 2 + .../ksql/function/udf/string/Split.java | 2 + .../ksql/function/udf/string/SplitToMap.java | 4 +- .../ksql/function/udf/string/Substring.java | 2 + .../ksql/function/udf/string/Trim.java | 2 + .../ksql/function/udf/string/UCase.java | 2 + .../ksql/function/udf/string/Uuid.java | 2 + .../ksql/function/udf/url/UrlDecodeParam.java | 2 + .../ksql/function/udf/url/UrlEncodeParam.java | 2 + .../function/udf/url/UrlExtractFragment.java | 2 + .../ksql/function/udf/url/UrlExtractHost.java | 2 + .../function/udf/url/UrlExtractParameter.java | 2 + .../ksql/function/udf/url/UrlExtractPath.java | 2 + .../ksql/function/udf/url/UrlExtractPort.java | 2 + .../function/udf/url/UrlExtractProtocol.java | 2 + .../function/udf/url/UrlExtractQuery.java | 2 + .../io/confluent/ksql/function/udtf/Cube.java | 2 + .../ksql/function/udtf/array/Explode.java | 2 + .../InternalFunctionRegistryTest.java | 2 +- .../execution/ListFunctionsExecutor.java | 9 ++- .../execution/ListFunctionsExecutorTest.java | 16 ++++-- .../server/resources/KsqlResourceTest.java | 10 +++- .../ksql/rest/entity/SimpleFunctionInfo.java | 17 ++++-- .../ksql/function/FunctionCategory.java | 30 ++++++++++ .../ksql/function/udaf/UdafDescription.java | 3 + .../ksql/function/udf/UdfDescription.java | 14 ++++- .../ksql/function/udtf/UdtfDescription.java | 14 ++++- 93 files changed, 324 insertions(+), 58 deletions(-) create mode 100644 ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java diff --git a/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java b/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java index f808c5e5f878..8b6c571eeb74 100644 --- a/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java +++ b/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java @@ -1,16 +1,15 @@ /* * Copyright 2018 Confluent Inc. * - * Licensed under the Confluent Community License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of the - * License at + * Licensed under the Confluent Community License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at * * http://www.confluent.io/confluent-community-license * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the + * License. */ package io.confluent.ksql.cli.console.table.builder; @@ -19,24 +18,47 @@ import io.confluent.ksql.cli.console.table.Table; import io.confluent.ksql.cli.console.table.Table.Builder; import io.confluent.ksql.rest.entity.FunctionNameList; +import io.confluent.ksql.rest.entity.SimpleFunctionInfo; +import java.util.Comparator; +import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import java.util.stream.Stream; public class FunctionNameListTableBuilder implements TableBuilder { - private static final List HEADERS = - ImmutableList.of("Function Name", "Type"); + private static final List HEADERS = ImmutableList.of("Function Name", "Category"); + private static final List EMPTY_ROW = ImmutableList.of(" ", " "); @Override public Table buildTable(final FunctionNameList functionNameList) { - final Stream> rows = functionNameList.getFunctions() - .stream() - .sorted() - .map(func -> ImmutableList.of(func.getName(), func.getType().name().toUpperCase())); - return new Builder() - .withColumnHeaders(HEADERS) - .withRows(rows) - .build(); + Builder builder = new Builder().withColumnHeaders(HEADERS); + + // poor mans version check for the case we are running against an older ksqlDB server + Iterator funcs = functionNameList.getFunctions().iterator(); + if (!funcs.hasNext() || funcs.next().getCategory().isEmpty()) { + final Stream> rows = functionNameList.getFunctions() + .stream() + .sorted(Comparator.comparing(SimpleFunctionInfo::getName)) + .map(func -> ImmutableList.of(func.getName(), func.getType().name().toUpperCase())); + builder.withRows(rows); + } else { // category info present, use new display layout + final List sortedFunctions = functionNameList.getFunctions().stream() + .sorted(Comparator.comparing(SimpleFunctionInfo::getCategory) + .thenComparing(SimpleFunctionInfo::getName)) + .collect(Collectors.toList()); + String prevCategory = sortedFunctions.get(0).getCategory(); + for (SimpleFunctionInfo fn : sortedFunctions) { + if (!fn.getCategory().equals(prevCategory)) { + builder.withRow(EMPTY_ROW); + } + builder.withRow(fn.getName(), fn.getCategory()); + prevCategory = fn.getCategory(); + } + } + builder.withFooterLine( + "For detailed information about a function, run: DESCRIBE FUNCTION ;"); + return builder.build(); } } diff --git a/ksqldb-common/src/main/java/io/confluent/ksql/function/AggregateFunctionFactory.java b/ksqldb-common/src/main/java/io/confluent/ksql/function/AggregateFunctionFactory.java index c65c582fbe0a..a7a2d03ca3b9 100644 --- a/ksqldb-common/src/main/java/io/confluent/ksql/function/AggregateFunctionFactory.java +++ b/ksqldb-common/src/main/java/io/confluent/ksql/function/AggregateFunctionFactory.java @@ -49,6 +49,7 @@ public AggregateFunctionFactory(final String functionName) { "", KsqlConstants.CONFLUENT_AUTHOR, "", + FunctionCategory.AGGREGATE, KsqlScalarFunction.INTERNAL_PATH )); } diff --git a/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java b/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java index a30b5ffa029f..c7d49f9fd33f 100644 --- a/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java +++ b/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf; +import io.confluent.ksql.function.FunctionCategory; import java.util.Objects; public class UdfMetadata { @@ -23,17 +24,20 @@ public class UdfMetadata { private final String author; private final String version; private final String path; + private final FunctionCategory category; public UdfMetadata(final String name, final String description, final String author, final String version, + final FunctionCategory category, final String path ) { this.name = Objects.requireNonNull(name, "name cant be null"); this.description = Objects.requireNonNull(description, "description can't be null"); this.author = Objects.requireNonNull(author, "author can't be null"); this.version = Objects.requireNonNull(version, "version can't be null"); + this.category = Objects.requireNonNull(category, "category can't be null"); this.path = Objects.requireNonNull(path, "path can't be null"); } @@ -57,6 +61,10 @@ public String getPath() { return path; } + public FunctionCategory getCategory() { + return category; + } + @Override public String toString() { return "UdfMetadata{" @@ -64,7 +72,8 @@ public String toString() { + ", description='" + description + '\'' + ", author='" + author + '\'' + ", version='" + version + '\'' - + ", path='" + path + "'" + + ", path='" + path + '\'' + + ", category='" + category.name() + "'" + '}'; } @@ -81,11 +90,12 @@ public boolean equals(final Object o) { && Objects.equals(description, that.description) && Objects.equals(author, that.author) && Objects.equals(version, that.version) - && Objects.equals(path, that.path); + && Objects.equals(path, that.path) + && Objects.equals(category, that.category); } @Override public int hashCode() { - return Objects.hash(name, description, author, version, path); + return Objects.hash(name, description, author, version, path, category); } } diff --git a/ksqldb-common/src/test/java/io/confluent/ksql/function/UdfFactoryTest.java b/ksqldb-common/src/test/java/io/confluent/ksql/function/UdfFactoryTest.java index 4d167c0172be..b6fa28d81011 100644 --- a/ksqldb-common/src/test/java/io/confluent/ksql/function/UdfFactoryTest.java +++ b/ksqldb-common/src/test/java/io/confluent/ksql/function/UdfFactoryTest.java @@ -35,7 +35,7 @@ public class UdfFactoryTest { private static final String functionName = "TestFunc"; private final UdfFactory factory = new UdfFactory(TestFunc.class, - new UdfMetadata(functionName, "", "", "", "internal")); + new UdfMetadata(functionName, "", "", "", FunctionCategory.OTHER, "internal")); @Test public void shouldThrowIfNoVariantFoundThatAcceptsSuppliedParamTypes() { diff --git a/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java b/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java index 3ec38b918e25..e0dc76870f55 100644 --- a/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java +++ b/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java @@ -1,20 +1,22 @@ /* * Copyright 2018 Confluent Inc. * - * Licensed under the Confluent Community License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of the - * License at + * Licensed under the Confluent Community License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at * * http://www.confluent.io/confluent-community-license * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the + * License. */ package io.confluent.ksql.function.udf; +import static io.confluent.ksql.function.FunctionCategory.OTHER; +import static io.confluent.ksql.function.FunctionCategory.STRING; + import com.google.common.testing.EqualsTester; import org.junit.Test; @@ -24,14 +26,14 @@ public class UdfMetadataTest { public void shouldImplementHashCodeAndEqualsProperly() { new EqualsTester() .addEqualityGroup( - new UdfMetadata("name", "desc", "auth", "ver", "path"), - new UdfMetadata("name", "desc", "auth", "ver", "path") - ) - .addEqualityGroup(new UdfMetadata("DIF", "desc", "auth", "ver", "path")) - .addEqualityGroup(new UdfMetadata("name", "DIF", "auth", "ver", "path")) - .addEqualityGroup(new UdfMetadata("name", "desc", "DIF", "ver", "path")) - .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "DIF", "path")) - .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "ver", "DIF")) + new UdfMetadata("name", "desc", "auth", "ver", OTHER, "path"), + new UdfMetadata("name", "desc", "auth", "ver", OTHER, "path")) + .addEqualityGroup(new UdfMetadata("DIF", "desc", "auth", "ver", OTHER, "path")) + .addEqualityGroup(new UdfMetadata("name", "DIF", "auth", "ver", OTHER, "path")) + .addEqualityGroup(new UdfMetadata("name", "desc", "DIF", "ver", OTHER, "path")) + .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "DIF", OTHER, "path")) + .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "ver", STRING, "path")) + .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "ver", OTHER, "DIF")) .testEquals(); } -} \ No newline at end of file +} diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdafLoader.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdafLoader.java index adc9a6d28e13..45ce2d418358 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdafLoader.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdafLoader.java @@ -102,6 +102,7 @@ void loadUdafFromClass(final Class theClass, final String path) { udafAnnotation.description(), udafAnnotation.author(), udafAnnotation.version(), + udafAnnotation.category(), path ), invokers diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoader.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoader.java index b283ce3f365f..c7a3f112e956 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoader.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoader.java @@ -93,6 +93,7 @@ public void loadUdfFromClass( udfDescriptionAnnotation.description(), udfDescriptionAnnotation.author(), udfDescriptionAnnotation.version(), + udfDescriptionAnnotation.category(), path ) ); diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoaderUtil.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoaderUtil.java index e24b4eb879c1..f3e86724c2b6 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoaderUtil.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdfLoaderUtil.java @@ -40,6 +40,7 @@ public static UdfFactory createTestUdfFactory(final KsqlScalarFunction udf) { udf.getDescription(), "Test Author", "", + FunctionCategory.OTHER, KsqlScalarFunction.INTERNAL_PATH ); diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdtfLoader.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdtfLoader.java index 7d818a7db44b..2246b06a62d2 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdtfLoader.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/UdtfLoader.java @@ -74,6 +74,7 @@ public void loadUdtfFromClass( udtfDescriptionAnnotation.description(), udtfDescriptionAnnotation.author(), udtfDescriptionAnnotation.version(), + udtfDescriptionAnnotation.category(), path ); diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayDistinct.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayDistinct.java index d7b15377a5d5..ba03b32bf2af 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayDistinct.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayDistinct.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.array; import com.google.common.collect.Sets; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ @UdfDescription( name = "array_distinct", + category = FunctionCategory.ARRAY, description = "Returns an array of all the distinct values, including NULL if present, from" + " the input array." + " The output array elements will be in order of their first occurrence in the input." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayExcept.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayExcept.java index 6d70da772508..c48b723f71a0 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayExcept.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayExcept.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.array; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -25,6 +26,7 @@ @UdfDescription( name = "array_except", + category = FunctionCategory.ARRAY, description = "Returns an array of all the elements in an array except for those also present" + " in a second array. The order of entries in the first array is preserved although any" + " duplicates are removed. Returns NULL if either input is NULL.") diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayIntersect.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayIntersect.java index 06f0a90f3b3d..ddf05cec874f 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayIntersect.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayIntersect.java @@ -16,6 +16,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ @UdfDescription( name = "array_intersect", + category = FunctionCategory.ARRAY, description = "Returns an array of all the distinct elements from the intersection of both" + " input arrays, or NULL if either input array is NULL. The order of entries in the" + " output is the same as in the first input array.") diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayJoin.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayJoin.java index ebabda5e58fb..0f1a36967ed8 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayJoin.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayJoin.java @@ -16,6 +16,7 @@ package io.confluent.ksql.function.udf.array; import com.google.common.collect.ImmutableSet; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -29,6 +30,7 @@ @SuppressWarnings("MethodMayBeStatic") // UDF methods can not be static. @UdfDescription( name = "ARRAY_JOIN", + category = FunctionCategory.ARRAY, description = "joins the array elements into a flat string representation", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayLength.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayLength.java index 13bbb2ab9126..a4c1ed93c58d 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayLength.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayLength.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.array; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -27,6 +28,7 @@ @SuppressWarnings("MethodMayBeStatic") // UDF methods can not be static. @UdfDescription( name = "ARRAY_LENGTH", + category = FunctionCategory.ARRAY, description = "Returns the length on an array", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMax.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMax.java index ce9e8024e038..90d8b7520393 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMax.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMax.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.array; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ */ @UdfDescription( name = "array_max", + category = FunctionCategory.ARRAY, description = "Return the maximum value from within an array of primitive values, according to" + " their natural sort order. If the array is NULL, or contains only NULLs, return NULL.") public class ArrayMax { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMin.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMin.java index f50417580a2a..57476a8f25a1 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMin.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayMin.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.array; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ */ @UdfDescription( name = "array_min", + category = FunctionCategory.ARRAY, description = "Return the minimum value from within an array of primitive values, according to" + " their natural sort order. If the array is NULL, or contains only NULLs, return NULL.") public class ArrayMin { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArraySort.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArraySort.java index 11c5e528540d..c4a5f0b3b740 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArraySort.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArraySort.java @@ -18,6 +18,7 @@ import static java.util.Comparator.nullsLast; import com.google.common.collect.Lists; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -29,6 +30,7 @@ */ @UdfDescription( name = "array_sort", + category = FunctionCategory.ARRAY, description = "Sort an array of primitive values, according to their natural sort order. Any " + "NULLs in the array will be placed at the end.") public class ArraySort { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayUnion.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayUnion.java index 6a01e36b3197..d034d6c3fb9c 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayUnion.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/ArrayUnion.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.array; import com.google.common.collect.Sets; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ @UdfDescription( name = "array_union", + category = FunctionCategory.ARRAY, description = "Returns an array of all the distinct elements from both input arrays, " + "or NULL if either array is NULL.") public class ArrayUnion { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/Entries.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/Entries.java index 2d7440f8e7a6..4d5a66099471 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/Entries.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/Entries.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.array; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -36,6 +37,7 @@ */ @UdfDescription( name = "ENTRIES", + category = FunctionCategory.MAP, description = "Construct an array from the entries in a map." + "The array can be optionally sorted on the keys.", diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/GenerateSeries.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/GenerateSeries.java index 7c8442c55dc2..cff6092cbbbd 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/GenerateSeries.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/array/GenerateSeries.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.array; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -28,6 +29,7 @@ */ @UdfDescription( name = "GENERATE_SERIES", + category = FunctionCategory.ARRAY, description = "Construct an array of a range of values", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/DateToString.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/DateToString.java index da80964b128d..50325e68c6f7 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/DateToString.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/DateToString.java @@ -18,6 +18,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -29,6 +30,7 @@ @UdfDescription( name = "datetostring", + category = FunctionCategory.DATE_TIME, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Converts an integer representing days since epoch to a date string" + " using the given format pattern. Note this is the format Kafka Connect uses" diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToDate.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToDate.java index 2a502a2c7016..0fe89b4e09c9 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToDate.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToDate.java @@ -18,6 +18,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -29,6 +30,7 @@ @UdfDescription( name = "stringtodate", + category = FunctionCategory.DATE_TIME, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Converts a string representation of a date into an integer representing" + " days since epoch using the given format pattern." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToTimestamp.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToTimestamp.java index b87cd7522dde..e021fbbd0ace 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToTimestamp.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/StringToTimestamp.java @@ -18,18 +18,19 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; import io.confluent.ksql.util.KsqlConstants; import io.confluent.ksql.util.timestamp.StringToTimestampParser; - import java.time.ZoneId; import java.util.concurrent.ExecutionException; @UdfDescription( name = "stringtotimestamp", + category = FunctionCategory.DATE_TIME, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Converts a string representation of a date in the given format" + " into the BIGINT value that represents the millisecond timestamp." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/TimestampToString.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/TimestampToString.java index 7d2e6e55ee37..efdcd6ff3231 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/TimestampToString.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/TimestampToString.java @@ -18,6 +18,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -30,6 +31,7 @@ @UdfDescription( name = "timestamptostring", + category = FunctionCategory.DATE_TIME, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Converts a BIGINT millisecond timestamp value into" + " the string representation of the timestamp in the given format." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixDate.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixDate.java index 44153f9c26bd..5b2ce0db98a2 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixDate.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixDate.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.datetime; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.util.KsqlConstants; @@ -21,6 +22,7 @@ @UdfDescription( name = "unix_date", + category = FunctionCategory.DATE_TIME, description = "Gets an integer representing days since epoch.", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixTimestamp.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixTimestamp.java index 03a27b96d8b4..1ba5a8f383fb 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixTimestamp.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/datetime/UnixTimestamp.java @@ -14,12 +14,14 @@ package io.confluent.ksql.function.udf.datetime; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.util.KsqlConstants; @UdfDescription( name = "unix_timestamp", + category = FunctionCategory.DATE_TIME, description = "Gets the Unix timestamp in milliseconds, represented as a BIGINT.", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonArrayContains.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonArrayContains.java index 3411cf0cbf14..adc6207e04bf 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonArrayContains.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonArrayContains.java @@ -29,6 +29,7 @@ import com.fasterxml.jackson.core.JsonFactoryBuilder; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -40,6 +41,7 @@ @UdfDescription( name = "JSON_ARRAY_CONTAINS", + category = FunctionCategory.JSON, description = JsonArrayContains.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonExtractString.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonExtractString.java index b319565a9e25..26433e741991 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonExtractString.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/json/JsonExtractString.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.collect.ImmutableList; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -29,6 +30,7 @@ @UdfDescription( name = "extractjsonfield", + category = FunctionCategory.JSON, description = "Given a STRING that contains JSON data, extract the value at the specified " + " JSONPath or NULL if the specified path does not exist.") public class JsonExtractString { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/ArrayContains.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/ArrayContains.java index d8f83b869720..0c00c1e53887 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/ArrayContains.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/ArrayContains.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.list; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "ARRAY_CONTAINS", + category = FunctionCategory.ARRAY, description = ArrayContains.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/Slice.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/Slice.java index ef8d746a08d3..e46251c20511 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/Slice.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/list/Slice.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.list; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "slice", + category = FunctionCategory.ARRAY, description = "slice of an ARRAY", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/AsMap.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/AsMap.java index 04693060845c..cabeed0c9783 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/AsMap.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/AsMap.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.map; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -25,6 +26,7 @@ @UdfDescription( name = "AS_MAP", + category = FunctionCategory.MAP, description = "Construct a list based on some inputs", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapKeys.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapKeys.java index 535c30911016..d70ed574abf0 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapKeys.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapKeys.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.map; import com.google.common.collect.Lists; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import java.util.List; @@ -22,6 +23,7 @@ @UdfDescription( name = "map_keys", + category = FunctionCategory.MAP, description = "Returns an array of all the keys from the specified map, " + "or NULL if the input map is NULL.") public class MapKeys { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapUnion.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapUnion.java index c9c622bd1feb..eaab7ef1da33 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapUnion.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapUnion.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.map; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -26,6 +27,7 @@ @UdfDescription( name = "map_union", + category = FunctionCategory.MAP, description = "Returns a new map containing the union of all entries from both input maps. " + "If a key is present in both input maps then the value from map2 is the one which " + "appears in the result. Returns NULL if all of the input maps are NULL.") diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapValues.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapValues.java index b3fc82064dd3..d749a7c7a81c 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapValues.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/map/MapValues.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.map; import com.google.common.collect.Lists; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import java.util.List; @@ -22,6 +23,7 @@ @UdfDescription( name = "map_values", + category = FunctionCategory.MAP, description = "Returns an array of all the values from the specified map, " + "or NULL if the input map is NULL.") public class MapValues { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Abs.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Abs.java index 2f98a63022e7..10bc179d0091 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Abs.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Abs.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -28,6 +29,7 @@ @UdfDescription( name = "Abs", + category = FunctionCategory.MATHEMATICAL, description = Abs.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ceil.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ceil.java index cf5b110d5d03..538ffe5fe473 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ceil.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ceil.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -29,6 +30,7 @@ @UdfDescription( name = "Ceil", + category = FunctionCategory.MATHEMATICAL, description = Ceil.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Exp.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Exp.java index 31e42263cfd2..dc60aab2928f 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Exp.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Exp.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @SuppressWarnings("WeakerAccess") // Invoked via reflection @UdfDescription( name = "exp", + category = FunctionCategory.MATHEMATICAL, author = KsqlConstants.CONFLUENT_AUTHOR, description = "The exponential of a value." ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Floor.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Floor.java index cc869cd2962b..515d4131148b 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Floor.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Floor.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -29,6 +30,7 @@ @UdfDescription( name = "Floor", + category = FunctionCategory.MATHEMATICAL, description = Floor.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ln.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ln.java index 8ee55bee7b3a..2c46a78bf7bb 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ln.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Ln.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -21,6 +22,7 @@ @UdfDescription( name = "ln", + category = FunctionCategory.MATHEMATICAL, author = KsqlConstants.CONFLUENT_AUTHOR, description = "The natural logarithm of a value." ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Random.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Random.java index 499cb3b96081..a8d9745a1df1 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Random.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Random.java @@ -15,11 +15,13 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @UdfDescription( name = "random", + category = FunctionCategory.MATHEMATICAL, description = "Returns a random number greater than or equal to 0.0 and less than 1.0.") public class Random { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Round.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Round.java index 8ab25525ba7e..0fc8681075a1 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Round.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Round.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -63,6 +64,7 @@ in order to provide compatibility with the previous ROUND() implementation which */ @UdfDescription( name = "Round", + category = FunctionCategory.MATHEMATICAL, description = Round.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sign.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sign.java index ca1564f3a1aa..9daf45ade492 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sign.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sign.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @SuppressWarnings("WeakerAccess") // Invoked via reflection @UdfDescription( name = "sign", + category = FunctionCategory.MATHEMATICAL, author = KsqlConstants.CONFLUENT_AUTHOR, description = "The sign of a value." ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sqrt.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sqrt.java index 91a0d69ec89b..77ec53f50f30 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sqrt.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/math/Sqrt.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.math; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @SuppressWarnings("WeakerAccess") // Invoked via reflection @UdfDescription( name = "sqrt", + category = FunctionCategory.MATHEMATICAL, author = KsqlConstants.CONFLUENT_AUTHOR, description = "The square root of a value." ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/Coalesce.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/Coalesce.java index 40d340b74446..3966c72175ed 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/Coalesce.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/Coalesce.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.nulls; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.name.FunctionName; @@ -28,6 +29,7 @@ @SuppressWarnings("MethodMayBeStatic") // UDF methods can not be static. @UdfDescription( name = Coalesce.NAME_TEXT, + category = FunctionCategory.CONDITIONAL, description = "Returns first non-null element", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/IfNull.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/IfNull.java index 16260a92fede..50afb8556a7e 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/IfNull.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/nulls/IfNull.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.nulls; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @SuppressWarnings({"MethodMayBeStatic", "unused"}) // UDF methods can not be static. @UdfDescription( name = "IFNULL", + category = FunctionCategory.CONDITIONAL, description = "Returns expression if NOT NULL, otherwise the alternative value", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Chr.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Chr.java index 73f68a8c7309..823141257db8 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Chr.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Chr.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -21,6 +22,7 @@ @UdfDescription( name = "Chr", + category = FunctionCategory.STRING, description = "Returns a single-character string corresponding to the input character code.") public class Chr { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Concat.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Concat.java index e68163269b83..c3523cf9bf60 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Concat.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Concat.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ @UdfDescription( name = "concat", + category = FunctionCategory.STRING, description = "Concatenate an arbitrary number of string fields together") public class Concat { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/ConcatWS.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/ConcatWS.java index f386b827200c..420c944ac563 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/ConcatWS.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/ConcatWS.java @@ -14,6 +14,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -24,6 +25,7 @@ @UdfDescription( name = "concat_ws", + category = FunctionCategory.STRING, description = "Concatenate several strings, inserting a separator string passed as the " + "first argument between each one.") public class ConcatWS { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Elt.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Elt.java index fe05fa2e7b42..3eb20189d7c0 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Elt.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Elt.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @UdfDescription( name = "elt", + category = FunctionCategory.STRING, description = Elt.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Encode.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Encode.java index bef4a3f91de0..8e5d827fda83 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Encode.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Encode.java @@ -16,6 +16,7 @@ package io.confluent.ksql.function.udf.string; import com.google.common.collect.ImmutableMap; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -29,6 +30,7 @@ @SuppressWarnings("checkstyle:ClassDataAbstractionCoupling") @UdfDescription(name = "encode", author = KsqlConstants.CONFLUENT_AUTHOR, + category = FunctionCategory.STRING, description = "Takes an input string s, which is encoded as input_encoding, " + "and encodes it as output_encoding. The accepted input and output encodings are: " + "hex, utf8, ascii and base64. Throws exception if provided encodings are not supported.") diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Field.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Field.java index e429eedafeb8..fd5cbc6f940f 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Field.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Field.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @UdfDescription( name = "field", + category = FunctionCategory.STRING, description = Field.DESCRIPTION, author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/InitCap.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/InitCap.java index 7e03ff2075a8..b54aa6c38af6 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/InitCap.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/InitCap.java @@ -15,17 +15,18 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; import io.confluent.ksql.util.KsqlConstants; - import java.util.regex.Matcher; import java.util.regex.Pattern; @SuppressWarnings("unused") // Invoked via reflection. @UdfDescription( name = "initcap", + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Capitalizes the first letter of each word in a string and the rest lowercased." + " Words are delimited by whitespace." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Instr.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Instr.java index 46d76dd8b36e..bbd29e44e537 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Instr.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Instr.java @@ -18,6 +18,7 @@ import static org.apache.commons.lang3.StringUtils.ordinalIndexOf; import static org.apache.commons.lang3.StringUtils.substring; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.util.KsqlConstants; @@ -25,6 +26,7 @@ @UdfDescription( name = "instr", + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Returns the position of substring in the provided string" ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LCase.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LCase.java index 86dacb74f63a..ec6e84ef69ea 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LCase.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LCase.java @@ -15,12 +15,14 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @UdfDescription( name = "lcase", + category = FunctionCategory.STRING, description = "Returns a lower-case version of the input string.") public class LCase { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LPad.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LPad.java index 5c82eece5bde..68ae469e8073 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LPad.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/LPad.java @@ -14,12 +14,14 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @UdfDescription( name = "LPad", + category = FunctionCategory.STRING, description = "Pads the input string, beginning from the left, with the specified padding" + " string until the target length is reached. If the input string is longer than the" + " specified target length it will be truncated. If the padding string is empty or" diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Len.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Len.java index 7d60ee4fdb60..c611ec2a15d3 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Len.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Len.java @@ -14,12 +14,14 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @UdfDescription( name = "len", + category = FunctionCategory.STRING, description = "Returns the length of the input string.") public class Len { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Mask.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Mask.java index a0021b92d851..0d1e1ba165a4 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Mask.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Mask.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @UdfDescription( name = "mask", + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Returns a version of the input string with every character replaced by a mask." + " Default masking rules will replace all upper-case characters with 'X', all lower-case" diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepLeft.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepLeft.java index d8d8fe26228c..0e8410e59928 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepLeft.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepLeft.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @UdfDescription( name = MaskKeepLeft.NAME, + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Returns a version of the input string with all but the" + " specified number of left-most characters masked out." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepRight.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepRight.java index b534f6cc9e00..d1c1289a0d37 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepRight.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskKeepRight.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @UdfDescription( name = MaskKeepRight.NAME, + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Returns a version of the input string with all but the" + " specified number of right-most characters masked out." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskLeft.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskLeft.java index 6bf5171ae0a1..188f7c3b357d 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskLeft.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskLeft.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @UdfDescription( name = MaskLeft.NAME, + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Returns a version of the input string with the" + " specified number of characters, starting from the beginning of the string, masked out." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskRight.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskRight.java index 5938898e8552..0effeb1be050 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskRight.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/MaskRight.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -22,6 +23,7 @@ @UdfDescription( name = MaskRight.NAME, + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Returns a version of the input string with the" + " specified number of characters, counting back from the end of the string, masked out." diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RPad.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RPad.java index 408b456e494d..9f1e8a1011cd 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RPad.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RPad.java @@ -14,12 +14,14 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @UdfDescription( name = "RPad", + category = FunctionCategory.STRING, description = "Pads the input string, starting from the end, with the specified padding" + " string until the target length is reached. If the input string is longer than the" + " specified target length it will be truncated. If the padding string is empty or" diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtract.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtract.java index 53eee7e6a129..13604274ee4e 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtract.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtract.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ @UdfDescription( name = "regexp_extract", + category = FunctionCategory.REGULAR_EXPRESSION, author = KsqlConstants.CONFLUENT_AUTHOR, description = "extract the first subtring matched by a regex pattern" ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtractAll.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtractAll.java index 203ded7e3f78..8ee773c4f0a1 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtractAll.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpExtractAll.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -28,6 +29,7 @@ @UdfDescription( name = "regexp_extract_all", + category = FunctionCategory.REGULAR_EXPRESSION, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Extracts the all subtrings matched by a regex pattern") public class RegexpExtractAll { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpReplace.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpReplace.java index 775a5c530e18..0ded44a1ed06 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpReplace.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpReplace.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -24,6 +25,7 @@ @UdfDescription(name = "regexp_replace", author = KsqlConstants.CONFLUENT_AUTHOR, + category = FunctionCategory.REGULAR_EXPRESSION, description = "Replaces all matches of a regexp in a string with a new substring.") public class RegexpReplace { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpSplitToArray.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpSplitToArray.java index f09cce61381c..08092836046c 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpSplitToArray.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/RegexpSplitToArray.java @@ -16,6 +16,7 @@ package io.confluent.ksql.function.udf.string; import com.google.common.base.Splitter; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -28,6 +29,7 @@ @UdfDescription(name = "regexp_split_to_array", author = KsqlConstants.CONFLUENT_AUTHOR, + category = FunctionCategory.REGULAR_EXPRESSION, description = "Splits a string into an array of substrings based on a regexp. " + "If the regexp is found at the beginning of the string, end of the string, or there " + "are contiguous matches in the string, then empty strings are added to the array. " diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Replace.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Replace.java index ff6aa2f780fe..f5b0827aed40 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Replace.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Replace.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @SuppressWarnings("unused") // Invoked via reflection. @UdfDescription( name = "replace", + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Replaces all occurances of a substring in a string with a new substring." ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Split.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Split.java index d4f3e4dede11..2cd3a6aa31b9 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Split.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Split.java @@ -16,6 +16,7 @@ package io.confluent.ksql.function.udf.string; import com.google.common.base.Splitter; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -27,6 +28,7 @@ @UdfDescription( name = Split.NAME, + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Splits a string into an array of substrings based on a delimiter. " + "If the delimiter is found at the beginning of the string, end of the string, or there " diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/SplitToMap.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/SplitToMap.java index ce3d14432230..a95d1941f43c 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/SplitToMap.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/SplitToMap.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; import com.google.common.base.Splitter; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,10 +25,11 @@ @UdfDescription( name = "split_to_map", + category = FunctionCategory.STRING, description = "Splits a string into key-value pairs and creates a map from them. The " + "'entryDelimiter' splits the string into key-value pairs which are then split by " + "'kvDelimiter'. If the same key is present multiple times in the input, the latest " - + "value for that key is returned. Returns NULL f the input text or either of the " + + "value for that key is returned. Returns NULL if the input text or either of the " + "delimiters is NULL.") public class SplitToMap { @Udf diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Substring.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Substring.java index 57d6432a39fc..894ccdf24df2 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Substring.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Substring.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @SuppressWarnings("unused") // Invoked via reflection. @UdfDescription( name = "substring", + category = FunctionCategory.STRING, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Returns a substring of the passed in value." ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Trim.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Trim.java index 09e9ba1a20df..74da89838d36 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Trim.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Trim.java @@ -14,12 +14,14 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @UdfDescription( name = "trim", + category = FunctionCategory.STRING, description = "Remove whitespace from the beginning and end of a string.") public class Trim { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/UCase.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/UCase.java index 6ca3270004b2..2e1c45d23487 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/UCase.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/UCase.java @@ -14,12 +14,14 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @UdfDescription( name = "ucase", + category = FunctionCategory.STRING, description = "Returns an upper-case version of the input string.") public class UCase { diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Uuid.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Uuid.java index eef386e001fe..f71807570846 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Uuid.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/string/Uuid.java @@ -14,11 +14,13 @@ package io.confluent.ksql.function.udf.string; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @UdfDescription( name = "UUID", + category = FunctionCategory.STRING, description = "Create a Universally Unique Identifier (UUID) generated according to RFC 4122. " + "A call to UUID() returns a value conforming to UUID version 4, sometimes called " + "\"random UUID\", as described in RFC 4122. The value is a 128-bit number represented " diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlDecodeParam.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlDecodeParam.java index 3a5131f4ac22..e72ff5705dda 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlDecodeParam.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlDecodeParam.java @@ -17,6 +17,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.KsqlFunctionException; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; @@ -28,6 +29,7 @@ @UdfDescription( name = "url_decode_param", + category = FunctionCategory.URL, description = "Decodes a previously encoded application/x-www-form-urlencoded String", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlEncodeParam.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlEncodeParam.java index 7d72f933937f..39fa016b62b4 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlEncodeParam.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlEncodeParam.java @@ -17,6 +17,7 @@ import com.google.common.escape.Escaper; import com.google.common.net.UrlEscapers; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -24,6 +25,7 @@ @UdfDescription( name = "url_encode_param", + category = FunctionCategory.URL, description = "Returns a version of the input with all URL sensitive characters encoded " + "using the application/x-www-form-urlencoded standard.", author = KsqlConstants.CONFLUENT_AUTHOR diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractFragment.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractFragment.java index da38131c2057..a044125f506e 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractFragment.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractFragment.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.url; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "url_extract_fragment", + category = FunctionCategory.URL, description = "Extracts the fragment of an application/x-www-form-urlencoded String input", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractHost.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractHost.java index 53a3366efa6e..2eb3fdfadf69 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractHost.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractHost.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.url; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "url_extract_host", + category = FunctionCategory.URL, description = "Extracts the Host Name of an application/x-www-form-urlencoded String input", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractParameter.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractParameter.java index 7f3a4bc96cfa..6f54c6160f8a 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractParameter.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractParameter.java @@ -16,6 +16,7 @@ package io.confluent.ksql.function.udf.url; import com.google.common.base.Splitter; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -25,6 +26,7 @@ @UdfDescription( name = "url_extract_parameter", + category = FunctionCategory.URL, description = "Extracts a parameter with a specified name encoded inside an " + "application/x-www-form-urlencoded String.", author = KsqlConstants.CONFLUENT_AUTHOR diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPath.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPath.java index 8243056c0196..d7515308c5f5 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPath.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPath.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.url; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "url_extract_path", + category = FunctionCategory.URL, description = "Extracts the path of an application/x-www-form-urlencoded encoded String input", author = KsqlConstants.CONFLUENT_AUTHOR ) diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPort.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPort.java index 2430ca0472e4..6abd495f15e8 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPort.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractPort.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.url; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "url_extract_port", + category = FunctionCategory.URL, description = "Extracts the port from an application/x-www-form-urlencoded encoded String." + " If there is no port or the string is invalid, this will return null.", author = KsqlConstants.CONFLUENT_AUTHOR diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractProtocol.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractProtocol.java index 3ce071448dd0..62076e28cc74 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractProtocol.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractProtocol.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.url; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "url_extract_protocol", + category = FunctionCategory.URL, description = "Extracts the Scheme Component (protocol) of an " + "application/x-www-form-urlencoded encoded String input", author = KsqlConstants.CONFLUENT_AUTHOR diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractQuery.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractQuery.java index 1c9393c1d741..64d9f371f0d9 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractQuery.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/url/UrlExtractQuery.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf.url; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import io.confluent.ksql.function.udf.UdfDescription; import io.confluent.ksql.function.udf.UdfParameter; @@ -23,6 +24,7 @@ @UdfDescription( name = "url_extract_query", + category = FunctionCategory.URL, description = "Extracts the query parameters of an " + "application/x-www-form-urlencoded encoded String input, if it exists.", author = KsqlConstants.CONFLUENT_AUTHOR diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/Cube.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/Cube.java index 39168b742d63..777303ad2c5b 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/Cube.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/Cube.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udtf; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.util.KsqlConstants; import java.util.ArrayList; import java.util.Collections; @@ -22,6 +23,7 @@ @UdtfDescription( name = "cube_explode", + category = FunctionCategory.TABLE, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Takes as argument a list of columns and outputs all possible combinations of them. " diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/array/Explode.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/array/Explode.java index 236437c81e66..e5c132190e19 100644 --- a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/array/Explode.java +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udtf/array/Explode.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udtf.array; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.UdfSchemaProvider; import io.confluent.ksql.function.udtf.Udtf; import io.confluent.ksql.function.udtf.UdtfDescription; @@ -32,6 +33,7 @@ */ @UdtfDescription( name = "explode", + category = FunctionCategory.TABLE, author = KsqlConstants.CONFLUENT_AUTHOR, description = "Explodes an array. This function outputs one value for each element of the array." diff --git a/ksqldb-engine/src/test/java/io/confluent/ksql/function/InternalFunctionRegistryTest.java b/ksqldb-engine/src/test/java/io/confluent/ksql/function/InternalFunctionRegistryTest.java index 53e1c910da66..f7c81e8f5a4a 100644 --- a/ksqldb-engine/src/test/java/io/confluent/ksql/function/InternalFunctionRegistryTest.java +++ b/ksqldb-engine/src/test/java/io/confluent/ksql/function/InternalFunctionRegistryTest.java @@ -388,7 +388,7 @@ public List> supportedArgs() { private TableFunctionFactory createTableFunctionFactory() { return new TableFunctionFactory(new UdfMetadata("my_tablefunction", - "", "", "", "")) { + "", "", "", FunctionCategory.OTHER, "")) { @Override public KsqlTableFunction createTableFunction(final List argTypeList) { return tableFunction; diff --git a/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java b/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java index 62fee7f56df7..06c07ca1c7a0 100644 --- a/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java +++ b/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java @@ -44,21 +44,24 @@ public static Optional execute( final List all = functionRegistry.listFunctions().stream() .map(factory -> new SimpleFunctionInfo( factory.getName().toUpperCase(), - FunctionType.SCALAR + FunctionType.SCALAR, + factory.getMetadata().getCategory().toString() )) .collect(Collectors.toList()); functionRegistry.listTableFunctions().stream() .map(factory -> new SimpleFunctionInfo( factory.getName().toUpperCase(), - FunctionType.TABLE + FunctionType.TABLE, + factory.getMetadata().getCategory().toString() )) .forEach(all::add); functionRegistry.listAggregateFunctions().stream() .map(factory -> new SimpleFunctionInfo( factory.getName().toUpperCase(), - FunctionType.AGGREGATE + FunctionType.AGGREGATE, + factory.getMetadata().getCategory().toString() )) .forEach(all::add); diff --git a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java index cd50cfd2a154..f6b6f224dfdd 100644 --- a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java +++ b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java @@ -19,6 +19,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.mock; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.rest.SessionProperties; import io.confluent.ksql.rest.entity.FunctionNameList; import io.confluent.ksql.rest.entity.FunctionType; @@ -49,11 +50,16 @@ public void shouldListFunctions() { // Then: final Collection functions = functionList.getFunctions(); assertThat(functions, hasItems( - new SimpleFunctionInfo("TEST_UDF_1", FunctionType.SCALAR), - new SimpleFunctionInfo("TOPK", FunctionType.AGGREGATE), - new SimpleFunctionInfo("MAX", FunctionType.AGGREGATE), - new SimpleFunctionInfo("TEST_UDTF1", FunctionType.TABLE), - new SimpleFunctionInfo("TEST_UDTF2", FunctionType.TABLE) + new SimpleFunctionInfo("TEST_UDF_1", FunctionType.SCALAR, + FunctionCategory.OTHER.toString()), + new SimpleFunctionInfo("TOPK", FunctionType.AGGREGATE, + FunctionCategory.AGGREGATE.toString()), + new SimpleFunctionInfo("MAX", FunctionType.AGGREGATE, + FunctionCategory.AGGREGATE.toString()), + new SimpleFunctionInfo("TEST_UDTF1", FunctionType.TABLE, + FunctionCategory.TABLE.toString()), + new SimpleFunctionInfo("TEST_UDTF2", FunctionType.TABLE, + FunctionCategory.TABLE.toString()) )); } } diff --git a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java index 1a0f33cc2f2e..c981db220374 100644 --- a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java +++ b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java @@ -80,6 +80,7 @@ import io.confluent.ksql.execution.ddl.commands.DropSourceCommand; import io.confluent.ksql.execution.ddl.commands.KsqlTopic; import io.confluent.ksql.execution.expression.tree.StringLiteral; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.InternalFunctionRegistry; import io.confluent.ksql.function.MutableFunctionRegistry; import io.confluent.ksql.function.UserFunctionLoader; @@ -462,9 +463,12 @@ public void shouldListFunctions() { // Then: assertThat(functionList.getFunctions(), hasItems( - new SimpleFunctionInfo("TRIM", FunctionType.SCALAR), - new SimpleFunctionInfo("TOPK", FunctionType.AGGREGATE), - new SimpleFunctionInfo("MAX", FunctionType.AGGREGATE) + new SimpleFunctionInfo("TRIM", FunctionType.SCALAR, + FunctionCategory.STRING.toString()), + new SimpleFunctionInfo("TOPK", FunctionType.AGGREGATE, + FunctionCategory.AGGREGATE.toString()), + new SimpleFunctionInfo("MAX", FunctionType.AGGREGATE, + FunctionCategory.AGGREGATE.toString()) )); } diff --git a/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java b/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java index bb402586d5f7..2ab74bc0fabd 100644 --- a/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java +++ b/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java @@ -25,14 +25,17 @@ public class SimpleFunctionInfo implements Comparable { private final String name; private final FunctionType type; + private final String category; @JsonCreator public SimpleFunctionInfo( @JsonProperty("name") final String name, - @JsonProperty("type") final FunctionType type + @JsonProperty("type") final FunctionType type, + @JsonProperty("category") final String category ) { this.name = Objects.requireNonNull(name, "name can't be null"); this.type = Objects.requireNonNull(type, "type can't be null"); + this.category = Objects.isNull(category) ? "" : category; } public String getName() { @@ -43,6 +46,10 @@ public FunctionType getType() { return type; } + public String getCategory() { + return category; + } + @Override public boolean equals(final Object o) { if (this == o) { @@ -53,19 +60,21 @@ public boolean equals(final Object o) { } final SimpleFunctionInfo that = (SimpleFunctionInfo) o; return Objects.equals(name, that.name) - && type == that.type; + && type == that.type + && category == that.category; } @Override public int hashCode() { - return Objects.hash(name, type); + return Objects.hash(name, type, category); } @Override public String toString() { return "SimpleFunctionInfo{" + "name='" + name + '\'' - + ", type=" + type + + ", type='" + type + '\'' + + ", category=" + category + '}'; } diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java new file mode 100644 index 000000000000..c0cd01dc5f35 --- /dev/null +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java @@ -0,0 +1,30 @@ +/* + * Copyright 2019 Confluent Inc. + * + * Licensed under the Confluent Community License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.confluent.io/confluent-community-license + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the + * License. + */ + +package io.confluent.ksql.function; + +public enum FunctionCategory { + CONDITIONAL, + MATHEMATICAL, + STRING, + REGULAR_EXPRESSION, + JSON, + DATE_TIME, + ARRAY, + MAP, + URL, + OTHER, + AGGREGATE, + TABLE; +} diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java index 1b7bcb385756..5ce8f9db8714 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udaf; +import io.confluent.ksql.function.FunctionCategory; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -32,6 +33,8 @@ String description(); + FunctionCategory category() default FunctionCategory.AGGREGATE; + String author() default ""; String version() default ""; diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java index feee9fb01159..5bbdcc2c8b11 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udf; +import io.confluent.ksql.function.FunctionCategory; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -53,10 +54,21 @@ */ String description(); + /** + * The category or type of the function. + * + *

+ * This text is used to group functions displayed when the user calls {@code SHOW FUNCTIONS ...}. + * + * @return function category. + */ + FunctionCategory category() default FunctionCategory.OTHER; + /** * The author of the function. * - *

This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. + *

+ * This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. * * @return function author. */ diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java index 193ce7de0512..318f91e01261 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java @@ -15,6 +15,7 @@ package io.confluent.ksql.function.udtf; +import io.confluent.ksql.function.FunctionCategory; import io.confluent.ksql.function.udf.Udf; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -54,10 +55,21 @@ */ String description(); + /** + * The category or type of the table function. + * + *

+ * This text is used to group functions displayed when the user calls {@code SHOW FUNCTIONS ...}. + * + * @return function category. + */ + FunctionCategory category() default FunctionCategory.TABLE; + /** * The author of the table function. * - *

This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. + *

+ * This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. * * @return function author. */ From 3452336935970324083b9769acbbb1206deb7f96 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Mon, 13 Jul 2020 10:56:18 -0700 Subject: [PATCH 02/11] docs --- docs/concepts/functions.md | 1 + .../java/io/confluent/ksql/function/udf/UdfDescription.java | 6 ++---- .../io/confluent/ksql/function/udtf/UdtfDescription.java | 6 ++---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/docs/concepts/functions.md b/docs/concepts/functions.md index 5f42623d8ff7..92c17c777b49 100644 --- a/docs/concepts/functions.md +++ b/docs/concepts/functions.md @@ -258,6 +258,7 @@ commands. |-------------|----------------------------------------------------------------------|----------| | name | The case-insensitive name of the UDF(s) represented by this class. | Yes | | description | A string describing generally what the function(s) in this class do. | Yes | +| catgory | For grouping similar functions in the output of SHOW FUNCTIONS. | No | | author | The author of the UDF. | No | | version | The version of the UDF. | No | diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java index 5bbdcc2c8b11..1019cef95df7 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java @@ -57,8 +57,7 @@ /** * The category or type of the function. * - *

- * This text is used to group functions displayed when the user calls {@code SHOW FUNCTIONS ...}. + *

This text is used to group functions displayed when invoking {@code SHOW FUNCTIONS ...}. * * @return function category. */ @@ -67,8 +66,7 @@ /** * The author of the function. * - *

- * This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. + *

This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. * * @return function author. */ diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java index 318f91e01261..66f239beadac 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java @@ -58,8 +58,7 @@ /** * The category or type of the table function. * - *

- * This text is used to group functions displayed when the user calls {@code SHOW FUNCTIONS ...}. + *

This text is used to group functions displayed when invoking {@code SHOW FUNCTIONS ...}. * * @return function category. */ @@ -68,8 +67,7 @@ /** * The author of the table function. * - *

- * This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. + *

This text is displayed when the user calls {@code DESCRIBE FUNCTION ...}. * * @return function author. */ From 8db9dc346775d377d3828e5dd69ce839dc4cebc0 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Mon, 13 Jul 2020 13:01:49 -0700 Subject: [PATCH 03/11] fix docs typo --- docs/concepts/functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/functions.md b/docs/concepts/functions.md index 92c17c777b49..641fa5994422 100644 --- a/docs/concepts/functions.md +++ b/docs/concepts/functions.md @@ -258,7 +258,7 @@ commands. |-------------|----------------------------------------------------------------------|----------| | name | The case-insensitive name of the UDF(s) represented by this class. | Yes | | description | A string describing generally what the function(s) in this class do. | Yes | -| catgory | For grouping similar functions in the output of SHOW FUNCTIONS. | No | +| category | For grouping similar functions in the output of SHOW FUNCTIONS. | No | | author | The author of the UDF. | No | | version | The version of the UDF. | No | From 5189085554e01c5f200feb6dc085b7d8c4a51d19 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Mon, 13 Jul 2020 14:25:20 -0700 Subject: [PATCH 04/11] missed a couple of 'final's --- .../console/table/builder/FunctionNameListTableBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java b/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java index 8b6c571eeb74..9d682928376c 100644 --- a/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java +++ b/ksqldb-cli/src/main/java/io/confluent/ksql/cli/console/table/builder/FunctionNameListTableBuilder.java @@ -33,10 +33,10 @@ public class FunctionNameListTableBuilder implements TableBuilder funcs = functionNameList.getFunctions().iterator(); + final Iterator funcs = functionNameList.getFunctions().iterator(); if (!funcs.hasNext() || funcs.next().getCategory().isEmpty()) { final Stream> rows = functionNameList.getFunctions() .stream() From 34d90372bdcf0b02106c4210d0e05dda4892514b Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Mon, 13 Jul 2020 17:36:06 -0700 Subject: [PATCH 05/11] retry integration test fix --- ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java b/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java index 93bdd0c733d3..32a912cf7e4f 100644 --- a/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java +++ b/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java @@ -784,8 +784,8 @@ public void shouldPrintErrorOnUnsupportedAPI() throws Exception { @Test public void shouldListFunctions() { assertRunListCommand("functions", hasRows( - row("TIMESTAMPTOSTRING", "SCALAR"), - row("EXTRACTJSONFIELD", "SCALAR"), + row("TIMESTAMPTOSTRING", "DATE_TIME"), + row("EXTRACTJSONFIELD", "JSON"), row("TOPK", "AGGREGATE") )); } From 1efb7a1244d7271ce73f27c41e023abb2547e13c Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Mon, 13 Jul 2020 21:38:02 -0700 Subject: [PATCH 06/11] Almog's requested changes --- .../ksql/function/udf/UdfMetadata.java | 9 +++---- .../execution/ListFunctionsExecutor.java | 6 ++--- .../ksql/function/FunctionCategory.java | 26 +++++++++---------- .../ksql/function/udaf/UdafDescription.java | 2 +- .../ksql/function/udf/UdfDescription.java | 2 +- .../ksql/function/udtf/UdtfDescription.java | 2 +- 6 files changed, 23 insertions(+), 24 deletions(-) diff --git a/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java b/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java index c7d49f9fd33f..93f4b65a23b1 100644 --- a/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java +++ b/ksqldb-common/src/main/java/io/confluent/ksql/function/udf/UdfMetadata.java @@ -15,7 +15,6 @@ package io.confluent.ksql.function.udf; -import io.confluent.ksql.function.FunctionCategory; import java.util.Objects; public class UdfMetadata { @@ -24,13 +23,13 @@ public class UdfMetadata { private final String author; private final String version; private final String path; - private final FunctionCategory category; + private final String category; public UdfMetadata(final String name, final String description, final String author, final String version, - final FunctionCategory category, + final String category, final String path ) { this.name = Objects.requireNonNull(name, "name cant be null"); @@ -61,7 +60,7 @@ public String getPath() { return path; } - public FunctionCategory getCategory() { + public String getCategory() { return category; } @@ -73,7 +72,7 @@ public String toString() { + ", author='" + author + '\'' + ", version='" + version + '\'' + ", path='" + path + '\'' - + ", category='" + category.name() + "'" + + ", category='" + category + "'" + '}'; } diff --git a/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java b/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java index 06c07ca1c7a0..ed4e730cf233 100644 --- a/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java +++ b/ksqldb-rest-app/src/main/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutor.java @@ -45,7 +45,7 @@ public static Optional execute( .map(factory -> new SimpleFunctionInfo( factory.getName().toUpperCase(), FunctionType.SCALAR, - factory.getMetadata().getCategory().toString() + factory.getMetadata().getCategory() )) .collect(Collectors.toList()); @@ -53,7 +53,7 @@ public static Optional execute( .map(factory -> new SimpleFunctionInfo( factory.getName().toUpperCase(), FunctionType.TABLE, - factory.getMetadata().getCategory().toString() + factory.getMetadata().getCategory() )) .forEach(all::add); @@ -61,7 +61,7 @@ public static Optional execute( .map(factory -> new SimpleFunctionInfo( factory.getName().toUpperCase(), FunctionType.AGGREGATE, - factory.getMetadata().getCategory().toString() + factory.getMetadata().getCategory() )) .forEach(all::add); diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java index c0cd01dc5f35..b73b6f125bb5 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java @@ -14,17 +14,17 @@ package io.confluent.ksql.function; -public enum FunctionCategory { - CONDITIONAL, - MATHEMATICAL, - STRING, - REGULAR_EXPRESSION, - JSON, - DATE_TIME, - ARRAY, - MAP, - URL, - OTHER, - AGGREGATE, - TABLE; +public class FunctionCategory { + public static final String CONDITIONAL = "CONDITIONAL"; + public static final String MATHEMATICAL = "OTHER"; + public static final String STRING = "OTHER"; + public static final String REGULAR_EXPRESSION = "OTHER"; + public static final String JSON = "OTHER"; + public static final String DATE_TIME = "OTHER"; + public static final String ARRAY = "ARRAY"; + public static final String MAP = "MAP"; + public static final String URL = "URL"; + public static final String OTHER = "OTHER"; + public static final String AGGREGATE = "AGGREGATE"; + public static final String TABLE = "TABLE"; } diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java index 5ce8f9db8714..cc9c4c1bca4c 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udaf/UdafDescription.java @@ -33,7 +33,7 @@ String description(); - FunctionCategory category() default FunctionCategory.AGGREGATE; + String category() default FunctionCategory.AGGREGATE; String author() default ""; diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java index 1019cef95df7..4616e975141d 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udf/UdfDescription.java @@ -61,7 +61,7 @@ * * @return function category. */ - FunctionCategory category() default FunctionCategory.OTHER; + String category() default FunctionCategory.OTHER; /** * The author of the function. diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java index 66f239beadac..3935258121e1 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/udtf/UdtfDescription.java @@ -62,7 +62,7 @@ * * @return function category. */ - FunctionCategory category() default FunctionCategory.TABLE; + String category() default FunctionCategory.TABLE; /** * The author of the table function. From 436397a7f0cf01c3b9b70d4e2ce03469ddb297a6 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Mon, 13 Jul 2020 21:57:50 -0700 Subject: [PATCH 07/11] checkstyle --- .../java/io/confluent/ksql/function/FunctionCategory.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java index b73b6f125bb5..5990246af25c 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java @@ -15,6 +15,11 @@ package io.confluent.ksql.function; public class FunctionCategory { + + private FunctionCategory() { + // extra code for style adherence + } + public static final String CONDITIONAL = "CONDITIONAL"; public static final String MATHEMATICAL = "OTHER"; public static final String STRING = "OTHER"; From 0efb17ba234378ee243af403bb076713dedfd943 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Mon, 13 Jul 2020 22:07:47 -0700 Subject: [PATCH 08/11] more rules --- .../main/java/io/confluent/ksql/function/FunctionCategory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java index 5990246af25c..a85d81007e99 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java @@ -14,7 +14,7 @@ package io.confluent.ksql.function; -public class FunctionCategory { +public final class FunctionCategory { private FunctionCategory() { // extra code for style adherence From 351a6c1ef86a9205a83f00018003ea822f4f24c9 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Tue, 14 Jul 2020 00:36:24 -0700 Subject: [PATCH 09/11] fix copy/paste error --- .../confluent/ksql/function/udf/UdfMetadataTest.java | 4 ++-- .../io/confluent/ksql/function/FunctionCategory.java | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java b/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java index e0dc76870f55..dec1f9bf30bc 100644 --- a/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java +++ b/ksqldb-common/src/test/java/io/confluent/ksql/function/udf/UdfMetadataTest.java @@ -14,8 +14,8 @@ package io.confluent.ksql.function.udf; +import static io.confluent.ksql.function.FunctionCategory.MAP; import static io.confluent.ksql.function.FunctionCategory.OTHER; -import static io.confluent.ksql.function.FunctionCategory.STRING; import com.google.common.testing.EqualsTester; import org.junit.Test; @@ -32,7 +32,7 @@ public void shouldImplementHashCodeAndEqualsProperly() { .addEqualityGroup(new UdfMetadata("name", "DIF", "auth", "ver", OTHER, "path")) .addEqualityGroup(new UdfMetadata("name", "desc", "DIF", "ver", OTHER, "path")) .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "DIF", OTHER, "path")) - .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "ver", STRING, "path")) + .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "ver", MAP, "path")) .addEqualityGroup(new UdfMetadata("name", "desc", "auth", "ver", OTHER, "DIF")) .testEquals(); } diff --git a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java index a85d81007e99..7b6b69b557da 100644 --- a/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java +++ b/ksqldb-udf/src/main/java/io/confluent/ksql/function/FunctionCategory.java @@ -21,11 +21,11 @@ private FunctionCategory() { } public static final String CONDITIONAL = "CONDITIONAL"; - public static final String MATHEMATICAL = "OTHER"; - public static final String STRING = "OTHER"; - public static final String REGULAR_EXPRESSION = "OTHER"; - public static final String JSON = "OTHER"; - public static final String DATE_TIME = "OTHER"; + public static final String MATHEMATICAL = "MATHEMATICAL"; + public static final String STRING = "STRING"; + public static final String REGULAR_EXPRESSION = "REGULAR EXPRESSION"; + public static final String JSON = "JSON"; + public static final String DATE_TIME = "DATE / TIME"; public static final String ARRAY = "ARRAY"; public static final String MAP = "MAP"; public static final String URL = "URL"; From 065e4dd218e4ae9727907fa2f79fd85984f13d77 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Tue, 14 Jul 2020 12:52:58 -0700 Subject: [PATCH 10/11] fix fallout from switching to static strings --- .../server/execution/ListFunctionsExecutorTest.java | 10 +++++----- .../ksql/rest/server/resources/KsqlResourceTest.java | 6 +++--- .../confluent/ksql/rest/entity/SimpleFunctionInfo.java | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java index f6b6f224dfdd..5c9ed6adea61 100644 --- a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java +++ b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/execution/ListFunctionsExecutorTest.java @@ -51,15 +51,15 @@ public void shouldListFunctions() { final Collection functions = functionList.getFunctions(); assertThat(functions, hasItems( new SimpleFunctionInfo("TEST_UDF_1", FunctionType.SCALAR, - FunctionCategory.OTHER.toString()), + FunctionCategory.OTHER), new SimpleFunctionInfo("TOPK", FunctionType.AGGREGATE, - FunctionCategory.AGGREGATE.toString()), + FunctionCategory.AGGREGATE), new SimpleFunctionInfo("MAX", FunctionType.AGGREGATE, - FunctionCategory.AGGREGATE.toString()), + FunctionCategory.AGGREGATE), new SimpleFunctionInfo("TEST_UDTF1", FunctionType.TABLE, - FunctionCategory.TABLE.toString()), + FunctionCategory.TABLE), new SimpleFunctionInfo("TEST_UDTF2", FunctionType.TABLE, - FunctionCategory.TABLE.toString()) + FunctionCategory.TABLE) )); } } diff --git a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java index c981db220374..186a413dfe04 100644 --- a/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java +++ b/ksqldb-rest-app/src/test/java/io/confluent/ksql/rest/server/resources/KsqlResourceTest.java @@ -464,11 +464,11 @@ public void shouldListFunctions() { // Then: assertThat(functionList.getFunctions(), hasItems( new SimpleFunctionInfo("TRIM", FunctionType.SCALAR, - FunctionCategory.STRING.toString()), + FunctionCategory.STRING), new SimpleFunctionInfo("TOPK", FunctionType.AGGREGATE, - FunctionCategory.AGGREGATE.toString()), + FunctionCategory.AGGREGATE), new SimpleFunctionInfo("MAX", FunctionType.AGGREGATE, - FunctionCategory.AGGREGATE.toString()) + FunctionCategory.AGGREGATE) )); } diff --git a/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java b/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java index 2ab74bc0fabd..a193417f3032 100644 --- a/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java +++ b/ksqldb-rest-model/src/main/java/io/confluent/ksql/rest/entity/SimpleFunctionInfo.java @@ -61,7 +61,7 @@ public boolean equals(final Object o) { final SimpleFunctionInfo that = (SimpleFunctionInfo) o; return Objects.equals(name, that.name) && type == that.type - && category == that.category; + && Objects.equals(category, that.category); } @Override From 718e937851fea1742a8f888781d528e160282036 Mon Sep 17 00:00:00 2001 From: blueedgenick Date: Tue, 14 Jul 2020 15:04:55 -0700 Subject: [PATCH 11/11] missed one more typo --- ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java b/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java index 32a912cf7e4f..1fe41c254c0f 100644 --- a/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java +++ b/ksqldb-cli/src/test/java/io/confluent/ksql/cli/CliTest.java @@ -784,7 +784,7 @@ public void shouldPrintErrorOnUnsupportedAPI() throws Exception { @Test public void shouldListFunctions() { assertRunListCommand("functions", hasRows( - row("TIMESTAMPTOSTRING", "DATE_TIME"), + row("TIMESTAMPTOSTRING", "DATE / TIME"), row("EXTRACTJSONFIELD", "JSON"), row("TOPK", "AGGREGATE") ));