[jOOQ/jOOQ#11650] Get SQLDialect.VERTICA up to date

This includes:
- [jOOQ/jOOQ#11655] Emulate statistical window functions in Vertica
This commit is contained in:
Lukas Eder 2021-03-16 16:59:10 +01:00
parent 9224872be9
commit a540ba8264
5 changed files with 27 additions and 10 deletions

View File

@ -47,6 +47,7 @@ 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;
import static org.jooq.impl.DSL.zero;
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;
@ -285,6 +286,11 @@ implements
return this;
}
@SuppressWarnings("unchecked")
final <U> Field<U> fon(AggregateFunction<U> function) {
return DSL.nullif(fo(function), (Field<U>) zero());
}
/**
* Apply this aggregate function's <code>FILTER</code> and <code>OVER</code>
* clauses to an argument aggregate function.

View File

@ -87,20 +87,31 @@ extends
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
@SuppressWarnings("unchecked")
@Override
public final void accept(Context<?> ctx) {
if (NO_SUPPORT_NATIVE.contains(ctx.dialect())) {
Field<? extends Number> x = (Field) getArguments().get(0);
Field<? extends Number> y = (Field) getArguments().get(1);
if (NO_SUPPORT_NATIVE.contains(ctx.dialect()))
acceptEmulation(ctx);
ctx.visit(fo(covarPop(x, y)).div(fo(DSL.stddevPop(x(x, y))).times(fo(DSL.stddevPop(y(x, y))))));
}
else
super.accept(ctx);
}
@SuppressWarnings("unchecked")
private final void acceptEmulation(Context<?> ctx) {
Field<? extends Number> x = (Field) getArguments().get(0);
Field<? extends Number> y = (Field) getArguments().get(1);
ctx.visit(fo(covarPop(x, y)).div(fon(DSL.stddevPop(x(x, y))).times(fo(DSL.stddevPop(y(x, y))))));
}
}

View File

@ -110,7 +110,7 @@ extends
Field<? extends Number> x = (Field) getArguments().get(0);
Field<? extends Number> y = (Field) getArguments().get(1);
ctx.visit(fo(DSL.sum(x.times(y))).minus(fo(DSL.sum(x(x, y))).times(fo(DSL.sum(y(x, y)))).div(fo(DSL.count(x.plus(y))).cast(d(ctx)))).div(fo(DSL.count(x.plus(y))).cast(d(ctx))));
ctx.visit(fo(DSL.sum(x.times(y))).minus(fo(DSL.sum(x(x, y))).times(fo(DSL.sum(y(x, y)))).div(fon(DSL.count(x.plus(y))).cast(d(ctx)))).div(fon(DSL.count(x.plus(y))).cast(d(ctx))));
}

View File

@ -110,7 +110,7 @@ extends
Field<? extends Number> x = (Field) getArguments().get(0);
Field<? extends Number> y = (Field) getArguments().get(1);
ctx.visit(fo(DSL.sum(x.times(y))).minus(fo(DSL.sum(x(x, y))).times(fo(DSL.sum(y(x, y)))).div(fo(DSL.count(x.plus(y))).cast(d(ctx)))).div(fo(DSL.count(x.plus(y))).cast(d(ctx)).minus(DSL.inline(1))));
ctx.visit(fo(DSL.sum(x.times(y))).minus(fo(DSL.sum(x(x, y))).times(fo(DSL.sum(y(x, y)))).div(fon(DSL.count(x.plus(y))).cast(d(ctx)))).div(fon(DSL.count(x.plus(y))).cast(d(ctx)).minus(DSL.inline(1))));
}

View File

@ -110,7 +110,7 @@ extends
Field<? extends Number> x = (Field) getArguments().get(0);
Field<? extends Number> y = (Field) getArguments().get(1);
ctx.visit(fo(DSL.covarPop(x, y)).div(fo(DSL.varPop(y(x, y)))));
ctx.visit(fo(DSL.covarPop(x, y)).div(fon(DSL.varPop(y(x, y)))));
}