From 1d2a24b51693dde1548bbb41251f95a243ae5765 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 4 Jun 2020 17:00:45 +0200 Subject: [PATCH] [jOOQ/jOOQ#10248] Wrong emulation of EXTRACT() with DECADE, CENTURY, MILLENIUM date parts --- jOOQ/src/main/java/org/jooq/impl/Extract.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Extract.java b/jOOQ/src/main/java/org/jooq/impl/Extract.java index 77c2efe487..1cee3ec970 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Extract.java +++ b/jOOQ/src/main/java/org/jooq/impl/Extract.java @@ -429,27 +429,32 @@ final class Extract extends AbstractField { private final void acceptDefaultEmulation(Context ctx) { switch (datePart) { case DECADE: - ctx.visit(castIfNeeded(DSL.year(field).div(inline(10)), INTEGER)); + ctx.visit(DSL.floor(DSL.year(field).div(inline(10)))); break; + case CENTURY: - ctx.visit(castIfNeeded( + ctx.visit(DSL.floor( DSL.sign(DSL.year(field)) .mul(DSL.abs(DSL.year(field)).add(inline(99))) - .div(inline(100)), INTEGER)); + .div(inline(100)))); break; + case MILLENNIUM: - ctx.visit(castIfNeeded( + ctx.visit(DSL.floor( DSL.sign(DSL.year(field)) .mul(DSL.abs(DSL.year(field)).add(inline(999))) - .div(inline(1000)), INTEGER)); + .div(inline(1000)))); break; + case QUARTER: ctx.visit(DSL.floor(DSL.month(field).add(inline(2)).div(inline(3)))); break; + case TIMEZONE: ctx.visit(DSL.extract(field, DatePart.TIMEZONE_HOUR).mul(inline(3600)) .add(DSL.extract(field, DatePart.TIMEZONE_MINUTE).mul(inline(60)))); break; + default: acceptNativeFunction(ctx); break;