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


The following commit(s) were added to refs/heads/main by this push:
     new be297d04d7 [CALCITE-6179] Support weekofmonth function format and add 
test
be297d04d7 is described below

commit be297d04d79c4f7cf0099f2e761ba30e49a3c640
Author: caicancai <[email protected]>
AuthorDate: Tue Dec 26 22:42:32 2023 +0800

    [CALCITE-6179] Support weekofmonth function format and add test
---
 .../calcite/util/format/FormatElementEnum.java     |   8 ++
 .../apache/calcite/util/format/FormatModels.java   |   2 +
 .../calcite/util/format/FormatElementEnumTest.java | 143 ++++++++++++++++++++-
 3 files changed, 152 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 8c6ac03607..ea35aa9a2d 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
@@ -201,6 +201,14 @@ public enum FormatElementEnum implements FormatElement {
       // TODO: how to support timezones?
     }
   },
+  W("W", "The week number of the month (Sunday as the first day of the week) 
as a decimal "
+      + "number (1-5)") {
+    @Override public void format(StringBuilder sb, Date date) {
+      final Calendar calendar = Work.get().calendar;
+      calendar.setTime(date);
+      sb.append(String.format(Locale.ROOT, "%d", 
calendar.get(Calendar.WEEK_OF_MONTH)));
+    }
+  },
   WW("w", "The week number of the year (Sunday as the first day of the week) 
as a decimal "
       + "number (00-53)") {
     @Override public void format(StringBuilder sb, Date date) {
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 2839e661b7..6cd8db3068 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
@@ -51,6 +51,7 @@ import static 
org.apache.calcite.util.format.FormatElementEnum.PM;
 import static org.apache.calcite.util.format.FormatElementEnum.Q;
 import static org.apache.calcite.util.format.FormatElementEnum.SS;
 import static org.apache.calcite.util.format.FormatElementEnum.TZR;
+import static org.apache.calcite.util.format.FormatElementEnum.W;
 import static org.apache.calcite.util.format.FormatElementEnum.WW;
 import static org.apache.calcite.util.format.FormatElementEnum.YY;
 import static org.apache.calcite.util.format.FormatElementEnum.YYYY;
@@ -163,6 +164,7 @@ public class FormatModels {
     map.put("DDD", DDD);
     map.put("DD", DD);
     map.put("D", D);
+    map.put("W", W);
     map.put("WW", WW);
     map.put("IW", IW);
     map.put("Q", Q);
diff --git 
a/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java 
b/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java
index 20aa61337b..5924c5f4fb 100644
--- 
a/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java
+++ 
b/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java
@@ -29,8 +29,149 @@ import static org.hamcrest.Matchers.hasToString;
  */
 class FormatElementEnumTest {
   @Test void testDay() {
+    final String date = "2014-09-30T10:00:00Z";
     StringBuilder ts = new StringBuilder();
-    FormatElementEnum.DAY.format(ts, 
Date.from(Instant.parse("2014-09-30T10:00:00Z")));
+    FormatElementEnum.DAY.format(ts, Date.from(Instant.parse(date)));
     assertThat(ts, hasToString("Tuesday"));
   }
+
+  @Test void testD() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.D.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("3"));
+  }
+
+  @Test void testDD() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.DD.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("30"));
+  }
+
+  @Test void testDDD() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.DDD.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("273"));
+  }
+
+  @Test void testDY() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.DY.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("Tue"));
+  }
+
+  @Test void testFF1() {
+    final String date = "2014-09-30T10:00:00.123456Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.FF1.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("123"));
+  }
+
+  @Test void testFF2() {
+    final String date = "2014-09-30T10:00:00.123456Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.FF2.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("123"));
+  }
+
+  @Test void testFF3() {
+    final String date = "2014-09-30T10:00:00.123456Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.FF3.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("123"));
+  }
+
+  @Test void testFF4() {
+    final String date = "2014-09-30T10:00:00.123456Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.FF4.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("0123"));
+  }
+
+  @Test void testFF5() {
+    final String date = "2014-09-30T10:00:00.123456Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.FF5.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("00123"));
+  }
+
+  @Test void testFF6() {
+    final String date = "2014-09-30T10:00:00.123456Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.FF6.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("000123"));
+  }
+
+  @Test void testIW() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.IW.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("40"));
+  }
+
+  @Test void testMM() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.MM.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("09"));
+  }
+
+  @Test void testMON() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.MON.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("Sep"));
+  }
+
+  @Test void testQ() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.Q.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("3"));
+  }
+
+  @Test void testMS() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.MS.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("000"));
+  }
+
+  @Test void testSS() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.SS.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("00"));
+  }
+
+  @Test void testWM() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.W.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("5"));
+  }
+
+  @Test void testWW() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.WW.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("40"));
+  }
+
+  @Test void testYY() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.YY.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("14"));
+  }
+
+  @Test void testYYYY() {
+    final String date = "2014-09-30T10:00:00Z";
+    StringBuilder ts = new StringBuilder();
+    FormatElementEnum.YYYY.format(ts, Date.from(Instant.parse(date)));
+    assertThat(ts, hasToString("2014"));
+  }
 }

Reply via email to