diff --git a/jOOQ/src/main/java/org/jooq/AlterDatabaseStep.java b/jOOQ/src/main/java/org/jooq/AlterDatabaseStep.java index 17ae1793d2..4cd1148c85 100644 --- a/jOOQ/src/main/java/org/jooq/AlterDatabaseStep.java +++ b/jOOQ/src/main/java/org/jooq/AlterDatabaseStep.java @@ -37,7 +37,6 @@ */ package org.jooq; -// ... // ... // ... import static org.jooq.SQLDialect.POSTGRES; diff --git a/jOOQ/src/main/java/org/jooq/DatePart.java b/jOOQ/src/main/java/org/jooq/DatePart.java index 967a9ab975..eea846b27d 100644 --- a/jOOQ/src/main/java/org/jooq/DatePart.java +++ b/jOOQ/src/main/java/org/jooq/DatePart.java @@ -44,6 +44,7 @@ package org.jooq; // ... // ... import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.HSQLDB; import static org.jooq.SQLDialect.MARIADB; // ... @@ -210,10 +211,12 @@ public enum DatePart { private final String sql; private final Keyword keyword; + private final Name name; private DatePart(String sql) { this.sql = sql; this.keyword = DSL.keyword(sql); + this.name = DSL.unquotedName(sql); } public final String toSQL() { @@ -223,4 +226,8 @@ public enum DatePart { public final Keyword toKeyword() { return keyword; } + + public final Name toName() { + return name; + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Extract.java b/jOOQ/src/main/java/org/jooq/impl/Extract.java index 5e3a5f49c8..77c2efe487 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Extract.java +++ b/jOOQ/src/main/java/org/jooq/impl/Extract.java @@ -40,6 +40,7 @@ package org.jooq.impl; import static org.jooq.impl.DSL.function; import static org.jooq.impl.DSL.inline; +import static org.jooq.impl.DSL.isoDayOfWeek; import static org.jooq.impl.DSL.keyword; import static org.jooq.impl.DSL.one; import static org.jooq.impl.Keywords.K_DATE; @@ -54,11 +55,14 @@ import static org.jooq.impl.Keywords.K_YEAR; import static org.jooq.impl.Names.N_DATEDIFF; import static org.jooq.impl.Names.N_DATEPART; import static org.jooq.impl.Names.N_DAYOFWEEK; +import static org.jooq.impl.Names.N_DAYOFYEAR; import static org.jooq.impl.Names.N_EXTRACT; +import static org.jooq.impl.Names.N_SECONDS_BETWEEN; import static org.jooq.impl.Names.N_STRFTIME; import static org.jooq.impl.Names.N_TO_CHAR; import static org.jooq.impl.Names.N_TO_NUMBER; import static org.jooq.impl.Names.N_TRUNC; +import static org.jooq.impl.Names.N_WEEKDAY; import static org.jooq.impl.SQLDataType.INTEGER; import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.impl.Tools.castIfNeeded; @@ -272,6 +276,31 @@ final class Extract extends AbstractField { + + + + + + + + + + + + + + + + + + + + + + + + + @@ -300,16 +329,16 @@ final class Extract extends AbstractField { ctx.visit(N_DAYOFWEEK).sql('(').visit(field).sql(')'); return; case DAY_OF_YEAR: - ctx.visit(keyword("dayofyear")).sql('(').visit(field).sql(')'); + ctx.visit(N_DAYOFYEAR).sql('(').visit(field).sql(')'); return; case EPOCH: ctx.visit(keyword("unix_timestamp")).sql('(').visit(field).sql(')'); return; case ISO_DAY_OF_WEEK: - ctx.visit(keyword("weekday")).sql('(').visit(field).sql(") + 1"); + ctx.visit(N_WEEKDAY).sql('(').visit(field).sql(") + 1"); return; case QUARTER: - ctx.visit(datePart.toKeyword()).sql('(').visit(field).sql(')'); + ctx.visit(datePart.toName()).sql('(').visit(field).sql(')'); return; } break; @@ -365,7 +394,7 @@ final class Extract extends AbstractField { return; case QUARTER: case WEEK: - ctx.visit(datePart.toKeyword()).sql('(').visit(field).sql(')'); + ctx.visit(datePart.toName()).sql('(').visit(field).sql(')'); return; } break; @@ -373,7 +402,7 @@ final class Extract extends AbstractField { case H2: switch (datePart) { case QUARTER: - ctx.visit(datePart.toKeyword()).sql('(').visit(field).sql(')'); + ctx.visit(datePart.toName()).sql('(').visit(field).sql(')'); return; case WEEK: ctx.visit(keyword("iso_week")).sql('(').visit(field).sql(')'); @@ -415,7 +444,7 @@ final class Extract extends AbstractField { .div(inline(1000)), INTEGER)); break; case QUARTER: - ctx.visit(DSL.month(field).add(inline(2)).div(inline(3))); + 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)) diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 9864e37eac..9661c82368 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -95,6 +95,7 @@ final class Names { static final Name N_DATEDIFF = unquotedName("datediff"); static final Name N_DATEPART = unquotedName("datepart"); static final Name N_DAYOFWEEK = unquotedName("dayofweek"); + static final Name N_DAYOFYEAR = unquotedName("dayofyear"); static final Name N_DAYS_BETWEEN = unquotedName("days_between"); static final Name N_DECODE = unquotedName("decode"); static final Name N_DEGREES = unquotedName("degrees"); @@ -116,6 +117,7 @@ final class Names { static final Name N_IIF = unquotedName("iif"); static final Name N_INSERT = unquotedName("insert"); static final Name N_INSTR = unquotedName("instr"); + static final Name N_ISOWEEK = unquotedName("isoweek"); static final Name N_JOIN = unquotedName("join"); static final Name N_JSON_AGG = unquotedName("json_agg"); static final Name N_JSON_ARRAY = unquotedName("json_array"); @@ -191,6 +193,7 @@ final class Names { static final Name N_RPAD = unquotedName("rpad"); static final Name N_RTRIM = unquotedName("rtrim"); static final Name N_SCHEMA_NAME = unquotedName("schema_name"); + static final Name N_SECONDS_BETWEEN = unquotedName("seconds_between"); static final Name N_SELECT = unquotedName("select"); static final Name N_SGN = unquotedName("sgn"); static final Name N_SIGN = unquotedName("sign"); @@ -225,6 +228,7 @@ final class Names { static final Name N_UPPER = unquotedName("upper"); static final Name N_USER = unquotedName("user"); static final Name N_VALUES = unquotedName("values"); + static final Name N_WEEKDAY = unquotedName("weekday"); static final Name N_WIDTH_BUCKET = unquotedName("width_bucket"); static final Name N_XMLAGG = unquotedName("xmlagg"); static final Name N_XMLATTRIBUTES = unquotedName("xmlattributes");