InsertQuery

class InsertQuery @PublishedApi constructor(provider: SessionProvider, table: String) : RunnableQuery<InsertQuery>

An INSERT under construction.

Its one real job is the pair of lists that have to match: the columns, and the values in the same order. Declaring a column with value or values puts a @name placeholder in the second list for it, so the two cannot drift, and the values themselves are supplied at the terminal like every other parameter. Where a value is not a parameter but an expression - now(), DEFAULT, a subselect - valueExpression puts that there instead.

val id = db.insertInto("citizens")
.values(listOf("cognomen", "tribe"))
.valueExpression("enrolled_at", "now()")
.onConflict {
onColumns("cognomen")
doUpdate("tribe = excluded.tribe")
}
.returning("id")
.fetchFieldStrict<Int>("cognomen" to "Marcus", "tribe" to "Cornelia")

Constructors

Link copied to clipboard
internal constructor(provider: SessionProvider, table: 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
fun columns(vararg columns: String): InsertQuery

Names the target columns for an INSERT … SELECT, where there are no values to declare.

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
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, crossinline block: (T) -> Unit)
inline fun <T> forEachField(vararg params: Pair<String, Any?>, fetchSize: Int, crossinline 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, crossinline block: (T) -> Unit)
inline fun <T : Any> forEachObject(vararg params: Pair<String, Any?>, fetchSize: Int, crossinline 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

Inserts the rows a SELECT produces instead of a VALUES list.

Link copied to clipboard

Configures the ON CONFLICT clause.

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 returning(vararg columns: String): InsertQuery

Adds a RETURNING clause, which turns this into a query the fetch* family can read.

Link copied to clipboard
fun toSql(): String

Renders the SQL this query would send.

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

Runs the statement and returns how many rows it affected.

Link copied to clipboard
fun value(column: String): InsertQuery

Declares one column, taking its value from the @column parameter.

Link copied to clipboard
fun valueExpression(column: String, expression: String): InsertQuery

Declares one column taking a SQL expression rather than a parameter - now(), DEFAULT, a subselect.

Link copied to clipboard
fun values(columns: List<String>): InsertQuery

Declares columns, each taking its value from the parameter of the same name.

Declares columns from a map's keys, each taking its value from the parameter of the same name.

Link copied to clipboard

As valueExpression, for several columns at once.

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

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