[jOOQ/jOOQ#2620] Add BigQuery support (WIP)

- Support UNNEST
- Support GENERATE_SERIES
- Support NULL bind values (see [jOOQ/jOOQ#11841])
- Support some additional ROW predicates
- Avoid a BigQuery limitation (see [jOOQ/jOOQ#11842])
- Support COUNTIF ([jOOQ/jOOQ#11843])
This commit is contained in:
Lukas Eder 2021-05-05 12:52:59 +02:00
parent 6fa32f50dd
commit efbdf1cd1e
12 changed files with 685 additions and 351 deletions

View File

@ -40,10 +40,12 @@ package org.jooq.impl;
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.H2;
import static org.jooq.SQLDialect.HSQLDB;
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
import static org.jooq.SQLDialect.SQLITE;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.one;
@ -52,6 +54,7 @@ import static org.jooq.impl.Keywords.K_DISTINCT;
import static org.jooq.impl.Keywords.K_FILTER;
import static org.jooq.impl.Keywords.K_ORDER_BY;
import static org.jooq.impl.Keywords.K_WHERE;
import static org.jooq.impl.Names.*;
import static org.jooq.impl.SQLDataType.DOUBLE;
import static org.jooq.impl.SQLDataType.NUMERIC;
@ -84,6 +87,10 @@ implements
AggregateFunction<T>,
OrderedAggregateFunction<T>,
ArrayAggOrderByStep<T> {
static final Set<SQLDialect> SUPPORT_FILTER = SQLDialect.supportedBy(H2, HSQLDB, POSTGRES, SQLITE);
static final Set<SQLDialect> SUPPORT_DISTINCT_RVE = SQLDialect.supportedBy(H2, POSTGRES);
@ -110,6 +117,23 @@ implements
// XXX QueryPart API
// -------------------------------------------------------------------------
/* non-final */ void acceptFunctionName(Context<?> ctx) {
ctx.visit(getQualifiedName());
}
final void acceptArguments0(Context<?> ctx) {
acceptArguments1(ctx, arguments);
}
@ -134,10 +158,23 @@ implements
final void acceptArguments2(Context<?> ctx, QueryPartCollectionView<Field<?>> args) {
if (filter == null || SUPPORT_FILTER.contains(ctx.dialect()))
ctx.visit(args);
else
ctx.visit(args.map(arg -> DSL.when(filter, arg == ASTERISK ? one() : arg)));
}
final void acceptFilterClause(Context<?> ctx) {
acceptFilterClause(ctx, filter);
}

View File

@ -89,9 +89,8 @@ final class ArrayTable extends AbstractTable<Record> {
Class<?> arrayType;
// TODO [#523] Solve this in a more object-oriented way...
if (array.getDataType().getType().isArray()) {
arrayType = array.getDataType().getType().getComponentType();
arrayType = array.getDataType().getArrayComponentType();
}
@ -183,6 +182,7 @@ final class ArrayTable extends AbstractTable<Record> {
// arrays
case HSQLDB:
case POSTGRES:
return new PostgresHSQLDBTable().as(alias, fieldAliases);

View File

@ -98,8 +98,19 @@ import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.Keywords.K_CUBE;
import static org.jooq.impl.Keywords.K_DEFAULT;
import static org.jooq.impl.Keywords.K_GROUPING_SETS;
import static org.jooq.impl.Names.N_AVG;
import static org.jooq.impl.Names.N_COUNT;
import static org.jooq.impl.Names.N_CUME_DIST;
import static org.jooq.impl.Names.N_DENSE_RANK;
import static org.jooq.impl.Names.N_IF;
import static org.jooq.impl.Names.N_IIF;
import static org.jooq.impl.Names.N_MAX;
import static org.jooq.impl.Names.N_MIN;
import static org.jooq.impl.Names.N_PERCENTILE_CONT;
import static org.jooq.impl.Names.N_PERCENTILE_DISC;
import static org.jooq.impl.Names.N_PERCENT_RANK;
import static org.jooq.impl.Names.N_RANK;
import static org.jooq.impl.Names.N_SUM;
import static org.jooq.impl.Names.N_SYSTEM_TIME;
import static org.jooq.impl.Names.N_VALUE;
import static org.jooq.impl.PositionalWindowFunction.PositionalFunctionType.FIRST_VALUE;
@ -23298,7 +23309,7 @@ public class DSL {
@NotNull
@Support
public static AggregateFunction<Integer> count(Field<?> field) {
return new DefaultAggregateFunction<>("count", SQLDataType.INTEGER, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(N_COUNT, SQLDataType.INTEGER, Tools.nullSafe(field));
}
/**
@ -23307,7 +23318,7 @@ public class DSL {
@NotNull
@Support
public static AggregateFunction<Integer> count(SelectFieldOrAsterisk field) {
return new DefaultAggregateFunction<>("count", SQLDataType.INTEGER, field("{0}", field));
return new DefaultAggregateFunction<>(N_COUNT, SQLDataType.INTEGER, field("{0}", field));
}
/**
@ -23329,7 +23340,7 @@ public class DSL {
@NotNull
@Support
public static AggregateFunction<Integer> countDistinct(Field<?> field) {
return new DefaultAggregateFunction<>(true, "count", SQLDataType.INTEGER, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(true, N_COUNT, SQLDataType.INTEGER, Tools.nullSafe(field));
}
/**
@ -23338,7 +23349,7 @@ public class DSL {
@NotNull
@Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE })
public static AggregateFunction<Integer> countDistinct(SelectFieldOrAsterisk field) {
return new DefaultAggregateFunction<>(true, "count", SQLDataType.INTEGER, field("{0}", field));
return new DefaultAggregateFunction<>(true, N_COUNT, SQLDataType.INTEGER, field("{0}", field));
}
/**
@ -23367,7 +23378,7 @@ public class DSL {
@Support({ H2, HSQLDB, MARIADB, MYSQL, POSTGRES })
public static AggregateFunction<Integer> countDistinct(Field<?>... fields) {
fields = Tools.nullSafe(fields);
return fields.length == 0 ? countDistinct(asterisk()) : new DefaultAggregateFunction<>(true, "count", SQLDataType.INTEGER, fields);
return fields.length == 0 ? countDistinct(asterisk()) : new DefaultAggregateFunction<>(true, N_COUNT, SQLDataType.INTEGER, fields);
}
/**
@ -23641,7 +23652,7 @@ public class DSL {
@NotNull
@Support
public static <T> AggregateFunction<T> max(Field<T> field) {
return new DefaultAggregateFunction<>("max", Tools.nullSafeDataType(field), Tools.nullSafe(field));
return new DefaultAggregateFunction<>(N_MAX, Tools.nullSafeDataType(field), Tools.nullSafe(field));
}
/**
@ -23650,7 +23661,7 @@ public class DSL {
@NotNull
@Support
public static <T> AggregateFunction<T> maxDistinct(Field<T> field) {
return new DefaultAggregateFunction<>(true, "max", Tools.nullSafeDataType(field), Tools.nullSafe(field));
return new DefaultAggregateFunction<>(true, N_MAX, Tools.nullSafeDataType(field), Tools.nullSafe(field));
}
/**
@ -23659,7 +23670,7 @@ public class DSL {
@NotNull
@Support
public static <T> AggregateFunction<T> min(Field<T> field) {
return new DefaultAggregateFunction<>("min", Tools.nullSafeDataType(field), Tools.nullSafe(field));
return new DefaultAggregateFunction<>(N_MIN, Tools.nullSafeDataType(field), Tools.nullSafe(field));
}
/**
@ -23668,7 +23679,7 @@ public class DSL {
@NotNull
@Support
public static <T> AggregateFunction<T> minDistinct(Field<T> field) {
return new DefaultAggregateFunction<>(true, "min", Tools.nullSafeDataType(field), Tools.nullSafe(field));
return new DefaultAggregateFunction<>(true, N_MIN, Tools.nullSafeDataType(field), Tools.nullSafe(field));
}
/**
@ -23677,7 +23688,7 @@ public class DSL {
@NotNull
@Support
public static AggregateFunction<BigDecimal> sum(Field<? extends Number> field) {
return new DefaultAggregateFunction<>("sum", SQLDataType.NUMERIC, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(N_SUM, SQLDataType.NUMERIC, Tools.nullSafe(field));
}
/**
@ -23686,7 +23697,7 @@ public class DSL {
@NotNull
@Support
public static AggregateFunction<BigDecimal> sumDistinct(Field<? extends Number> field) {
return new DefaultAggregateFunction<>(true, "sum", SQLDataType.NUMERIC, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(true, N_SUM, SQLDataType.NUMERIC, Tools.nullSafe(field));
}
/**
@ -23733,7 +23744,7 @@ public class DSL {
@NotNull
@Support
public static AggregateFunction<BigDecimal> avg(Field<? extends Number> field) {
return new DefaultAggregateFunction<>("avg", SQLDataType.NUMERIC, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(N_AVG, SQLDataType.NUMERIC, Tools.nullSafe(field));
}
/**
@ -23742,7 +23753,7 @@ public class DSL {
@NotNull
@Support
public static AggregateFunction<BigDecimal> avgDistinct(Field<? extends Number> field) {
return new DefaultAggregateFunction<>(true, "avg", SQLDataType.NUMERIC, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(true, N_AVG, SQLDataType.NUMERIC, Tools.nullSafe(field));
}
/**
@ -23907,7 +23918,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<Integer> rank(Field<?>... fields) {
return new DefaultAggregateFunction<>("rank", SQLDataType.INTEGER, fields);
return new DefaultAggregateFunction<>(N_RANK, SQLDataType.INTEGER, fields);
}
/**
@ -23917,7 +23928,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<Integer> rank(Collection<? extends Field<?>> fields) {
return new DefaultAggregateFunction<>("rank", SQLDataType.INTEGER, fields.toArray(EMPTY_FIELD));
return new DefaultAggregateFunction<>(N_RANK, SQLDataType.INTEGER, fields.toArray(EMPTY_FIELD));
}
/**
@ -23927,7 +23938,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<Integer> denseRank(Field<?>... fields) {
return new DefaultAggregateFunction<>("dense_rank", SQLDataType.INTEGER, fields);
return new DefaultAggregateFunction<>(N_DENSE_RANK, SQLDataType.INTEGER, fields);
}
/**
@ -23937,7 +23948,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<Integer> denseRank(Collection<? extends Field<?>> fields) {
return new DefaultAggregateFunction<>("dense_rank", SQLDataType.INTEGER, fields.toArray(EMPTY_FIELD));
return new DefaultAggregateFunction<>(N_DENSE_RANK, SQLDataType.INTEGER, fields.toArray(EMPTY_FIELD));
}
/**
@ -23947,7 +23958,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<Integer> percentRank(Field<?>... fields) {
return new DefaultAggregateFunction<>("percent_rank", SQLDataType.INTEGER, fields);
return new DefaultAggregateFunction<>(N_PERCENT_RANK, SQLDataType.INTEGER, fields);
}
/**
@ -23957,7 +23968,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<Integer> percentRank(Collection<? extends Field<?>> fields) {
return new DefaultAggregateFunction<>("percent_rank", SQLDataType.INTEGER, fields.toArray(EMPTY_FIELD));
return new DefaultAggregateFunction<>(N_PERCENT_RANK, SQLDataType.INTEGER, fields.toArray(EMPTY_FIELD));
}
/**
@ -23967,7 +23978,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<BigDecimal> cumeDist(Field<?>... fields) {
return new DefaultAggregateFunction<>("cume_dist", SQLDataType.NUMERIC, fields);
return new DefaultAggregateFunction<>(N_CUME_DIST, SQLDataType.NUMERIC, fields);
}
/**
@ -23977,7 +23988,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<BigDecimal> cumeDist(Collection<? extends Field<?>> fields) {
return new DefaultAggregateFunction<>("cume_dist", SQLDataType.NUMERIC, fields.toArray(EMPTY_FIELD));
return new DefaultAggregateFunction<>(N_CUME_DIST, SQLDataType.NUMERIC, fields.toArray(EMPTY_FIELD));
}
/**
@ -24007,7 +24018,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<BigDecimal> percentileCont(Field<? extends Number> field) {
return new DefaultAggregateFunction<>("percentile_cont", SQLDataType.NUMERIC, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(N_PERCENTILE_CONT, SQLDataType.NUMERIC, Tools.nullSafe(field));
}
/**
@ -24037,7 +24048,7 @@ public class DSL {
@NotNull
@Support({ H2, POSTGRES })
public static OrderedAggregateFunction<BigDecimal> percentileDisc(Field<? extends Number> field) {
return new DefaultAggregateFunction<>("percentile_disc", SQLDataType.NUMERIC, Tools.nullSafe(field));
return new DefaultAggregateFunction<>(N_PERCENTILE_DISC, SQLDataType.NUMERIC, Tools.nullSafe(field));
}
// -------------------------------------------------------------------------

View File

@ -131,8 +131,4 @@ class DefaultAggregateFunction<T> extends AbstractAggregateFunction<T> {
acceptArguments0(ctx);
ctx.sql(')');
}
/* non-final */ void acceptFunctionName(Context<?> ctx) {
ctx.visit(getQualifiedName());
}
}

View File

@ -1481,6 +1481,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
ctx.render().sql(value.toString());
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void set0(BindingSetStatementContext<U> ctx, BigDecimal value) throws SQLException {
if (BIND_AS_STRING.contains(ctx.dialect()))
@ -1532,6 +1542,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
ctx.render().sql(value.toString());
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void set0(BindingSetStatementContext<U> ctx, BigInteger value) throws SQLException {
if (BIND_AS_STRING.contains(ctx.dialect()))
@ -1580,6 +1600,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void set0(BindingSetStatementContext<U> ctx, Blob value) throws SQLException {
ctx.statement().setBlob(ctx.index(), value);
@ -1679,6 +1709,14 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
@ -1700,6 +1738,8 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super.setNull0(ctx);
}
@ -1749,6 +1789,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Byte value) {
ctx.render().sql(value);
@ -1802,6 +1852,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, byte[] value) {
// [#1154] Binary data cannot always be inlined
@ -1933,6 +1993,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void set0(BindingSetStatementContext<U> ctx, Clob value) throws SQLException {
ctx.statement().setClob(ctx.index(), value);
@ -1971,6 +2041,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Date value) {
// [#1156] DATE / TIME inlining is very vendor-specific
@ -2335,6 +2415,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
}
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Double value) {
@ -2508,6 +2598,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
return DefaultDoubleBinding.fixInfinity(scope, doubleSupplier, stringSupplier, () -> Float.POSITIVE_INFINITY, () -> Float.NEGATIVE_INFINITY);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Float value) {
@ -2582,6 +2682,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Integer value) {
ctx.render().sql(value);
@ -2629,6 +2739,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Long value) {
ctx.render().sql(value);
@ -2852,6 +2972,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, OffsetDateTime value) {
SQLDialect family = ctx.family();
@ -3033,6 +3163,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, OffsetTime value) {
@ -3148,6 +3288,11 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
delegate = new DefaultOffsetDateTimeBinding<>(SQLDataType.OFFSETDATETIME, Converters.of(CONVERTER, converter()));
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
delegate.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Instant value) throws SQLException {
delegate.sqlInline0(ctx, CONVERTER.to(value));
@ -3204,6 +3349,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
switch (ctx.family()) {
@ -3219,8 +3365,15 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
// [#729] In the absence of the correct JDBC type, try setObject
ctx.statement().setObject(ctx.index(), null);
// [#729] In the absence of the correct JDBC type, try setObject
default:
ctx.statement().setObject(ctx.index(), null);
break;
}
}
@Override
@ -3647,6 +3800,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Short value) {
ctx.render().sql(value);
@ -3694,6 +3857,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void set0(BindingSetStatementContext<U> ctx, String value) throws SQLException {
ctx.statement().setString(ctx.index(), value);
@ -3767,6 +3940,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
this.fallback = new DefaultStringBinding<>(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
void sqlInline0(BindingSQLContext<U> ctx, String value) throws SQLException {
if (NO_SUPPORT_NVARCHAR.contains(ctx.dialect())) {
@ -3849,6 +4032,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Time value) {
switch (ctx.family()) {
@ -3953,6 +4146,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void sqlInline0(BindingSQLContext<U> ctx, Timestamp value) {
@ -4049,6 +4252,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void set0(BindingSetStatementContext<U> ctx, UUID value) throws SQLException {
switch (ctx.family()) {
@ -4167,6 +4380,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
void sqlInline0(BindingSQLContext<U> ctx, JSON value) throws SQLException {
super.sqlInline0(ctx, value);
@ -4224,6 +4447,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
void sqlInline0(BindingSQLContext<U> ctx, JSONB value) throws SQLException {
if (EMULATE_AS_BLOB.contains(ctx.dialect())) {
@ -4322,6 +4555,16 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
super(dataType, converter);
}
@Override
final void setNull0(BindingSetStatementContext<U> ctx) throws SQLException {
super.setNull0(ctx);
}
@Override
final void set0(BindingSetStatementContext<U> ctx, XML value) throws SQLException {
ctx.statement().setString(ctx.index(), value.toString());

View File

@ -41,6 +41,7 @@ import static java.lang.Boolean.TRUE;
import static org.jooq.Clause.FIELD_ROW;
import static org.jooq.Clause.INSERT_SELECT;
import static org.jooq.Clause.INSERT_VALUES;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
import static org.jooq.impl.DSL.name;

View File

@ -39,17 +39,21 @@ package org.jooq.impl;
import static org.jooq.SQLDialect.*;
import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.DSL.function;
import static org.jooq.impl.DSL.inline;
// ...
import static org.jooq.impl.DSL.one;
import static org.jooq.impl.DSL.select;
import static org.jooq.impl.DSL.unnest;
import static org.jooq.impl.DSL.unquotedName;
import static org.jooq.impl.DSL.withRecursive;
import static org.jooq.impl.Internal.iadd;
import static org.jooq.impl.Internal.imul;
import static org.jooq.impl.Internal.isub;
import static org.jooq.impl.Names.N_GENERATE_ARRAY;
import static org.jooq.impl.Names.N_GENERATE_SERIES;
import static org.jooq.impl.Names.N_SYSTEM_RANGE;
import static org.jooq.impl.Names.N_UNNEST;
import static org.jooq.impl.SQLDataType.INTEGER;
import static org.jooq.impl.Tools.visitSubquery;
@ -77,6 +81,8 @@ final class GenerateSeries extends AbstractTable<Record1<Integer>> implements Au
private final Field<Integer> from;
private final Field<Integer> to;
private final Field<Integer> step;
@ -146,6 +152,12 @@ final class GenerateSeries extends AbstractTable<Record1<Integer>> implements Au
else {
if (step == null)
@ -163,7 +175,7 @@ final class GenerateSeries extends AbstractTable<Record1<Integer>> implements Au
@Override
final FieldsImpl<Record1<Integer>> fields0() {
return new FieldsImpl<>(DSL.field(N_GENERATE_SERIES, Integer.class));
return new FieldsImpl<>(DSL.field(DSL.name(name, N_GENERATE_SERIES), Integer.class));
}
@Override // Avoid AbstractTable implementation
@ -177,6 +189,10 @@ final class GenerateSeries extends AbstractTable<Record1<Integer>> implements Au
return as(name);
else if (EMULATE_SYSTEM_RANGE.contains(ctx.dialect()))
return as(name, name);
else
return null;
}

View File

@ -37,6 +37,8 @@
*/
package org.jooq.impl;
import static org.jooq.impl.Names.N_MODE;
import org.jooq.AggregateFilterStep;
import org.jooq.DataType;
import org.jooq.Field;
@ -57,6 +59,6 @@ final class ModeDeferred implements OrderedAggregateFunctionOfDeferredType {
? ((AbstractField<T>) field).getDataType()
: (DataType<T>) SQLDataType.NUMERIC;
return new DefaultAggregateFunction<>("mode", type).withinGroupOrderBy(field);
return new DefaultAggregateFunction<>(N_MODE, type).withinGroupOrderBy(field);
}
}

View File

@ -42,7 +42,6 @@ import static org.jooq.impl.DSL.unquotedName;
import org.jooq.Name;
// ...
import org.jooq.QueryPart;
/**
* An internal {@link Name} cache.
@ -51,324 +50,336 @@ import org.jooq.QueryPart;
*/
final class Names {
static final Name N_ARRAY_TABLE = name("array_table");
static final Name N_COLUMN_VALUE = name("COLUMN_VALUE");
static final Name N_ARRAY_TABLE = name("array_table");
static final Name N_COLUMN_VALUE = name("COLUMN_VALUE");
static final Name N_ABS = unquotedName("abs");
static final Name N_ACOS = unquotedName("acos");
static final Name N_ADD_DAYS = unquotedName("add_days");
static final Name N_ADD_HOURS = unquotedName("add_hours");
static final Name N_ADD_MINUTES = unquotedName("add_minutes");
static final Name N_ADD_MONTHS = unquotedName("add_months");
static final Name N_ADD_SECONDS = unquotedName("add_seconds");
static final Name N_ADD_YEARS = unquotedName("add_years");
static final Name N_ANY = unquotedName("any");
static final Name N_ARRAY = unquotedName("array");
static final Name N_ARRAY_AGG = unquotedName("array_agg");
static final Name N_ARRAY_GET = unquotedName("array_get");
static final Name N_ARRAY_LENGTH = unquotedName("array_length");
static final Name N_ASC = unquotedName("asc");
static final Name N_ASCII = unquotedName("ascii");
static final Name N_ASCII_CHAR = unquotedName("ascii_char");
static final Name N_ASCII_VAL = unquotedName("ascii_val");
static final Name N_ASIN = unquotedName("asin");
static final Name N_ATAN = unquotedName("atan");
static final Name N_ATAN2 = unquotedName("atan2");
static final Name N_ATN = unquotedName("atn");
static final Name N_ATN2 = unquotedName("atn2");
static final Name N_BIT_COUNT = unquotedName("bit_count");
static final Name N_BIT_LENGTH = unquotedName("bit_length");
static final Name N_BOOLAND_AGG = unquotedName("booland_agg");
static final Name N_BOOLOR_AGG = unquotedName("boolor_agg");
static final Name N_BOOL_AND = unquotedName("bool_and");
static final Name N_BOOL_OR = unquotedName("bool_or");
static final Name N_BYTE_LENGTH = unquotedName("byte_length");
static final Name N_CARDINALITY = unquotedName("cardinality");
static final Name N_CASE = unquotedName("case");
static final Name N_CAST = unquotedName("cast");
static final Name N_CEIL = unquotedName("ceil");
static final Name N_CEILING = unquotedName("ceiling");
static final Name N_CHAR = unquotedName("char");
static final Name N_CHARINDEX = unquotedName("charindex");
static final Name N_CHAR_LENGTH = unquotedName("char_length");
static final Name N_CHOOSE = unquotedName("choose");
static final Name N_CHR = unquotedName("chr");
static final Name N_COALESCE = unquotedName("coalesce");
static final Name N_COLLECT = unquotedName("collect");
static final Name N_CONCAT = unquotedName("concat");
static final Name N_CONNECT_BY_IS_CYCLE = unquotedName("connect_by_iscycle");
static final Name N_CONNECT_BY_IS_LEAF = unquotedName("connect_by_isleaf");
static final Name N_CONNECT_BY_ROOT = unquotedName("connect_by_root");
static final Name N_CONVERT = unquotedName("convert");
static final Name N_CORR = unquotedName("corr");
static final Name N_COS = unquotedName("cos");
static final Name N_COSH = unquotedName("cosh");
static final Name N_COT = unquotedName("cot");
static final Name N_COTH = unquotedName("coth");
static final Name N_COUNT = unquotedName("count");
static final Name N_COUNTSET = unquotedName("countset");
static final Name N_COVAR_POP = unquotedName("covar_pop");
static final Name N_COVAR_SAMP = unquotedName("covar_samp");
static final Name N_CURRENTUSER = unquotedName("currentuser");
static final Name N_CURRENT_BIGDATETIME = unquotedName("current_bigdatetime");
static final Name N_CURRENT_CATALOG = unquotedName("current_catalog");
static final Name N_CURRENT_DATABASE = unquotedName("current_database");
static final Name N_CURRENT_DATE = unquotedName("current_date");
static final Name N_CURRENT_SCHEMA = unquotedName("current_schema");
static final Name N_CURRENT_TIME = unquotedName("current_time");
static final Name N_CURRENT_TIMESTAMP = unquotedName("current_timestamp");
static final Name N_CURRENT_USER = unquotedName("current_user");
static final Name N_CURRVAL = unquotedName("currval");
static final Name N_DATALENGTH = unquotedName("datalength");
static final Name N_DATEADD = unquotedName("dateadd");
static final Name N_DATEDIFF = unquotedName("datediff");
static final Name N_DATEPART = unquotedName("datepart");
static final Name N_DATE_ADD = unquotedName("date_add");
static final Name N_DATE_DIFF = unquotedName("date_diff");
static final Name N_DATE_TRUNC = unquotedName("date_trunc");
static final Name N_DAYOFWEEK = unquotedName("dayofweek");
static final Name N_DAYOFYEAR = unquotedName("dayofyear");
static final Name N_DAYS = unquotedName("days");
static final Name N_DAYS_BETWEEN = unquotedName("days_between");
static final Name N_DB_NAME = unquotedName("db_name");
static final Name N_DECODE = unquotedName("decode");
static final Name N_DEFAULT = unquotedName("default");
static final Name N_DEGREES = unquotedName("degrees");
static final Name N_DELETING = unquotedName("deleting");
static final Name N_DIGITS = unquotedName("digits");
static final Name N_DUAL = unquotedName("dual");
static final Name N_E = unquotedName("e");
static final Name N_EULER = unquotedName("e");
static final Name N_EVERY = unquotedName("every");
static final Name N_EXP = unquotedName("exp");
static final Name N_EXTRACT = unquotedName("extract");
static final Name N_FIELD = unquotedName("field");
static final Name N_FORMAT = unquotedName("format");
static final Name N_FLASHBACK = unquotedName("flashback");
static final Name N_FLOOR = unquotedName("floor");
static final Name N_FUNCTION = unquotedName("function");
static final Name N_GENERATE_SERIES = unquotedName("generate_series");
static final Name N_GENERATE_UNIQUE = unquotedName("generate_unique");
static final Name N_GENERATE_UUID = unquotedName("generate_uuid");
static final Name N_GENGUID = unquotedName("genguid");
static final Name N_GEN_ID = unquotedName("gen_id");
static final Name N_GEN_RANDOM_UUID = unquotedName("gen_random_uuid");
static final Name N_GEN_UUID = unquotedName("gen_uuid");
static final Name N_GETDATE = unquotedName("getdate");
static final Name N_GREATEST = unquotedName("greatest");
static final Name N_GROUP_CONCAT = unquotedName("group_concat");
static final Name N_HASHBYTES = unquotedName("hashbytes");
static final Name N_HASH_MD5 = unquotedName("hash_md5");
static final Name N_HEX = unquotedName("hex");
static final Name N_IF = unquotedName("if");
static final Name N_IFNULL = unquotedName("ifnull");
static final Name N_IIF = unquotedName("iif");
static final Name N_INSERT = unquotedName("insert");
static final Name N_INSERTING = unquotedName("inserting");
static final Name N_INSTR = unquotedName("instr");
static final Name N_ISJSON = unquotedName("isjson");
static final Name N_JOIN = unquotedName("join");
static final Name N_JSONB_AGG = unquotedName("jsonb_agg");
static final Name N_JSONB_BUILD_ARRAY = unquotedName("jsonb_build_array");
static final Name N_JSONB_OBJECT_AGG = unquotedName("jsonb_object_agg");
static final Name N_JSONB_PATH_EXISTS = unquotedName("jsonb_path_exists");
static final Name N_JSONB_PATH_QUERY_FIRST = unquotedName("jsonb_path_query_first");
static final Name N_JSON_AGG = unquotedName("json_agg");
static final Name N_JSON_ARRAY = unquotedName("json_array");
static final Name N_JSON_ARRAYAGG = unquotedName("json_arrayagg");
static final Name N_JSON_BUILD_ARRAY = unquotedName("json_build_array");
static final Name N_JSON_CONTAINS_PATH = unquotedName("json_contains_path");
static final Name N_JSON_EXTRACT = unquotedName("json_extract");
static final Name N_JSON_MERGE = unquotedName("json_merge");
static final Name N_JSON_MERGE_PRESERVE = unquotedName("json_merge_preserve");
static final Name N_JSON_OBJECT = unquotedName("json_object");
static final Name N_JSON_OBJECTAGG = unquotedName("json_objectagg");
static final Name N_JSON_OBJECT_AGG = unquotedName("json_object_agg");
static final Name N_JSON_QUOTE = unquotedName("json_quote");
static final Name N_JSON_TABLE = unquotedName("json_table");
static final Name N_JSON_VALID = unquotedName("json_valid");
static final Name N_JSON_VALUE = unquotedName("json_value");
static final Name N_LCASE = unquotedName("lcase");
static final Name N_LEAST = unquotedName("least");
static final Name N_LEFT = unquotedName("left");
static final Name N_LEN = unquotedName("len");
static final Name N_LENGTH = unquotedName("length");
static final Name N_LENGTHB = unquotedName("lengthb");
static final Name N_LEVEL = unquotedName("level");
static final Name N_LIST = unquotedName("list");
static final Name N_LISTAGG = unquotedName("listagg");
static final Name N_LN = unquotedName("ln");
static final Name N_LOCATE = unquotedName("locate");
static final Name N_LOCK_TIMEOUT = unquotedName("lock_timeout");
static final Name N_LOG = unquotedName("log");
static final Name N_LOG10 = unquotedName("log10");
static final Name N_LOGICAL_AND = unquotedName("logical_and");
static final Name N_LOGICAL_OR = unquotedName("logical_or");
static final Name N_LOGN = unquotedName("logn");
static final Name N_LOWER = unquotedName("lower");
static final Name N_LPAD = unquotedName("lpad");
static final Name N_LTRIM = unquotedName("ltrim");
static final Name N_MAP = unquotedName("map");
static final Name N_MAX = unquotedName("max");
static final Name N_MAXVALUE = unquotedName("maxvalue");
static final Name N_MD5 = unquotedName("md5");
static final Name N_MEDIAN = unquotedName("median");
static final Name N_MID = unquotedName("mid");
static final Name N_MIN = unquotedName("min");
static final Name N_MINVALUE = unquotedName("minvalue");
static final Name N_MOD = unquotedName("mod");
static final Name N_MODE = unquotedName("mode");
static final Name N_MUL = unquotedName("mul");
static final Name N_NANO100_BETWEEN = unquotedName("nano100_between");
static final Name N_NEWID = unquotedName("newid");
static final Name N_NEXTVAL = unquotedName("nextval");
static final Name N_NOT = unquotedName("not");
static final Name N_NOW = unquotedName("now");
static final Name N_NTILE = unquotedName("ntile");
static final Name N_NULLIF = unquotedName("nullif");
static final Name N_NVL = unquotedName("nvl");
static final Name N_NVL2 = unquotedName("nvl2");
static final Name N_OCTET_LENGTH = unquotedName("octet_length");
static final Name N_OPENJSON = unquotedName("openjson");
static final Name N_OPENXML = unquotedName("openxml");
static final Name N_OREPLACE = unquotedName("oreplace");
static final Name N_OTRANSLATE = unquotedName("otranslate");
static final Name N_OVERLAY = unquotedName("overlay");
static final Name N_PI = unquotedName("pi");
static final Name N_PIVOT = unquotedName("pivot");
static final Name N_PLPGSQL = unquotedName("plpgsql");
static final Name N_POSITION = unquotedName("position");
static final Name N_POWER = unquotedName("power");
static final Name N_PRINTF = unquotedName("printf");
static final Name N_PRIOR = unquotedName("prior");
static final Name N_PRODUCT = unquotedName("product");
static final Name N_RADIANS = unquotedName("radians");
static final Name N_RAND = unquotedName("rand");
static final Name N_RANDOM = unquotedName("random");
static final Name N_RANDOMBLOB = unquotedName("randomblob");
static final Name N_RANDOM_UUID = unquotedName("random_uuid");
static final Name N_RATIO_TO_REPORT = unquotedName("ratio_to_report");
static final Name N_RAWTOHEX = unquotedName("rawtohex");
static final Name N_REGEXP_REPLACE = unquotedName("regexp_replace");
static final Name N_REGEX_REPLACE = unquotedName("regex_replace");
static final Name N_REGR_AVGX = unquotedName("regr_avgx");
static final Name N_REGR_AVGY = unquotedName("regr_avgy");
static final Name N_REGR_COUNT = unquotedName("regr_count");
static final Name N_REGR_INTERCEPT = unquotedName("regr_intercept");
static final Name N_REGR_R2 = unquotedName("regr_r2");
static final Name N_REGR_SLOPE = unquotedName("regr_slope");
static final Name N_REGR_SXX = unquotedName("regr_sxx");
static final Name N_REGR_SXY = unquotedName("regr_sxy");
static final Name N_REGR_SYY = unquotedName("regr_syy");
static final Name N_REPEAT = unquotedName("repeat");
static final Name N_REPLACE = unquotedName("replace");
static final Name N_REPLICATE = unquotedName("replicate");
static final Name N_REVERSE = unquotedName("reverse");
static final Name N_RIGHT = unquotedName("right");
static final Name N_RND = unquotedName("rnd");
static final Name N_ROLLUP = unquotedName("rollup");
static final Name N_ROUND = unquotedName("round");
static final Name N_ROUND_DOWN = unquotedName("round_down");
static final Name N_ROW = unquotedName("row");
static final Name N_ROWNUM = unquotedName("rownum");
static final Name N_ROWSFROM = unquotedName("rowsfrom");
static final Name N_ROW_NUMBER = unquotedName("row_number");
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");
static final Name N_SIN = unquotedName("sin");
static final Name N_SINH = unquotedName("sinh");
static final Name N_SPACE = unquotedName("space");
static final Name N_SPLIT = unquotedName("split");
static final Name N_SPLIT_PART = unquotedName("split_part");
static final Name N_SQL_TSI_DAY = unquotedName("sql_tsi_day");
static final Name N_SQL_TSI_FRAC_SECOND = unquotedName("sql_tsi_frac_second");
static final Name N_SQL_TSI_HOUR = unquotedName("sql_tsi_hour");
static final Name N_SQL_TSI_MILLI_SECOND = unquotedName("sql_tsi_milli_second");
static final Name N_SQL_TSI_MINUTE = unquotedName("sql_tsi_minute");
static final Name N_SQL_TSI_MONTH = unquotedName("sql_tsi_month");
static final Name N_SQL_TSI_QUARTER = unquotedName("sql_tsi_quarter");
static final Name N_SQL_TSI_SECOND = unquotedName("sql_tsi_second");
static final Name N_SQL_TSI_WEEK = unquotedName("sql_tsi_week");
static final Name N_SQL_TSI_YEAR = unquotedName("sql_tsi_year");
static final Name N_SQR = unquotedName("sqr");
static final Name N_SQRT = unquotedName("sqrt");
static final Name N_SQUARE = unquotedName("square");
static final Name N_STANDARD_HASH = unquotedName("standard_hash");
static final Name N_STATS_MODE = unquotedName("stats_mode");
static final Name N_STDDEV = unquotedName("stddev");
static final Name N_STDDEV_POP = unquotedName("stddev_pop");
static final Name N_STDDEV_SAMP = unquotedName("stddev_samp");
static final Name N_STDEV = unquotedName("stdev");
static final Name N_STDEVP = unquotedName("stdevp");
static final Name N_STDEV_SAMP = unquotedName("stdev_samp");
static final Name N_STRFTIME = unquotedName("strftime");
static final Name N_STRING_AGG = unquotedName("string_agg");
static final Name N_STRREVERSE = unquotedName("strreverse");
static final Name N_STR_REPLACE = unquotedName("str_replace");
static final Name N_SUBSTR = unquotedName("substr");
static final Name N_SUBSTRING = unquotedName("substring");
static final Name N_SUBSTRING_INDEX = unquotedName("substring_index");
static final Name N_SYSTEM_RANGE = unquotedName("system_range");
static final Name N_SYSTEM_TIME = unquotedName("system_time");
static final Name N_SYSUUID = unquotedName("sysuuid");
static final Name N_SYS_CONNECT_BY_PATH = unquotedName("sys_connect_by_path");
static final Name N_SYS_GUID = unquotedName("sys_guid");
static final Name N_T = unquotedName("t");
static final Name N_TAN = unquotedName("tan");
static final Name N_TANH = unquotedName("tanh");
static final Name N_TAU = unquotedName("tau");
static final Name N_TIMESTAMPADD = unquotedName("timestampadd");
static final Name N_TIMESTAMPDIFF = unquotedName("timestampdiff");
static final Name N_TO_CHAR = unquotedName("to_char");
static final Name N_TO_CLOB = unquotedName("to_clob");
static final Name N_TO_DATE = unquotedName("to_date");
static final Name N_TO_HEX = unquotedName("to_hex");
static final Name N_TO_NUMBER = unquotedName("to_number");
static final Name N_TO_TIMESTAMP = unquotedName("to_timestamp");
static final Name N_TRANSLATE = unquotedName("translate");
static final Name N_TRIM = unquotedName("trim");
static final Name N_TRUNC = unquotedName("trunc");
static final Name N_TRUNCATE = unquotedName("truncate");
static final Name N_TRUNCNUM = unquotedName("truncnum");
static final Name N_UCASE = unquotedName("ucase");
static final Name N_UPDATING = unquotedName("updating");
static final Name N_UPPER = unquotedName("upper");
static final Name N_USER = unquotedName("user");
static final Name N_UUID = unquotedName("uuid");
static final Name N_UUID_GENERATE = unquotedName("uuid_generate");
static final Name N_UUID_STRING = unquotedName("uuid_string");
static final Name N_UUID_TO_CHAR = unquotedName("uuid_to_char");
static final Name N_VALUE = unquotedName("value");
static final Name N_VALUES = unquotedName("values");
static final Name N_VAR = unquotedName("var");
static final Name N_VARIANCE = unquotedName("variance");
static final Name N_VARIANCE_SAMP = unquotedName("variance_samp");
static final Name N_VARP = unquotedName("varp");
static final Name N_VAR_POP = unquotedName("var_pop");
static final Name N_VAR_SAMP = unquotedName("var_samp");
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");
static final Name N_XMLCOMMENT = unquotedName("xmlcomment");
static final Name N_XMLCONCAT = unquotedName("xmlconcat");
static final Name N_XMLDOCUMENT = unquotedName("xmldocument");
static final Name N_XMLELEMENT = unquotedName("xmlelement");
static final Name N_XMLFOREST = unquotedName("xmlforest");
static final Name N_XMLPARSE = unquotedName("xmlparse");
static final Name N_XMLPI = unquotedName("xmlpi");
static final Name N_XMLQUERY = unquotedName("xmlquery");
static final Name N_XMLROOT = unquotedName("xmlroot");
static final Name N_XMLSERIALIZE = unquotedName("xmlserialize");
static final Name N_XMLTABLE = unquotedName("xmltable");
static final Name N_XMLTEXT = unquotedName("xmltext");
static final Name N_XPATH = unquotedName("xpath");
static final Name N_ZEROBLOB = unquotedName("zeroblob");
static final Name N_ABS = unquotedName("abs");
static final Name N_ACOS = unquotedName("acos");
static final Name N_ADD_DAYS = unquotedName("add_days");
static final Name N_ADD_HOURS = unquotedName("add_hours");
static final Name N_ADD_MINUTES = unquotedName("add_minutes");
static final Name N_ADD_MONTHS = unquotedName("add_months");
static final Name N_ADD_SECONDS = unquotedName("add_seconds");
static final Name N_ADD_YEARS = unquotedName("add_years");
static final Name N_ANY = unquotedName("any");
static final Name N_ARRAY = unquotedName("array");
static final Name N_ARRAY_AGG = unquotedName("array_agg");
static final Name N_ARRAY_GET = unquotedName("array_get");
static final Name N_ARRAY_LENGTH = unquotedName("array_length");
static final Name N_ASC = unquotedName("asc");
static final Name N_ASCII = unquotedName("ascii");
static final Name N_ASCII_CHAR = unquotedName("ascii_char");
static final Name N_ASCII_VAL = unquotedName("ascii_val");
static final Name N_ASIN = unquotedName("asin");
static final Name N_ATAN = unquotedName("atan");
static final Name N_ATAN2 = unquotedName("atan2");
static final Name N_ATN = unquotedName("atn");
static final Name N_ATN2 = unquotedName("atn2");
static final Name N_AVG = unquotedName("avg");
static final Name N_BIT_COUNT = unquotedName("bit_count");
static final Name N_BIT_LENGTH = unquotedName("bit_length");
static final Name N_BOOLAND_AGG = unquotedName("booland_agg");
static final Name N_BOOLOR_AGG = unquotedName("boolor_agg");
static final Name N_BOOL_AND = unquotedName("bool_and");
static final Name N_BOOL_OR = unquotedName("bool_or");
static final Name N_BYTE_LENGTH = unquotedName("byte_length");
static final Name N_CARDINALITY = unquotedName("cardinality");
static final Name N_CASE = unquotedName("case");
static final Name N_CAST = unquotedName("cast");
static final Name N_CEIL = unquotedName("ceil");
static final Name N_CEILING = unquotedName("ceiling");
static final Name N_CHAR = unquotedName("char");
static final Name N_CHARINDEX = unquotedName("charindex");
static final Name N_CHAR_LENGTH = unquotedName("char_length");
static final Name N_CHOOSE = unquotedName("choose");
static final Name N_CHR = unquotedName("chr");
static final Name N_COALESCE = unquotedName("coalesce");
static final Name N_COLLECT = unquotedName("collect");
static final Name N_CONCAT = unquotedName("concat");
static final Name N_CONNECT_BY_IS_CYCLE = unquotedName("connect_by_iscycle");
static final Name N_CONNECT_BY_IS_LEAF = unquotedName("connect_by_isleaf");
static final Name N_CONNECT_BY_ROOT = unquotedName("connect_by_root");
static final Name N_CONVERT = unquotedName("convert");
static final Name N_CORR = unquotedName("corr");
static final Name N_COS = unquotedName("cos");
static final Name N_COSH = unquotedName("cosh");
static final Name N_COT = unquotedName("cot");
static final Name N_COTH = unquotedName("coth");
static final Name N_COUNT = unquotedName("count");
static final Name N_COUNTIF = unquotedName("countif");
static final Name N_COUNTSET = unquotedName("countset");
static final Name N_COUNT_IF = unquotedName("count_if");
static final Name N_COVAR_POP = unquotedName("covar_pop");
static final Name N_COVAR_SAMP = unquotedName("covar_samp");
static final Name N_CUME_DIST = unquotedName("cume_dist");
static final Name N_CURRENTUSER = unquotedName("currentuser");
static final Name N_CURRENT_BIGDATETIME = unquotedName("current_bigdatetime");
static final Name N_CURRENT_CATALOG = unquotedName("current_catalog");
static final Name N_CURRENT_DATABASE = unquotedName("current_database");
static final Name N_CURRENT_DATE = unquotedName("current_date");
static final Name N_CURRENT_SCHEMA = unquotedName("current_schema");
static final Name N_CURRENT_TIME = unquotedName("current_time");
static final Name N_CURRENT_TIMESTAMP = unquotedName("current_timestamp");
static final Name N_CURRENT_USER = unquotedName("current_user");
static final Name N_CURRVAL = unquotedName("currval");
static final Name N_DATALENGTH = unquotedName("datalength");
static final Name N_DATEADD = unquotedName("dateadd");
static final Name N_DATEDIFF = unquotedName("datediff");
static final Name N_DATEPART = unquotedName("datepart");
static final Name N_DATE_ADD = unquotedName("date_add");
static final Name N_DATE_DIFF = unquotedName("date_diff");
static final Name N_DATE_TRUNC = unquotedName("date_trunc");
static final Name N_DAYOFWEEK = unquotedName("dayofweek");
static final Name N_DAYOFYEAR = unquotedName("dayofyear");
static final Name N_DAYS = unquotedName("days");
static final Name N_DAYS_BETWEEN = unquotedName("days_between");
static final Name N_DB_NAME = unquotedName("db_name");
static final Name N_DECODE = unquotedName("decode");
static final Name N_DEFAULT = unquotedName("default");
static final Name N_DEGREES = unquotedName("degrees");
static final Name N_DELETING = unquotedName("deleting");
static final Name N_DENSE_RANK = unquotedName("dense_rank");
static final Name N_DIGITS = unquotedName("digits");
static final Name N_DUAL = unquotedName("dual");
static final Name N_E = unquotedName("e");
static final Name N_EULER = unquotedName("e");
static final Name N_EVERY = unquotedName("every");
static final Name N_EXP = unquotedName("exp");
static final Name N_EXTRACT = unquotedName("extract");
static final Name N_FIELD = unquotedName("field");
static final Name N_FLASHBACK = unquotedName("flashback");
static final Name N_FLOOR = unquotedName("floor");
static final Name N_FORMAT = unquotedName("format");
static final Name N_FUNCTION = unquotedName("function");
static final Name N_GENERATE_ARRAY = unquotedName("generate_array");
static final Name N_GENERATE_SERIES = unquotedName("generate_series");
static final Name N_GENERATE_UNIQUE = unquotedName("generate_unique");
static final Name N_GENERATE_UUID = unquotedName("generate_uuid");
static final Name N_GENGUID = unquotedName("genguid");
static final Name N_GEN_ID = unquotedName("gen_id");
static final Name N_GEN_RANDOM_UUID = unquotedName("gen_random_uuid");
static final Name N_GEN_UUID = unquotedName("gen_uuid");
static final Name N_GETDATE = unquotedName("getdate");
static final Name N_GREATEST = unquotedName("greatest");
static final Name N_GROUP_CONCAT = unquotedName("group_concat");
static final Name N_HASHBYTES = unquotedName("hashbytes");
static final Name N_HASH_MD5 = unquotedName("hash_md5");
static final Name N_HEX = unquotedName("hex");
static final Name N_IF = unquotedName("if");
static final Name N_IFNULL = unquotedName("ifnull");
static final Name N_IIF = unquotedName("iif");
static final Name N_INSERT = unquotedName("insert");
static final Name N_INSERTING = unquotedName("inserting");
static final Name N_INSTR = unquotedName("instr");
static final Name N_ISJSON = unquotedName("isjson");
static final Name N_JOIN = unquotedName("join");
static final Name N_JSONB_AGG = unquotedName("jsonb_agg");
static final Name N_JSONB_BUILD_ARRAY = unquotedName("jsonb_build_array");
static final Name N_JSONB_OBJECT_AGG = unquotedName("jsonb_object_agg");
static final Name N_JSONB_PATH_EXISTS = unquotedName("jsonb_path_exists");
static final Name N_JSONB_PATH_QUERY_FIRST = unquotedName("jsonb_path_query_first");
static final Name N_JSON_AGG = unquotedName("json_agg");
static final Name N_JSON_ARRAY = unquotedName("json_array");
static final Name N_JSON_ARRAYAGG = unquotedName("json_arrayagg");
static final Name N_JSON_BUILD_ARRAY = unquotedName("json_build_array");
static final Name N_JSON_CONTAINS_PATH = unquotedName("json_contains_path");
static final Name N_JSON_EXTRACT = unquotedName("json_extract");
static final Name N_JSON_MERGE = unquotedName("json_merge");
static final Name N_JSON_MERGE_PRESERVE = unquotedName("json_merge_preserve");
static final Name N_JSON_OBJECT = unquotedName("json_object");
static final Name N_JSON_OBJECTAGG = unquotedName("json_objectagg");
static final Name N_JSON_OBJECT_AGG = unquotedName("json_object_agg");
static final Name N_JSON_QUOTE = unquotedName("json_quote");
static final Name N_JSON_TABLE = unquotedName("json_table");
static final Name N_JSON_VALID = unquotedName("json_valid");
static final Name N_JSON_VALUE = unquotedName("json_value");
static final Name N_LCASE = unquotedName("lcase");
static final Name N_LEAST = unquotedName("least");
static final Name N_LEFT = unquotedName("left");
static final Name N_LEN = unquotedName("len");
static final Name N_LENGTH = unquotedName("length");
static final Name N_LENGTHB = unquotedName("lengthb");
static final Name N_LEVEL = unquotedName("level");
static final Name N_LIST = unquotedName("list");
static final Name N_LISTAGG = unquotedName("listagg");
static final Name N_LN = unquotedName("ln");
static final Name N_LOCATE = unquotedName("locate");
static final Name N_LOCK_TIMEOUT = unquotedName("lock_timeout");
static final Name N_LOG = unquotedName("log");
static final Name N_LOG10 = unquotedName("log10");
static final Name N_LOGICAL_AND = unquotedName("logical_and");
static final Name N_LOGICAL_OR = unquotedName("logical_or");
static final Name N_LOGN = unquotedName("logn");
static final Name N_LOWER = unquotedName("lower");
static final Name N_LPAD = unquotedName("lpad");
static final Name N_LTRIM = unquotedName("ltrim");
static final Name N_MAP = unquotedName("map");
static final Name N_MAX = unquotedName("max");
static final Name N_MAXVALUE = unquotedName("maxvalue");
static final Name N_MD5 = unquotedName("md5");
static final Name N_MEDIAN = unquotedName("median");
static final Name N_MID = unquotedName("mid");
static final Name N_MIN = unquotedName("min");
static final Name N_MINVALUE = unquotedName("minvalue");
static final Name N_MOD = unquotedName("mod");
static final Name N_MODE = unquotedName("mode");
static final Name N_MUL = unquotedName("mul");
static final Name N_NANO100_BETWEEN = unquotedName("nano100_between");
static final Name N_NEWID = unquotedName("newid");
static final Name N_NEXTVAL = unquotedName("nextval");
static final Name N_NOT = unquotedName("not");
static final Name N_NOW = unquotedName("now");
static final Name N_NTILE = unquotedName("ntile");
static final Name N_NULLIF = unquotedName("nullif");
static final Name N_NVL = unquotedName("nvl");
static final Name N_NVL2 = unquotedName("nvl2");
static final Name N_OCTET_LENGTH = unquotedName("octet_length");
static final Name N_OPENJSON = unquotedName("openjson");
static final Name N_OPENXML = unquotedName("openxml");
static final Name N_OREPLACE = unquotedName("oreplace");
static final Name N_OTRANSLATE = unquotedName("otranslate");
static final Name N_OVERLAY = unquotedName("overlay");
static final Name N_PERCENTILE_CONT = unquotedName("percentile_cont");
static final Name N_PERCENTILE_DISC = unquotedName("percentile_disc");
static final Name N_PERCENT_RANK = unquotedName("percent_rank");
static final Name N_PI = unquotedName("pi");
static final Name N_PIVOT = unquotedName("pivot");
static final Name N_PLPGSQL = unquotedName("plpgsql");
static final Name N_POSITION = unquotedName("position");
static final Name N_POWER = unquotedName("power");
static final Name N_PRINTF = unquotedName("printf");
static final Name N_PRIOR = unquotedName("prior");
static final Name N_PRODUCT = unquotedName("product");
static final Name N_RADIANS = unquotedName("radians");
static final Name N_RAND = unquotedName("rand");
static final Name N_RANDOM = unquotedName("random");
static final Name N_RANDOMBLOB = unquotedName("randomblob");
static final Name N_RANDOM_UUID = unquotedName("random_uuid");
static final Name N_RANK = unquotedName("rank");
static final Name N_RATIO_TO_REPORT = unquotedName("ratio_to_report");
static final Name N_RAWTOHEX = unquotedName("rawtohex");
static final Name N_REGEXP_REPLACE = unquotedName("regexp_replace");
static final Name N_REGEX_REPLACE = unquotedName("regex_replace");
static final Name N_REGR_AVGX = unquotedName("regr_avgx");
static final Name N_REGR_AVGY = unquotedName("regr_avgy");
static final Name N_REGR_COUNT = unquotedName("regr_count");
static final Name N_REGR_INTERCEPT = unquotedName("regr_intercept");
static final Name N_REGR_R2 = unquotedName("regr_r2");
static final Name N_REGR_SLOPE = unquotedName("regr_slope");
static final Name N_REGR_SXX = unquotedName("regr_sxx");
static final Name N_REGR_SXY = unquotedName("regr_sxy");
static final Name N_REGR_SYY = unquotedName("regr_syy");
static final Name N_REPEAT = unquotedName("repeat");
static final Name N_REPLACE = unquotedName("replace");
static final Name N_REPLICATE = unquotedName("replicate");
static final Name N_REVERSE = unquotedName("reverse");
static final Name N_RIGHT = unquotedName("right");
static final Name N_RND = unquotedName("rnd");
static final Name N_ROLLUP = unquotedName("rollup");
static final Name N_ROUND = unquotedName("round");
static final Name N_ROUND_DOWN = unquotedName("round_down");
static final Name N_ROW = unquotedName("row");
static final Name N_ROWNUM = unquotedName("rownum");
static final Name N_ROWSFROM = unquotedName("rowsfrom");
static final Name N_ROW_NUMBER = unquotedName("row_number");
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");
static final Name N_SIN = unquotedName("sin");
static final Name N_SINH = unquotedName("sinh");
static final Name N_SPACE = unquotedName("space");
static final Name N_SPLIT = unquotedName("split");
static final Name N_SPLIT_PART = unquotedName("split_part");
static final Name N_SQL_TSI_DAY = unquotedName("sql_tsi_day");
static final Name N_SQL_TSI_FRAC_SECOND = unquotedName("sql_tsi_frac_second");
static final Name N_SQL_TSI_HOUR = unquotedName("sql_tsi_hour");
static final Name N_SQL_TSI_MILLI_SECOND = unquotedName("sql_tsi_milli_second");
static final Name N_SQL_TSI_MINUTE = unquotedName("sql_tsi_minute");
static final Name N_SQL_TSI_MONTH = unquotedName("sql_tsi_month");
static final Name N_SQL_TSI_QUARTER = unquotedName("sql_tsi_quarter");
static final Name N_SQL_TSI_SECOND = unquotedName("sql_tsi_second");
static final Name N_SQL_TSI_WEEK = unquotedName("sql_tsi_week");
static final Name N_SQL_TSI_YEAR = unquotedName("sql_tsi_year");
static final Name N_SQR = unquotedName("sqr");
static final Name N_SQRT = unquotedName("sqrt");
static final Name N_SQUARE = unquotedName("square");
static final Name N_STANDARD_HASH = unquotedName("standard_hash");
static final Name N_STATS_MODE = unquotedName("stats_mode");
static final Name N_STDDEV = unquotedName("stddev");
static final Name N_STDDEV_POP = unquotedName("stddev_pop");
static final Name N_STDDEV_SAMP = unquotedName("stddev_samp");
static final Name N_STDEV = unquotedName("stdev");
static final Name N_STDEVP = unquotedName("stdevp");
static final Name N_STDEV_SAMP = unquotedName("stdev_samp");
static final Name N_STRFTIME = unquotedName("strftime");
static final Name N_STRING_AGG = unquotedName("string_agg");
static final Name N_STRREVERSE = unquotedName("strreverse");
static final Name N_STR_REPLACE = unquotedName("str_replace");
static final Name N_SUBSTR = unquotedName("substr");
static final Name N_SUBSTRING = unquotedName("substring");
static final Name N_SUBSTRING_INDEX = unquotedName("substring_index");
static final Name N_SUM = unquotedName("sum");
static final Name N_SYSTEM_RANGE = unquotedName("system_range");
static final Name N_SYSTEM_TIME = unquotedName("system_time");
static final Name N_SYSUUID = unquotedName("sysuuid");
static final Name N_SYS_CONNECT_BY_PATH = unquotedName("sys_connect_by_path");
static final Name N_SYS_GUID = unquotedName("sys_guid");
static final Name N_T = unquotedName("t");
static final Name N_TAN = unquotedName("tan");
static final Name N_TANH = unquotedName("tanh");
static final Name N_TAU = unquotedName("tau");
static final Name N_TIMESTAMPADD = unquotedName("timestampadd");
static final Name N_TIMESTAMPDIFF = unquotedName("timestampdiff");
static final Name N_TO_CHAR = unquotedName("to_char");
static final Name N_TO_CLOB = unquotedName("to_clob");
static final Name N_TO_DATE = unquotedName("to_date");
static final Name N_TO_HEX = unquotedName("to_hex");
static final Name N_TO_NUMBER = unquotedName("to_number");
static final Name N_TO_TIMESTAMP = unquotedName("to_timestamp");
static final Name N_TRANSLATE = unquotedName("translate");
static final Name N_TRIM = unquotedName("trim");
static final Name N_TRUNC = unquotedName("trunc");
static final Name N_TRUNCATE = unquotedName("truncate");
static final Name N_TRUNCNUM = unquotedName("truncnum");
static final Name N_UCASE = unquotedName("ucase");
static final Name N_UNNEST = unquotedName("unnest");
static final Name N_UPDATING = unquotedName("updating");
static final Name N_UPPER = unquotedName("upper");
static final Name N_USER = unquotedName("user");
static final Name N_UUID = unquotedName("uuid");
static final Name N_UUID_GENERATE = unquotedName("uuid_generate");
static final Name N_UUID_STRING = unquotedName("uuid_string");
static final Name N_UUID_TO_CHAR = unquotedName("uuid_to_char");
static final Name N_VALUE = unquotedName("value");
static final Name N_VALUES = unquotedName("values");
static final Name N_VAR = unquotedName("var");
static final Name N_VARIANCE = unquotedName("variance");
static final Name N_VARIANCE_SAMP = unquotedName("variance_samp");
static final Name N_VARP = unquotedName("varp");
static final Name N_VAR_POP = unquotedName("var_pop");
static final Name N_VAR_SAMP = unquotedName("var_samp");
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");
static final Name N_XMLCOMMENT = unquotedName("xmlcomment");
static final Name N_XMLCONCAT = unquotedName("xmlconcat");
static final Name N_XMLDOCUMENT = unquotedName("xmldocument");
static final Name N_XMLELEMENT = unquotedName("xmlelement");
static final Name N_XMLFOREST = unquotedName("xmlforest");
static final Name N_XMLPARSE = unquotedName("xmlparse");
static final Name N_XMLPI = unquotedName("xmlpi");
static final Name N_XMLQUERY = unquotedName("xmlquery");
static final Name N_XMLROOT = unquotedName("xmlroot");
static final Name N_XMLSERIALIZE = unquotedName("xmlserialize");
static final Name N_XMLTABLE = unquotedName("xmltable");
static final Name N_XMLTEXT = unquotedName("xmltext");
static final Name N_XPATH = unquotedName("xpath");
static final Name N_ZEROBLOB = unquotedName("zeroblob");

View File

@ -323,6 +323,8 @@ import org.jooq.types.Interval;
import org.jooq.types.YearToMonth;
import org.jooq.types.YearToSecond;
import org.jetbrains.annotations.NotNull;
/**
* @author Lukas Eder
*/
@ -10192,6 +10194,8 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
over = filter = parseJSONArrayAggFunctionIf();
if (filter == null && !basic)
over = filter = parseJSONObjectAggFunctionIf();
if (filter == null)
over = parseCountIfIf();
if (filter == null && over == null)
if (!basic)
@ -10831,6 +10835,17 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
return null;
}
private final WindowBeforeOverStep<Integer> parseCountIfIf() {
if (parseFunctionNameIf("COUNTIF", "COUNT_IF")) {
parse('(');
Condition condition = parseCondition();
parse(')');
return count().filterWhere(condition);
}
return null;
}
private final boolean parseSetQuantifier() {
boolean distinct = parseKeywordIf("DISTINCT");
if (!distinct)

View File

@ -47,6 +47,7 @@ import static org.jooq.Comparator.LESS_OR_EQUAL;
import static org.jooq.Comparator.NOT_EQUALS;
// ...
// ...
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
import static org.jooq.SQLDialect.DERBY;

View File

@ -43,6 +43,7 @@ import static org.jooq.Clause.CONDITION_OVERLAPS;
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
// ...