Renaming 'InsertFromQuery' to 'Copy' and splitting from 'InsertParams'->'Insert'

This commit is contained in:
Andrew Golovashevich 2025-01-04 15:38:43 +03:00
parent ed132ad276
commit d55cc47415
10 changed files with 193 additions and 174 deletions

View File

@ -1,9 +1,11 @@
package ru.landgrafhomyak.serdha.api.v0.ddl.module
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateCopyQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery
import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase
@ -139,9 +141,9 @@ public interface CreateModuleScope {
* @param TableUserExtension User's type with descriptors related to table to which values will be inserted.
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createInsertParamsQuery
* @see CreateModuleScope.createInsertQuery
*/
public interface InsertParamsQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
public interface InsertQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
@ -149,9 +151,9 @@ public interface CreateModuleScope {
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createInsertParamsQuery
* @see CreateModuleScope.createInsertQuery
*/
public fun createInsert(table: Table<TableUserExtension, *>, creator: CreateInsertQueryScope.InsertParams<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
public fun createInsert(table: Table<TableUserExtension, *>, creator: CreateInsertQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
}
/**
@ -164,13 +166,13 @@ public interface CreateModuleScope {
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createTemporaryInsertParamsQuery
* @see CreateModuleScope.createTemporaryInsertQuery
*/
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertParamsQuery(table: Table<TableUserExtension, *>, initializer: InsertParamsQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery.InsertParams<QueryUserWrapper>
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper>
/**
* Creates 'INSERT ... VALUES' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade].
* Using this function instead of [CreateModuleScope.createInsertParamsQuery] may help the driver to optimize caches and runtime indexes.
* Using this function instead of [CreateModuleScope.createInsertQuery] may help the driver to optimize caches and runtime indexes.
*
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed.
*
@ -179,9 +181,9 @@ public interface CreateModuleScope {
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createInsertParamsQuery
* @see CreateModuleScope.createInsertQuery
*/
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertParamsQuery(table: Table<TableUserExtension, *>, initializer: InsertParamsQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery.InsertParams<QueryUserWrapper>
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper>
/**
* Functional interface for creating 'INSERT ... FROM' query.
@ -191,9 +193,9 @@ public interface CreateModuleScope {
* @param TableUserExtension User's type with descriptors related to table to which values will be inserted.
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createInsertFromQueryQuery
* @see CreateModuleScope.createCopyQuery
*/
public interface InsertFromQueryQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
public interface CopyQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
@ -201,9 +203,9 @@ public interface CreateModuleScope {
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createInsertFromQueryQuery
* @see CreateModuleScope.createCopyQuery
*/
public fun createInsert(table: Table<TableUserExtension, *>, creator: CreateInsertQueryScope.InsertFromQuery<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
public fun createCopy(table: Table<TableUserExtension, *>, creator: CreateCopyQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
}
/**
@ -215,13 +217,13 @@ public interface CreateModuleScope {
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createTemporaryInsertFromQueryQuery
* @see CreateModuleScope.createTemporaryCopyQuery
*/
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertFromQueryQuery(table: Table<TableUserExtension, *>, initializer: InsertFromQueryQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery.InsertFromQuery<QueryUserWrapper>
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQueryCreator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper>
/**
* Creates 'INSERT ... FROM' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade].
* Using this function instead of [CreateModuleScope.createInsertFromQueryQuery] may help the driver to optimize caches and runtime indexes.
* Using this function instead of [CreateModuleScope.createCopyQuery] may help the driver to optimize caches and runtime indexes.
*
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] must be recreated if needed.
*
@ -229,9 +231,9 @@ public interface CreateModuleScope {
* @param initializer Query-related descriptors initializer.
* @return Query descriptor.
*
* @see CreateModuleScope.createInsertFromQueryQuery
* @see CreateModuleScope.createCopyQuery
*/
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertFromQueryQuery(table: Table<TableUserExtension, *>, initializer: InsertFromQueryQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery.InsertFromQuery<QueryUserWrapper>
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQueryCreator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper>
/**
* Functional interface for creating 'UPDATE' query.

View File

@ -0,0 +1,5 @@
package ru.landgrafhomyak.serdha.api.v0.dml
public interface CopyQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension
}

View File

@ -0,0 +1,9 @@
package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Column
import ru.landgrafhomyak.serdha.api.v0.ddl.types.ColumnType
public interface CreateCopyQueryScope<TargetTableUserExtension : Any, QueryUserExtension : Any> :_CreateInsertOrCopyQueryScope<TargetTableUserExtension, QueryUserExtension> {
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> insert(column: Column<RuntimeType, DatabaseType, TargetTableUserExtension>, expression: Expression<RuntimeType, DatabaseType, QueryUserExtension>)
}

View File

@ -3,70 +3,18 @@ package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Column
import ru.landgrafhomyak.serdha.api.v0.ddl.types.ColumnType
import ru.landgrafhomyak.serdha.api.v0.ddl.table.UniqueIndex
public interface CreateInsertQueryScope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val insertedValues: SelectedTable<TargetTableUserExtension, QueryUserExtension>
@Suppress("ClassName")
public interface _UpsertClauseScope<TargetTableUserExtension : Any, QueryUserExtension : Any> {
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> oldColumnValue(c: Column<RuntimeType, DatabaseType, TargetTableUserExtension>): Expression<RuntimeType, DatabaseType, QueryUserExtension>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> updateColumn(c: Column<RuntimeType, DatabaseType, TargetTableUserExtension>, e: Expression<RuntimeType, DatabaseType, QueryUserExtension>)
}
public fun onConflictUpdate(u: UniqueIndex<TargetTableUserExtension>, c: (_UpsertClauseScope<TargetTableUserExtension, QueryUserExtension>) -> Unit)
public fun onConflictThrow(u: UniqueIndex<TargetTableUserExtension>)
public fun onConflictIgnore(u: UniqueIndex<TargetTableUserExtension>)
public val returningInserted: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
@Suppress("ClassName")
public interface _ReturningUpdatedClauseScope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension> {
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> oldColumnValue(c: Column<RuntimeType, DatabaseType, TargetTableUserExtension>): Expression<RuntimeType, DatabaseType, QueryUserExtension>
}
public val returningUpdated: _ReturningUpdatedClauseScope<TargetTableUserExtension, QueryUserExtension>
public interface InsertParams<TargetTableUserExtension : Any, QueryUserExtension : Any> : CreateInsertQueryScope<TargetTableUserExtension, QueryUserExtension> {
public class DataParam<@Suppress("unused") QueryUserExtension : Any> private constructor()
public val dataExpressionBuilder: Expression.Builder<DataParam<QueryUserExtension>>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> dataParam(name: String, type: DatabaseType): InputParam<RuntimeType, DatabaseType, DataParam<QueryUserExtension>>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> insertParam(
column: Column<RuntimeType, DatabaseType, TargetTableUserExtension>,
paramName: String = column.name,
): InputParam<RuntimeType, DatabaseType, DataParam<QueryUserExtension>>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> insert(column: Column<RuntimeType, DatabaseType, TargetTableUserExtension>, expression: Expression<RuntimeType, DatabaseType, DataParam<QueryUserExtension>>)
}
public interface InsertFromQuery<TargetTableUserExtension : Any, QueryUserExtension : Any> : CreateInsertQueryScope<TargetTableUserExtension, QueryUserExtension> {
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> insert(column: Column<RuntimeType, DatabaseType, TargetTableUserExtension>, expression: Expression<RuntimeType, DatabaseType, QueryUserExtension>)
}
}
public interface CreateInsertQueryScope<TargetTableUserExtension : Any, QueryUserExtension : Any> :_CreateInsertOrCopyQueryScope<TargetTableUserExtension, QueryUserExtension> {
public class DataParam<@Suppress("unused") QueryUserExtension : Any> private constructor()
public val dataExpressionBuilder: Expression.Builder<DataParam<QueryUserExtension>>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> dataParam(name: String, type: DatabaseType): InputParam<RuntimeType, DatabaseType, DataParam<QueryUserExtension>>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> insertParam(
column: Column<RuntimeType, DatabaseType, TargetTableUserExtension>,
paramName: String = column.name,
): InputParam<RuntimeType, DatabaseType, DataParam<QueryUserExtension>>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> insert(column: Column<RuntimeType, DatabaseType, TargetTableUserExtension>, expression: Expression<RuntimeType, DatabaseType, DataParam<QueryUserExtension>>)
}

View File

@ -2,8 +2,4 @@ package ru.landgrafhomyak.serdha.api.v0.dml
public interface InsertQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension
public interface InsertParams<QueryUserExtension : Any> : InsertQuery<QueryUserExtension>
public interface InsertFromQuery<QueryUserExtension : Any> : InsertQuery<QueryUserExtension>
}

View File

@ -22,37 +22,37 @@ public interface _CommonCreateQueryScope<QueryUserExtension : Any> {
public fun <SubqueryUserExtension : Any> selectQuery(q: CanBeSubquery<SubqueryUserExtension>, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit): SelectedTable<SubqueryUserExtension, QueryUserExtension>
public class SelectedInsert<SubqueryUserExtension : Any, QueryUserExtension : Any>(
public class SelectedDiff<SubqueryUserExtension : Any, QueryUserExtension : Any>(
public val inserted: SelectedTable<SubqueryUserExtension, QueryUserExtension>,
public val updated: SelectedTable<SubqueryUserExtension, QueryUserExtension>
)
public fun <SubqueryUserExtension : Any> selectInsert(q: InsertQuery.InsertParams<SubqueryUserExtension>, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit): SelectedInsert<SubqueryUserExtension, QueryUserExtension>
public fun <SubqueryUserExtension : Any> selectInsert(q: InsertQuery<SubqueryUserExtension>, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit): SelectedDiff<SubqueryUserExtension, QueryUserExtension>
@Suppress("FunctionName")
@LowLevelApi
public fun <SubqueryUserExtension : Any> _selectInsert(
q: InsertQuery.InsertFromQuery<SubqueryUserExtension>,
public fun <SubqueryUserExtension : Any> _selectCopy(
q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
r: (_ParametersSetter._Multi<CreateInsertQueryScope.InsertParams.DataParam<SubqueryUserExtension>, Nothing>) -> Unit
): SelectedInsert<SubqueryUserExtension, QueryUserExtension>
r: (_ParametersSetter._Multi<CreateInsertQueryScope.DataParam<SubqueryUserExtension>, Nothing>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension>
@OptIn(LowLevelApi::class)
public fun <SubqueryUserExtension : Any> selectInsertOne(
q: InsertQuery.InsertFromQuery<SubqueryUserExtension>,
public fun <SubqueryUserExtension : Any> selectCopyOne(
q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
r: (ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedInsert<SubqueryUserExtension, QueryUserExtension> =
this._selectInsert(q, p, r)
r: (ParametersSetter<CreateInsertQueryScope.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension> =
this._selectCopy(q, p, r)
@OptIn(LowLevelApi::class)
public fun <SubqueryUserExtension : Any, T> selectInsertMulti(
q: InsertQuery.InsertFromQuery<SubqueryUserExtension>,
public fun <SubqueryUserExtension : Any, T> selectCopyMulti(
q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
data: Iterable<T>,
r: (T, ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedInsert<SubqueryUserExtension, QueryUserExtension> =
this._selectInsert(q, p) { rr -> for (e in data) r(e, rr) }
r: (T, ParametersSetter<CreateInsertQueryScope.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension> =
this._selectCopy(q, p) { rr -> for (e in data) r(e, rr) }
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> param(name: String, type: DatabaseType): InputParam<RuntimeType, DatabaseType, QueryUserExtension>

View File

@ -0,0 +1,54 @@
package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Column
import ru.landgrafhomyak.serdha.api.v0.ddl.types.ColumnType
import ru.landgrafhomyak.serdha.api.v0.ddl.table.UniqueIndex
@Suppress("ClassName")
public interface _CreateInsertOrCopyQueryScope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val insertedValues: SelectedTable<TargetTableUserExtension, QueryUserExtension>
@Suppress("ClassName")
public interface _UpsertClauseScope<TargetTableUserExtension : Any, QueryUserExtension : Any> {
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> oldColumnValue(c: Column<RuntimeType, DatabaseType, TargetTableUserExtension>): Expression<RuntimeType, DatabaseType, QueryUserExtension>
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> updateColumn(c: Column<RuntimeType, DatabaseType, TargetTableUserExtension>, e: Expression<RuntimeType, DatabaseType, QueryUserExtension>)
}
public fun onConflictUpdate(u: UniqueIndex<TargetTableUserExtension>, c: (_UpsertClauseScope<TargetTableUserExtension, QueryUserExtension>) -> Unit)
public fun onConflictThrow(u: UniqueIndex<TargetTableUserExtension>)
public fun onConflictIgnore(u: UniqueIndex<TargetTableUserExtension>)
public val returningInserted: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
@Suppress("ClassName")
public interface _ReturningUpdatedClauseScope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension> {
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType>> oldColumnValue(c: Column<RuntimeType, DatabaseType, TargetTableUserExtension>): Expression<RuntimeType, DatabaseType, QueryUserExtension>
}
public val returningUpdated: _ReturningUpdatedClauseScope<TargetTableUserExtension, QueryUserExtension>
}

View File

@ -4,9 +4,11 @@ import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.ddl.module.Module
import ru.landgrafhomyak.serdha.api.v0.ddl.types.RowId
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml._CreateInsertOrCopyQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery
@ -21,11 +23,11 @@ public interface SynchronizedDatabase<DatabaseUserExtension : Any> : Module<Data
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedInsertParams(query: InsertQuery.InsertParams<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
public suspend fun <QueryUserWrapper : Any> _autoTransactedInsert(query: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<CreateInsertQueryScope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedInsertFromQuery(query: InsertQuery.InsertFromQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>
public suspend fun <QueryUserWrapper : Any> _autoTransactedCopy(query: CopyQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>
@Suppress("FunctionName")
@LowLevelApi

View File

@ -1,9 +1,11 @@
package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml._CreateInsertOrCopyQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery
@ -14,11 +16,11 @@ public interface Transaction {
@Suppress("FunctionName")
@LowLevelApi
public fun <QueryUserWrapper : Any> _insertParams(compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
public fun <QueryUserWrapper : Any> _insert(compiledQuery: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<CreateInsertQueryScope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
@Suppress("FunctionName")
@LowLevelApi
public fun <QueryUserWrapper : Any> _insertFromQuery(compiledQuery: InsertQuery.InsertFromQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>
public fun <QueryUserWrapper : Any> _copy(compiledQuery: CopyQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>
@Suppress("FunctionName")
@LowLevelApi

View File

@ -6,9 +6,10 @@ import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
import kotlin.jvm.JvmName
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml.CreateInsertQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery
@ -293,12 +294,12 @@ public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.au
@Suppress("FunctionName", "DuplicatedCode")
@PublishedApi
@OptIn(LowLevelApi::class)
internal suspend inline fun <Q : Any, T> _wrapInsertParamsWithLambdas(
compiledQuery: InsertQuery.InsertParams<Q>,
queryGetter: () -> _ParametersSetter<Q, _ParametersSetter._Multi<CreateInsertQueryScope.InsertParams.DataParam<Q>, _ResultSet<Q, _ResultSet<Q, Unit>>?>>,
internal suspend inline fun <Q : Any, T> _wrapInsertWithLambdas(
compiledQuery: InsertQuery<Q>,
queryGetter: () -> _ParametersSetter<Q, _ParametersSetter._Multi<CreateInsertQueryScope.DataParam<Q>, _ResultSet<Q, _ResultSet<Q, Unit>>?>>,
parameters: (ParametersSetter<Q>) -> Unit,
data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<Q>>) -> Unit,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<Q>>) -> Unit,
hasReturning: Boolean,
returningInserted: (_ResultSet<Q, *>) -> Unit,
returningUpdated: (_ResultSet<Q, *>) -> Unit,
@ -342,19 +343,19 @@ internal suspend inline fun <Q : Any, T> _wrapInsertParamsWithLambdas(
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insertParams(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insert(
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit,
) {
contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
callsInPlace(rowFormatter, InvocationKind.UNKNOWN)
}
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._insertParams(compiledQuery) },
queryGetter = { this._insert(compiledQuery) },
parameters = parameters,
data = data,
rowFormatter = rowFormatter,
@ -366,19 +367,19 @@ public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insertParams(
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.autoTransactedInsertParams(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.autoTransactedInsert(
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit,
) {
contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
callsInPlace(rowFormatter, InvocationKind.UNKNOWN)
}
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._autoTransactedInsertParams(compiledQuery) },
queryGetter = { this._autoTransactedInsert(compiledQuery) },
parameters = parameters,
data = data,
rowFormatter = rowFormatter,
@ -390,11 +391,11 @@ public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.au
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insertParamsReturningIterate(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insertReturningIterate(
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit,
insertedRows: (Row<QueryUserWrapper>) -> Unit,
updatedRows: (Row<QueryUserWrapper>) -> Unit,
) {
@ -402,9 +403,9 @@ public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insertParamsRe
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
callsInPlace(rowFormatter, InvocationKind.UNKNOWN)
}
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._insertParams(compiledQuery) },
queryGetter = { this._insert(compiledQuery) },
parameters = parameters,
data = data,
rowFormatter = rowFormatter,
@ -416,11 +417,11 @@ public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insertParamsRe
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.autoTransactedInsertParametersReturningIterate(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.autoTransactedInsertReturningIterate(
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit,
insertedRows: (Row<QueryUserWrapper>) -> Unit,
updatedRows: (Row<QueryUserWrapper>) -> Unit,
) {
@ -428,9 +429,9 @@ public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.au
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
callsInPlace(rowFormatter, InvocationKind.UNKNOWN)
}
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._autoTransactedInsertParams(compiledQuery) },
queryGetter = { this._autoTransactedInsert(compiledQuery) },
parameters = parameters,
data = data,
rowFormatter = rowFormatter,
@ -458,17 +459,17 @@ internal object SingleIterable : Iterable<Unit>, Iterator<Unit> {
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any> Transaction.insertSingle(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit,
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit,
) {
contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
callsInPlace(rowData, InvocationKind.EXACTLY_ONCE)
}
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._insertParams(compiledQuery) },
queryGetter = { this._insert(compiledQuery) },
parameters = parameters,
data = SingleIterable,
rowFormatter = { _, r -> rowData(r) },
@ -481,17 +482,17 @@ public suspend inline fun <QueryUserWrapper : Any> Transaction.insertSingle(
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoTransactedInsertSingle(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit,
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit,
) {
contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
callsInPlace(rowData, InvocationKind.EXACTLY_ONCE)
}
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._autoTransactedInsertParams(compiledQuery) },
queryGetter = { this._autoTransactedInsert(compiledQuery) },
parameters = parameters,
data = SingleIterable,
rowFormatter = { _, r -> rowData(r) },
@ -505,9 +506,9 @@ public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoT
@Suppress("DuplicatedCode")
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertSingleReturning(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> R,
updatedRows: (Row<QueryUserWrapper>) -> R
): R {
@ -519,9 +520,9 @@ public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertSingleRe
}
var isReturned = false
var ret: R? = null
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._insertParams(compiledQuery) },
queryGetter = { this._insert(compiledQuery) },
parameters = parameters,
hasReturning = true,
data = SingleIterable,
@ -550,9 +551,9 @@ public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertSingleRe
@Suppress("DuplicatedCode")
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.autoTransactedInsertSingleReturning(
compiledQuery: InsertQuery.InsertParams<QueryUserWrapper>,
compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.InsertParams.DataParam<QueryUserWrapper>>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> R,
updatedRows: (Row<QueryUserWrapper>) -> R
): R {
@ -564,9 +565,9 @@ public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.au
}
var isReturned = false
var ret: R? = null
_wrapInsertParamsWithLambdas(
_wrapInsertWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._autoTransactedInsertParams(compiledQuery) },
queryGetter = { this._autoTransactedInsert(compiledQuery) },
parameters = parameters,
hasReturning = true,
data = SingleIterable,
@ -595,8 +596,8 @@ public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.au
@Suppress("FunctionName", "DuplicatedCode")
@PublishedApi
@OptIn(LowLevelApi::class)
internal suspend inline fun <Q : Any> _wrapInsertFromQueryWithLambdas(
compiledQuery: InsertQuery.InsertFromQuery<Q>,
internal suspend inline fun <Q : Any> _wrapCopyWithLambdas(
compiledQuery: CopyQuery<Q>,
queryGetter: () -> _ParametersSetter<Q, _ResultSet<Q, _ResultSet<Q, Unit>>?>,
parameters: (ParametersSetter<Q>) -> Unit,
hasReturning: Boolean,
@ -633,16 +634,16 @@ internal suspend inline fun <Q : Any> _wrapInsertFromQueryWithLambdas(
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any> Transaction.insertFromQuery(
compiledQuery: InsertQuery.InsertFromQuery<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any> Transaction.copy(
compiledQuery: CopyQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
) {
contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
}
_wrapInsertFromQueryWithLambdas(
_wrapCopyWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._insertFromQuery(compiledQuery) },
queryGetter = { this._copy(compiledQuery) },
parameters = parameters,
hasReturning = false,
returningInserted = {},
@ -652,16 +653,16 @@ public suspend inline fun <QueryUserWrapper : Any> Transaction.insertFromQuery(
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoTransactedInsertFromQuery(
compiledQuery: InsertQuery.InsertFromQuery<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoTransactedCopy(
compiledQuery: CopyQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
) {
contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
}
_wrapInsertFromQueryWithLambdas(
_wrapCopyWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._autoTransactedInsertFromQuery(compiledQuery) },
queryGetter = { this._autoTransactedCopy(compiledQuery) },
parameters = parameters,
hasReturning = false,
returningInserted = {},
@ -671,8 +672,8 @@ public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoT
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any> Transaction.insertFromQueryReturningIterate(
compiledQuery: InsertQuery.InsertFromQuery<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any> Transaction.copyReturningIterate(
compiledQuery: CopyQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> Unit,
updatedRows: (Row<QueryUserWrapper>) -> Unit
@ -682,9 +683,9 @@ public suspend inline fun <QueryUserWrapper : Any> Transaction.insertFromQueryRe
callsInPlace(insertedRows, InvocationKind.UNKNOWN)
callsInPlace(updatedRows, InvocationKind.UNKNOWN)
}
_wrapInsertFromQueryWithLambdas(
_wrapCopyWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._insertFromQuery(compiledQuery) },
queryGetter = { this._copy(compiledQuery) },
parameters = parameters,
hasReturning = true,
returningInserted = { rs -> while (rs._next()) insertedRows(rs) },
@ -694,8 +695,8 @@ public suspend inline fun <QueryUserWrapper : Any> Transaction.insertFromQueryRe
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoTransactedInsertFromQueryReturningIterate(
compiledQuery: InsertQuery.InsertFromQuery<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoTransactedCopyReturningIterate(
compiledQuery: CopyQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> Unit,
updatedRows: (Row<QueryUserWrapper>) -> Unit
@ -705,9 +706,9 @@ public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoT
callsInPlace(insertedRows, InvocationKind.UNKNOWN)
callsInPlace(updatedRows, InvocationKind.UNKNOWN)
}
_wrapInsertFromQueryWithLambdas(
_wrapCopyWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._autoTransactedInsertFromQuery(compiledQuery) },
queryGetter = { this._autoTransactedCopy(compiledQuery) },
parameters = parameters,
hasReturning = true,
returningInserted = { rs -> while (rs._next()) insertedRows(rs) },
@ -717,8 +718,8 @@ public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoT
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertFromQueryReturningSingleOrNull(
compiledQuery: InsertQuery.InsertFromQuery<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any, R> Transaction.copyReturningSingleOrNull(
compiledQuery: CopyQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> R,
updatedRows: (Row<QueryUserWrapper>) -> R
@ -730,9 +731,9 @@ public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertFromQuer
}
var isReturned = false
var ret: R? = null
_wrapInsertFromQueryWithLambdas(
_wrapCopyWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._insertFromQuery(compiledQuery) },
queryGetter = { this._copy(compiledQuery) },
parameters = parameters,
hasReturning = true,
returningInserted = returningInserted@{ rs ->
@ -756,8 +757,8 @@ public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertFromQuer
}
@OptIn(LowLevelApi::class)
public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.autoTransactedInsertFromQueryReturningSingleOrNull(
compiledQuery: InsertQuery.InsertFromQuery<QueryUserWrapper>,
public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.autoTransactedCopyReturningSingleOrNull(
compiledQuery: CopyQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> R,
updatedRows: (Row<QueryUserWrapper>) -> R
@ -769,9 +770,9 @@ public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.au
}
var isReturned = false
var ret: R? = null
_wrapInsertFromQueryWithLambdas(
_wrapCopyWithLambdas(
compiledQuery = compiledQuery,
queryGetter = { this._autoTransactedInsertFromQuery(compiledQuery) },
queryGetter = { this._autoTransactedCopy(compiledQuery) },
parameters = parameters,
hasReturning = true,
returningInserted = returningInserted@{ rs ->