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 21d263ba1f [CALCITE-6215] Support century format datetime/timestamp in 
pg
21d263ba1f is described below

commit 21d263ba1fe0f163c9f6730677b31fa5eddc3a74
Author: caicancai <[email protected]>
AuthorDate: Thu Jan 25 10:48:01 2024 +0800

    [CALCITE-6215] Support century format datetime/timestamp in pg
---
 babel/src/test/resources/sql/postgresql.iq                         | 5 +++++
 .../java/org/apache/calcite/util/format/FormatElementEnum.java     | 7 +++++++
 .../src/main/java/org/apache/calcite/util/format/FormatModels.java | 2 ++
 .../java/org/apache/calcite/util/format/FormatElementEnumTest.java | 4 ++++
 4 files changed, 18 insertions(+)

diff --git a/babel/src/test/resources/sql/postgresql.iq 
b/babel/src/test/resources/sql/postgresql.iq
index 4cc2661154..9dcb67d22f 100644
--- a/babel/src/test/resources/sql/postgresql.iq
+++ b/babel/src/test/resources/sql/postgresql.iq
@@ -63,6 +63,11 @@ EXPR$0
 2022-06-03 12:15:48.678
 !ok
 
+select to_char(timestamp '2022-06-03 12:15:48.678', 'CC');
+EXPR$0
+21
+!ok
+
 # -----------------------------------------------------------------------------
 # Posix regex
 
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 ea35aa9a2d..547693c9eb 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
@@ -41,6 +41,13 @@ import static java.util.Objects.requireNonNull;
  * @see FormatModels#DEFAULT
  */
 public enum FormatElementEnum implements FormatElement {
+  CC("cc", "century (2 digits) (the twenty-first century starts on 
2001-01-01)") {
+    @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.YEAR) 
/ 100 + 1));
+    }
+  },
   D("F", "The weekday (Monday as the first day of the week) as a decimal 
number (1-7)") {
     @Override public void format(StringBuilder sb, Date date) {
       final Calendar calendar = Work.get().calendar;
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 6cd8db3068..f7c8e3fd21 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
@@ -28,6 +28,7 @@ import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static org.apache.calcite.util.format.FormatElementEnum.CC;
 import static org.apache.calcite.util.format.FormatElementEnum.D;
 import static org.apache.calcite.util.format.FormatElementEnum.DAY;
 import static org.apache.calcite.util.format.FormatElementEnum.DD;
@@ -161,6 +162,7 @@ public class FormatModels {
     map.put("Month", MONTH);
     map.put("Mon", MON);
     map.put("MM", MM);
+    map.put("CC", CC);
     map.put("DDD", DDD);
     map.put("DD", DD);
     map.put("D", D);
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 5e431d001d..75eac7e134 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,6 +29,10 @@ import static org.hamcrest.Matchers.hasToString;
  */
 class FormatElementEnumTest {
 
+  @Test void testCC() {
+    assertFormatElement(FormatElementEnum.CC, "2014-09-30T10:00:00Z", "21");
+  }
+
   @Test void testDay() {
     assertFormatElement(FormatElementEnum.DAY, "2014-09-30T10:00:00Z", 
"Tuesday");
   }

Reply via email to