SelectQuery

class SelectQuery @PublishedApi constructor(provider: SessionProvider, selectClause: String) : RunnableQuery<SelectQuery>

A SELECT under construction.

Every clause takes SQL and passes it through: from("legions l JOIN provinces p ON l.province_id = p.id") is written out because that is the join, not because the builder has a way to describe joins. What the builder does is the mechanical part - the keywords, the order they go in, and above all the clauses that disappear when they have nothing to say, which is what makes a filter assembled at runtime bearable.

val senators = db.select("id", "cognomen", "province_id")
.from("senate")
.where(filter.sql) // null or empty leaves out the WHERE entirely
.orderBy("cognomen")
.page(page = 0, size = 20)
.fetchObjects<Senator>(filter.params)

The terminal methods come from RunnableQuery, so parameters are supplied there and never carried here.

Constructors

Link copied to clipboard
internal constructor(provider: SessionProvider, selectClause: String)

Properties

Link copied to clipboard

Decides which session the terminals run on.

Functions

Link copied to clipboard

Switches this query to the result style: every terminal on the returned object hands back a DataResult instead of throwing.

Link copied to clipboard

Turns this query into a step of a TransactionPlan instead of something to run now.

Link copied to clipboard

Returns an independent copy, so that variants can be built from a shared base.

Link copied to clipboard
internal fun copyConvertersFrom(other: RunnableQuery<*>)

Carries registered converters into a builder's copy(), alongside whatever clauses it copies.

Link copied to clipboard
fun executeUpdate(params: Map<String, Any?> = emptyMap()): Long
fun executeUpdate(vararg params: Pair<String, Any?>): Long

Runs the statement and returns how many rows it affected.

Link copied to clipboard
inline fun <T> fetchField(params: Map<String, Any?> = emptyMap()): T
inline fun <T> fetchField(vararg params: Pair<String, Any?>): T

Runs the query and returns the first column of its single row as T.

Link copied to clipboard
inline fun <T> fetchFields(params: Map<String, Any?> = emptyMap()): List<T>
inline fun <T> fetchFields(vararg params: Pair<String, Any?>): List<T>

Runs the query and returns the first column of every row as T.

Link copied to clipboard
inline fun <T> fetchFieldStrict(params: Map<String, Any?> = emptyMap()): T
inline fun <T> fetchFieldStrict(vararg params: Pair<String, Any?>): T

As fetchField, but the query must return exactly one row rather than at most one.

Link copied to clipboard
inline fun <T : Any> fetchObject(params: Map<String, Any?> = emptyMap()): T?
inline fun <T : Any> fetchObject(vararg params: Pair<String, Any?>): T?

Runs the query and maps its single row onto T, or null where none matched.

Link copied to clipboard
inline fun <T : Any> fetchObjects(params: Map<String, Any?> = emptyMap()): List<T>
inline fun <T : Any> fetchObjects(vararg params: Pair<String, Any?>): List<T>

Runs the query and maps every row onto T.

Link copied to clipboard
inline fun <T : Any> fetchObjectStrict(params: Map<String, Any?> = emptyMap()): T
inline fun <T : Any> fetchObjectStrict(vararg params: Pair<String, Any?>): T

Runs the query and maps its single row onto T, throwing where the count was anything but one.

Link copied to clipboard
fun fetchRow(params: Map<String, Any?> = emptyMap()): Row?
fun fetchRow(vararg params: Pair<String, Any?>): Row?

Runs the query and returns its single row, or null where none matched.

Link copied to clipboard
fun fetchRows(params: Map<String, Any?> = emptyMap()): List<Row>
fun fetchRows(vararg params: Pair<String, Any?>): List<Row>

Runs the query and returns every row.

Link copied to clipboard
fun fetchRowStrict(params: Map<String, Any?> = emptyMap()): Row
fun fetchRowStrict(vararg params: Pair<String, Any?>): Row

Runs the query and returns its single row, throwing where the count was anything but one.

Link copied to clipboard
inline fun <T> forEachField(params: Map<String, Any?> = emptyMap(), fetchSize: Int, noinline block: (T) -> Unit)
inline fun <T> forEachField(vararg params: Pair<String, Any?>, fetchSize: Int, noinline block: (T) -> Unit)

Runs the query and hands the first column of each row, as T, to block as it arrives.

Link copied to clipboard
inline fun <T : Any> forEachObject(params: Map<String, Any?> = emptyMap(), fetchSize: Int, noinline block: (T) -> Unit)
inline fun <T : Any> forEachObject(vararg params: Pair<String, Any?>, fetchSize: Int, noinline block: (T) -> Unit)

Runs the query and hands each row, mapped onto T, to block as it arrives.

Link copied to clipboard
fun forEachRow(params: Map<String, Any?> = emptyMap(), fetchSize: Int, block: (Row) -> Unit)
fun forEachRow(vararg params: Pair<String, Any?>, fetchSize: Int, block: (Row) -> Unit)

Runs the query and hands each row to block as it arrives, in batches of fetchSize.

Link copied to clipboard
fun from(source: String): SelectQuery

Sets the FROM clause, as SQL.

Link copied to clipboard
fun fromSubquery(subquery: String, alias: String? = null): SelectQuery

Sets the FROM clause to a subquery, parenthesised and optionally aliased.

Link copied to clipboard
fun groupBy(columns: String?): SelectQuery

Sets the GROUP BY columns. null or blank leaves the clause out.

Link copied to clipboard
fun having(condition: String?): SelectQuery

Sets the HAVING condition, which requires a GROUP BY. null or blank leaves the clause out.

Link copied to clipboard
fun limit(count: Long?): SelectQuery

Sets LIMIT. null leaves it out.

Link copied to clipboard
fun locking(clause: String?): SelectQuery

Sets the locking clause, as SQL. null or blank leaves it out.

Link copied to clipboard
fun offset(position: Long?): SelectQuery

Sets OFFSET. null leaves it out, as does 0.

Link copied to clipboard
fun orderBy(ordering: String?): SelectQuery

Sets the ORDER BY clause. null or blank leaves the clause out.

Link copied to clipboard
fun page(page: Long, size: Long): SelectQuery

Sets LIMIT and OFFSET together from a page number and a page size.

Link copied to clipboard

Builds the driver query a terminal is about to run, with this query's own converters on it.

Link copied to clipboard
internal open override fun querySql(): String

Renders the SQL. Called once per terminal call, so a builder may put off assembling it until here.

Link copied to clipboard

Marks the WITH clause RECURSIVE.

Link copied to clipboard

Registers a ParameterConverter for this query and nothing else.

Link copied to clipboard

Registers a ResultConverter for this query and nothing else.

Link copied to clipboard
fun toSql(): String

Renders the SQL this query would send.

Link copied to clipboard
fun where(condition: String?): SelectQuery

Sets the WHERE condition. null or blank leaves the clause out.

Link copied to clipboard
fun window(definitions: String?): SelectQuery

Sets the WINDOW clause, as SQL: the named windows the select list and ORDER BY refer to, "w AS (PARTITION BY province ORDER BY strength DESC)". null or blank leaves the clause out.

Link copied to clipboard
fun with(name: String, query: String): SelectQuery

Adds a common table expression. Call it more than once for more than one.