Reorganizing DML creators interfaces

This commit is contained in:
Andrew Golovashevich 2025-01-05 19:54:30 +03:00
parent dfd1cd950d
commit a2c89cc91d
15 changed files with 232 additions and 222 deletions

View File

@ -2,8 +2,6 @@ package ru.landgrafhomyak.serdha.api.v0.ddl.module
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery 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.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
@ -49,7 +47,7 @@ public interface CreateModuleScope {
* Creates table in [specified namespace][namespace] with [specified name][name] and stores it in the database. * Creates table in [specified namespace][namespace] with [specified name][name] and stores it in the database.
* If table was created by previous synchronizations, asserts that table at the specified path in the database is same as table provided by [initializer]. * If table was created by previous synchronizations, asserts that table at the specified path in the database is same as table provided by [initializer].
* *
* On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] this table must be [kept][UpgradeModuleScope.upgradeTable] (or [renamed][CreateModuleScope.renameTable]) or [deleted][CreateModuleScope.deleteTable]. * On [module upgrading][ModuleTemplate.CreateModuleTemplatesScope.upgradeTemplate] this table must be [kept][UpgradeModuleScope.upgradeTable] (or [renamed][UpgradeModuleScope.renameTable]) or [deleted][UpgradeModuleScope.deleteTable].
* *
* @param TableUserExtension User's type for containing table-related descriptors. * @param TableUserExtension User's type for containing table-related descriptors.
* @param namespace Way to group tables if there is a lot. * @param namespace Way to group tables if there is a lot.
@ -85,26 +83,6 @@ public interface CreateModuleScope {
*/ */
public fun <TableUserExtension : Any> createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator<TableUserExtension>): Table<TableUserExtension, Nothing> public fun <TableUserExtension : Any> createTransactionScopeTemporaryTable(namespace: Namespace, name: String, initializer: TableCreator<TableUserExtension>): Table<TableUserExtension, Nothing>
/**
* Functional interface for creating 'SELECT' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createSelectQuery
*/
public interface SelectQueryCreator<QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createSelectQuery
*/
public fun createSelect(creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateSelectQueryScope<QueryUserWrapper>): QueryUserWrapper
}
/** /**
* Creates 'SELECT' query. * Creates 'SELECT' query.
@ -117,7 +95,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createTemporarySelectQuery * @see CreateModuleScope.createTemporarySelectQuery
*/ */
public fun <QueryUserWrapper : Any> createSelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): SelectQuery<QueryUserWrapper> public fun <QueryUserWrapper : Any> createSelectQuery(initializer: SelectQuery.Creator<QueryUserWrapper>): SelectQuery<QueryUserWrapper>
/** /**
* Creates 'SELECT' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. * Creates 'SELECT' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade].
@ -131,30 +109,8 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createSelectQuery * @see CreateModuleScope.createSelectQuery
*/ */
public fun <QueryUserWrapper : Any> createTemporarySelectQuery(initializer: SelectQueryCreator<QueryUserWrapper>): SelectQuery<QueryUserWrapper> public fun <QueryUserWrapper : Any> createTemporarySelectQuery(initializer: SelectQuery.Creator<QueryUserWrapper>): SelectQuery<QueryUserWrapper>
/**
* Functional interface for creating 'INSERT ... VALUES' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @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.createInsertQuery
*/
public interface InsertQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table to which values will be inserted.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createInsertQuery
*/
public fun createInsert(table: Table<TableUserExtension, *>, creator: CreateInsertQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
}
/** /**
* Creates 'INSERT ... VALUES' query. * Creates 'INSERT ... VALUES' query.
@ -168,7 +124,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createTemporaryInsertQuery * @see CreateModuleScope.createTemporaryInsertQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQuery.Creator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper>
/** /**
* Creates 'INSERT ... VALUES' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. * Creates 'INSERT ... VALUES' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade].
@ -183,30 +139,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createInsertQuery * @see CreateModuleScope.createInsertQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQueryCreator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryInsertQuery(table: Table<TableUserExtension, *>, initializer: InsertQuery.Creator<TableUserExtension, QueryUserWrapper>): InsertQuery<QueryUserWrapper>
/**
* Functional interface for creating 'INSERT ... FROM' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @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.createCopyQuery
*/
public interface CopyQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table to which values will be inserted.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createCopyQuery
*/
public fun createCopy(table: Table<TableUserExtension, *>, creator: CreateCopyQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
}
/** /**
* Creates 'INSERT ... FROM' query. * Creates 'INSERT ... FROM' query.
@ -219,7 +152,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createTemporaryCopyQuery * @see CreateModuleScope.createTemporaryCopyQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQueryCreator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQuery.Creator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper>
/** /**
* Creates 'INSERT ... FROM' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. * Creates 'INSERT ... FROM' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade].
@ -233,30 +166,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createCopyQuery * @see CreateModuleScope.createCopyQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQueryCreator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryCopyQuery(table: Table<TableUserExtension, *>, initializer: CopyQuery.Creator<TableUserExtension, QueryUserWrapper>): CopyQuery<QueryUserWrapper>
/**
* Functional interface for creating 'UPDATE' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @param TableUserExtension User's type with descriptors related to table, whose rows will be updated.
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createUpdateQuery
*/
public interface UpdateQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table which rows will be updated.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createUpdateQuery
*/
public fun createUpdate(table: Table<TableUserExtension, *>, creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateUpdateQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
}
/** /**
* Creates 'UPDATE' query. * Creates 'UPDATE' query.
@ -269,7 +179,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createTemporaryUpdateQuery * @see CreateModuleScope.createTemporaryUpdateQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): UpdateQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQuery.Creator<TableUserExtension, QueryUserWrapper>): UpdateQuery<QueryUserWrapper>
/** /**
* Creates 'UPDATE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. * Creates 'UPDATE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade].
@ -283,30 +193,8 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createUpdateQuery * @see CreateModuleScope.createUpdateQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQueryCreator<TableUserExtension, QueryUserWrapper>): UpdateQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryUpdateQuery(table: Table<TableUserExtension, *>, initializer: UpdateQuery.Creator<TableUserExtension, QueryUserWrapper>): UpdateQuery<QueryUserWrapper>
/**
* Functional interface for creating 'DELETE' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @param TableUserExtension User's type with descriptors related to table from which data will be deleted.
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createDeleteQuery
*/
public interface DeleteQueryCreator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table from which data will be deleted.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createDeleteQuery
*/
public fun createDelete(table: Table<TableUserExtension, *>, creator: ru.landgrafhomyak.serdha.api.v0.dml.CreateDeleteQueryScope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
}
/** /**
* Creates 'DELETE' query. * Creates 'DELETE' query.
@ -319,7 +207,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createTemporaryDeleteQuery * @see CreateModuleScope.createTemporaryDeleteQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): DeleteQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQuery.Creator<TableUserExtension, QueryUserWrapper>): DeleteQuery<QueryUserWrapper>
/** /**
* Creates 'DELETE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade]. * Creates 'DELETE' query accessible only while the module is [creating][ModuleTemplate.ModuleCreator] or [updating][ModuleTemplate.ModuleUpgrade].
@ -333,7 +221,7 @@ public interface CreateModuleScope {
* *
* @see CreateModuleScope.createDeleteQuery * @see CreateModuleScope.createDeleteQuery
*/ */
public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQueryCreator<TableUserExtension, QueryUserWrapper>): DeleteQuery<QueryUserWrapper> public fun <TableUserExtension : Any, QueryUserWrapper : Any> createTemporaryDeleteQuery(table: Table<TableUserExtension, *>, initializer: DeleteQuery.Creator<TableUserExtension, QueryUserWrapper>): DeleteQuery<QueryUserWrapper>
/** /**
* Replaces [specified namespace][rootNs] with schema provided by [template]. * Replaces [specified namespace][rootNs] with schema provided by [template].

View File

@ -1,5 +1,40 @@
package ru.landgrafhomyak.serdha.api.v0.dml package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Column
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType
public interface CopyQuery<QueryUserExtension : Any> { public interface CopyQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension public val userExtension: QueryUserExtension
/**
* Functional interface for creating 'INSERT ... FROM' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @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.createCopyQuery
* @see CreateModuleScope.createTemporaryCopyQuery
*/
public interface Creator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table to which values will be inserted.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createCopyQuery
* @see CreateModuleScope.createTemporaryCopyQuery
*/
public fun createCopy(table: Table<TableUserExtension, *>, creator: Scope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
public interface Scope<TargetTableUserExtension : Any, QueryUserExtension : Any> :_CreateInsertOrCopyQueryScope<TargetTableUserExtension, QueryUserExtension> {
public fun <RT, DT : DatabaseType<RT>> insert(column: Column<RT, DT, TargetTableUserExtension>, expression: Expression<RT, DT, QueryUserExtension>)
}
}
} }

View File

@ -1,9 +0,0 @@
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.DatabaseType
public interface CreateCopyQueryScope<TargetTableUserExtension : Any, QueryUserExtension : Any> :_CreateInsertOrCopyQueryScope<TargetTableUserExtension, QueryUserExtension> {
public fun <RT, DT : DatabaseType<RT>> insert(column: Column<RT, DT, TargetTableUserExtension>, expression: Expression<RT, DT, QueryUserExtension>)
}

View File

@ -1,14 +0,0 @@
package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType
public interface CreateDeleteQueryScope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val targetTable: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public fun limit(size: UInt)
public val returning: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
}

View File

@ -1,20 +0,0 @@
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.DatabaseType
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 <RT, DT : DatabaseType<RT>> dataParam(name: String, type: DT): InputParam<RT, DT, DataParam<QueryUserExtension>>
public fun <RT, DT : DatabaseType<RT>> insertParam(
column: Column<RT, DT, TargetTableUserExtension>,
paramName: String = column.name,
): InputParam<RT, DT, DataParam<QueryUserExtension>>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> insert(column: Column<RuntimeType, DT, TargetTableUserExtension>, expression: Expression<RuntimeType, DT, DataParam<QueryUserExtension>>)
}

View File

@ -1,13 +0,0 @@
package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType
public interface CreateSelectQueryScope<QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension>, _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>{
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public fun limit(size: UInt)
@Suppress("SpellCheckingInspection")
public fun offsetedLimit(offset: ULong, size: UInt)
}

View File

@ -1,22 +0,0 @@
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.DatabaseType
public interface CreateUpdateQueryScope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val targetTable: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> selectOldColumnValue(c: Column<RuntimeType, DT, TargetTableUserExtension>): Expression<RuntimeType, DT, QueryUserExtension>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> updateColumn(c: Column<RuntimeType, DT, TargetTableUserExtension>, e: Expression<RuntimeType, DT, QueryUserExtension>)
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public fun limit(size: UInt)
@Suppress("SpellCheckingInspection")
public fun offsetedLimit(offset: ULong, size: UInt)
public val returning: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
}

View File

@ -1,5 +1,45 @@
package ru.landgrafhomyak.serdha.api.v0.dml package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType
public interface DeleteQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> { public interface DeleteQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> {
public val userExtension: QueryUserExtension public val userExtension: QueryUserExtension
/**
* Functional interface for creating 'DELETE' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @param TableUserExtension User's type with descriptors related to table from which data will be deleted.
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createDeleteQuery
* @see CreateModuleScope.createTemporaryDeleteQuery
*/
public interface Creator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table from which data will be deleted.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createDeleteQuery
* @see CreateModuleScope.createTemporaryDeleteQuery
*/
public fun createDelete(table: Table<TableUserExtension, *>, creator: Scope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
public interface Scope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val targetTable: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public fun limit(size: UInt)
public val returning: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
}
}
} }

View File

@ -1,5 +1,51 @@
package ru.landgrafhomyak.serdha.api.v0.dml package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Column
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType
public interface InsertQuery<QueryUserExtension : Any> { public interface InsertQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension public val userExtension: QueryUserExtension
/**
* Functional interface for creating 'INSERT ... VALUES' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @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.createInsertQuery
* @see CreateModuleScope.createTemporaryInsertQuery
*/
public interface Creator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table to which values will be inserted.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createInsertQuery
* @see CreateModuleScope.createTemporaryInsertQuery
*/
public fun createInsert(table: Table<TableUserExtension, *>, creator: Scope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
public interface Scope<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 <RT, DT : DatabaseType<RT>> dataParam(name: String, type: DT): InputParam<RT, DT, DataParam<QueryUserExtension>>
public fun <RT, DT : DatabaseType<RT>> insertParam(
column: Column<RT, DT, TargetTableUserExtension>,
paramName: String = column.name,
): InputParam<RT, DT, DataParam<QueryUserExtension>>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> insert(column: Column<RuntimeType, DT, TargetTableUserExtension>, expression: Expression<RuntimeType, DT, DataParam<QueryUserExtension>>)
}
}
} }

View File

@ -1,9 +1,45 @@
package ru.landgrafhomyak.serdha.api.v0.dml package ru.landgrafhomyak.serdha.api.v0.dml
public interface SelectQuery<QueryUserExtension : Any>: _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> { import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.ddl.module.CreateModuleScope
public interface SelectQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> {
public val userExtension: QueryUserExtension public val userExtension: QueryUserExtension
public enum class Order { public enum class Order {
ASC, DESC ASC, DESC
} }
/**
* Functional interface for creating 'SELECT' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createSelectQuery
* @see CreateModuleScope.createTemporarySelectQuery
*/
public interface Creator<QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createSelectQuery
* @see CreateModuleScope.createTemporarySelectQuery
*/
public fun createSelect(creator: Scope<QueryUserWrapper>): QueryUserWrapper
public interface Scope<QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension>, _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension> {
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public fun limit(size: UInt)
@Suppress("SpellCheckingInspection")
public fun offsetedLimit(offset: ULong, size: UInt)
}
}
} }

View File

@ -1,5 +1,53 @@
package ru.landgrafhomyak.serdha.api.v0.dml package ru.landgrafhomyak.serdha.api.v0.dml
import ru.landgrafhomyak.serdha.api.v0.Expression
import ru.landgrafhomyak.serdha.api.v0.ddl.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Column
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.ddl.types.DatabaseType
public interface UpdateQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> { public interface UpdateQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> {
public val userExtension: QueryUserExtension public val userExtension: QueryUserExtension
/**
* Functional interface for creating 'UPDATE' query.
*
* Can be implemented like a companion object that just calls [QueryUserWrapper]'s constructor with the same or similar signature.
*
* @param TableUserExtension User's type with descriptors related to table, whose rows will be updated.
* @param QueryUserWrapper User's type with descriptors related to query.
*
* @see CreateModuleScope.createUpdateQuery
* @see CreateModuleScope.createTemporaryUpdateQuery
*/
public interface Creator<TableUserExtension : Any, QueryUserWrapper : Any> {
/**
* Scope method that uses [creator] to create a query.
*
* @param table Descriptor of table which rows will be updated.
* @param creator Object with descriptor providers and factories.
* @return User's object with query-related descriptors for future access.
*
* @see CreateModuleScope.createUpdateQuery
* @see CreateModuleScope.createTemporaryUpdateQuery
*/
public fun createUpdate(table: Table<TableUserExtension, *>, creator: Scope<TableUserExtension, QueryUserWrapper>): QueryUserWrapper
public interface Scope<TargetTableUserExtension : Any, QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val targetTable: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> selectOldColumnValue(c: Column<RuntimeType, DT, TargetTableUserExtension>): Expression<RuntimeType, DT, QueryUserExtension>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> updateColumn(c: Column<RuntimeType, DT, TargetTableUserExtension>, e: Expression<RuntimeType, DT, QueryUserExtension>)
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public fun limit(size: UInt)
@Suppress("SpellCheckingInspection")
public fun offsetedLimit(offset: ULong, size: UInt)
public val returning: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
}
}
} }

View File

@ -35,14 +35,14 @@ public interface _CommonCreateQueryScope<QueryUserExtension : Any> {
public fun <SubqueryUserExtension : Any> _selectCopy( public fun <SubqueryUserExtension : Any> _selectCopy(
q: CopyQuery<SubqueryUserExtension>, q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
r: (_ParametersSetter._Multi<CreateInsertQueryScope.DataParam<SubqueryUserExtension>, Nothing>) -> Unit r: (_ParametersSetter._Multi<InsertQuery.Creator.Scope.DataParam<SubqueryUserExtension>, Nothing>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension> ): SelectedDiff<SubqueryUserExtension, QueryUserExtension>
@OptIn(LowLevelApi::class) @OptIn(LowLevelApi::class)
public fun <SubqueryUserExtension : Any> selectCopyOne( public fun <SubqueryUserExtension : Any> selectCopyOne(
q: CopyQuery<SubqueryUserExtension>, q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
r: (ParametersSetter<CreateInsertQueryScope.DataParam<SubqueryUserExtension>>) -> Unit r: (ParametersSetter<InsertQuery.Creator.Scope.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension> = ): SelectedDiff<SubqueryUserExtension, QueryUserExtension> =
this._selectCopy(q, p, r) this._selectCopy(q, p, r)
@ -51,7 +51,7 @@ public interface _CommonCreateQueryScope<QueryUserExtension : Any> {
q: CopyQuery<SubqueryUserExtension>, q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
data: Iterable<T>, data: Iterable<T>,
r: (T, ParametersSetter<CreateInsertQueryScope.DataParam<SubqueryUserExtension>>) -> Unit r: (T, ParametersSetter<InsertQuery.Creator.Scope.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension> = ): SelectedDiff<SubqueryUserExtension, QueryUserExtension> =
this._selectCopy(q, p) { rr -> for (e in data) r(e, rr) } this._selectCopy(q, p) { rr -> for (e in data) r(e, rr) }

View File

@ -5,10 +5,8 @@ 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.types.RowId
import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table import ru.landgrafhomyak.serdha.api.v0.ddl.table.Table
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery 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.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml._CreateInsertOrCopyQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery
@ -23,7 +21,7 @@ public interface SynchronizedDatabase<DatabaseUserExtension : Any> : Module<Data
@Suppress("FunctionName") @Suppress("FunctionName")
@LowLevelApi @LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedInsert(query: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<CreateInsertQueryScope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>> public suspend fun <QueryUserWrapper : Any> _autoTransactedInsert(query: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
@Suppress("FunctionName") @Suppress("FunctionName")
@LowLevelApi @LowLevelApi

View File

@ -2,10 +2,8 @@ package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery 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.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml._CreateInsertOrCopyQueryScope
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery import ru.landgrafhomyak.serdha.api.v0.dml.UpdateQuery
@ -16,7 +14,7 @@ public interface Transaction {
@Suppress("FunctionName") @Suppress("FunctionName")
@LowLevelApi @LowLevelApi
public fun <QueryUserWrapper : Any> _insert(compiledQuery: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<CreateInsertQueryScope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>> public fun <QueryUserWrapper : Any> _insert(compiledQuery: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
@Suppress("FunctionName") @Suppress("FunctionName")
@LowLevelApi @LowLevelApi

View File

@ -7,7 +7,6 @@ import kotlin.contracts.contract
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.dml.CopyQuery 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.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery import ru.landgrafhomyak.serdha.api.v0.dml.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery import ru.landgrafhomyak.serdha.api.v0.dml.SelectQuery
@ -296,10 +295,10 @@ public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.au
@OptIn(LowLevelApi::class) @OptIn(LowLevelApi::class)
internal suspend inline fun <Q : Any, T> _wrapInsertWithLambdas( internal suspend inline fun <Q : Any, T> _wrapInsertWithLambdas(
compiledQuery: InsertQuery<Q>, compiledQuery: InsertQuery<Q>,
queryGetter: () -> _ParametersSetter<Q, _ParametersSetter._Multi<CreateInsertQueryScope.DataParam<Q>, _ResultSet<Q, _ResultSet<Q, Unit>>?>>, queryGetter: () -> _ParametersSetter<Q, _ParametersSetter._Multi<InsertQuery.Creator.Scope.DataParam<Q>, _ResultSet<Q, _ResultSet<Q, Unit>>?>>,
parameters: (ParametersSetter<Q>) -> Unit, parameters: (ParametersSetter<Q>) -> Unit,
data: Iterable<T>, data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<Q>>) -> Unit, rowFormatter: (T, ParametersSetter<InsertQuery.Creator.Scope.DataParam<Q>>) -> Unit,
hasReturning: Boolean, hasReturning: Boolean,
returningInserted: (_ResultSet<Q, *>) -> Unit, returningInserted: (_ResultSet<Q, *>) -> Unit,
returningUpdated: (_ResultSet<Q, *>) -> Unit, returningUpdated: (_ResultSet<Q, *>) -> Unit,
@ -347,7 +346,7 @@ public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insert(
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>, data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit, rowFormatter: (T, ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit,
) { ) {
contract { contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE) callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
@ -371,7 +370,7 @@ public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.au
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>, data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit, rowFormatter: (T, ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit,
) { ) {
contract { contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE) callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
@ -395,7 +394,7 @@ public suspend inline fun <QueryUserWrapper : Any, T> Transaction.insertReturnin
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>, data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit, rowFormatter: (T, ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit,
insertedRows: (Row<QueryUserWrapper>) -> Unit, insertedRows: (Row<QueryUserWrapper>) -> Unit,
updatedRows: (Row<QueryUserWrapper>) -> Unit, updatedRows: (Row<QueryUserWrapper>) -> Unit,
) { ) {
@ -421,7 +420,7 @@ public suspend inline fun <QueryUserWrapper : Any, T> SynchronizedDatabase<*>.au
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
data: Iterable<T>, data: Iterable<T>,
rowFormatter: (T, ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit, rowFormatter: (T, ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit,
insertedRows: (Row<QueryUserWrapper>) -> Unit, insertedRows: (Row<QueryUserWrapper>) -> Unit,
updatedRows: (Row<QueryUserWrapper>) -> Unit, updatedRows: (Row<QueryUserWrapper>) -> Unit,
) { ) {
@ -461,7 +460,7 @@ internal object SingleIterable : Iterable<Unit>, Iterator<Unit> {
public suspend inline fun <QueryUserWrapper : Any> Transaction.insertSingle( public suspend inline fun <QueryUserWrapper : Any> Transaction.insertSingle(
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit, rowData: (ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit,
) { ) {
contract { contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE) callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
@ -484,7 +483,7 @@ public suspend inline fun <QueryUserWrapper : Any> Transaction.insertSingle(
public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoTransactedInsertSingle( public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoTransactedInsertSingle(
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit, rowData: (ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit,
) { ) {
contract { contract {
callsInPlace(parameters, InvocationKind.EXACTLY_ONCE) callsInPlace(parameters, InvocationKind.EXACTLY_ONCE)
@ -508,7 +507,7 @@ public suspend inline fun <QueryUserWrapper : Any> SynchronizedDatabase<*>.autoT
public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertSingleReturning( public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertSingleReturning(
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit = {}, rowData: (ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> R, insertedRows: (Row<QueryUserWrapper>) -> R,
updatedRows: (Row<QueryUserWrapper>) -> R updatedRows: (Row<QueryUserWrapper>) -> R
): R { ): R {
@ -553,7 +552,7 @@ public suspend inline fun <QueryUserWrapper : Any, R> Transaction.insertSingleRe
public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.autoTransactedInsertSingleReturning( public suspend inline fun <QueryUserWrapper : Any, R> SynchronizedDatabase<*>.autoTransactedInsertSingleReturning(
compiledQuery: InsertQuery<QueryUserWrapper>, compiledQuery: InsertQuery<QueryUserWrapper>,
parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {}, parameters: (ParametersSetter<QueryUserWrapper>) -> Unit = {},
rowData: (ParametersSetter<CreateInsertQueryScope.DataParam<QueryUserWrapper>>) -> Unit = {}, rowData: (ParametersSetter<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>>) -> Unit = {},
insertedRows: (Row<QueryUserWrapper>) -> R, insertedRows: (Row<QueryUserWrapper>) -> R,
updatedRows: (Row<QueryUserWrapper>) -> R updatedRows: (Row<QueryUserWrapper>) -> R
): R { ): R {