From bfd146874fde73a4bba265c80702ec14e2bbca41 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 27 Apr 2018 17:31:42 +0200 Subject: [PATCH] [#7171] [#7446] Support parsing ISO_8601 interval literals --- .../resources/org/jooq/web/grammar-3.11.txt | 4 ++++ .../main/java/org/jooq/impl/ParserImpl.java | 9 +++++---- .../main/java/org/jooq/types/DayToSecond.java | 12 +++++++++++- .../main/java/org/jooq/types/YearToMonth.java | 19 ++++++++++++++++--- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt index 4e9ba77ac0..fe31a277c4 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt @@ -639,6 +639,7 @@ term = | 'HOUR' '(' field ')' | 'IFNULL' '(' field ',' field ')' | 'INSTR' '(' field ',' field ')' +| intervalLiteral | 'IIF' '(' condition ',' field ',' field ')' | 'ISNULL' '(' field ',' field ')' | ( 'LOWER' | 'LCASE' ) '(' field ')' @@ -897,6 +898,9 @@ timeLiteral = 'TIME' stringLiteral timestampLiteral = 'TIMESTAMP' stringLiteral ; +intervalLiteral = 'INTERVAL' stringLiteral +; + signedInteger = todo ; diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index b78f247c88..89c7c560ca 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -5089,15 +5089,16 @@ final class ParserImpl implements Parser { private static final Interval parseIntervalLiteral(ParserContext ctx) { String string = parseStringLiteral(ctx); - YearToMonth ym = YearToMonth.valueOf(string); - - if (ym != null) - return ym; DayToSecond ds = DayToSecond.valueOf(string); if (ds != null) return ds; + YearToMonth ym = YearToMonth.valueOf(string); + + if (ym != null) + return ym; + throw ctx.exception("Illegal interval literal"); } diff --git a/jOOQ/src/main/java/org/jooq/types/DayToSecond.java b/jOOQ/src/main/java/org/jooq/types/DayToSecond.java index e5ed27a337..7e1a97cc50 100644 --- a/jOOQ/src/main/java/org/jooq/types/DayToSecond.java +++ b/jOOQ/src/main/java/org/jooq/types/DayToSecond.java @@ -38,6 +38,7 @@ package org.jooq.types; import java.time.Duration; +import java.time.format.DateTimeParseException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -85,7 +86,7 @@ public final class DayToSecond extends Number implements Interval, Comparable