Simplified 'INSERT', 'UPDATE' and 'DELETE' queries

This commit is contained in:
Andrew Golovashevich 2025-01-23 22:37:55 +03:00
parent d8c9440126
commit a0243487f8
15 changed files with 196 additions and 224 deletions

View File

@ -1,6 +1,6 @@
package ru.landgrafhomyak.serdha.api.v0.misc
public interface Expression<RuntimeType, DT : DatabaseType<RuntimeType>, OwnerBuilderUserExtension : Any> {
public interface Expression<RT, DT : DatabaseType<RT>, OwnerBuilderUserExtension : Any> {
public interface Builder<OwnerBuilderUserExtension : Any> {
}

View File

@ -0,0 +1,9 @@
package ru.landgrafhomyak.serdha.api.v0.misc
public interface Input<RT, DT : DatabaseType<RT>, OwnerQueryUserExtension : Any> : Expression<RT, DT, OwnerQueryUserExtension> {
public val name: String
public val userWrapper: OwnerQueryUserExtension
public interface QueryParam<RT, DT : DatabaseType<RT>, OwnerQueryUserExtension : Any> : Expression<RT, DT, OwnerQueryUserExtension>
public interface Column<RT, DT : DatabaseType<RT>, OwnerQueryUserExtension : Any> : Expression<RT, DT, OwnerQueryUserExtension>
}

View File

@ -1,6 +0,0 @@
package ru.landgrafhomyak.serdha.api.v0.misc
public interface InputParam<RT, DT : DatabaseType<RT>, OwnerQueryUserExtension : Any> : Expression<RT, DT, OwnerQueryUserExtension> {
public val name: String
public val userWrapper: OwnerQueryUserExtension
}

View File

@ -7,7 +7,7 @@ public interface RuntimeExpression<ExpressionUserExtension : Any> {
public val userExtension: ExpressionUserExtension
public interface RuntimeExpressionInput<RT, DT : DatabaseType<RT>, ExpressionUserExtension : Any> : Column<RT, DT, ExpressionUserExtension>
public interface RuntimeExpressionOutput<RT, DT : DatabaseType<RT>, ExpressionUserExtension : Any> : InputParam<RT, DT, ExpressionUserExtension>
public interface RuntimeExpressionOutput<RT, DT : DatabaseType<RT>, ExpressionUserExtension : Any> : Input.QueryParam<RT, DT, ExpressionUserExtension>
public fun interface InputLinker<ExpressionUserExtension : Any, QueryUserExtension : Any> {
public fun link(linker: Scope<ExpressionUserExtension, QueryUserExtension>)

View File

@ -0,0 +1,3 @@
package ru.landgrafhomyak.serdha.api.v0.misc
public interface SelectedColumn<RT, DT : DatabaseType<RT>, @Suppress("unused") OwnerTableUserExtension : Any, OwnerBuilderUserExtension : Any> : Expression<RT, DT, OwnerBuilderUserExtension>

View File

@ -1,5 +1,9 @@
package ru.landgrafhomyak.serdha.api.v0.misc
public interface SelectedTable<SelectedTableUserExtension : Any, QueryUserExtension : Any> {
public fun <RT, DT : DatabaseType<RT>> selectColumn(column: Column<RT, DT, SelectedTableUserExtension>): Expression<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> selectColumn(column: Column<RT, DT, SelectedTableUserExtension>): SelectedColumn<RT, DT, SelectedTableUserExtension, QueryUserExtension>
public interface WithParamsRedirect<SelectedTableUserExtension : Any, QueryUserExtension : Any> : SelectedTable<SelectedTableUserExtension, QueryUserExtension> {
public fun <RT, DT : DatabaseType<RT>> setParam(subqueryParam: Input.QueryParam<RT, DT, SelectedTableUserExtension>, parentParam: Input.QueryParam<RT, DT, QueryUserExtension>)
}
}

View File

@ -9,31 +9,12 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
public interface CopyQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension
/**
* Functional interface for creating 'INSERT ... FROM' query.
*
* Can be implemented like a companion object that just calls [QueryUserExtension]'s constructor with the same or similar signature.
*
* @param QueryUserExtension User's type with descriptors related to query.
* @param TargetTableUserExtension User's type with descriptors related to table to which values will be inserted.
*
* @see CreateModuleScope.createCopyQuery
* @see CreateModuleScope.createTemporaryCopyQuery
*/
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : 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<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CreateInsertOrCopyQueryScope<QueryUserExtension, TargetTableUserExtension> {
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun <RT, DT : DatabaseType<RT>> insert(column: Column<RT, DT, TargetTableUserExtension>, expression: Expression<RT, DT, QueryUserExtension>)
}
}

View File

@ -1,46 +1,40 @@
package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc.Expression
import ru.landgrafhomyak.serdha.api.v0.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.table.Table
import ru.landgrafhomyak.serdha.api.v0.misc.Column
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider
import ru.landgrafhomyak.serdha.api.v0.misc.Input
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedColumn
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
import ru.landgrafhomyak.serdha.api.v0.table.Table
public interface DeleteQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> {
@Suppress("RemoveRedundantQualifierName")
public interface DeleteQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension
/**
* Functional interface for creating 'DELETE' query.
*
* Can be implemented like a companion object that just calls [QueryUserExtension]'s constructor with the same or similar signature.
*
* @param QueryUserExtension User's type with descriptors related to query.
* @param TargetTableUserExtension User's type with descriptors related to table from which data will be deleted.
*
* @see CreateModuleScope.createDeleteQuery
* @see CreateModuleScope.createTemporaryDeleteQuery
*/
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : 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<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public fun createDelete(table: Table<TargetTableUserExtension, *>, creator: DeleteQuery.Creator.Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val targetTable: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public val selector: SelectedTable.WithParamsRedirect<SelectorTableUserExtension, QueryUserExtension>
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public var selectorColumn: SelectedColumn<*, DatabaseType.ROW_ID<TargetTableUserExtension>, SelectorTableUserExtension, QueryUserExtension>
public fun limit(size: UInt)
public val types: DatabaseTypesProvider
public val returning: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): Input.QueryParam<RT, DT, QueryUserExtension>
}
}
public interface WithReturning<QueryUserExtension : Any> : DeleteQuery<QueryUserExtension>, _Selectable<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public fun createDelete(table: Table<TargetTableUserExtension, *>, creator: DeleteQuery.WithReturning.Creator.Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> : DeleteQuery.Creator.Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension> {
public val removedValues: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnColumn(c: SelectedColumn<RT, DT, *, QueryUserExtension>): Column<RT, DT, QueryUserExtension>
}
}
}
}

View File

@ -1,52 +1,99 @@
package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc.Expression
import ru.landgrafhomyak.serdha.api.v0.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.misc.Column
import ru.landgrafhomyak.serdha.api.v0.table.Table
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.misc.InputParam
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider
import ru.landgrafhomyak.serdha.api.v0.misc.Input
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedColumn
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
import ru.landgrafhomyak.serdha.api.v0.table.UniqueIndex
public interface InsertQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension
/**
* Functional interface for creating 'INSERT ... VALUES' query.
*
* Can be implemented like a companion object that just calls [QueryUserExtension]'s constructor with the same or similar signature.
*
* @param QueryUserExtension User's type with descriptors related to query.
* @param TargetTableUserExtension User's type with descriptors related to table to which values will be inserted.
*
* @see CreateModuleScope.createInsertQuery
* @see CreateModuleScope.createTemporaryInsertQuery
*/
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : 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<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
@Suppress("ClassName")
public interface _UpsertClauseScope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun keepColumn(c: Column<*, *, TargetTableUserExtension>)
public fun overrideColumn(c: Column<*, *, TargetTableUserExtension>)
public fun setConstant(c: Input.QueryParam<*, *, QueryUserExtension>)
}
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CreateInsertOrCopyQueryScope<QueryUserExtension, TargetTableUserExtension> {
public class DataParam<@Suppress("unused") QueryUserExtension : Any> private constructor()
@Suppress("ClassName")
public interface _CommonInsertCreatorScope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public val types: DatabaseTypesProvider
public val dataExpressionBuilder: Expression.Builder<DataParam<QueryUserExtension>>
public fun <RT, DT : DatabaseType<RT>> queryParam(name: String, type: DT): Input.Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> dataParam(name: String, type: DT): InputParam<RT, DT, DataParam<QueryUserExtension>>
public fun <RT, DT : DatabaseType<RT>> insertConstant(
column: Column<RT, DT, TargetTableUserExtension>,
paramName: String = column.name,
): Input.QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertParam(
column: Column<RT, DT, TargetTableUserExtension>,
paramName: String = column.name,
): InputParam<RT, DT, DataParam<QueryUserExtension>>
public fun onConflictUpdate(u: UniqueIndex<TargetTableUserExtension>, c: (_UpsertClauseScope<QueryUserExtension, TargetTableUserExtension>) -> Unit)
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> insert(column: Column<RuntimeType, DT, TargetTableUserExtension>, expression: Expression<RuntimeType, DT, DataParam<QueryUserExtension>>)
public fun onConflictThrow(u: UniqueIndex<TargetTableUserExtension>)
public fun onConflictSkip(u: UniqueIndex<TargetTableUserExtension>)
}
public interface SingleRow<QueryUserExtension : Any, TargetTableUserExtension : Any> : InsertQuery<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun createInsertSingleRow(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CommonInsertCreatorScope<QueryUserExtension, TargetTableUserExtension> {
}
}
public interface WithReturning<QueryUserExtension : Any, TargetTableUserExtension : Any> : SingleRow<QueryUserExtension, TargetTableUserExtension>, _Selectable<QueryUserExtension> {
public fun createInsertSingleRowWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CommonInsertCreatorScope<QueryUserExtension, TargetTableUserExtension> {
public val valuesAfterInsert: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun onConflictReturnOnly(u: UniqueIndex<TargetTableUserExtension>)
public fun <RT, DT : DatabaseType<RT>> returnColumn(c: SelectedColumn<RT, DT, *, QueryUserExtension>): Column<RT, DT, QueryUserExtension>
}
}
}
public interface FromSubquery<QueryUserExtension : Any, TargetTableUserExtension : Any> : InsertQuery<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SourceQueryUserExtension : Any> {
public fun createInsertFromQuery(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension, SourceQueryUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any, SourceQueryUserExtension : Any> : _CommonInsertCreatorScope<QueryUserExtension, TargetTableUserExtension> {
public val sourceValues: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertColumn(dst: Column<RT, DT, TargetTableUserExtension>, src: SelectedColumn<RT, DT, SourceQueryUserExtension, QueryUserExtension>)
}
}
public interface WithReturning<QueryUserExtension : Any, TargetTableUserExtension : Any> : FromSubquery<QueryUserExtension, TargetTableUserExtension>, _Selectable<QueryUserExtension> {
public fun createInsertSingleRowWithReturning(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CommonInsertCreatorScope<QueryUserExtension, TargetTableUserExtension> {
public val valuesAfterInsert: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun onConflictReturnOnly(u: UniqueIndex<TargetTableUserExtension>)
public fun <RT, DT : DatabaseType<RT>> returnColumn(c: SelectedColumn<RT, DT, *, QueryUserExtension>): Column<RT, DT, QueryUserExtension>
}
}
}
public interface MultipleRows<QueryUserExtension : Any, TargetTableUserExtension : Any> : InsertQuery<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun createInsertMultipleRows(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CommonInsertCreatorScope<QueryUserExtension, TargetTableUserExtension> {
public fun <RT, DT : DatabaseType<RT>> inputColumn(name: String, type: DT): Input.Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertColumn(dst: Column<RT, DT, TargetTableUserExtension>, src: Input.Column<RT, DT, QueryUserExtension>)
}
}
}
}

View File

@ -2,44 +2,38 @@ package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc.Expression
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
public interface SelectQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> {
public interface SelectQuery<QueryUserExtension : Any> : _Selectable<QueryUserExtension> {
public val userExtension: QueryUserExtension
public enum class Order {
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
@Suppress("ClassName")
public interface _CommonSelectCreatorScope<QueryUserExtension : Any> {
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public interface Scope<QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension>, _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension> {
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public var limit: UInt
public fun limit(size: UInt)
public var offset: ULong
}
@Suppress("SpellCheckingInspection")
public fun offsetedLimit(offset: ULong, size: UInt)
public interface JoinCreator<QueryUserExtension : Any, LeftTableUserExtension : Any, RightTableUserExtension : Any> : _CommonSelectCreatorScope<QueryUserExtension> {
public fun createSelectWithJoin(creator: Scope<QueryUserExtension, LeftTableUserExtension, RightTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, LeftTableUserExtension : Any, RightTableUserExtension : Any> {
public val leftTable: SelectedTable<LeftTableUserExtension, QueryUserExtension>
public val rightTable: SelectedTable<RightTableUserExtension, QueryUserExtension>
}
}
public interface Creator<QueryUserExtension : Any, TableUserExtension : Any> {
public fun createSelect(creator: Scope<QueryUserExtension, TableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TableUserExtension : Any> : _CommonSelectCreatorScope<QueryUserExtension> {
public val selectedTable: TableUserExtension
}
}
}

View File

@ -1,54 +1,39 @@
package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc.Expression
import ru.landgrafhomyak.serdha.api.v0.module.CreateModuleScope
import ru.landgrafhomyak.serdha.api.v0.misc.Column
import ru.landgrafhomyak.serdha.api.v0.table.Table
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.misc.Input
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedColumn
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
public interface UpdateQuery<QueryUserExtension : Any> : _CommonCreateQueryScope.CanBeSubquery<QueryUserExtension> {
@Suppress("RemoveRedundantQualifierName")
public interface UpdateQuery<QueryUserExtension : Any> {
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 QueryUserWrapper User's type with descriptors related to query.
* @param TableUserExtension User's type with descriptors related to table, whose rows will be updated.
*
* @see CreateModuleScope.createUpdateQuery
* @see CreateModuleScope.createTemporaryUpdateQuery
*/
public interface Creator<QueryUserWrapper : Any, TargetTableUserExtension : 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<TargetTableUserExtension, *>, creator: Scope<QueryUserWrapper, TargetTableUserExtension>): QueryUserWrapper
public interface Creator<QueryUserWrapper : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public fun createUpdate(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserWrapper, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserWrapper
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension> {
public val targetTable: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public val oldValues: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> selectOldColumnValue(c: Column<RuntimeType, DT, TargetTableUserExtension>): Expression<RuntimeType, DT, QueryUserExtension>
public val selector: SelectedTable.WithParamsRedirect<SelectorTableUserExtension, QueryUserExtension>
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> updateColumn(c: Column<RuntimeType, DT, TargetTableUserExtension>, e: Expression<RuntimeType, DT, QueryUserExtension>)
public var selectorColumn: SelectedColumn<*, DatabaseType.ROW_ID<TargetTableUserExtension>, SelectorTableUserExtension, QueryUserExtension>
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> updateColumn(c: Column<RuntimeType, DT, TargetTableUserExtension>, e: SelectedColumn<RuntimeType, DT, SelectorTableUserExtension, QueryUserExtension>)
public fun limit(size: UInt)
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): Input.QueryParam<RT, DT, QueryUserExtension>
}
}
@Suppress("SpellCheckingInspection")
public fun offsetedLimit(offset: ULong, size: UInt)
public interface WithReturning<QueryUserExtension : Any> : UpdateQuery<QueryUserExtension>, _Selectable<QueryUserExtension> {
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> {
public fun createDelete(table: Table<TargetTableUserExtension, *>, creator: UpdateQuery.WithReturning.Creator.Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension>): QueryUserExtension
public val returning: _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension>
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any, SelectorTableUserExtension : Any> : UpdateQuery.Creator.Scope<QueryUserExtension, TargetTableUserExtension, SelectorTableUserExtension> {
public fun <RT, DT : DatabaseType<RT>> returnColumn(c: SelectedColumn<RT, DT, *, QueryUserExtension>): Column<RT, DT, QueryUserExtension>
}
}
}
}

View File

@ -1,73 +1,29 @@
package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc.Expression
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.misc.Column
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.table.Table
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider
import ru.landgrafhomyak.serdha.api.v0.misc.InputParam
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
import ru.landgrafhomyak.serdha.api.v0.misc.Input
import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter
import ru.landgrafhomyak.serdha.api.v0.runtime._ParametersSetter
@Suppress("ClassName")
public interface _CommonCreateQueryScope<QueryUserExtension : Any> {
public val types: DatabaseTypesProvider
public fun <SelectedTableUserExtension : Any> selectTable(t: Table<SelectedTableUserExtension, *>): SelectedTable<SelectedTableUserExtension, QueryUserExtension>
public interface CanBeSubquery<@Suppress("unused") SelectedQueryUserExtension : Any>
public val expressionBuilder: Expression.Builder<QueryUserExtension>
public interface SubqueryParametersSetter<SubqueryUserExtension : Any, QueryUserExtension : Any> : ParametersSetter<SubqueryUserExtension> {
public operator fun <RT, DT : DatabaseType<RT>> set(c: InputParam<RT, DT, QueryUserExtension>, value: Expression<RT, DT, QueryUserExtension>)
public operator fun <RT, DT : DatabaseType<RT>> set(c: Input.QueryParam<RT, DT, QueryUserExtension>, value: Expression<RT, DT, QueryUserExtension>)
}
public fun <SubqueryUserExtension : Any> selectQuery(q: CanBeSubquery<SubqueryUserExtension>, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit): SelectedTable<SubqueryUserExtension, QueryUserExtension>
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<SubqueryUserExtension>, p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit): SelectedDiff<SubqueryUserExtension, QueryUserExtension>
@Suppress("FunctionName")
@LowLevelApi
public fun <SubqueryUserExtension : Any> _selectCopy(
q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
r: (_ParametersSetter._Multi<InsertQuery.Creator.Scope.DataParam<SubqueryUserExtension>, Nothing>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension>
@OptIn(LowLevelApi::class)
public fun <SubqueryUserExtension : Any> selectCopyOne(
q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
r: (ParametersSetter<InsertQuery.Creator.Scope.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension> =
this._selectCopy(q, p, r)
@OptIn(LowLevelApi::class)
public fun <SubqueryUserExtension : Any, T> selectCopyMulti(
q: CopyQuery<SubqueryUserExtension>,
p: (SubqueryParametersSetter<SubqueryUserExtension, QueryUserExtension>) -> Unit,
data: Iterable<T>,
r: (T, ParametersSetter<InsertQuery.Creator.Scope.DataParam<SubqueryUserExtension>>) -> Unit
): SelectedDiff<SubqueryUserExtension, QueryUserExtension> =
this._selectCopy(q, p) { rr -> for (e in data) r(e, rr) }
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): InputParam<RT, DT, QueryUserExtension>
public val expressionBuilder: Expression.Builder<QueryUserExtension>
public interface _ReturningClauseScope<QueryUserExtension : Any> {
public fun <RT, DT : DatabaseType<RT>> returnExpression(expression: Expression<RT, DT, QueryUserExtension>): Column<RT, DT, QueryUserExtension>
public val isDistinct: Boolean
public var isDistinct: Boolean
public fun orderBy(order: SelectQuery.Order, vararg columns: Expression<*, *, QueryUserExtension>)
public fun orderBy(order: SelectQuery.Order, vararg columns: Column<*, *, QueryUserExtension>)
public fun groupBy(vararg columns: Expression<*, *, QueryUserExtension>)
public fun groupBy(vararg columns: Column<*, *, QueryUserExtension>)
}
}

View File

@ -0,0 +1,4 @@
package ru.landgrafhomyak.serdha.api.v0.queries
@Suppress("ClassName")
public interface _Selectable<@Suppress("unused") QueryUserExtension : Any>

View File

@ -1,18 +1,18 @@
package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.misc.InputParam
import ru.landgrafhomyak.serdha.api.v0.misc.Input
public interface ParametersSetter<QueryUserExtension : Any> {
public operator fun <RuntimeType> set(c: InputParam<RuntimeType, *, QueryUserExtension>, value: RuntimeType)
public interface ParametersSetter<QueryUserExtension : Any/* todo*/> {
public operator fun <RuntimeType> set(c: Input<RuntimeType, *, QueryUserExtension>, value: RuntimeType)
public operator fun set(c: InputParam<Byte, *, QueryUserExtension>, value: Byte): Unit = this.set<Byte>(c, value)
public operator fun set(c: InputParam<UByte, *, QueryUserExtension>, value: UByte): Unit = this.set<UByte>(c, value)
public operator fun set(c: InputParam<Short, *, QueryUserExtension>, value: Short): Unit = this.set<Short>(c, value)
public operator fun set(c: InputParam<UShort, *, QueryUserExtension>, value: UShort): Unit = this.set<UShort>(c, value)
public operator fun set(c: InputParam<Int, *, QueryUserExtension>, value: Int): Unit = this.set<Int>(c, value)
public operator fun set(c: InputParam<UInt, *, QueryUserExtension>, value: UInt): Unit = this.set<UInt>(c, value)
public operator fun set(c: InputParam<Long, *, QueryUserExtension>, value: Long): Unit = this.set<Long>(c, value)
public operator fun set(c: InputParam<ULong, *, QueryUserExtension>, value: ULong): Unit = this.set<ULong>(c, value)
public operator fun set(c: InputParam<Char, *, QueryUserExtension>, value: Char): Unit = this.set<Char>(c, value)
public operator fun set(c: InputParam<Boolean, *, QueryUserExtension>, value: Boolean): Unit = this.set<Boolean>(c, value)
public operator fun set(c: Input<Byte, *, QueryUserExtension>, value: Byte): Unit = this.set<Byte>(c, value)
public operator fun set(c: Input<UByte, *, QueryUserExtension>, value: UByte): Unit = this.set<UByte>(c, value)
public operator fun set(c: Input<Short, *, QueryUserExtension>, value: Short): Unit = this.set<Short>(c, value)
public operator fun set(c: Input<UShort, *, QueryUserExtension>, value: UShort): Unit = this.set<UShort>(c, value)
public operator fun set(c: Input<Int, *, QueryUserExtension>, value: Int): Unit = this.set<Int>(c, value)
public operator fun set(c: Input<UInt, *, QueryUserExtension>, value: UInt): Unit = this.set<UInt>(c, value)
public operator fun set(c: Input<Long, *, QueryUserExtension>, value: Long): Unit = this.set<Long>(c, value)
public operator fun set(c: Input<ULong, *, QueryUserExtension>, value: ULong): Unit = this.set<ULong>(c, value)
public operator fun set(c: Input<Char, *, QueryUserExtension>, value: Char): Unit = this.set<Char>(c, value)
public operator fun set(c: Input<Boolean, *, QueryUserExtension>, value: Boolean): Unit = this.set<Boolean>(c, value)
}

View File

@ -1,8 +1,9 @@
package ru.landgrafhomyak.serdha.api.v0.table
import ru.landgrafhomyak.serdha.api.v0.module.Module
import ru.landgrafhomyak.serdha.api.v0.queries._Selectable
public interface Table<UserExtension : Any, PreviousUserExtension : Any> {
public interface Table<UserExtension : Any, PreviousUserExtension : Any> : _Selectable<UserExtension> {
public val userExtension: UserExtension
public val name: String
public val module: Module<*>