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

mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit df5459250a3c2495a4defc0c7fb6b56f213d35ea
Author: Mihai Budiu <[email protected]>
AuthorDate: Fri Feb 9 10:21:58 2024 -0800

    [CALCITE-6247] BigQuery FORMAT_DATE function handles incorrectly the %e 
format specifier
    
    Signed-off-by: Mihai Budiu <[email protected]>
---
 .../java/org/apache/calcite/util/format/FormatElementEnum.java    | 8 ++++++++
 .../main/java/org/apache/calcite/util/format/FormatModels.java    | 3 ++-
 .../src/main/java/org/apache/calcite/test/SqlOperatorTest.java    | 5 +++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git 
a/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java 
b/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java
index 547693c9eb..38625d3308 100644
--- a/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java
+++ b/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java
@@ -81,6 +81,14 @@ public enum FormatElementEnum implements FormatElement {
       sb.append(work.eeeFormat.format(date));
     }
   },
+  E("d", "The day of the month as a decimal number (1-31); "
+      + "single digits are left-padded with space.") {
+    @Override public void format(StringBuilder sb, Date date) {
+      final Calendar calendar = Work.get().calendar;
+      calendar.setTime(date);
+      sb.append(String.format(Locale.ROOT, "%2d", 
calendar.get(Calendar.DAY_OF_MONTH)));
+    }
+  },
   FF1("S", "Fractional seconds to 1 digit") {
     @Override public void format(StringBuilder sb, Date date) {
       final Work work = Work.get();
diff --git 
a/core/src/main/java/org/apache/calcite/util/format/FormatModels.java 
b/core/src/main/java/org/apache/calcite/util/format/FormatModels.java
index f7c8e3fd21..904521d946 100644
--- a/core/src/main/java/org/apache/calcite/util/format/FormatModels.java
+++ b/core/src/main/java/org/apache/calcite/util/format/FormatModels.java
@@ -34,6 +34,7 @@ import static 
org.apache.calcite.util.format.FormatElementEnum.DAY;
 import static org.apache.calcite.util.format.FormatElementEnum.DD;
 import static org.apache.calcite.util.format.FormatElementEnum.DDD;
 import static org.apache.calcite.util.format.FormatElementEnum.DY;
+import static org.apache.calcite.util.format.FormatElementEnum.E;
 import static org.apache.calcite.util.format.FormatElementEnum.FF1;
 import static org.apache.calcite.util.format.FormatElementEnum.FF2;
 import static org.apache.calcite.util.format.FormatElementEnum.FF3;
@@ -114,7 +115,7 @@ public class FormatModels {
     map.put("%E4S", FF4);
     map.put("%E5S", FF5);
     map.put("%E*S", FF6);
-    map.put("%e", DD);
+    map.put("%e", E);
     map.put("%F",
         compositeElement("The date in the format %Y-%m-%d.", YYYY, 
literalElement("-"), MM,
             literalElement("-"), DD));
diff --git a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java 
b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
index 68edec1ccb..047232b1d5 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
@@ -12645,6 +12645,11 @@ public class SqlOperatorTest {
     f.checkScalar("FORMAT_DATE('%b %Y', DATE '2008-12-25')",
         "Dec 2008",
         "VARCHAR(2000) NOT NULL");
+    // Test case for [CALCITE-6247] 
https://issues.apache.org/jira/browse/CALCITE-6247
+    // BigQuery FORMAT_DATE function handles incorrectly the %e format 
specifier
+    f.checkScalar("FORMAT_DATE('*%e*', DATE '2008-12-02')",
+        "* 2*",
+        "VARCHAR(2000) NOT NULL");
     f.checkScalar("FORMAT_DATE('%x', DATE '2008-12-25')",
         "12/25/08",
         "VARCHAR(2000) NOT NULL");

Reply via email to