Removing subtypes of inputs

This commit is contained in:
Andrew Golovashevich 2025-01-25 00:17:59 +03:00
parent 838c674fe0
commit 99759909a5
11 changed files with 51 additions and 145 deletions

View File

@ -7,7 +7,7 @@ public interface Expression<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> : Input.Column<RT, DT, ExpressionUserExtension>
public interface RuntimeExpressionOutput<RT, DT : DatabaseType<RT>, ExpressionUserExtension : Any> : QueryParam<RT, DT, ExpressionUserExtension>
public fun interface InputLinker<ExpressionUserExtension : Any, QueryUserExtension : Any> {
public fun link(linker: Scope<ExpressionUserExtension, QueryUserExtension>)

View File

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

View File

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

View File

@ -4,6 +4,6 @@ public interface SelectedTable<SelectedTableUserExtension : Any, QueryUserExtens
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>)
public fun <RT, DT : DatabaseType<RT>> setParam(subqueryParam: QueryParam<RT, DT, SelectedTableUserExtension>, parentParam: QueryParam<RT, DT, QueryUserExtension>)
}
}

View File

@ -1,21 +0,0 @@
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
public interface CopyQuery<QueryUserExtension : Any> {
public val userExtension: QueryUserExtension
public interface Creator<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public fun createCopy(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
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

@ -3,7 +3,7 @@ package ru.landgrafhomyak.serdha.api.v0.queries
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.QueryParam
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedColumn
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
import ru.landgrafhomyak.serdha.api.v0.table.Table
@ -22,7 +22,7 @@ public interface DeleteQuery<QueryUserExtension : Any> {
public val types: DatabaseTypesProvider
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): Input.QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
}
}

View File

@ -1,11 +1,10 @@
package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc.Expression
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.DatabaseTypesProvider
import ru.landgrafhomyak.serdha.api.v0.misc.Input
import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedColumn
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
import ru.landgrafhomyak.serdha.api.v0.table.UniqueIndex
@ -17,20 +16,13 @@ public interface InsertQuery<QueryUserExtension : Any> {
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 fun setConstant(c: QueryParam<*, *, QueryUserExtension>)
}
@Suppress("ClassName")
public interface _CommonInsertCreatorScope<QueryUserExtension : Any, TargetTableUserExtension : Any> {
public val types: DatabaseTypesProvider
public fun <RT, DT : DatabaseType<RT>> queryParam(name: String, type: DT): Input.Column<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertConstant(
column: Column<RT, DT, TargetTableUserExtension>,
paramName: String = column.name,
): Input.QueryParam<RT, DT, QueryUserExtension>
public fun onConflictUpdate(u: UniqueIndex<TargetTableUserExtension>, c: (_UpsertClauseScope<QueryUserExtension, TargetTableUserExtension>) -> Unit)
public fun onConflictThrow(u: UniqueIndex<TargetTableUserExtension>)
@ -44,6 +36,17 @@ public interface InsertQuery<QueryUserExtension : Any> {
public fun createInsertSingleRow(table: Table<TargetTableUserExtension, *>, creator: Scope<QueryUserExtension, TargetTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TargetTableUserExtension : Any> : _CommonInsertCreatorScope<QueryUserExtension, TargetTableUserExtension> {
public fun <RT, DT : DatabaseType<RT>> queryParam(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertConstant(
column: Column<RT, DT, TargetTableUserExtension>,
paramName: String = column.name,
): QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertConstant(
column: Column<RT, DT, TargetTableUserExtension>,
param: QueryParam<RT, DT, QueryUserExtension>
)
}
}
@ -66,6 +69,18 @@ public interface InsertQuery<QueryUserExtension : 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 fun <RT, DT : DatabaseType<RT>> queryParam(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertConstant(
column: Column<RT, DT, TargetTableUserExtension>,
paramName: String = column.name,
): QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertConstant(
column: Column<RT, DT, TargetTableUserExtension>,
param: QueryParam<RT, DT, QueryUserExtension>
)
public val sourceValues: SelectedTable<TargetTableUserExtension, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertColumn(dst: Column<RT, DT, TargetTableUserExtension>, src: SelectedColumn<RT, DT, SourceQueryUserExtension, QueryUserExtension>)
@ -90,9 +105,9 @@ public interface InsertQuery<QueryUserExtension : 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>> inputColumn(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertColumn(dst: Column<RT, DT, TargetTableUserExtension>, src: Input.Column<RT, DT, QueryUserExtension>)
public fun <RT, DT : DatabaseType<RT>> insertColumn(dst: Column<RT, DT, TargetTableUserExtension>, src: QueryParam<RT, DT, QueryUserExtension>)
}
}
}

View File

@ -3,7 +3,7 @@ package ru.landgrafhomyak.serdha.api.v0.queries
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.QueryParam
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedColumn
import ru.landgrafhomyak.serdha.api.v0.misc.SelectedTable
@ -23,7 +23,7 @@ public interface UpdateQuery<QueryUserExtension : Any> {
public fun <RuntimeType, DT : DatabaseType<RuntimeType>> updateColumn(c: Column<RuntimeType, DT, TargetTableUserExtension>, e: SelectedColumn<RuntimeType, DT, SelectorTableUserExtension, QueryUserExtension>)
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): Input.QueryParam<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
}
}

View File

@ -1,30 +0,0 @@
package ru.landgrafhomyak.serdha.api.v0.queries
import ru.landgrafhomyak.serdha.api.v0.misc.BuiltinExpressionsProvider
import ru.landgrafhomyak.serdha.api.v0.misc.IntermediateColumn
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.runtime.ParametersSetter
@Suppress("ClassName")
public interface _CommonCreateQueryScope<QueryUserExtension : Any> {
public val types: DatabaseTypesProvider
public val expressionBuilder: BuiltinExpressionsProvider<QueryUserExtension>
public interface SubqueryParametersSetter<SubqueryUserExtension : Any, QueryUserExtension : Any> : ParametersSetter<SubqueryUserExtension> {
public operator fun <RT, DT : DatabaseType<RT>> set(c: Input.QueryParam<RT, DT, QueryUserExtension>, value: IntermediateColumn<RT, DT, QueryUserExtension>)
}
public interface _ReturningClauseScope<QueryUserExtension : Any> {
public fun <RT, DT : DatabaseType<RT>> returnExpression(expression: IntermediateColumn<RT, DT, QueryUserExtension>): Column<RT, DT, QueryUserExtension>
public var isDistinct: Boolean
public fun orderBy(order: SelectQuery.Order, vararg columns: Column<*, *, QueryUserExtension>)
public fun groupBy(vararg columns: Column<*, *, QueryUserExtension>)
}
}

View File

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

View File

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