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));
+  }
+}

Reply via email to