Simplified 'INSERT', 'UPDATE' and 'DELETE' queries
This commit is contained in:
parent
d8c9440126
commit
a0243487f8
@ -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> {
|
||||
|
||||
}
|
||||
|
@ -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>
|
||||
}
|
@ -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
|
||||
}
|
@ -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>)
|
||||
|
@ -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>
|
@ -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>)
|
||||
}
|
||||
}
|
@ -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>)
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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>> insertParam(
|
||||
public fun <RT, DT : DatabaseType<RT>> insertConstant(
|
||||
column: Column<RT, DT, TargetTableUserExtension>,
|
||||
paramName: String = column.name,
|
||||
): InputParam<RT, DT, DataParam<QueryUserExtension>>
|
||||
): Input.QueryParam<RT, DT, QueryUserExtension>
|
||||
|
||||
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> insert(column: Column<RuntimeType, DT, TargetTableUserExtension>, expression: Expression<RuntimeType, DT, DataParam<QueryUserExtension>>)
|
||||
public fun onConflictUpdate(u: UniqueIndex<TargetTableUserExtension>, c: (_UpsertClauseScope<QueryUserExtension, TargetTableUserExtension>) -> Unit)
|
||||
|
||||
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>)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
||||
public interface Scope<QueryUserExtension : Any> : _CommonCreateQueryScope<QueryUserExtension>, _CommonCreateQueryScope._ReturningClauseScope<QueryUserExtension> {
|
||||
@Suppress("ClassName")
|
||||
public interface _CommonSelectCreatorScope<QueryUserExtension : Any> {
|
||||
public fun where(expression: Expression<Boolean, DatabaseType.BOOLEAN, QueryUserExtension>)
|
||||
|
||||
public fun limit(size: UInt)
|
||||
public var limit: UInt
|
||||
|
||||
@Suppress("SpellCheckingInspection")
|
||||
public fun offsetedLimit(offset: ULong, size: UInt)
|
||||
public var offset: ULong
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
@ -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>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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>)
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
package ru.landgrafhomyak.serdha.api.v0.queries
|
||||
|
||||
@Suppress("ClassName")
|
||||
public interface _Selectable<@Suppress("unused") QueryUserExtension : Any>
|
@ -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)
|
||||
}
|
@ -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<*>
|
||||
|
Loading…
Reference in New Issue
Block a user