diff --git a/jOOQ/src/main/java/org/jooq/impl/Limit.java b/jOOQ/src/main/java/org/jooq/impl/Limit.java index 6273232e31..097f233e22 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Limit.java +++ b/jOOQ/src/main/java/org/jooq/impl/Limit.java @@ -70,6 +70,7 @@ import org.jooq.RenderContext.CastMode; import org.jooq.conf.ParamType; import org.jooq.exception.DataAccessException; import org.jooq.impl.Tools.BooleanDataKey; +import org.jooq.tools.Convert; /** * @author Lukas Eder @@ -80,15 +81,15 @@ final class Limit extends AbstractQueryPart { * Generated UID */ private static final long serialVersionUID = 2053741242981425602L; - private static final Field ZERO = zero(); - private static final Field ONE = one(); + private static final Param ZERO = zero(); + private static final Param ONE = one(); private static final Param MAX = DSL.inline(Integer.MAX_VALUE); Param numberOfRows; - private Field numberOfRowsOrMax = MAX; + private Param numberOfRowsOrMax = MAX; Param offset; - private Field offsetOrZero = ZERO; - private Field offsetPlusOne = ONE; + private Param offsetOrZero = ZERO; + private Param offsetPlusOne = ONE; private boolean rendersParams; boolean withTies; boolean percent; @@ -468,6 +469,10 @@ final class Limit extends AbstractQueryPart { this.rendersParams |= numberOfRows.isInline(); } + final Long getNumberOfRows() { + return Convert.convert((numberOfRows != null ? numberOfRows : numberOfRowsOrMax).getValue(), long.class); + } + final void setPercent(boolean percent) { this.percent = percent; } @@ -485,8 +490,14 @@ final class Limit extends AbstractQueryPart { } final Limit from(Limit limit) { + + // [#9017] Take the lower number of two LIMIT clauses, maintaining + // inline flags and parameter names if (limit.numberOfRows != null) - this.setNumberOfRows(limit.numberOfRows); + if (numberOfRows == null) + this.setNumberOfRows(limit.numberOfRows); + else + this.setNumberOfRows(((Val) limit.numberOfRows).copy(Math.min(getNumberOfRows(), limit.getNumberOfRows()))); if (limit.offset != null) this.setOffset(limit.offset); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index feb6143a29..77eac3d8ab 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -378,7 +378,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp this.from.add(from.asTable()); } - SelectQueryImpl copy() { + final SelectQueryImpl copy() { SelectQueryImpl result = new SelectQueryImpl<>(configuration(), with); result.condition.setWhere(condition.getWhere());