[jOOQ/jOOQ#8592] Emulate PERCENT_RANK() for DB2 9 and 10

This commit is contained in:
Knut Wannheden 2020-02-27 10:32:53 +01:00
parent a402ec5023
commit 556ff3e36b
2 changed files with 29 additions and 0 deletions

View File

@ -45,6 +45,7 @@ import static java.lang.Boolean.TRUE;
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
// ...
import static org.jooq.SQLDialect.H2;
import static org.jooq.SQLDialect.HSQLDB;
import static org.jooq.SQLDialect.MARIADB;
@ -56,6 +57,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
import static org.jooq.impl.DSL.case_;
import static org.jooq.impl.DSL.choose;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.inline;
@ -63,6 +65,7 @@ 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;
import static org.jooq.impl.DSL.rank;
import static org.jooq.impl.DSL.when;
import static org.jooq.impl.DSL.zero;
import static org.jooq.impl.Keywords.F_CONCAT;
@ -92,6 +95,7 @@ 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.PERCENT_RANK;
import static org.jooq.impl.Term.PRODUCT;
import static org.jooq.impl.Term.ROW_NUMBER;
import static org.jooq.impl.Tools.castIfNeeded;
@ -160,6 +164,10 @@ class Function<T> extends AbstractField<T> implements
private static final Set<SQLDialect> SUPPORT_FILTER = SQLDialect.supportedBy(H2, HSQLDB, POSTGRES, SQLITE);
private static final Set<SQLDialect> SUPPORT_DISTINCT_RVE = SQLDialect.supportedBy(H2, POSTGRES);
static final Field<Integer> ASTERISK = DSL.field("*", Integer.class);
// Mutually exclusive attributes: super.getName(), this.name, this.term
@ -247,6 +255,15 @@ class Function<T> extends AbstractField<T> implements
else if (term == MODE && ( ctx.family() == H2 || ctx.family() == POSTGRES)) {
ctx.visit(mode().withinGroupOrderBy(DSL.field("{0}", arguments.get(0))));
}

View File

@ -132,6 +132,18 @@ final class WindowSpecificationImpl extends AbstractQueryPart implements
this.orderBy = new SortFieldList();
}
WindowSpecificationImpl copy() {
WindowSpecificationImpl copy = new WindowSpecificationImpl(this.windowDefinition);
copy.partitionBy.addAll(this.partitionBy);
copy.orderBy.addAll(this.orderBy);
copy.frameStart = this.frameStart;
copy.frameEnd = this.frameEnd;
copy.frameUnits = this.frameUnits;
copy.exclude = this.exclude;
copy.partitionByOne = this.partitionByOne;
return copy;
}
@Override
public final void accept(Context<?> ctx) {
String glue = "";