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

chenyz 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 42e76346c3e Set timestamp precision same as time column (#12681)
42e76346c3e is described below

commit 42e76346c3e323cbd7f202775129b4c656faf325
Author: Chen YZ <[email protected]>
AuthorDate: Fri Jun 7 23:01:19 2024 +0800

    Set timestamp precision same as time column (#12681)
    
    * done
    
    * done
    
    * rollback change
    
    * fix IT
    
    * fix IT
---
 .../org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java |  5 ++--
 .../db/it/aggregation/IoTDBAggregationIT.java      | 15 ++++------
 .../db/it/aggregation/maxby/IoTDBMaxByIT.java      |  3 +-
 .../db/it/aggregation/minby/IoTDBMinByIT.java      |  3 +-
 .../db/it/udf/IoTDBUDTFBuiltinFunctionIT.java      |  4 +--
 .../java/org/apache/iotdb/cli/AbstractCli.java     | 35 +++++++++++++++++++++-
 .../org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java  |  8 +++++
 .../org/apache/iotdb/rpc/IoTDBJDBCDataSet.java     |  4 +--
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java |  4 +--
 .../org/apache/iotdb/db/utils/DateTimeUtils.java   |  4 ++-
 10 files changed, 59 insertions(+), 26 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
index fe8c9c6c39e..19b48719383 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
@@ -39,7 +39,6 @@ import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.sql.Timestamp;
 import java.sql.Types;
 import java.time.LocalDate;
 import java.util.ArrayList;
@@ -1173,13 +1172,13 @@ public class IoTDBSimpleQueryIT {
         while (resultSet.next()) {
           long time = resultSet.getLong(1);
           Date date = resultSet.getDate(2);
-          Timestamp timestamp = resultSet.getTimestamp(3);
+          long timestamp = resultSet.getLong(3);
           byte[] blob = resultSet.getBytes(4);
           String text = resultSet.getString(5);
           assertEquals(2024 - 1900, date.getYear());
           assertEquals(5 - 1, date.getMonth());
           assertEquals(time % 31 + 1, date.getDate());
-          assertEquals(time, timestamp.getTime());
+          assertEquals(time, timestamp);
           assertArrayEquals(byteArray, blob);
           assertEquals(String.valueOf(time), text);
         }
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
index bb2b1d539bf..8eb1026121a 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/IoTDBAggregationIT.java
@@ -348,8 +348,8 @@ public class IoTDBAggregationIT {
   public void firstTest() {
     String[] retArray =
         new String[] {
-          
"0,2000,2000,2000.0,2000,2000,0x2000,2000-01-01,1970-01-01T00:00:02.000Z",
-          "0,500,500,500.0,500,500,0x0500,1500-01-01,1970-01-01T00:00:00.500Z"
+          "0,2000,2000,2000.0,2000,2000,0x2000,2000-01-01,2000",
+          "0,500,500,500.0,500,500,0x0500,1500-01-01,500"
         };
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
@@ -453,9 +453,9 @@ public class IoTDBAggregationIT {
   public void lastTest() {
     String[] retArray =
         new String[] {
-          "0,8499,8499.0,8499,0x8499,8499-01-01,1970-01-01T00:00:08.499Z",
-          "0,1499,1499.0,1499,0x1499,1499-01-01,1970-01-01T00:00:01.499Z",
-          "0,2200,2200.0,2200,0x2200,2200-01-01,1970-01-01T00:00:02.200Z"
+          "0,8499,8499.0,8499,0x8499,8499-01-01,8499",
+          "0,1499,1499.0,1499,0x1499,1499-01-01,1499",
+          "0,2200,2200.0,2200,0x2200,2200-01-01,2200"
         };
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
@@ -727,10 +727,7 @@ public class IoTDBAggregationIT {
   @Test
   public void maxminValueTest() {
     String[] retArray =
-        new String[] {
-          
"0,8499,500.0,999,1000,8499-01-01,1000-01-01,1970-01-01T00:00:08.499Z,1970-01-01T00:00:00.500Z",
-          "0,2499,500.0"
-        };
+        new String[] {"0,8499,500.0,999,1000,8499-01-01,1000-01-01,8499,500", 
"0,2499,500.0"};
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
 
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/maxby/IoTDBMaxByIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/maxby/IoTDBMaxByIT.java
index 1ccdc8c1195..ccf435f8362 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/maxby/IoTDBMaxByIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/maxby/IoTDBMaxByIT.java
@@ -210,8 +210,7 @@ public class IoTDBMaxByIT {
               "root.db.d1",
               new String[] {"x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", 
"x9", "x10"},
               new String[] {"y1", "y2", "y3", "y4", "y7", "y9", "y10"});
-      String[] retArray =
-          new String[] 
{"3,3,3.0,3.0,false,3,3,0x33,2024-01-03,1970-01-01T00:00:00.003Z,"};
+      String[] retArray = new String[] 
{"3,3,3.0,3.0,false,3,3,0x33,2024-01-03,3,"};
       for (Map.Entry<String, String[]> expectedHeader : 
expectedHeaders.entrySet()) {
         String y = expectedHeader.getKey();
         resultSetEqualTest(
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/minby/IoTDBMinByIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/minby/IoTDBMinByIT.java
index 82867e782cc..77cb86e62d4 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/minby/IoTDBMinByIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/aggregation/minby/IoTDBMinByIT.java
@@ -210,8 +210,7 @@ public class IoTDBMinByIT {
               "root.db.d1",
               new String[] {"x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", 
"x9", "x10"},
               new String[] {"y1", "y2", "y3", "y4", "y7", "y9", "y10"});
-      String[] retArray =
-          new String[] 
{"3,3,3.0,3.0,false,3,3,0x33,2024-01-03,1970-01-01T00:00:00.003Z,"};
+      String[] retArray = new String[] 
{"3,3,3.0,3.0,false,3,3,0x33,2024-01-03,3,"};
       for (Map.Entry<String, String[]> expectedHeader : 
expectedHeaders.entrySet()) {
         String y = expectedHeader.getKey();
         resultSetEqualTest(
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java
index 61de72829cc..2ddc99f6ead 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java
@@ -205,7 +205,7 @@ public class IoTDBUDTFBuiltinFunctionIT {
           } else if (j == 5) {
             assertEquals("2024-01-0" + (i + 1), resultSet.getString(7));
           } else if (j == 6) {
-            assertEquals(String.format("1970-01-01T00:00:00.00%dZ", i), 
resultSet.getString(8));
+            assertEquals(String.valueOf(i), resultSet.getString(8));
           }
         }
       }
@@ -251,7 +251,7 @@ public class IoTDBUDTFBuiltinFunctionIT {
           } else if (j == 5) {
             assertEquals("2024-01-0" + (i + 1), resultSet.getString(7));
           } else if (j == 6) {
-            assertEquals(String.format("1970-01-01T00:00:00.00%dZ", i), 
resultSet.getString(8));
+            assertEquals(String.valueOf(i), resultSet.getString(8));
           }
         }
       }
diff --git 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
index 113b712e7f8..66085e78592 100644
--- a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
+++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java
@@ -32,6 +32,9 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.utils.BytesUtils;
+import org.apache.tsfile.utils.DateUtils;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -598,6 +601,7 @@ public abstract class AbstractCli {
         ctx.getPrinter().println("Msg: " + SUCCESS_MESSAGE);
       }
     } catch (Exception e) {
+      e.printStackTrace();
       ctx.getPrinter().println("Msg: " + e);
       executeStatus = CODE_ERROR;
     } finally {
@@ -663,7 +667,7 @@ public abstract class AbstractCli {
                 RpcUtils.formatDatetime(
                     timeFormat, timestampPrecision, resultSet.getLong(i), 
zoneId);
           } else {
-            tmp = resultSet.getString(i);
+            tmp = getStringByColumnIndex(ioTDBJDBCResultSet, i, zoneId);
           }
           if (tmp == null) {
             tmp = NULL;
@@ -713,6 +717,35 @@ public abstract class AbstractCli {
     return lists;
   }
 
+  private static String getStringByColumnIndex(
+      IoTDBJDBCResultSet resultSet, int columnIndex, ZoneId zoneId) throws 
SQLException {
+    TSDataType type = 
TSDataType.valueOf(resultSet.getColumnTypeByIndex(columnIndex));
+    switch (type) {
+      case BOOLEAN:
+        return String.valueOf(resultSet.getBoolean(columnIndex));
+      case INT32:
+        return String.valueOf(resultSet.getInt(columnIndex));
+      case INT64:
+        return String.valueOf(resultSet.getLong(columnIndex));
+      case FLOAT:
+        return String.valueOf(resultSet.getFloat(columnIndex));
+      case DOUBLE:
+        return String.valueOf(resultSet.getDouble(columnIndex));
+      case TEXT:
+      case STRING:
+        return resultSet.getString(columnIndex);
+      case BLOB:
+        return 
BytesUtils.parseBlobByteArrayToString(resultSet.getBytes(columnIndex));
+      case DATE:
+        return DateUtils.formatDate(resultSet.getInt(columnIndex));
+      case TIMESTAMP:
+        return RpcUtils.formatDatetime(
+            timeFormat, timestampPrecision, resultSet.getLong(columnIndex), 
zoneId);
+      default:
+        return null;
+    }
+  }
+
   private static List<List<String>> cacheTracingInfo(ResultSet resultSet, 
List<Integer> maxSizeList)
       throws Exception {
     List<List<String>> lists = new ArrayList<>(2);
diff --git 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
index ab6009343aa..a854ad62a4a 100644
--- 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
+++ 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
@@ -1338,4 +1338,12 @@ public class IoTDBJDBCResultSet implements ResultSet {
   public List<String> getSgColumns() {
     return sgColumns;
   }
+
+  public String getColumnTypeByIndex(int columnIndex) {
+    if (columnIndex == 1) {
+      // time column
+      return TSDataType.TIMESTAMP.name();
+    }
+    return columnTypeList.get(columnIndex - 2);
+  }
 }
diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
index cca84cc8c33..5bba6d0ea71 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
@@ -587,6 +587,7 @@ public class IoTDBJDBCDataSet {
       case INT32:
         return String.valueOf(BytesUtils.bytesToInt(values[index]));
       case INT64:
+      case TIMESTAMP:
         return String.valueOf(BytesUtils.bytesToLong(values[index]));
       case FLOAT:
         return String.valueOf(BytesUtils.bytesToFloat(values[index]));
@@ -597,9 +598,6 @@ public class IoTDBJDBCDataSet {
         return new String(values[index], StandardCharsets.UTF_8);
       case BLOB:
         return BytesUtils.parseBlobByteArrayToString(values[index]);
-      case TIMESTAMP:
-        return RpcUtils.formatDatetime(
-            RpcUtils.DEFAULT_TIME_FORMAT, "ms", 
BytesUtils.bytesToLong(values[index]), zoneId);
       case DATE:
         return DateUtils.formatDate(BytesUtils.bytesToInt(values[index]));
       default:
diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index 014c5eedae1..9eb33fc36b2 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -562,6 +562,7 @@ public class IoTDBRpcDataSet {
       case INT32:
         return 
String.valueOf(curTsBlock.getColumn(index).getInt(tsBlockIndex));
       case INT64:
+      case TIMESTAMP:
         return 
String.valueOf(curTsBlock.getColumn(index).getLong(tsBlockIndex));
       case FLOAT:
         return 
String.valueOf(curTsBlock.getColumn(index).getFloat(tsBlockIndex));
@@ -576,9 +577,6 @@ public class IoTDBRpcDataSet {
       case BLOB:
         return BytesUtils.parseBlobByteArrayToString(
             curTsBlock.getColumn(index).getBinary(tsBlockIndex).getValues());
-      case TIMESTAMP:
-        return RpcUtils.formatDatetime(
-            timeFormat, "ms", 
curTsBlock.getColumn(index).getLong(tsBlockIndex), zoneId);
       case DATE:
         return 
DateUtils.formatDate(curTsBlock.getColumn(index).getInt(tsBlockIndex));
       default:
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
index 90e3c94305b..1a3c394af7d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
@@ -54,6 +54,8 @@ public class DateTimeUtils {
     // forbidding instantiation
   }
 
+  private static final String TIMESTAMP_PRECISION =
+      CommonDescriptor.getInstance().getConfig().getTimestampPrecision();
   private static Function<Long, Long> CAST_TIMESTAMP_TO_MS;
 
   static {
@@ -825,7 +827,7 @@ public class DateTimeUtils {
     parser1.getInterpreter().setPredictionMode(PredictionMode.SLL);
     parser1.removeErrorListeners();
     parser1.addErrorListener(SqlParseError.INSTANCE);
-    return astVisitor.parseDateExpression(parser1.dateExpression(), "ms");
+    return astVisitor.parseDateExpression(parser1.dateExpression(), 
TIMESTAMP_PRECISION);
   }
 
   public static Integer parseDateExpressionToInt(String dateExpression) {

Reply via email to