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]