[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:
parent
9224872be9
commit
a540ba8264
@ -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.
|
||||
|
||||
@ -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))))));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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))));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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))));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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)))));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user