From 01bbe93e12b9705f3873894a69aeb0d80c4ff8f8 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 24 May 2021 13:57:33 +0200 Subject: [PATCH] [jOOQ/jOOQ#11547] Improved stat function emulations --- jOOQ/src/main/java/org/jooq/impl/CovarPop.java | 2 +- jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java | 2 +- jOOQ/src/main/java/org/jooq/impl/RegrSxy.java | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CovarPop.java b/jOOQ/src/main/java/org/jooq/impl/CovarPop.java index 059361546e..bb3c1e58ac 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CovarPop.java +++ b/jOOQ/src/main/java/org/jooq/impl/CovarPop.java @@ -109,7 +109,7 @@ extends Field x = (Field) getArguments().get(0); Field 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(fon(DSL.count(x.plus(y))).cast(d(ctx)))).div(fon(DSL.count(x.plus(y))).cast(d(ctx)))); + ctx.visit(fo(DSL.regrSXY(x, y)).div(fo(DSL.regrCount(y, x)))); } diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java b/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java index 2d09e726f0..f7e5d65bb9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java +++ b/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java @@ -109,7 +109,7 @@ extends Field x = (Field) getArguments().get(0); Field y = (Field) getArguments().get(1); - ctx.visit(fo(DSL.avg(x(x, y).cast(d(ctx)))).minus(fo(DSL.regrSlope(x, y)).times(fo(DSL.avg(y(x, y).cast(d(ctx))))))); + ctx.visit(fo(regrAvgY(x, y)).minus(fo(regrSlope(x, y)).times(fo(regrAvgX(x, y))))); } diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java b/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java index 6a755102ec..310b5cb0f6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java +++ b/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java @@ -106,10 +106,14 @@ extends @SuppressWarnings("unchecked") private final void acceptEmulation(Context ctx) { + Field x = (Field) getArguments().get(0); Field y = (Field) getArguments().get(1); - ctx.visit(fo(DSL.regrCount(x, y)).times(fo(DSL.covarPop(x, y)))); + // [#11547] The formal emulation is REGR_COUNT(x, y) * COVAR_POP(x, y), but + // COVAR_POP(x, y) can be expressed as REGR_SXY(x, y) / REGR_COUNT(x, y) + // ctx.visit(fo(DSL.regrCount(x, y)).times(fo(DSL.covarPop(x, y)))); + 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))))); }