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 e1f2247535dfa324f2f4ade3235b8e5b1d21b018
Author: Tian Jiang <[email protected]>
AuthorDate: Wed Aug 26 11:34:46 2026 +0800

    multiple refactors
---
 .../AbstractGreatestLeastColumnTransformer.java    | 46 +-------------
 .../multi/BinaryGreatestColumnTransformer.java     |  2 +-
 .../column/multi/BinaryLeastColumnTransformer.java |  2 +-
 .../multi/BooleanGreatestColumnTransformer.java    |  2 +-
 .../multi/BooleanLeastColumnTransformer.java       |  2 +-
 .../multi/DoubleGreatestColumnTransformer.java     |  2 +-
 .../column/multi/DoubleLeastColumnTransformer.java |  2 +-
 .../multi/FloatGreatestColumnTransformer.java      |  2 +-
 .../column/multi/FloatLeastColumnTransformer.java  |  2 +-
 .../multi/Int32GreatestColumnTransformer.java      |  2 +-
 .../column/multi/Int32LeastColumnTransformer.java  |  2 +-
 .../multi/Int64GreatestColumnTransformer.java      |  2 +-
 .../column/multi/Int64LeastColumnTransformer.java  |  2 +-
 .../org/apache/iotdb/calc/utils/TypeServices.java  | 74 ++++++++++++++++++++++
 .../apache/iotdb/calc/utils/TypeServicesTest.java  | 22 +++++++
 15 files changed, 111 insertions(+), 55 deletions(-)

diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/AbstractGreatestLeastColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/AbstractGreatestLeastColumnTransformer.java
index 434f371d0d3..2a6f3e90934 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/AbstractGreatestLeastColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/AbstractGreatestLeastColumnTransformer.java
@@ -20,11 +20,11 @@
 package org.apache.iotdb.calc.transformation.dag.column.multi;
 
 import org.apache.iotdb.calc.transformation.dag.column.ColumnTransformer;
+import org.apache.iotdb.calc.utils.TypeServices;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.block.column.ColumnBuilder;
 import org.apache.tsfile.read.common.type.Type;
-import org.apache.tsfile.read.common.type.TypeEnum;
 
 import java.util.List;
 
@@ -59,52 +59,12 @@ public abstract class 
AbstractGreatestLeastColumnTransformer extends MultiColumn
 
   public static ColumnTransformer getGreatestColumnTransformer(
       Type type, List<ColumnTransformer> columnTransformers) {
-    TypeEnum typeEnum = type.getTypeEnum();
-    switch (typeEnum) {
-      case BOOLEAN:
-        return new BooleanGreatestColumnTransformer(type, columnTransformers);
-      case INT32:
-      case DATE:
-        return new Int32GreatestColumnTransformer(type, columnTransformers);
-      case INT64:
-      case TIMESTAMP:
-        return new Int64GreatestColumnTransformer(type, columnTransformers);
-      case FLOAT:
-        return new FloatGreatestColumnTransformer(type, columnTransformers);
-      case DOUBLE:
-        return new DoubleGreatestColumnTransformer(type, columnTransformers);
-      case STRING:
-      case TEXT:
-        return new BinaryGreatestColumnTransformer(type, columnTransformers);
-      default:
-        throw new UnsupportedOperationException(
-            String.format("Unsupported data type: %s", typeEnum));
-    }
+    return 
TypeServices.GREATEST_COLUMN_TRANSFORMER_SERVICE.call(type).apply(columnTransformers);
   }
 
   public static ColumnTransformer getLeastColumnTransformer(
       Type type, List<ColumnTransformer> columnTransformers) {
-    TypeEnum typeEnum = type.getTypeEnum();
-    switch (typeEnum) {
-      case BOOLEAN:
-        return new BooleanLeastColumnTransformer(type, columnTransformers);
-      case INT32:
-      case DATE:
-        return new Int32LeastColumnTransformer(type, columnTransformers);
-      case INT64:
-      case TIMESTAMP:
-        return new Int64LeastColumnTransformer(type, columnTransformers);
-      case FLOAT:
-        return new FloatLeastColumnTransformer(type, columnTransformers);
-      case DOUBLE:
-        return new DoubleLeastColumnTransformer(type, columnTransformers);
-      case STRING:
-      case TEXT:
-        return new BinaryLeastColumnTransformer(type, columnTransformers);
-      default:
-        throw new UnsupportedOperationException(
-            String.format("Unsupported data type: %s", typeEnum));
-    }
+    return 
TypeServices.LEAST_COLUMN_TRANSFORMER_SERVICE.call(type).apply(columnTransformers);
   }
 
   @Override
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryGreatestColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryGreatestColumnTransformer.java
index ae15ca4ee92..45602660afa 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryGreatestColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryGreatestColumnTransformer.java
@@ -29,7 +29,7 @@ import org.apache.tsfile.utils.Binary;
 import java.util.List;
 
 public class BinaryGreatestColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected BinaryGreatestColumnTransformer(
+  public BinaryGreatestColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryLeastColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryLeastColumnTransformer.java
index 06c43b134d0..2370f258dd4 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryLeastColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BinaryLeastColumnTransformer.java
@@ -29,7 +29,7 @@ import org.apache.tsfile.utils.Binary;
 import java.util.List;
 
 public class BinaryLeastColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected BinaryLeastColumnTransformer(
+  public BinaryLeastColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanGreatestColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanGreatestColumnTransformer.java
index 89ada058444..da4320b9277 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanGreatestColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanGreatestColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class BooleanGreatestColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected BooleanGreatestColumnTransformer(
+  public BooleanGreatestColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanLeastColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanLeastColumnTransformer.java
index 88054e7cf75..48d57c038c5 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanLeastColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/BooleanLeastColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class BooleanLeastColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected BooleanLeastColumnTransformer(
+  public BooleanLeastColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleGreatestColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleGreatestColumnTransformer.java
index cf76de49088..de2711e9d80 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleGreatestColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleGreatestColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class DoubleGreatestColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected DoubleGreatestColumnTransformer(
+  public DoubleGreatestColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleLeastColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleLeastColumnTransformer.java
index c98f124b292..e5da4489e62 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleLeastColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/DoubleLeastColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class DoubleLeastColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected DoubleLeastColumnTransformer(
+  public DoubleLeastColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatGreatestColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatGreatestColumnTransformer.java
index ece454c9eb5..87758e75351 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatGreatestColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatGreatestColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class FloatGreatestColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected FloatGreatestColumnTransformer(
+  public FloatGreatestColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatLeastColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatLeastColumnTransformer.java
index 5d7c6155dff..f06e8c69cb9 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatLeastColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/FloatLeastColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class FloatLeastColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected FloatLeastColumnTransformer(
+  public FloatLeastColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32GreatestColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32GreatestColumnTransformer.java
index ed25278944f..91df173129d 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32GreatestColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32GreatestColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class Int32GreatestColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected Int32GreatestColumnTransformer(
+  public Int32GreatestColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32LeastColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32LeastColumnTransformer.java
index b33b0022b10..97fc995812d 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32LeastColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int32LeastColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class Int32LeastColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected Int32LeastColumnTransformer(
+  public Int32LeastColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64GreatestColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64GreatestColumnTransformer.java
index 8f8edb7ab13..0109ef81f45 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64GreatestColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64GreatestColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class Int64GreatestColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected Int64GreatestColumnTransformer(
+  public Int64GreatestColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64LeastColumnTransformer.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64LeastColumnTransformer.java
index 5c26f6ae92b..b579b73f410 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64LeastColumnTransformer.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/transformation/dag/column/multi/Int64LeastColumnTransformer.java
@@ -28,7 +28,7 @@ import org.apache.tsfile.read.common.type.Type;
 import java.util.List;
 
 public class Int64LeastColumnTransformer extends 
AbstractGreatestLeastColumnTransformer {
-  protected Int64LeastColumnTransformer(
+  public Int64LeastColumnTransformer(
       Type returnType, List<ColumnTransformer> columnTransformerList) {
     super(returnType, columnTransformerList);
   }
diff --git 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/TypeServices.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/TypeServices.java
index 8377ce7518d..5980317b17c 100644
--- 
a/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/TypeServices.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/calc/utils/TypeServices.java
@@ -68,6 +68,19 @@ import 
org.apache.iotdb.calc.execution.operator.source.relational.aggregation.gr
 import 
org.apache.iotdb.calc.execution.operator.source.relational.aggregation.grouped.array.IntBigArray;
 import 
org.apache.iotdb.calc.execution.operator.source.relational.aggregation.grouped.array.LongBigArray;
 import org.apache.iotdb.calc.i18n.CalcMessages;
+import org.apache.iotdb.calc.transformation.dag.column.ColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.BinaryGreatestColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.BinaryLeastColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.BooleanGreatestColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.BooleanLeastColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.DoubleGreatestColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.DoubleLeastColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.FloatGreatestColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.FloatLeastColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.Int32GreatestColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.Int32LeastColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.Int64GreatestColumnTransformer;
+import 
org.apache.iotdb.calc.transformation.dag.column.multi.Int64LeastColumnTransformer;
 import org.apache.iotdb.calc.utils.datastructure.SortKey;
 
 import org.apache.tsfile.block.column.Column;
@@ -82,6 +95,7 @@ import org.apache.tsfile.utils.TsPrimitiveType;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
 
 import java.util.Comparator;
+import java.util.List;
 import java.util.function.Function;
 import java.util.function.IntFunction;
 import java.util.function.IntUnaryOperator;
@@ -272,6 +286,59 @@ public class TypeServices {
                     throw new 
UnSupportedDataTypeException(type.toString()).setChecked(true);
               };
 
+  public static final TypeService<Function<List<ColumnTransformer>, 
ColumnTransformer>>
+      GREATEST_COLUMN_TRANSFORMER_SERVICE =
+          type ->
+              switch (type.getTypeEnum()) {
+                case BOOLEAN ->
+                    columnTransformers ->
+                        new BooleanGreatestColumnTransformer(type, 
columnTransformers);
+                case INT32, DATE ->
+                    columnTransformers ->
+                        new Int32GreatestColumnTransformer(type, 
columnTransformers);
+                case INT64, TIMESTAMP ->
+                    columnTransformers ->
+                        new Int64GreatestColumnTransformer(type, 
columnTransformers);
+                case FLOAT ->
+                    columnTransformers ->
+                        new FloatGreatestColumnTransformer(type, 
columnTransformers);
+                case DOUBLE ->
+                    columnTransformers ->
+                        new DoubleGreatestColumnTransformer(type, 
columnTransformers);
+                case STRING, TEXT ->
+                    columnTransformers ->
+                        new BinaryGreatestColumnTransformer(type, 
columnTransformers);
+                case BLOB, OBJECT, ROW, UNKNOWN, VECTOR ->
+                    columnTransformers -> {
+                      throw unsupportedGreatestLeastDataType(type);
+                    };
+              };
+
+  public static final TypeService<Function<List<ColumnTransformer>, 
ColumnTransformer>>
+      LEAST_COLUMN_TRANSFORMER_SERVICE =
+          type ->
+              switch (type.getTypeEnum()) {
+                case BOOLEAN ->
+                    columnTransformers ->
+                        new BooleanLeastColumnTransformer(type, 
columnTransformers);
+                case INT32, DATE ->
+                    columnTransformers -> new 
Int32LeastColumnTransformer(type, columnTransformers);
+                case INT64, TIMESTAMP ->
+                    columnTransformers -> new 
Int64LeastColumnTransformer(type, columnTransformers);
+                case FLOAT ->
+                    columnTransformers -> new 
FloatLeastColumnTransformer(type, columnTransformers);
+                case DOUBLE ->
+                    columnTransformers ->
+                        new DoubleLeastColumnTransformer(type, 
columnTransformers);
+                case STRING, TEXT ->
+                    columnTransformers ->
+                        new BinaryLeastColumnTransformer(type, 
columnTransformers);
+                case BLOB, OBJECT, ROW, UNKNOWN, VECTOR ->
+                    columnTransformers -> {
+                      throw unsupportedGreatestLeastDataType(type);
+                    };
+              };
+
   public static final TypeService<Function<TsPrimitiveType, Object>>
       PRIMITIVE_TYPE_VALUE_EXTRACTOR_SERVICE =
           type ->
@@ -510,6 +577,8 @@ public class TypeServices {
     PREVIOUS_FILL_SERVICE.check();
     NEXT_FILL_SERVICE.check();
     JOIN_KEY_COMPARATOR_SERVICE.check();
+    GREATEST_COLUMN_TRANSFORMER_SERVICE.check();
+    LEAST_COLUMN_TRANSFORMER_SERVICE.check();
     MERGE_SORT_COMPARATOR_SERVICE.check();
     MEMORY_USAGE_OF_ONE_MERGE_SORT_KEY_SERVICE.check();
     MEMORY_USAGE_OF_ONE_SERIALIZABLE_ROW_FIELD_SERVICE.check();
@@ -530,6 +599,11 @@ public class TypeServices {
     return new IllegalArgumentException(CalcMessages.UNKNOWN_DATATYPE + 
type.getTypeEnum());
   }
 
+  private static UnsupportedOperationException 
unsupportedGreatestLeastDataType(final Type type) {
+    return new UnsupportedOperationException(
+        CalcMessages.UNSUPPORTED_DATA_TYPE + type.getTypeEnum());
+  }
+
   public interface DefaultEncodingProvider {
     TSEncoding getDefaultBooleanEncoding();
 
diff --git 
a/iotdb-core/calc-commons/src/test/java/org/apache/iotdb/calc/utils/TypeServicesTest.java
 
b/iotdb-core/calc-commons/src/test/java/org/apache/iotdb/calc/utils/TypeServicesTest.java
index 6f5ac8a9b01..39ca2a1a2b4 100644
--- 
a/iotdb-core/calc-commons/src/test/java/org/apache/iotdb/calc/utils/TypeServicesTest.java
+++ 
b/iotdb-core/calc-commons/src/test/java/org/apache/iotdb/calc/utils/TypeServicesTest.java
@@ -23,6 +23,7 @@ import 
org.apache.iotdb.calc.execution.operator.process.join.merge.comparator.Jo
 import 
org.apache.iotdb.calc.execution.operator.process.join.merge.comparator.JoinKeyComparatorFactory;
 import 
org.apache.iotdb.calc.execution.operator.process.window.partition.Partition;
 import 
org.apache.iotdb.calc.execution.operator.process.window.utils.ColumnList;
+import org.apache.iotdb.calc.transformation.dag.column.ColumnTransformer;
 
 import org.apache.tsfile.block.column.Column;
 import org.apache.tsfile.enums.TSDataType;
@@ -37,6 +38,7 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import java.util.Collections;
+import java.util.List;
 import java.util.Optional;
 
 import static org.junit.Assert.assertEquals;
@@ -129,6 +131,26 @@ public class TypeServicesTest {
         () -> 
JoinKeyComparatorFactory.getComparator(Type.fromTsDataType(TSDataType.VECTOR), 
true));
   }
 
+  @Test
+  public void testGreatestLeastTransformerServicesUseTypeStrategies() {
+    List<ColumnTransformer> columnTransformers = Collections.emptyList();
+    assertNotNull(
+        TypeServices.GREATEST_COLUMN_TRANSFORMER_SERVICE
+            .call(Type.fromTsDataType(TSDataType.INT32))
+            .apply(columnTransformers));
+    assertNotNull(
+        TypeServices.LEAST_COLUMN_TRANSFORMER_SERVICE
+            .call(Type.fromTsDataType(TSDataType.DOUBLE))
+            .apply(columnTransformers));
+
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () ->
+            TypeServices.GREATEST_COLUMN_TRANSFORMER_SERVICE
+                .call(Type.fromTsDataType(TSDataType.VECTOR))
+                .apply(columnTransformers));
+  }
+
   // Covers every supported RANGE-frame type and guards native integer 
overflow and long precision.
   @Test
   public void testRangeFrameComparatorPreservesNativeArithmetic() {

Reply via email to