From eed1ce51546b779b0fc157910ffc52bbd922b87e Mon Sep 17 00:00:00 2001 From: ruslan Date: Fri, 14 Jul 2023 13:38:32 +0100 Subject: [PATCH] Implemented IntFromBoolean UDF --- .../udf/conversions/IntFromBoolean.java | 39 +++++++++++++++++++ .../udf/conversions/IntFromBooleanTest.java | 27 +++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/conversions/IntFromBoolean.java create mode 100644 ksqldb-engine/src/test/java/io/confluent/ksql/function/udf/conversions/IntFromBooleanTest.java diff --git a/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/conversions/IntFromBoolean.java b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/conversions/IntFromBoolean.java new file mode 100644 index 000000000000..664852849aa0 --- /dev/null +++ b/ksqldb-engine/src/main/java/io/confluent/ksql/function/udf/conversions/IntFromBoolean.java @@ -0,0 +1,39 @@ +/* + * Copyright 2023 Confluent Inc. + * + * Licensed under the Confluent Community 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.udf.conversions; + +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 = "int_from_boolean", + category = FunctionCategory.CONVERSIONS, + description = "Converts a Boolean value to an Integer value" +) +public class IntFromBoolean { + + @Udf(description = "Converts a Boolean value to an Integer value") + public Integer intFromBoolean( + @UdfParameter(description = "The Boolean value to convert.") + final Boolean bool + ) { + if (bool == null) { + return null; + } + return Boolean.TRUE.equals(bool) ? 1 : 0; + } +} diff --git a/ksqldb-engine/src/test/java/io/confluent/ksql/function/udf/conversions/IntFromBooleanTest.java b/ksqldb-engine/src/test/java/io/confluent/ksql/function/udf/conversions/IntFromBooleanTest.java new file mode 100644 index 000000000000..c52cfc178cb2 --- /dev/null +++ b/ksqldb-engine/src/test/java/io/confluent/ksql/function/udf/conversions/IntFromBooleanTest.java @@ -0,0 +1,27 @@ +package io.confluent.ksql.function.udf.conversions; + +import org.junit.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; + +public class IntFromBooleanTest { + private final IntFromBoolean udf = new IntFromBoolean(); + + @Test + public void shouldReturnNullOnNullBoolean() { + assertThat(udf.intFromBoolean(null), is(nullValue())); + } + + @Test + public void shouldConvertTrueToInteger() { + assertThat(udf.intFromBoolean(Boolean.TRUE), is(1)); + } + + @Test + public void shouldConvertFalseToInteger() { + assertThat(udf.intFromBoolean(Boolean.FALSE), is(0)); + } + +}