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

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new 2719fb12 EMPIREDB-470 DateUtils: cache DateTimeFormatter for patterns
2719fb12 is described below

commit 2719fb12000790d6bba1b1aecaa8b5835b19ea3e
Author: Rainer Döbele <doeb...@apache.org>
AuthorDate: Fri Jul 18 12:38:02 2025 +0200

    EMPIREDB-470
    DateUtils: cache DateTimeFormatter for patterns
---
 .../main/java/org/apache/empire/commons/DateUtils.java    | 15 +++++++++++++++
 .../src/main/java/org/apache/empire/db/DBSQLBuilder.java  |  2 +-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java 
b/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java
index 81f7b1ec..5d8dbe76 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/DateUtils.java
@@ -35,6 +35,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 
 import org.slf4j.Logger;
@@ -483,6 +484,20 @@ public class DateUtils
     /*
      * Local Date formatting
      */
+    
+    public static final String FORMAT_PATTERN_ISO_DATE ="yyyy-MM-dd";  
+    public static final String FORMAT_PATTERN_ISO_TIME ="HH:mm:ss";
+    public static final String FORMAT_PATTERN_ISO_DATETIME ="yyyy-MM-dd 
HH:mm:ss";        
+    public static final String FORMAT_PATTERN_ISO_TIMESTAMP ="yyyy-MM-dd 
HH:mm:ss.SSS";
+    public static final String FORMAT_PATTERN_ISO_TIMESTAMP6 ="yyyy-MM-dd 
HH:mm:ss.SSSSSS";
+    public static final String FORMAT_PATTERN_ISO_TIMESTAMP9 ="yyyy-MM-dd 
HH:mm:ss.SSSSSSSSS";
+    
+    private static final Map<String, DateTimeFormatter> patternFormatterMap = 
new ConcurrentHashMap<String, DateTimeFormatter>();
+
+    public static DateTimeFormatter getPatternFormatter(String pattern) 
+    {
+        return patternFormatterMap.computeIfAbsent(pattern, 
DateTimeFormatter::ofPattern);
+    }
 
     public static DateTimeFormatter getLocalDateFormatter(Locale locale)
     {
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBSQLBuilder.java 
b/empire-db/src/main/java/org/apache/empire/db/DBSQLBuilder.java
index 9a51c551..ba7004df 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBSQLBuilder.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBSQLBuilder.java
@@ -401,7 +401,7 @@ public abstract class DBSQLBuilder implements Appendable
         }
         // Convert to String
         String pattern = dbms.getSQLPhrase(sqlPattern);
-        DateTimeFormatter sqlFormat = DateTimeFormatter.ofPattern(pattern);
+        DateTimeFormatter sqlFormat = DateUtils.getPatternFormatter(pattern);
         String datetime = sqlFormat.format(ts);
         // Add micro / nanoseconds
         if (pattern.endsWith(".SSS") && nanos>0)

Reply via email to