This is an automated email from the ASF dual-hosted git repository. jt2594838 pushed a commit to branch remove_swtich_type in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d54e316f9ee4a5df47f5cc3305d7b3e3d6e86763 Author: Tian Jiang <[email protected]> AuthorDate: Wed Aug 26 15:01:17 2026 +0800 multiple refactors --- .../org/apache/iotdb/udf/api/utils/RowImpl.java | 28 +----- .../commons/udf/utils/UDFDataTypeTransformer.java | 107 ++++----------------- .../udf/utils/UDFDataTypeTransformerTest.java | 71 ++++++++++++++ 3 files changed, 92 insertions(+), 114 deletions(-) diff --git a/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/utils/RowImpl.java b/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/utils/RowImpl.java index a082a1968ce..10b7dc7417d 100644 --- a/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/utils/RowImpl.java +++ b/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/utils/RowImpl.java @@ -129,30 +129,10 @@ public class RowImpl implements Row { if (tsDataType == null) { return null; } - byte type = tsDataType.getType(); - switch (type) { - case 0: - return Type.BOOLEAN; - case 1: - return Type.INT32; - case 2: - return Type.INT64; - case 3: - return Type.FLOAT; - case 4: - return Type.DOUBLE; - case 5: - return Type.TEXT; - case 8: - return Type.TIMESTAMP; - case 9: - return Type.DATE; - case 10: - return Type.BLOB; - case 11: - return Type.STRING; - default: - throw new IllegalArgumentException(UdfApiMessages.INVALID_INPUT + type); + try { + return Type.valueOf(tsDataType.getType()); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException(UdfApiMessages.INVALID_INPUT + tsDataType.getType(), e); } } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/utils/UDFDataTypeTransformer.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/utils/UDFDataTypeTransformer.java index 163e9b4135a..e8f826b8e55 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/utils/UDFDataTypeTransformer.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/utils/UDFDataTypeTransformer.java @@ -23,17 +23,6 @@ import org.apache.iotdb.commons.i18n.SchemaMessages; import org.apache.iotdb.udf.api.type.Type; import org.apache.tsfile.enums.TSDataType; -import org.apache.tsfile.read.common.type.BinaryType; -import org.apache.tsfile.read.common.type.BlobType; -import org.apache.tsfile.read.common.type.BooleanType; -import org.apache.tsfile.read.common.type.DateType; -import org.apache.tsfile.read.common.type.DoubleType; -import org.apache.tsfile.read.common.type.FloatType; -import org.apache.tsfile.read.common.type.IntType; -import org.apache.tsfile.read.common.type.LongType; -import org.apache.tsfile.read.common.type.ObjectType; -import org.apache.tsfile.read.common.type.StringType; -import org.apache.tsfile.read.common.type.TimestampType; import java.util.List; import java.util.stream.Collectors; @@ -48,7 +37,14 @@ public class UDFDataTypeTransformer { } public static Type transformToUDFDataType(TSDataType tsDataType) { - return tsDataType == null ? null : getUDFDataType(tsDataType.getType()); + if (tsDataType == null) { + return null; + } + try { + return Type.valueOf(tsDataType.getType()); + } catch (IllegalArgumentException e) { + throw invalidInput(tsDataType, e); + } } public static List<Type> transformToUDFDataTypeList(List<TSDataType> tsDataTypeList) { @@ -63,31 +59,10 @@ public class UDFDataTypeTransformer { if (type == null) { return null; } - switch (type.getTypeEnum()) { - case BOOLEAN: - return Type.BOOLEAN; - case INT32: - return Type.INT32; - case INT64: - return Type.INT64; - case FLOAT: - return Type.FLOAT; - case DOUBLE: - return Type.DOUBLE; - case TEXT: - return Type.TEXT; - case TIMESTAMP: - return Type.TIMESTAMP; - case DATE: - return Type.DATE; - case BLOB: - return Type.BLOB; - case STRING: - return Type.STRING; - case OBJECT: - return Type.OBJECT; - default: - throw new IllegalArgumentException(SchemaMessages.SCHEMA_INVALID_INPUT + type); + try { + return transformToUDFDataType(TSDataType.valueOf(type.getTypeEnum().name())); + } catch (IllegalArgumentException e) { + throw invalidInput(type, e); } } @@ -95,60 +70,12 @@ public class UDFDataTypeTransformer { if (type == null) { return null; } - switch (type) { - case BOOLEAN: - return BooleanType.BOOLEAN; - case INT32: - return IntType.INT32; - case DATE: - return DateType.DATE; - case INT64: - return LongType.INT64; - case TIMESTAMP: - return TimestampType.TIMESTAMP; - case FLOAT: - return FloatType.FLOAT; - case DOUBLE: - return DoubleType.DOUBLE; - case TEXT: - return BinaryType.TEXT; - case BLOB: - return BlobType.BLOB; - case STRING: - return StringType.STRING; - case OBJECT: - return ObjectType.OBJECT; - default: - throw new IllegalArgumentException(SchemaMessages.SCHEMA_INVALID_INPUT + type); - } + return org.apache.tsfile.read.common.type.Type.fromTsDataType( + TSDataType.getTsDataType(type.getType())); } - private static Type getUDFDataType(byte type) { - switch (type) { - case 0: - return Type.BOOLEAN; - case 1: - return Type.INT32; - case 2: - return Type.INT64; - case 3: - return Type.FLOAT; - case 4: - return Type.DOUBLE; - case 5: - return Type.TEXT; - case 8: - return Type.TIMESTAMP; - case 9: - return Type.DATE; - case 10: - return Type.BLOB; - case 11: - return Type.STRING; - case 12: - return Type.OBJECT; - default: - throw new IllegalArgumentException(SchemaMessages.SCHEMA_INVALID_INPUT + type); - } + private static IllegalArgumentException invalidInput( + Object type, IllegalArgumentException cause) { + return new IllegalArgumentException(SchemaMessages.SCHEMA_INVALID_INPUT + type, cause); } } diff --git a/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/udf/utils/UDFDataTypeTransformerTest.java b/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/udf/utils/UDFDataTypeTransformerTest.java new file mode 100644 index 00000000000..8289b6906ce --- /dev/null +++ b/iotdb-core/node-commons/src/test/java/org/apache/iotdb/commons/udf/utils/UDFDataTypeTransformerTest.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.iotdb.commons.udf.utils; + +import org.apache.iotdb.commons.i18n.SchemaMessages; +import org.apache.iotdb.udf.api.type.Type; + +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.read.common.type.RowType; +import org.apache.tsfile.read.common.type.UnknownType; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Collections; + +public class UDFDataTypeTransformerTest { + + @Test + public void testSupportedTypesUseTypeInterfaces() { + for (Type udfType : Type.allTypes()) { + TSDataType tsDataType = TSDataType.getTsDataType(udfType.getType()); + + Assert.assertEquals(udfType, UDFDataTypeTransformer.transformToUDFDataType(tsDataType)); + org.apache.tsfile.read.common.type.Type readType = + UDFDataTypeTransformer.transformUDFDataTypeToReadType(udfType); + Assert.assertEquals(tsDataType.name(), readType.getTypeEnum().name()); + Assert.assertEquals(udfType, UDFDataTypeTransformer.transformReadTypeToUDFDataType(readType)); + } + } + + @Test + public void testNullTypesRemainNull() { + Assert.assertNull(UDFDataTypeTransformer.transformToUDFDataType(null)); + Assert.assertNull(UDFDataTypeTransformer.transformReadTypeToUDFDataType(null)); + Assert.assertNull(UDFDataTypeTransformer.transformUDFDataTypeToReadType(null)); + } + + @Test + public void testInternalTypesRemainUnsupported() { + assertInvalidInput(() -> UDFDataTypeTransformer.transformToUDFDataType(TSDataType.UNKNOWN)); + assertInvalidInput(() -> UDFDataTypeTransformer.transformToUDFDataType(TSDataType.VECTOR)); + assertInvalidInput( + () -> UDFDataTypeTransformer.transformReadTypeToUDFDataType(UnknownType.UNKNOWN)); + assertInvalidInput( + () -> + UDFDataTypeTransformer.transformReadTypeToUDFDataType( + RowType.anonymous(Collections.emptyList()))); + } + + private static void assertInvalidInput(Runnable conversion) { + IllegalArgumentException exception = + Assert.assertThrows(IllegalArgumentException.class, conversion::run); + Assert.assertTrue(exception.getMessage().startsWith(SchemaMessages.SCHEMA_INVALID_INPUT)); + } +}
