/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: http://www.jooq.org/licenses
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq;
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
import static org.jooq.SQLDialect.DERBY;
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
// ...
import static org.jooq.SQLDialect.HSQLDB;
// ...
// ...
import static org.jooq.SQLDialect.MARIADB;
// ...
import static org.jooq.SQLDialect.MYSQL;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
// ...
import org.jetbrains.annotations.NotNull;
This type is used for the Select
's DSL API when selecting generic Record
types.
Example:
-- get all authors' first and last names, and the number
-- of books they've written in German, if they have written
-- more than five books in German in the last three years
-- (from 2011), and sort those authors by last names
-- limiting results to the second and third row
SELECT T_AUTHOR.FIRST_NAME, T_AUTHOR.LAST_NAME, COUNT(*)
FROM T_AUTHOR
JOIN T_BOOK ON T_AUTHOR.ID = T_BOOK.AUTHOR_ID
WHERE T_BOOK.LANGUAGE = 'DE'
AND T_BOOK.PUBLISHED > '2008-01-01'
GROUP BY T_AUTHOR.FIRST_NAME, T_AUTHOR.LAST_NAME
HAVING COUNT(*) > 5
ORDER BY T_AUTHOR.LAST_NAME ASC NULLS FIRST
LIMIT 2
OFFSET 1
FOR UPDATE
OF FIRST_NAME, LAST_NAME
NO WAIT
Its equivalent in jOOQ create.select(TAuthor.FIRST_NAME, TAuthor.LAST_NAME, create.count())
.from(T_AUTHOR)
.join(T_BOOK).on(TBook.AUTHOR_ID.equal(TAuthor.ID))
.where(TBook.LANGUAGE.equal("DE"))
.and(TBook.PUBLISHED.greaterThan(parseDate('2008-01-01')))
.groupBy(TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
.having(create.count().greaterThan(5))
.orderBy(TAuthor.LAST_NAME.asc().nullsFirst())
.limit(2)
.offset(1)
.forUpdate()
.of(TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
.noWait();
Refer to the manual for more details
Referencing XYZ*Step
types directly from client code
It is usually not recommended to reference any XYZ*Step
types
directly from client code, or assign them to local variables. When writing
dynamic SQL, creating a statement's components dynamically, and passing them
to the DSL API statically is usually a better choice. See the manual's
section about dynamic SQL for details: https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql.
Drawbacks of referencing the XYZ*Step
types directly:
- They're operating on mutable implementations (as of jOOQ 3.x)
- They're less composable and not easy to get right when dynamic SQL gets
complex
- They're less readable
- They might have binary incompatible changes between minor releases
Author: Lukas Eder
/**
* This type is used for the {@link Select}'s DSL API when selecting generic
* {@link Record} types.
* <p>
* Example: <code><pre>
* -- get all authors' first and last names, and the number
* -- of books they've written in German, if they have written
* -- more than five books in German in the last three years
* -- (from 2011), and sort those authors by last names
* -- limiting results to the second and third row
*
* SELECT T_AUTHOR.FIRST_NAME, T_AUTHOR.LAST_NAME, COUNT(*)
* FROM T_AUTHOR
* JOIN T_BOOK ON T_AUTHOR.ID = T_BOOK.AUTHOR_ID
* WHERE T_BOOK.LANGUAGE = 'DE'
* AND T_BOOK.PUBLISHED > '2008-01-01'
* GROUP BY T_AUTHOR.FIRST_NAME, T_AUTHOR.LAST_NAME
* HAVING COUNT(*) > 5
* ORDER BY T_AUTHOR.LAST_NAME ASC NULLS FIRST
* LIMIT 2
* OFFSET 1
* FOR UPDATE
* OF FIRST_NAME, LAST_NAME
* NO WAIT
* </pre></code> Its equivalent in jOOQ <code><pre>
* create.select(TAuthor.FIRST_NAME, TAuthor.LAST_NAME, create.count())
* .from(T_AUTHOR)
* .join(T_BOOK).on(TBook.AUTHOR_ID.equal(TAuthor.ID))
* .where(TBook.LANGUAGE.equal("DE"))
* .and(TBook.PUBLISHED.greaterThan(parseDate('2008-01-01')))
* .groupBy(TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
* .having(create.count().greaterThan(5))
* .orderBy(TAuthor.LAST_NAME.asc().nullsFirst())
* .limit(2)
* .offset(1)
* .forUpdate()
* .of(TAuthor.FIRST_NAME, TAuthor.LAST_NAME)
* .noWait();
* </pre></code> Refer to the manual for more details
* <p>
* <h3>Referencing <code>XYZ*Step</code> types directly from client code</h3>
* <p>
* It is usually not recommended to reference any <code>XYZ*Step</code> types
* directly from client code, or assign them to local variables. When writing
* dynamic SQL, creating a statement's components dynamically, and passing them
* to the DSL API statically is usually a better choice. See the manual's
* section about dynamic SQL for details: <a href=
* "https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql">https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql</a>.
* <p>
* Drawbacks of referencing the <code>XYZ*Step</code> types directly:
* <ul>
* <li>They're operating on mutable implementations (as of jOOQ 3.x)</li>
* <li>They're less composable and not easy to get right when dynamic SQL gets
* complex</li>
* <li>They're less readable</li>
* <li>They might have binary incompatible changes between minor releases</li>
* </ul>
*
* @author Lukas Eder
*/
public interface SelectLimitStep<R extends Record> extends SelectForUpdateStep<R> {
Add a LIMIT
clause to the query
If there is no LIMIT
or TOP
clause in your
RDBMS, this may be emulated with a ROW_NUMBER()
window
function and nested SELECT
statements.
This is the same as calling limit(int, int)
with offset = 0, or calling .limit(numberOfRows).offset(0)
/**
* Add a <code>LIMIT</code> clause to the query
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, this may be emulated with a <code>ROW_NUMBER()</code> window
* function and nested <code>SELECT</code> statements.
* <p>
* This is the same as calling {@link #limit(int, int)} with offset = 0, or
* calling <code>.limit(numberOfRows).offset(0)</code>
*/
@NotNull
@Support
SelectLimitPercentStep<R> limit(int numberOfRows);
Add a LIMIT
clause to the query
If there is no LIMIT
or TOP
clause in your
RDBMS, this may be emulated with a ROW_NUMBER()
window
function and nested SELECT
statements.
This is the same as calling limit(int, int)
with offset = 0, or calling .limit(numberOfRows).offset(0)
/**
* Add a <code>LIMIT</code> clause to the query
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, this may be emulated with a <code>ROW_NUMBER()</code> window
* function and nested <code>SELECT</code> statements.
* <p>
* This is the same as calling {@link #limit(int, int)} with offset = 0, or
* calling <code>.limit(numberOfRows).offset(0)</code>
*/
@NotNull
@Support
SelectLimitPercentStep<R> limit(Number numberOfRows);
Add a LIMIT
clause to the query using named parameters
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or the LIMIT
or TOP
clause does not
support bind values, this may be emulated with a
ROW_NUMBER()
window function and nested SELECT
statements.
This is the same as calling limit(int, int)
with offset = 0, or calling .limit(numberOfRows).offset(0)
/**
* Add a <code>LIMIT</code> clause to the query using named parameters
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or the <code>LIMIT</code> or <code>TOP</code> clause does not
* support bind values, this may be emulated with a
* <code>ROW_NUMBER()</code> window function and nested <code>SELECT</code>
* statements.
* <p>
* This is the same as calling {@link #limit(int, int)} with offset = 0, or
* calling <code>.limit(numberOfRows).offset(0)</code>
*/
@NotNull
@Support
SelectLimitPercentStep<R> limit(Param<? extends Number> numberOfRows);
Add a LIMIT
clause to the query
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or if your RDBMS does not natively support offsets, this is
emulated with a ROW_NUMBER()
window function and nested
SELECT
statements.
/**
* Add a <code>LIMIT</code> clause to the query
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or if your RDBMS does not natively support offsets, this is
* emulated with a <code>ROW_NUMBER()</code> window function and nested
* <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectWithTiesAfterOffsetStep<R> limit(int offset, int numberOfRows);
Add a LIMIT
clause to the query
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or if your RDBMS does not natively support offsets, this is
emulated with a ROW_NUMBER()
window function and nested
SELECT
statements.
/**
* Add a <code>LIMIT</code> clause to the query
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or if your RDBMS does not natively support offsets, this is
* emulated with a <code>ROW_NUMBER()</code> window function and nested
* <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectWithTiesAfterOffsetStep<R> limit(Number offset, Number numberOfRows);
Add a LIMIT
clause to the query using named parameters
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or the LIMIT
or TOP
clause does not
support bind values, or if your RDBMS does not natively support offsets,
this may be emulated with a ROW_NUMBER()
window function
and nested SELECT
statements.
/**
* Add a <code>LIMIT</code> clause to the query using named parameters
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or the <code>LIMIT</code> or <code>TOP</code> clause does not
* support bind values, or if your RDBMS does not natively support offsets,
* this may be emulated with a <code>ROW_NUMBER()</code> window function
* and nested <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitPercentAfterOffsetStep<R> limit(int offset, Param<Integer> numberOfRows);
Add a LIMIT
clause to the query using named parameters
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or the LIMIT
or TOP
clause does not
support bind values, or if your RDBMS does not natively support offsets,
this may be emulated with a ROW_NUMBER()
window function
and nested SELECT
statements.
/**
* Add a <code>LIMIT</code> clause to the query using named parameters
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or the <code>LIMIT</code> or <code>TOP</code> clause does not
* support bind values, or if your RDBMS does not natively support offsets,
* this may be emulated with a <code>ROW_NUMBER()</code> window function
* and nested <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitPercentAfterOffsetStep<R> limit(Number offset, Param<? extends Number> numberOfRows);
Add a LIMIT
clause to the query using named parameters
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or the LIMIT
or TOP
clause does not
support bind values, or if your RDBMS does not natively support offsets,
this may be emulated with a ROW_NUMBER()
window function
and nested SELECT
statements.
/**
* Add a <code>LIMIT</code> clause to the query using named parameters
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or the <code>LIMIT</code> or <code>TOP</code> clause does not
* support bind values, or if your RDBMS does not natively support offsets,
* this may be emulated with a <code>ROW_NUMBER()</code> window function
* and nested <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitPercentAfterOffsetStep<R> limit(Param<Integer> offset, int numberOfRows);
Add a LIMIT
clause to the query using named parameters
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or the LIMIT
or TOP
clause does not
support bind values, or if your RDBMS does not natively support offsets,
this may be emulated with a ROW_NUMBER()
window function
and nested SELECT
statements.
/**
* Add a <code>LIMIT</code> clause to the query using named parameters
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or the <code>LIMIT</code> or <code>TOP</code> clause does not
* support bind values, or if your RDBMS does not natively support offsets,
* this may be emulated with a <code>ROW_NUMBER()</code> window function
* and nested <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitPercentAfterOffsetStep<R> limit(Param<? extends Number> offset, Number numberOfRows);
Add a LIMIT
clause to the query using named parameters
Note that some dialects do not support bind values at all in
LIMIT
or TOP
clauses!
If there is no LIMIT
or TOP
clause in your
RDBMS, or the LIMIT
or TOP
clause does not
support bind values, or if your RDBMS does not natively support offsets,
this may be emulated with a ROW_NUMBER()
window function
and nested SELECT
statements.
/**
* Add a <code>LIMIT</code> clause to the query using named parameters
* <p>
* Note that some dialects do not support bind values at all in
* <code>LIMIT</code> or <code>TOP</code> clauses!
* <p>
* If there is no <code>LIMIT</code> or <code>TOP</code> clause in your
* RDBMS, or the <code>LIMIT</code> or <code>TOP</code> clause does not
* support bind values, or if your RDBMS does not natively support offsets,
* this may be emulated with a <code>ROW_NUMBER()</code> window function
* and nested <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitPercentAfterOffsetStep<R> limit(Param<? extends Number> offset, Param<? extends Number> numberOfRows);
Add an OFFSET
clause to the query
If there is no LIMIT .. OFFSET
or TOP
clause in
your RDBMS, or if your RDBMS does not natively support offsets, this is
emulated with a ROW_NUMBER()
window function and nested
SELECT
statements.
/**
* Add an <code>OFFSET</code> clause to the query
* <p>
* If there is no <code>LIMIT .. OFFSET</code> or <code>TOP</code> clause in
* your RDBMS, or if your RDBMS does not natively support offsets, this is
* emulated with a <code>ROW_NUMBER()</code> window function and nested
* <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitAfterOffsetStep<R> offset(int offset);
Add an OFFSET
clause to the query
If there is no LIMIT .. OFFSET
or TOP
clause in
your RDBMS, or if your RDBMS does not natively support offsets, this is
emulated with a ROW_NUMBER()
window function and nested
SELECT
statements.
/**
* Add an <code>OFFSET</code> clause to the query
* <p>
* If there is no <code>LIMIT .. OFFSET</code> or <code>TOP</code> clause in
* your RDBMS, or if your RDBMS does not natively support offsets, this is
* emulated with a <code>ROW_NUMBER()</code> window function and nested
* <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitAfterOffsetStep<R> offset(Number offset);
Add an OFFSET
clause to the query using a named parameter
If there is no LIMIT .. OFFSET
or TOP
clause in
your RDBMS, or if your RDBMS does not natively support offsets, this is
emulated with a ROW_NUMBER()
window function and nested
SELECT
statements.
/**
* Add an <code>OFFSET</code> clause to the query using a named parameter
* <p>
* If there is no <code>LIMIT .. OFFSET</code> or <code>TOP</code> clause in
* your RDBMS, or if your RDBMS does not natively support offsets, this is
* emulated with a <code>ROW_NUMBER()</code> window function and nested
* <code>SELECT</code> statements.
*/
@NotNull
@Support
SelectLimitAfterOffsetStep<R> offset(Param<? extends Number> offset);
}