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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7cccc5e92a [multistage] add fromDateTime malformed handling 
option(#11258)
7cccc5e92a is described below

commit 7cccc5e92a1977069b92c5250750178b384473b2
Author: Rong Rong <[email protected]>
AuthorDate: Mon Sep 25 11:32:04 2023 -0700

    [multistage] add fromDateTime malformed handling option(#11258)
    
    Co-authored-by: Rong Rong <[email protected]>
---
 .../pinot/common/function/DateTimePatternHandler.java       | 13 +++++++++++++
 .../pinot/common/function/scalar/DateTimeFunctions.java     |  5 +++++
 .../pinot/core/data/function/DateTimeFunctionsTest.java     |  8 ++++++++
 3 files changed, 26 insertions(+)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/function/DateTimePatternHandler.java
 
b/pinot-common/src/main/java/org/apache/pinot/common/function/DateTimePatternHandler.java
index 2da3107853..ab563e6080 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/function/DateTimePatternHandler.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/function/DateTimePatternHandler.java
@@ -46,6 +46,19 @@ public class DateTimePatternHandler {
     return dateTimeFormatter.parseMillis(dateTimeString);
   }
 
+  /**
+   * Converts the dateTimeString of the pattern/timezone and return default 
value when exception occurs.
+   */
+  public static long parseDateTimeStringToEpochMillis(String dateTimeString, 
String pattern, String timezoneId,
+      long defaultVal) {
+    try {
+      DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(pattern, 
timezoneId);
+      return dateTimeFormatter.parseMillis(dateTimeString);
+    } catch (Exception e) {
+      return defaultVal;
+    }
+  }
+
   /**
    * Converts the millis representing seconds since epoch into a string of 
passed pattern
    */
diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java
 
b/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java
index 77db5d7fcd..7c28c589a7 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java
@@ -512,6 +512,11 @@ public class DateTimeFunctions {
     return 
DateTimePatternHandler.parseDateTimeStringToEpochMillis(dateTimeString, 
pattern, timeZoneId);
   }
 
+  @ScalarFunction
+  public static long fromDateTime(String dateTimeString, String pattern, 
String timeZoneId, long defaultVal) {
+    return 
DateTimePatternHandler.parseDateTimeStringToEpochMillis(dateTimeString, 
pattern, timeZoneId, defaultVal);
+  }
+
   @ScalarFunction
   public static long[] fromDateTimeMV(String[] dateTimeString, String pattern, 
String timeZoneId) {
     long[] results = new long[dateTimeString.length];
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java
index 279302d264..4ae6c573ab 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java
@@ -241,6 +241,14 @@ public class DateTimeFunctionsTest {
         "fromDateTime(dateTime, 'yyyy-MM-dd''T''HH:mm:ss.SSS''Z''')", 
Lists.newArrayList("dateTime"), row113, null
     });
 
+    // fromDateTime with malformed dateTime and default Value should return -1
+    GenericRow row114 = new GenericRow();
+    row114.putValue("dateTime", "malformed_string");
+    inputs.add(new Object[]{
+        "fromDateTime(dateTime, 'yyyy-MM-dd''T''HH:mm:ss.SSS''Z''', 'UTC', 
-1)", Lists.newArrayList("dateTime"),
+        row114, -1L
+    });
+
     // timezone_hour and timezone_minute
     List<String> expectedArguments = Collections.singletonList("tz");
     GenericRow row120 = new GenericRow();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to