You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2025/02/21 03:16:12 UTC

(iotdb) branch timestamp_str_1.3 created (now 70855d0251e)

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

haonan pushed a change to branch timestamp_str_1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 70855d0251e Reject inserting invalid timestamp string (#14913)

This branch includes the following new commits:

     new 70855d0251e Reject inserting invalid timestamp string (#14913)

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(iotdb) 01/01: Reject inserting invalid timestamp string (#14913)

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch timestamp_str_1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 70855d0251e06a60c4144ec94721728294d28c3d
Author: Haonan <hh...@outlook.com>
AuthorDate: Fri Feb 21 11:14:25 2025 +0800

    Reject inserting invalid timestamp string (#14913)
    
    * Reject inserting invalid timestamp string
    
    * fix subscription IT
---
 .../java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java    | 14 ++++++++++++++
 .../it/triple/regression/param/IoTDBTestParamTopicIT.java  |  2 +-
 .../main/java/org/apache/iotdb/db/utils/DateTimeUtils.java |  4 +++-
 .../java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java  | 14 ++++++++++++++
 4 files changed, 32 insertions(+), 2 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 f920c0553a3..441b3afbbcb 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
@@ -1197,6 +1197,8 @@ public class IoTDBSimpleQueryIT {
       statement.execute("CREATE DATABASE root.sg1");
       statement.execute(
           "CREATE TIMESERIES root.sg1.d1.s4 WITH DATATYPE=DATE, ENCODING=PLAIN, COMPRESSOR=SNAPPY");
+      statement.execute(
+          "CREATE TIMESERIES root.sg1.d1.s5 WITH DATATYPE=TIMESTAMP, ENCODING=PLAIN, COMPRESSOR=SNAPPY");
       try {
         statement.execute("insert into root.sg1.d1(timestamp, s4) values(1, '2022-04-31')");
         fail();
@@ -1208,6 +1210,18 @@ public class IoTDBSimpleQueryIT {
                 + "Please use YYYY-MM-DD format.]",
             e.getMessage());
       }
+      try {
+        statement.execute(
+            "insert into root.sg1.d1(timestamp, s5) values(1999-04-31T00:00:00.000+08:00, 1999-04-31T00:00:00.000+08:00)");
+        fail();
+      } catch (Exception e) {
+        assertEquals(
+            TSStatusCode.SEMANTIC_ERROR.getStatusCode()
+                + ": Input time format 1999-04-31T00:00:00.000+08:00 error. "
+                + "Input like yyyy-MM-dd HH:mm:ss, yyyy-MM-ddTHH:mm:ss "
+                + "or refer to user document for more info.",
+            e.getMessage());
+      }
     } catch (SQLException e) {
       fail();
     }
diff --git a/integration-test/src/test/java/org/apache/iotdb/subscription/it/triple/regression/param/IoTDBTestParamTopicIT.java b/integration-test/src/test/java/org/apache/iotdb/subscription/it/triple/regression/param/IoTDBTestParamTopicIT.java
index 89ca62bfb45..bad7f39bda1 100644
--- a/integration-test/src/test/java/org/apache/iotdb/subscription/it/triple/regression/param/IoTDBTestParamTopicIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/subscription/it/triple/regression/param/IoTDBTestParamTopicIT.java
@@ -184,7 +184,7 @@ public class IoTDBTestParamTopicIT extends AbstractSubscriptionRegressionIT {
     printTopics("testCreateTopic_invalidTime5");
   }
 
-  @Test
+  @Test(expected = StatementExecutionException.class)
   public void testCreateTopic_invalidTime6()
       throws IoTDBConnectionException,
           StatementExecutionException,
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 6f7e7179858..a63eea9fe44 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
@@ -42,6 +42,7 @@ import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatterBuilder;
 import java.time.format.DateTimeParseException;
+import java.time.format.ResolverStyle;
 import java.time.format.SignStyle;
 import java.time.temporal.ChronoField;
 import java.util.Calendar;
@@ -475,7 +476,8 @@ public class DateTimeUtils {
 
           /** such as '2011.12.03 10:15:30+01:00' or '2011.12.03 10:15:30.123456789+01:00'. */
           .appendOptional(ISO_OFFSET_DATE_TIME_WITH_DOT_WITH_SPACE_NS)
-          .toFormatter();
+          .toFormatter()
+          .withResolverStyle(ResolverStyle.STRICT);
 
   public static long convertTimestampOrDatetimeStrToLongWithDefaultZone(String timeStr) {
     try {
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java
index 0e99f01fe8a..676ca09c7cd 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java
@@ -32,6 +32,7 @@ import java.time.ZonedDateTime;
 import java.util.TimeZone;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 public class DateTimeUtilsTest {
 
@@ -77,6 +78,19 @@ public class DateTimeUtilsTest {
     testConvertDateStrToLong(zoneOffset, zoneId, timestamp1 + delta);
   }
 
+  @Test
+  public void convertDatetimeStrToLongTest4() {
+    zoneOffset = ZoneOffset.UTC;
+    try {
+      DateTimeUtils.convertDatetimeStrToLong("1999-02-29T00:00:00.000", zoneOffset, 0, "ms");
+      fail();
+    } catch (Exception e) {
+      assertEquals(
+          "Text '1999-02-29T00:00:00.000+00:00' could not be parsed: Invalid date 'February 29' as '1999' is not a leap year",
+          e.getMessage());
+    }
+  }
+
   /** Test time precision is ms. */
   @Test
   public void convertDurationStrToLongTest1() {