Copilot commented on code in PR #16786:
URL: https://github.com/apache/iotdb/pull/16786#discussion_r2570239527


##########
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/visitor/ColumnTransformerVisitor.java:
##########
@@ -41,11 +42,7 @@
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.InputLocation;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.TreeCaseWhenThenColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.ArithmeticAdditionColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.ArithmeticDivisionColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.ArithmeticModuloColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.ArithmeticMultiplicationColumnTransformer;
-import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.ArithmeticSubtractionColumnTransformer;
+import 
org.apache.iotdb.db.queryengine.transformation.dag.column.binary.ArithmeticColumnTransformerApi;

Review Comment:
   The ArithmeticColumnTransformerApi class is imported and used throughout 
this file but is not included in this PR. This will cause compilation failures 
as the class doesn't exist in the codebase. The API class must be added to the 
PR or this import should reference an existing class.
   ```suggestion
   
   ```



##########
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/function/arithmetic/AdditionResolver.java:
##########
@@ -82,16 +86,70 @@ public class AdditionResolver {
     addCondition(UNKNOWN, DOUBLE, DOUBLE);
     addCondition(UNKNOWN, DATE, DATE);
     addCondition(UNKNOWN, TIMESTAMP, TIMESTAMP);
+
+    addConditionTS(TSDataType.INT32, TSDataType.INT32, TSDataType.INT32);
+    addConditionTS(TSDataType.INT32, TSDataType.INT64, TSDataType.INT64);
+    addConditionTS(TSDataType.INT32, TSDataType.FLOAT, TSDataType.FLOAT);
+    addConditionTS(TSDataType.INT32, TSDataType.DOUBLE, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.INT32, TSDataType.DATE, TSDataType.DATE);
+    addConditionTS(TSDataType.INT32, TSDataType.TIMESTAMP, 
TSDataType.TIMESTAMP);
+    addConditionTS(TSDataType.INT32, TSDataType.UNKNOWN, TSDataType.INT32);
+
+    addConditionTS(TSDataType.INT64, TSDataType.INT32, TSDataType.INT64);
+    addConditionTS(TSDataType.INT64, TSDataType.INT64, TSDataType.INT64);
+    addConditionTS(TSDataType.INT64, TSDataType.FLOAT, TSDataType.FLOAT);
+    addConditionTS(TSDataType.INT64, TSDataType.DOUBLE, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.INT64, TSDataType.DATE, TSDataType.DATE);
+    addConditionTS(TSDataType.INT64, TSDataType.TIMESTAMP, 
TSDataType.TIMESTAMP);
+    addConditionTS(TSDataType.INT64, TSDataType.UNKNOWN, TSDataType.INT64);
+
+    addConditionTS(TSDataType.FLOAT, TSDataType.INT32, TSDataType.FLOAT);
+    addConditionTS(TSDataType.FLOAT, TSDataType.INT64, TSDataType.FLOAT);
+    addConditionTS(TSDataType.FLOAT, TSDataType.FLOAT, TSDataType.FLOAT);
+    addConditionTS(TSDataType.FLOAT, TSDataType.DOUBLE, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.FLOAT, TSDataType.UNKNOWN, TSDataType.FLOAT);
+
+    addConditionTS(TSDataType.DOUBLE, TSDataType.INT32, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.DOUBLE, TSDataType.INT64, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.DOUBLE, TSDataType.FLOAT, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.DOUBLE, TSDataType.DOUBLE, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.DOUBLE, TSDataType.UNKNOWN, TSDataType.DOUBLE);
+
+    addConditionTS(TSDataType.DATE, TSDataType.INT32, TSDataType.DATE);
+    addConditionTS(TSDataType.DATE, TSDataType.INT64, TSDataType.DATE);
+    addConditionTS(TSDataType.DATE, TSDataType.UNKNOWN, TSDataType.DATE);
+
+    addConditionTS(TSDataType.TIMESTAMP, TSDataType.INT32, 
TSDataType.TIMESTAMP);
+    addConditionTS(TSDataType.TIMESTAMP, TSDataType.INT64, 
TSDataType.TIMESTAMP);
+    addConditionTS(TSDataType.TIMESTAMP, TSDataType.UNKNOWN, 
TSDataType.TIMESTAMP);
+
+    addConditionTS(TSDataType.UNKNOWN, TSDataType.INT32, TSDataType.INT32);
+    addConditionTS(TSDataType.UNKNOWN, TSDataType.INT64, TSDataType.INT64);
+    addConditionTS(TSDataType.UNKNOWN, TSDataType.FLOAT, TSDataType.FLOAT);
+    addConditionTS(TSDataType.UNKNOWN, TSDataType.DOUBLE, TSDataType.DOUBLE);
+    addConditionTS(TSDataType.UNKNOWN, TSDataType.DATE, TSDataType.DATE);
+    addConditionTS(TSDataType.UNKNOWN, TSDataType.TIMESTAMP, 
TSDataType.TIMESTAMP);

Review Comment:
   The CONDITION_MAP_TREE initialization duplicates the exact same type 
promotion rules as CONDITION_MAP (lines 47-88). This duplication exists across 
all five resolver classes (Addition, Subtraction, Multiplication, Modulus, 
Division). Consider extracting this logic into a shared utility method or using 
a conversion function between Type and TSDataType to maintain a single source 
of truth for type promotion rules.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to