[jOOQ/jOOQ#2132] [jOOQ/jOOQ#10153] Support more EXTRACT() date parts
This commit is contained in:
parent
f6c5ed5461
commit
351696e42e
@ -37,7 +37,6 @@
|
||||
*/
|
||||
package org.jooq;
|
||||
|
||||
// ...
|
||||
// ...
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.POSTGRES;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<Integer> {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -300,16 +329,16 @@ final class Extract extends AbstractField<Integer> {
|
||||
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<Integer> {
|
||||
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<Integer> {
|
||||
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<Integer> {
|
||||
.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))
|
||||
|
||||
@ -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");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user