diff --git a/jOOQ/src/main/java/org/jooq/DeleteLimitStep.java b/jOOQ/src/main/java/org/jooq/DeleteLimitStep.java index b217f39e6e..e196b52267 100644 --- a/jOOQ/src/main/java/org/jooq/DeleteLimitStep.java +++ b/jOOQ/src/main/java/org/jooq/DeleteLimitStep.java @@ -85,5 +85,5 @@ public interface DeleteLimitStep extends DeleteReturningStep limit(Param numberOfRows); + DeleteReturningStep limit(Field numberOfRows); } \ No newline at end of file diff --git a/jOOQ/src/main/java/org/jooq/DeleteQuery.java b/jOOQ/src/main/java/org/jooq/DeleteQuery.java index 159d4ba575..358dde21af 100644 --- a/jOOQ/src/main/java/org/jooq/DeleteQuery.java +++ b/jOOQ/src/main/java/org/jooq/DeleteQuery.java @@ -150,7 +150,7 @@ public interface DeleteQuery extends ConditionProvider, Delete * @param numberOfRows The number of rows to return */ @Support - void addLimit(Param numberOfRows); + void addLimit(Field numberOfRows); // ------------------------------------------------------------------------ // XXX: Methods for the DELETE .. RETURNING syntax diff --git a/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java b/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java index fa36f75173..0d5e6e4501 100644 --- a/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectLimitAfterOffsetStep.java @@ -167,6 +167,6 @@ public interface SelectLimitAfterOffsetStep extends SelectForU */ @NotNull @CheckReturnValue @Support - SelectLimitPercentAfterOffsetStep limit(Param numberOfRows); + SelectLimitPercentAfterOffsetStep limit(Field numberOfRows); } diff --git a/jOOQ/src/main/java/org/jooq/SelectLimitStep.java b/jOOQ/src/main/java/org/jooq/SelectLimitStep.java index db8b089748..6cb535954c 100644 --- a/jOOQ/src/main/java/org/jooq/SelectLimitStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectLimitStep.java @@ -177,7 +177,7 @@ public interface SelectLimitStep extends SelectForUpdateStep limit(Param numberOfRows); + SelectLimitPercentStep limit(Field numberOfRows); /** * Add a LIMIT clause to the query @@ -223,7 +223,7 @@ public interface SelectLimitStep extends SelectForUpdateStep limit(int offset, Param numberOfRows); + SelectLimitPercentAfterOffsetStep limit(int offset, Field numberOfRows); /** * Add a LIMIT clause to the query using named parameters @@ -239,7 +239,7 @@ public interface SelectLimitStep extends SelectForUpdateStep limit(Number offset, Param numberOfRows); + SelectLimitPercentAfterOffsetStep limit(Number offset, Field numberOfRows); /** * Add a LIMIT clause to the query using named parameters @@ -255,7 +255,7 @@ public interface SelectLimitStep extends SelectForUpdateStep limit(Param offset, int numberOfRows); + SelectLimitPercentAfterOffsetStep limit(Field offset, int numberOfRows); /** * Add a LIMIT clause to the query using named parameters @@ -271,7 +271,7 @@ public interface SelectLimitStep extends SelectForUpdateStep limit(Param offset, Number numberOfRows); + SelectLimitPercentAfterOffsetStep limit(Field offset, Number numberOfRows); /** * Add a LIMIT clause to the query using named parameters @@ -287,7 +287,7 @@ public interface SelectLimitStep extends SelectForUpdateStep limit(Param offset, Param numberOfRows); + SelectLimitPercentAfterOffsetStep limit(Field offset, Field numberOfRows); /** * Add a 0-based OFFSET clause to the query. @@ -330,5 +330,5 @@ public interface SelectLimitStep extends SelectForUpdateStep offset(Param offset); + SelectLimitAfterOffsetStep offset(Field offset); } diff --git a/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java b/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java index e03bb4dbc8..bccba8b070 100644 --- a/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectOffsetStep.java @@ -173,5 +173,5 @@ public interface SelectOffsetStep extends SelectForUpdateStep< */ @NotNull @CheckReturnValue @Support - SelectForUpdateStep offset(Param offset); + SelectForUpdateStep offset(Field offset); } diff --git a/jOOQ/src/main/java/org/jooq/SelectQuery.java b/jOOQ/src/main/java/org/jooq/SelectQuery.java index fbbc1b62e7..b1b708dfa7 100644 --- a/jOOQ/src/main/java/org/jooq/SelectQuery.java +++ b/jOOQ/src/main/java/org/jooq/SelectQuery.java @@ -732,7 +732,7 @@ public interface SelectQuery extends Select, ConditionProvi * SELECT statements. */ @Support - void addOffset(Param offset); + void addOffset(Field offset); /** * Limit the results of this select. @@ -771,7 +771,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param numberOfRows The number of rows to return */ @Support - void addLimit(Param numberOfRows); + void addLimit(Field numberOfRows); /** * Limit the results of this select. @@ -823,7 +823,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param numberOfRows The number of rows to return */ @Support - void addLimit(Param offset, int numberOfRows); + void addLimit(Field offset, int numberOfRows); /** * Limit the results of this select. @@ -841,7 +841,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param numberOfRows The number of rows to return */ @Support - void addLimit(Param offset, Number numberOfRows); + void addLimit(Field offset, Number numberOfRows); /** * Limit the results of this select using named parameters. @@ -859,7 +859,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param numberOfRows The number of rows to return */ @Support - void addLimit(int offset, Param numberOfRows); + void addLimit(int offset, Field numberOfRows); /** * Limit the results of this select using named parameters. @@ -877,7 +877,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param numberOfRows The number of rows to return */ @Support - void addLimit(Number offset, Param numberOfRows); + void addLimit(Number offset, Field numberOfRows); /** * Limit the results of this select using named parameters. @@ -895,7 +895,7 @@ public interface SelectQuery extends Select, ConditionProvi * @param numberOfRows The number of rows to return */ @Support - void addLimit(Param offset, Param numberOfRows); + void addLimit(Field offset, Field numberOfRows); /** * Add the PERCENT clause to a LIMIT clause. diff --git a/jOOQ/src/main/java/org/jooq/SelectSeekLimitStep.java b/jOOQ/src/main/java/org/jooq/SelectSeekLimitStep.java index 2691068d02..52ae044bab 100644 --- a/jOOQ/src/main/java/org/jooq/SelectSeekLimitStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectSeekLimitStep.java @@ -160,6 +160,6 @@ public interface SelectSeekLimitStep extends SelectForUpdateSt */ @NotNull @CheckReturnValue @Support - SelectForUpdateStep limit(Param numberOfRows); + SelectForUpdateStep limit(Field numberOfRows); } diff --git a/jOOQ/src/main/java/org/jooq/UpdateLimitStep.java b/jOOQ/src/main/java/org/jooq/UpdateLimitStep.java index dcac159ac5..3363f0bc5b 100644 --- a/jOOQ/src/main/java/org/jooq/UpdateLimitStep.java +++ b/jOOQ/src/main/java/org/jooq/UpdateLimitStep.java @@ -87,7 +87,7 @@ public interface UpdateLimitStep extends UpdateReturningStep limit(Param numberOfRows); + UpdateReturningStep limit(Field numberOfRows); } diff --git a/jOOQ/src/main/java/org/jooq/UpdateQuery.java b/jOOQ/src/main/java/org/jooq/UpdateQuery.java index 43ab9e7dca..2893fa7ba4 100644 --- a/jOOQ/src/main/java/org/jooq/UpdateQuery.java +++ b/jOOQ/src/main/java/org/jooq/UpdateQuery.java @@ -438,7 +438,7 @@ public interface UpdateQuery extends StoreQuery, ConditionP * @param numberOfRows The number of rows to return */ @Support - void addLimit(Param numberOfRows); + void addLimit(Field numberOfRows); // ------------------------------------------------------------------------ // XXX: Methods for the UPDATE .. RETURNING syntax diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteImpl.java index 3c94a17217..35cee4cdb9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DeleteImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DeleteImpl.java @@ -325,7 +325,7 @@ final class DeleteImpl } @Override - public final DeleteImpl limit(Param numberOfRows) { + public final DeleteImpl limit(Field numberOfRows) { getDelegate().addLimit(numberOfRows); return this; } diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java index 37446deb51..ba679b80f1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java @@ -135,7 +135,7 @@ final class DeleteQueryImpl extends AbstractDMLQuery implem private final TableList using; private final ConditionProviderImpl condition; private final SortFieldList orderBy; - private Param limit; + private Field limit; DeleteQueryImpl(Configuration configuration, WithImpl with, Table table) { super(configuration, with, table); @@ -220,7 +220,7 @@ final class DeleteQueryImpl extends AbstractDMLQuery implem } @Override - public final void addLimit(Param numberOfRows) { + public final void addLimit(Field numberOfRows) { limit = numberOfRows; } diff --git a/jOOQ/src/main/java/org/jooq/impl/Limit.java b/jOOQ/src/main/java/org/jooq/impl/Limit.java index 7c9267fd4a..4e0da434ad 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Limit.java +++ b/jOOQ/src/main/java/org/jooq/impl/Limit.java @@ -72,6 +72,8 @@ import org.jooq.exception.DataAccessException; import org.jooq.impl.QOM.UTransient; import org.jooq.impl.Tools.BooleanDataKey; +import org.jetbrains.annotations.Nullable; + /** * @author Lukas Eder */ @@ -81,11 +83,11 @@ final class Limit extends AbstractQueryPart implements UTransient { private static final Param ONE = one(); private static final Param MAX = DSL.inline(Integer.MAX_VALUE); - Param limit; - private Param limitOrMax = MAX; - Param offset; - private Param offsetOrZero = ZERO; - private Param offsetPlusOne = ONE; + Field limit; + private Field limitOrMax = MAX; + Field offset; + private Field offsetOrZero = ZERO; + private Field offsetPlusOne = ONE; boolean withTies; boolean percent; @@ -404,7 +406,7 @@ final class Limit extends AbstractQueryPart implements UTransient { return !limitZero() && !withTies() && !percent() - && Long.valueOf(1L).equals(limit.getValue()); + && Long.valueOf(1L).equals(getLimit()); } /** @@ -442,23 +444,28 @@ final class Limit extends AbstractQueryPart implements UTransient { this.offsetPlusOne = val(offset.longValue() + 1L, BIGINT); } - final void setOffset(Param offset) { + final void setOffset(Field offset) { this.offset = offset; this.offsetOrZero = offset; } - final void setLimit(Number numberOfRows) { - this.limit = val(numberOfRows.longValue(), SQLDataType.BIGINT); + final void setLimit(Number l) { + this.limit = val(l.longValue(), SQLDataType.BIGINT); this.limitOrMax = this.limit; } - final void setLimit(Param numberOfRows) { - this.limit = numberOfRows; - this.limitOrMax = numberOfRows; + final void setLimit(Field l) { + this.limit = l; + this.limitOrMax = l; } final Long getLimit() { - return Convert.convert((limit != null ? limit : limitOrMax).getValue(), long.class); + Field l = limit != null ? limit : limitOrMax; + + if (l instanceof Param) + return Convert.convert(((Param) l).getValue(), long.class); + else + return Convert.convert(MAX.getValue(), long.class); } final void setPercent(boolean percent) { @@ -477,21 +484,22 @@ final class Limit extends AbstractQueryPart implements UTransient { return withTies; } - final Limit from(Limit limit) { + final Limit from(Limit other) { // [#9017] Take the lower number of two LIMIT clauses, maintaining // inline flags and parameter names - if (limit.limit != null) - if (limit == null) - this.setLimit(limit.limit); + // [#5695] TODO: What to do if LIMIT is an expression? + if (other.limit != null) + if (this.limit == null) + this.setLimit(other.limit); else - this.setLimit(((Val) limit.limit).copy(Math.min(getLimit(), limit.getLimit()))); + this.setLimit(((Val) other.limit).copy(Math.min(getLimit(), other.getLimit()))); - if (limit.offset != null) - this.setOffset(limit.offset); + if (other.offset != null) + this.setOffset(other.offset); - this.setPercent(limit.percent); - this.setWithTies(limit.withTies); + this.setPercent(other.percent); + this.setWithTies(other.withTies); return this; } diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index ed081eaa75..db4f7d484d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -230,9 +230,9 @@ implements * The limit that has been added in a limit(Number).offset(Number) construct */ private transient Number limit; - private transient Param limitParam; + private transient Field limitParam; private transient Number offset; - private transient Param offsetParam; + private transient Field offsetParam; @@ -1644,7 +1644,7 @@ implements } @Override - public final SelectImpl limit(Param l) { + public final SelectImpl limit(Field l) { limit = null; limitParam = l; return limitOffset(); @@ -1665,12 +1665,12 @@ implements } @Override - public final SelectImpl limit(int o, Param l) { + public final SelectImpl limit(int o, Field l) { return limit((Number) o, l); } @Override - public final SelectImpl limit(Number o, Param l) { + public final SelectImpl limit(Number o, Field l) { offset = o; offsetParam = null; limit = null; @@ -1679,12 +1679,12 @@ implements } @Override - public final SelectImpl limit(Param o, int l) { + public final SelectImpl limit(Field o, int l) { return limit(o, (Number) l); } @Override - public final SelectImpl limit(Param o, Number l) { + public final SelectImpl limit(Field o, Number l) { offset = null; offsetParam = o; limit = l; @@ -1693,7 +1693,7 @@ implements } @Override - public final SelectImpl limit(Param o, Param l) { + public final SelectImpl limit(Field o, Field l) { offset = null; offsetParam = o; limit = null; @@ -1714,7 +1714,7 @@ implements } @Override - public final SelectImpl offset(Param o) { + public final SelectImpl offset(Field o) { offset = null; offsetParam = o; return limitOffset(); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 6e850641c3..e4b2b8d6f1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -250,7 +250,6 @@ import org.jooq.JoinType; import org.jooq.Name; import org.jooq.Operator; import org.jooq.OrderField; -import org.jooq.Param; // ... import org.jooq.QualifiedAsterisk; import org.jooq.QueryPart; @@ -291,9 +290,6 @@ import org.jooq.impl.Tools.DataKey; import org.jooq.tools.JooqLogger; import org.jooq.tools.StringUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - /** * A sub-select is a SELECT statement that can be combined with @@ -1245,14 +1241,14 @@ final class SelectQueryImpl extends AbstractResultQuery imp .where(rn.eq(one())) .orderBy(map(orderBy, o -> unqualified(o))); - if (limit.numberOfRows != null) { - SelectLimitPercentStep s2 = s1.limit((Param) limit.numberOfRows); + if (limit.limit != null) { + SelectLimitPercentStep s2 = s1.limit(limit.limit); SelectWithTiesStep s3 = limit.percent ? s2.percent() : s2; SelectOffsetStep s4 = limit.withTies ? s3.withTies() : s3; - return limit.offset != null ? s4.offset((Param) limit.offset) : s4; + return limit.offset != null ? s4.offset(limit.offset) : s4; } else - return limit.offset != null ? s1.offset((Param) limit.offset) : s1; + return limit.offset != null ? s1.offset(limit.offset) : s1; } @@ -3296,23 +3292,23 @@ final class SelectQueryImpl extends AbstractResultQuery imp } @Override - public final void addOffset(Param offset) { + public final void addOffset(Field offset) { getLimit().setOffset(offset); } @Override - public final void addLimit(int numberOfRows) { - addLimit((Number) numberOfRows); + public final void addLimit(int l) { + addLimit((Number) l); } @Override - public final void addLimit(Number numberOfRows) { - getLimit().setNumberOfRows(numberOfRows); + public final void addLimit(Number l) { + getLimit().setLimit(l); } @Override - public final void addLimit(Param numberOfRows) { - getLimit().setNumberOfRows(numberOfRows); + public final void addLimit(Field l) { + getLimit().setLimit(l); } @Override @@ -3321,37 +3317,37 @@ final class SelectQueryImpl extends AbstractResultQuery imp } @Override - public final void addLimit(Number offset, Number numberOfRows) { + public final void addLimit(Number offset, Number l) { getLimit().setOffset(offset); - getLimit().setNumberOfRows(numberOfRows); + getLimit().setLimit(l); } @Override - public final void addLimit(int offset, Param numberOfRows) { - addLimit((Number) offset, numberOfRows); + public final void addLimit(int offset, Field l) { + addLimit((Number) offset, l); } @Override - public final void addLimit(Number offset, Param numberOfRows) { + public final void addLimit(Number offset, Field l) { getLimit().setOffset(offset); - getLimit().setNumberOfRows(numberOfRows); + getLimit().setLimit(l); } @Override - public final void addLimit(Param offset, int numberOfRows) { - addLimit(offset, (Number) numberOfRows); + public final void addLimit(Field offset, int l) { + addLimit(offset, (Number) l); } @Override - public final void addLimit(Param offset, Number numberOfRows) { + public final void addLimit(Field offset, Number l) { getLimit().setOffset(offset); - getLimit().setNumberOfRows(numberOfRows); + getLimit().setLimit(l); } @Override - public final void addLimit(Param offset, Param numberOfRows) { + public final void addLimit(Field offset, Field l) { getLimit().setOffset(offset); - getLimit().setNumberOfRows(numberOfRows); + getLimit().setLimit(l); } @Override @@ -4590,17 +4586,15 @@ final class SelectQueryImpl extends AbstractResultQuery imp @Override public final Field $limit() { - return (Field) getLimit().numberOfRows; + return getLimit().limit; } @Override public final Select $limit(Field newLimit) { if ($limit() == newLimit) return this; - - // [#5695] TODO: Support all types of Field! else - return copy(s -> s.getLimit().setNumberOfRows((Param) newLimit)); + return copy(s -> s.getLimit().setLimit(newLimit)); } @Override @@ -4631,7 +4625,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp @Override public final Field $offset() { - return (Field) getLimit().offset; + return getLimit().offset; } @Override @@ -4641,7 +4635,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp // [#5695] TODO: Support all types of Field! else - return copy(s -> s.getLimit().setOffset((Param) newOffset)); + return copy(s -> s.getLimit().setOffset(newOffset)); } diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdateImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdateImpl.java index 2ff4e535d3..f6fb2ffdb6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdateImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdateImpl.java @@ -52,7 +52,6 @@ import org.jooq.Field; import org.jooq.Name; import org.jooq.Operator; import org.jooq.OrderField; -import org.jooq.Param; import org.jooq.QueryPart; import org.jooq.Record; import org.jooq.Record1; @@ -666,14 +665,14 @@ final class UpdateImpl } @Override - public final UpdateImpl limit(Number numberOfRows) { - getDelegate().addLimit(numberOfRows); + public final UpdateImpl limit(Number limit) { + getDelegate().addLimit(limit); return this; } @Override - public final UpdateImpl limit(Param numberOfRows) { - getDelegate().addLimit(numberOfRows); + public final UpdateImpl limit(Field limit) { + getDelegate().addLimit(limit); return this; } diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java index b031e212ce..aaa7cb0d30 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java @@ -108,7 +108,6 @@ import org.jooq.Context; import org.jooq.Field; import org.jooq.Operator; import org.jooq.OrderField; -import org.jooq.Param; // ... import org.jooq.Record; import org.jooq.Record1; @@ -197,7 +196,7 @@ final class UpdateQueryImpl extends AbstractStoreQuery impl private Row multiValue; private Select multiSelect; private final SortFieldList orderBy; - private Param limit; + private Field limit; UpdateQueryImpl(Configuration configuration, WithImpl with, Table table) { super(configuration, with, table); @@ -519,13 +518,13 @@ final class UpdateQueryImpl extends AbstractStoreQuery impl } @Override - public final void addLimit(Number numberOfRows) { - addLimit(DSL.val(numberOfRows)); + public final void addLimit(Number l) { + addLimit(DSL.val(l)); } @Override - public final void addLimit(Param numberOfRows) { - limit = numberOfRows; + public final void addLimit(Field l) { + limit = l; } final Condition getWhere() {