diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java index 08686f7a63..3c0b586633 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Function.java +++ b/jOOQ/src/main/java/org/jooq/impl/Function.java @@ -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 extends AbstractField implements private static final Set SUPPORT_FILTER = SQLDialect.supportedBy(H2, HSQLDB, POSTGRES, SQLITE); private static final Set SUPPORT_DISTINCT_RVE = SQLDialect.supportedBy(H2, POSTGRES); + + + + static final Field ASTERISK = DSL.field("*", Integer.class); // Mutually exclusive attributes: super.getName(), this.name, this.term @@ -247,6 +255,15 @@ class Function extends AbstractField implements + + + + + + + + + else if (term == MODE && ( ctx.family() == H2 || ctx.family() == POSTGRES)) { ctx.visit(mode().withinGroupOrderBy(DSL.field("{0}", arguments.get(0)))); } diff --git a/jOOQ/src/main/java/org/jooq/impl/WindowSpecificationImpl.java b/jOOQ/src/main/java/org/jooq/impl/WindowSpecificationImpl.java index 8b71f8ee56..ca6b531acf 100644 --- a/jOOQ/src/main/java/org/jooq/impl/WindowSpecificationImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/WindowSpecificationImpl.java @@ -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 = "";