From 56ee8812467a3ffa750c4b0f14fa1acfc0f181a2 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Wed, 5 Jun 2019 09:47:07 +0200 Subject: [PATCH] [jOOQ/jOOQ#8737] Fix date arithmetic does not support fractional seconds Date arithmetic now uses strftime(), so that fractional seconds don't get trimmed. --- jOOQ/src/main/java/org/jooq/impl/DateAdd.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Expression.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DateAdd.java b/jOOQ/src/main/java/org/jooq/impl/DateAdd.java index 2d270c354d..e7c92f82e5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DateAdd.java +++ b/jOOQ/src/main/java/org/jooq/impl/DateAdd.java @@ -176,7 +176,7 @@ final class DateAdd extends AbstractFunction { default: throwUnsupported(); } - return DSL.field("{datetime}({0}, '+' || {1} || {2})", getDataType(), date, interval, inline(keyword)); + return DSL.field("{strftime}('%Y-%m-%d %H:%M:%f', {0}, {1})", getDataType(), date, interval.concat(inline(keyword))); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Expression.java b/jOOQ/src/main/java/org/jooq/impl/Expression.java index a125ce69c6..5f98da42d4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Expression.java +++ b/jOOQ/src/main/java/org/jooq/impl/Expression.java @@ -376,7 +376,7 @@ final class Expression extends AbstractFunction { interval = interval.neg(); interval = interval.concat(inline(ytm ? " months" : " seconds")); - return DSL.field("{datetime}({0}, {1})", getDataType(), lhs, interval); + return DSL.field("{strftime}('%Y-%m-%d %H:%M:%f', {0}, {1})", getDataType(), lhs, interval); } @@ -651,9 +651,9 @@ final class Expression extends AbstractFunction { case SQLITE: if (operator == ADD) - return DSL.field("{datetime}({0}, {1})", getDataType(), lhs, rhsAsNumber().concat(inline(" day"))); + return DSL.field("{strftime}('%Y-%m-%d %H:%M:%f', {0}, {1})", getDataType(), lhs, rhsAsNumber().concat(inline(" day"))); else - return DSL.field("{datetime}({0}, {1})", getDataType(), lhs, rhsAsNumber().neg().concat(inline(" day"))); + return DSL.field("{strftime}('%Y-%m-%d %H:%M:%f', {0}, {1})", getDataType(), lhs, rhsAsNumber().neg().concat(inline(" day")));