This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new f244e0ed0d8 Fix the bug in using negation for timestamp type
f244e0ed0d8 is described below

commit f244e0ed0d8ac536100765bda542867fe5a7f371
Author: FearfulTomcat27 <[email protected]>
AuthorDate: Wed Sep 18 14:06:13 2024 +0800

    Fix the bug in using negation for timestamp type
---
 .../it/query/old/query/IoTDBArithmeticTableIT.java      | 12 ++++++++++++
 .../templates/ArithmeticColumnTransformerApi.ftl        | 17 ++++++++++++-----
 .../templates/ArithmeticUnaryColumnTransformer.ftl      |  6 +++---
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/query/IoTDBArithmeticTableIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/query/IoTDBArithmeticTableIT.java
index 1dfd5dcc05a..5acc139d539 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/query/IoTDBArithmeticTableIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/old/query/IoTDBArithmeticTableIT.java
@@ -197,6 +197,18 @@ public class IoTDBArithmeticTableIT {
     }
   }
 
+  @Test
+  public void testTimestampNegation() {
+    String sql = "select -s6 from table1";
+    tableResultSetEqualTest(
+        sql,
+        new String[] {"_col0"},
+        new String[] {
+          "1969-12-31T23:59:59.990Z,", "1969-12-31T23:59:59.980Z,", 
"1969-12-31T23:59:59.970Z,"
+        },
+        DATABASE_NAME);
+  }
+
   @Test
   public void testBinaryWrongType() {
 
diff --git 
a/iotdb-core/datanode/src/main/codegen/templates/ArithmeticColumnTransformerApi.ftl
 
b/iotdb-core/datanode/src/main/codegen/templates/ArithmeticColumnTransformerApi.ftl
index 3ec6a9b432c..28e99e3d0e1 100644
--- 
a/iotdb-core/datanode/src/main/codegen/templates/ArithmeticColumnTransformerApi.ftl
+++ 
b/iotdb-core/datanode/src/main/codegen/templates/ArithmeticColumnTransformerApi.ftl
@@ -23,12 +23,12 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.function.arithmetic.Divis
 import 
org.apache.iotdb.db.queryengine.plan.relational.function.arithmetic.ModulusResolver;
 import 
org.apache.iotdb.db.queryengine.plan.relational.function.arithmetic.MultiplicationResolver;
 import 
org.apache.iotdb.db.queryengine.plan.relational.function.arithmetic.SubtractionResolver;
-import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.OperatorNotFoundException;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.ColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.DoubleNegationColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.FloatNegationColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.IntNegationColumnTransformer;
 import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.LongNegationColumnTransformer;
+import 
org.apache.iotdb.db.queryengine.transformation.dag.column.unary.TimestampNegationColumnTransformer;
 
 import java.time.ZoneId;
 import java.util.Arrays;
@@ -63,13 +63,20 @@ public class ArithmeticColumnTransformerApi {
   public static ColumnTransformer getNegationTransformer(ColumnTransformer 
columnTransformer) {
     switch (columnTransformer.getType().getTypeEnum()) {
       case INT32:
-        return new IntNegationColumnTransformer(columnTransformer.getType(), 
columnTransformer);
+        return new IntNegationColumnTransformer(
+            columnTransformer.getType(), columnTransformer);
       case INT64:
-        return new LongNegationColumnTransformer(columnTransformer.getType(), 
columnTransformer);
+        return new LongNegationColumnTransformer(
+            columnTransformer.getType(), columnTransformer);
       case FLOAT:
-        return new FloatNegationColumnTransformer(columnTransformer.getType(), 
columnTransformer);
+        return new FloatNegationColumnTransformer(
+            columnTransformer.getType(), columnTransformer);
       case DOUBLE:
-        return new 
DoubleNegationColumnTransformer(columnTransformer.getType(), columnTransformer);
+        return new DoubleNegationColumnTransformer(
+            columnTransformer.getType(), columnTransformer);
+      case TIMESTAMP:
+        return new TimestampNegationColumnTransformer(
+            columnTransformer.getType(), columnTransformer);
       default:
         throw new UnsupportedOperationException("Unsupported Type");
     }
diff --git 
a/iotdb-core/datanode/src/main/codegen/templates/ArithmeticUnaryColumnTransformer.ftl
 
b/iotdb-core/datanode/src/main/codegen/templates/ArithmeticUnaryColumnTransformer.ftl
index cfd49a51223..269c687bec7 100644
--- 
a/iotdb-core/datanode/src/main/codegen/templates/ArithmeticUnaryColumnTransformer.ftl
+++ 
b/iotdb-core/datanode/src/main/codegen/templates/ArithmeticUnaryColumnTransformer.ftl
@@ -16,7 +16,7 @@
 <#list mathematicalDataType.types as type>
   <#assign newType = type.type?replace("Type","")>
   <#assign className = "${newType}NegationColumnTransformer">
-<#if newType != "Date" && newType != "Timestamp">
+<#if newType != "Date">
   <@pp.changeOutputFile 
name="/org/apache/iotdb/db/queryengine/transformation/dag/column/unary/${className}.java"
 />
 package org.apache.iotdb.db.queryengine.transformation.dag.column.unary;
 
@@ -55,8 +55,8 @@ public class ${className} extends UnaryColumnTransformer {
   }
 
   public static ${type.dataType} transform(${type.dataType} value){
-    <#if type.dataType == "Int" || type.dataType == "Long">
-    if(value == ${type.dataType}.MIN_VALUE){
+    <#if type.dataType == "int" || type.dataType == "long">
+    if(value == <#if type.dataType == 
"int">Integer<#else>Long</#if>.MIN_VALUE){
       throw new IoTDBRuntimeException(String.format("The %s is out of range of 
${type.dataType}.", value), NUMERIC_VALUE_OUT_OF_RANGE.getStatusCode(), true);
     }
     </#if>

Reply via email to