From bcc93dfabb50e0b5316cdcdb8801411fec966508 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 26 Nov 2014 17:11:55 +0100 Subject: [PATCH] [#3781] Add support for DSL.trunc(date, DatePart) for H2 --- jOOQ/src/main/java/org/jooq/impl/DSL.java | 12 ++++++------ jOOQ/src/main/java/org/jooq/impl/TruncDate.java | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index d70ea507ac..363c5ad628 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -8009,7 +8009,7 @@ public class DSL { /** * Truncate a date to the beginning of the day. */ - @Support({ CUBRID, HSQLDB, POSTGRES }) + @Support({ CUBRID, H2, HSQLDB, POSTGRES }) public static Field trunc(Date date) { return trunc(date, DatePart.DAY); } @@ -8017,7 +8017,7 @@ public class DSL { /** * Truncate a date to a given datepart. */ - @Support({ CUBRID, HSQLDB, POSTGRES }) + @Support({ CUBRID, H2, HSQLDB, POSTGRES }) public static Field trunc(Date date, DatePart part) { return trunc(Utils.field(date), part); } @@ -8025,7 +8025,7 @@ public class DSL { /** * Truncate a timestamp to the beginning of the day. */ - @Support({ CUBRID, HSQLDB, POSTGRES }) + @Support({ CUBRID, H2, HSQLDB, POSTGRES }) public static Field trunc(Timestamp timestamp) { return trunc(timestamp, DatePart.DAY); } @@ -8033,7 +8033,7 @@ public class DSL { /** * Truncate a timestamp to a given datepart. */ - @Support({ CUBRID, HSQLDB, POSTGRES }) + @Support({ CUBRID, H2, HSQLDB, POSTGRES }) public static Field trunc(Timestamp timestamp, DatePart part) { return trunc(Utils.field(timestamp), part); } @@ -8041,7 +8041,7 @@ public class DSL { /** * Truncate a date or a timestamp to the beginning of the day. */ - @Support({ CUBRID, HSQLDB, POSTGRES }) + @Support({ CUBRID, H2, HSQLDB, POSTGRES }) public static Field trunc(Field date) { return trunc(date, DatePart.DAY); } @@ -8049,7 +8049,7 @@ public class DSL { /** * Truncate a date or a timestamp to a given datepart. */ - @Support({ CUBRID, HSQLDB, POSTGRES }) + @Support({ CUBRID, H2, HSQLDB, POSTGRES }) public static Field trunc(Field date, DatePart part) { return new TruncDate(date, part); } diff --git a/jOOQ/src/main/java/org/jooq/impl/TruncDate.java b/jOOQ/src/main/java/org/jooq/impl/TruncDate.java index bece205143..7fcc228dc7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TruncDate.java +++ b/jOOQ/src/main/java/org/jooq/impl/TruncDate.java @@ -73,6 +73,7 @@ class TruncDate extends AbstractFunction { @Override final QueryPart getFunction0(Configuration configuration) { String keyword = null; + String format = null; switch (configuration.dialect().family()) { @@ -92,6 +93,20 @@ class TruncDate extends AbstractFunction { return field("{trunc}({0}, {1})", getDataType(), date, inline(keyword)); } + case H2: { + switch (part) { + case YEAR: format = "yyyy"; break; + case MONTH: format = "yyyy-MM"; break; + case DAY: format = "yyyy-MM-dd"; break; + case HOUR: format = "yyyy-MM-dd HH"; break; + case MINUTE: format = "yyyy-MM-dd HH:mm"; break; + case SECOND: format = "yyyy-MM-dd HH:mm:ss"; break; + default: throwUnsupported(); + } + + return field("{parsedatetime}({formatdatetime}({0}, {1}), {1})", getDataType(), date, inline(format)); + } + // These don't work yet and need better integration-testing: // --------------------------------------------------------- // case MARIADB: