[#5700] Add support for Oracle's STATS_MODE() aggregate function

This commit is contained in:
Lukas Eder 2018-08-23 13:22:58 +02:00
parent 55ad021cda
commit 006fd92c37
3 changed files with 26 additions and 0 deletions

View File

@ -17376,6 +17376,14 @@ public class DSL {
return new org.jooq.impl.Function<BigDecimal>("avg", true, SQLDataType.NUMERIC, nullSafe(field));
}
/**
* The <code>mode(field)</code> aggregate function.
*/
@Support({ POSTGRES_9_4 })
public static <T> AggregateFunction<T> mode(Field<T> field) {
return new org.jooq.impl.Function<T>(Term.MODE, nullSafeDataType(field), field);
}
/**
* Get the median over a numeric field: median(field).
*/

View File

@ -53,6 +53,7 @@ import static org.jooq.SQLDialect.POSTGRES_9_4;
import static org.jooq.SQLDialect.SQLITE;
// ...
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.mode;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.one;
import static org.jooq.impl.DSL.percentileCont;
@ -76,6 +77,7 @@ import static org.jooq.impl.SelectQueryImpl.SUPPORT_WINDOW_CLAUSE;
import static org.jooq.impl.Term.ARRAY_AGG;
import static org.jooq.impl.Term.LIST_AGG;
import static org.jooq.impl.Term.MEDIAN;
import static org.jooq.impl.Term.MODE;
import static org.jooq.impl.Term.ROW_NUMBER;
import static org.jooq.impl.Tools.DataKey.DATA_WINDOW_DEFINITIONS;
@ -225,6 +227,9 @@ class Function<T> extends AbstractField<T> implements
else if (term == MODE && ( ctx.family() == POSTGRES)) {
ctx.visit(mode().withinGroupOrderBy(DSL.field("{0}", arguments.get(0))));
}
else if (term == MEDIAN && ( ctx.family() == POSTGRES)) {
Field<?>[] fields = new Field[arguments.size()];
for (int i = 0; i < fields.length; i++)

View File

@ -174,6 +174,19 @@ enum Term {
return "median";
}
},
MODE {
@Override
public String translate(SQLDialect dialect) {
switch (dialect.family()) {
default:
return "mode";
}
}
},
OCTET_LENGTH {
@Override
public String translate(SQLDialect dialect) {