Changing queries entry points from query-type to io-type

This commit is contained in:
Andrew Golovashevich 2025-01-26 19:32:00 +03:00
parent 02916994cd
commit 8695fca966
12 changed files with 66 additions and 1202 deletions

View File

@ -1,7 +1,7 @@
package ru.landgrafhomyak.serdha.api.v0.misc
import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter
import ru.landgrafhomyak.serdha.api.v0.runtime.Row
import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow
import ru.landgrafhomyak.serdha.api.v0.runtime.OutputRow
public interface Expression<ExpressionUserExtension : Any> {
public val userExtension: ExpressionUserExtension
@ -36,6 +36,6 @@ public interface Expression<ExpressionUserExtension : Any> {
}
public interface Action<ExpressionUserExtension : Any> {
public fun calculate(input: Row<ExpressionUserExtension>, output: ParametersSetter<ExpressionUserExtension>)
public fun calculate(input: OutputRow<ExpressionUserExtension>, output: InputRow<ExpressionUserExtension>)
}
}

View File

@ -4,7 +4,7 @@ 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.QueryParam
import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter
import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow
import ru.landgrafhomyak.serdha.api.v0.table.Table
public interface DeleteQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> {
@ -16,7 +16,7 @@ public interface DeleteQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
public val types: DatabaseTypesProvider
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public val selectorParams: ParametersSetter.WithRedirect<SelectorTableUserExtension, QueryUserExtension>
public val selectorParams: InputRow.WithRedirect<SelectorTableUserExtension, QueryUserExtension>
public var selectorColumn: Column<*, DatabaseType.ROW_ID<TargetTableUserExtension>, SelectorTableUserExtension>
public fun <RT, DT : DatabaseType<RT>> returnFromSubquery(name: String, column: Column<RT, DT, SelectorTableUserExtension>): Column<RT, DT, QueryUserExtension>

View File

@ -5,7 +5,7 @@ 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.QueryParam
import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter
import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow
import ru.landgrafhomyak.serdha.api.v0.table.UniqueIndex
public interface InsertQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> {
@ -52,7 +52,7 @@ public interface InsertQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
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 val sourceQueryParams: ParametersSetter.WithRedirect<SourceQueryUserExtension, QueryUserExtension>
public val sourceQueryParams: InputRow.WithRedirect<SourceQueryUserExtension, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> insertConstant(dst: Column<RT, DT, TargetTableUserExtension>, src: QueryParam<RT, DT, QueryUserExtension>)
public fun <RT, DT : DatabaseType<RT>> insertFromSubquery(dst: Column<RT, DT, TargetTableUserExtension>, src: QueryParam<RT, DT, SourceQueryUserExtension>)

View File

@ -6,7 +6,7 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider
import ru.landgrafhomyak.serdha.api.v0.misc.Expression
import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam
import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter
import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow
public interface SelectQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> {
public enum class Order {
@ -40,8 +40,8 @@ public interface SelectQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
public fun createSelectWithJoin(creator: Scope<QueryUserExtension, LeftTableUserExtension, RightTableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, LeftTableUserExtension : Any, RightTableUserExtension : Any> {
public val leftSubqueryParams: ParametersSetter.WithRedirect<LeftTableUserExtension, QueryUserExtension>
public val rightSubqueryParams: ParametersSetter.WithRedirect<RightTableUserExtension, QueryUserExtension>
public val leftSubqueryParams: InputRow.WithRedirect<LeftTableUserExtension, QueryUserExtension>
public val rightSubqueryParams: InputRow.WithRedirect<RightTableUserExtension, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> selectColumnFromLeft(column: Column<RT, DT, LeftTableUserExtension>): IntermediateColumn<RT, DT, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> selectColumnFromRight(column: Column<RT, DT, RightTableUserExtension>): IntermediateColumn<RT, DT, QueryUserExtension>
@ -54,7 +54,7 @@ public interface SelectQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
public fun createSelect(creator: Scope<QueryUserExtension, TableUserExtension>): QueryUserExtension
public interface Scope<QueryUserExtension : Any, TableUserExtension : Any> : _CommonSelectCreatorScope<QueryUserExtension> {
public val subqueryParams: ParametersSetter.WithRedirect<TableUserExtension, QueryUserExtension>
public val subqueryParams: InputRow.WithRedirect<TableUserExtension, QueryUserExtension>
public fun <RT, DT : DatabaseType<RT>> selectColumnFromSubquery(param: Column<RT, DT, TableUserExtension>): IntermediateColumn<RT, DT, QueryUserExtension>
}

View File

@ -5,7 +5,7 @@ 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.QueryParam
import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter
import ru.landgrafhomyak.serdha.api.v0.runtime.InputRow
public interface UpdateQuery<QueryUserExtension : Any> : _Query<QueryUserExtension> {
public interface FromSubquery<QueryUserExtension : Any> : UpdateQuery<QueryUserExtension>, _Query.Params2Table<QueryUserExtension> {
@ -16,7 +16,7 @@ public interface UpdateQuery<QueryUserExtension : Any> : _Query<QueryUserExtensi
public val types: DatabaseTypesProvider
public fun <RT, DT : DatabaseType<RT>> param(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
public val selectorParams: ParametersSetter.WithRedirect<SelectorTableUserExtension, QueryUserExtension>
public val selectorParams: InputRow.WithRedirect<SelectorTableUserExtension, QueryUserExtension>
public var selectorColumn: Column<*, DatabaseType.ROW_ID<TargetTableUserExtension>, SelectorTableUserExtension>
public fun <RT, DT : DatabaseType<RT>> updateColumnWithSubquery(dst: Column<RT, DT, TargetTableUserExtension>, src: Column<RT, DT, SelectorTableUserExtension>)

View File

@ -1,9 +1,10 @@
package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
import ru.landgrafhomyak.serdha.api.v0.misc.QueryParam
public interface ParametersSetter<QueryUserExtension : Any/* todo*/> {
public interface InputRow<QueryUserExtension : Any/* todo*/> {
public operator fun <RuntimeType> set(c: QueryParam<RuntimeType, *, QueryUserExtension>, value: RuntimeType)
public operator fun set(c: QueryParam<Byte, *, QueryUserExtension>, value: Byte): Unit = this.set<Byte>(c, value)
@ -17,7 +18,28 @@ public interface ParametersSetter<QueryUserExtension : Any/* todo*/> {
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)
public interface WithRedirect<QueryUserExtension : Any, ParentQueryUserExtension : Any> : ParametersSetter<QueryUserExtension> {
public interface WithRedirect<QueryUserExtension : Any, ParentQueryUserExtension : Any> : InputRow<QueryUserExtension> {
public fun <RT, DT : DatabaseType<RT>> redirect(c: QueryParam<RT, DT, QueryUserExtension>, value: QueryParam<RT, DT, ParentQueryUserExtension>)
}
@Suppress("ClassName")
@LowLevelApi
public interface _Scope<QueryUserExtension : Any, out Next> : InputRow<QueryUserExtension> {
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _finish(): Next
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _abort()
}
@Suppress("ClassName")
@LowLevelApi
public interface _Iterator<QueryUserExtension : Any, out Next> : _Scope<QueryUserExtension, Next> {
@Suppress("FunctionName")
@LowLevelApi
public fun _next(): Boolean
}
}

View File

@ -1,8 +1,9 @@
package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.misc.Column
public interface Row<QueryUserExtension : Any> {
public interface OutputRow<QueryUserExtension : Any> {
public operator fun <RuntimeType> get(c: Column<RuntimeType, *, QueryUserExtension>): RuntimeType
public operator fun get(c: Column<Byte, *, QueryUserExtension>): Byte = this.get<Byte>(c)
@ -15,4 +16,20 @@ public interface Row<QueryUserExtension : Any> {
public operator fun get(c: Column<ULong, *, QueryUserExtension>): ULong = this.get<ULong>(c)
public operator fun get(c: Column<Char, *, QueryUserExtension>): Char = this.get<Char>(c)
public operator fun get(c: Column<Boolean, *, QueryUserExtension>): Boolean = this.get<Boolean>(c)
@Suppress("ClassName")
@LowLevelApi
public interface _Iterator<QueryUserExtension : Any, out Next> : OutputRow<QueryUserExtension> {
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _next(): Boolean
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _abort()
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _finish(): Next
}
}

View File

@ -4,11 +4,7 @@ import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.module.Module
import ru.landgrafhomyak.serdha.api.v0.table.RowId
import ru.landgrafhomyak.serdha.api.v0.table.Table
import ru.landgrafhomyak.serdha.api.v0.queries.CopyQuery
import ru.landgrafhomyak.serdha.api.v0.queries.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.queries.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.queries.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.queries.UpdateQuery
import ru.landgrafhomyak.serdha.api.v0.queries._Query
public interface SynchronizedDatabase<DatabaseUserExtension : Any> : Module<DatabaseUserExtension> {
@Suppress("FunctionName")
@ -17,23 +13,19 @@ public interface SynchronizedDatabase<DatabaseUserExtension : Any> : Module<Data
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedSelect(query: SelectQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Void2Table<QueryUserExtension>): OutputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedInsert(query: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Params2Table<QueryUserExtension>): InputRow._Scope<QueryUserExtension, OutputRow._Iterator<QueryUserExtension, Unit>>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedCopy(query: CopyQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Table2Void<QueryUserExtension>): InputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedUpdate(query: UpdateQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>?>
@Suppress("FunctionName")
@LowLevelApi
public suspend fun <QueryUserWrapper : Any> _autoTransactedDelete(query: DeleteQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>?>
public suspend fun <QueryUserExtension : Any> _executeAutoTransactedQuery(compiledQuery: _Query.Params2Void<QueryUserExtension>): InputRow._Scope<QueryUserExtension, Unit>
public interface AtomicScript<C, A, R> {
public suspend fun executeTransaction(transaction: Transaction, context: C, args: A): R
@ -47,7 +39,7 @@ public interface SynchronizedDatabase<DatabaseUserExtension : Any> : Module<Data
public fun <TableUserException : Any, V> mapOfRowIds(
table: Table<TableUserException, *>,
builder: (MutableMap<Row<TableUserException>, V>) -> Unit
builder: (MutableMap<OutputRow<TableUserException>, V>) -> Unit
): Map<RowId<TableUserException>, V>
public fun <TableUserException : Any, V> mutableMapOfRowIds(table: Table<TableUserException, *>): MutableMap<RowId<TableUserException>, V>

View File

@ -1,32 +1,24 @@
package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
import ru.landgrafhomyak.serdha.api.v0.queries.CopyQuery
import ru.landgrafhomyak.serdha.api.v0.queries.DeleteQuery
import ru.landgrafhomyak.serdha.api.v0.queries.InsertQuery
import ru.landgrafhomyak.serdha.api.v0.queries.SelectQuery
import ru.landgrafhomyak.serdha.api.v0.queries.UpdateQuery
import ru.landgrafhomyak.serdha.api.v0.queries._Query
public interface Transaction {
@Suppress("FunctionName")
@LowLevelApi
public fun <QueryUserWrapper : Any> _select(compiledQuery: SelectQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Void2Table<QueryUserExtension>): OutputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public fun <QueryUserWrapper : Any> _insert(compiledQuery: InsertQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ParametersSetter._Multi<InsertQuery.Creator.Scope.DataParam<QueryUserWrapper>, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Params2Table<QueryUserExtension>): InputRow._Scope<QueryUserExtension, OutputRow._Iterator<QueryUserExtension, Unit>>
@Suppress("FunctionName")
@LowLevelApi
public fun <QueryUserWrapper : Any> _copy(compiledQuery: CopyQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>>?>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Table2Void<QueryUserExtension>): InputRow._Iterator<QueryUserExtension, Unit>
@Suppress("FunctionName")
@LowLevelApi
public fun <QueryUserWrapper : Any> _update(compiledQuery: UpdateQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>?>
@Suppress("FunctionName")
@LowLevelApi
public fun <QueryUserWrapper : Any> _delete(compiledQuery: DeleteQuery<QueryUserWrapper>): _ParametersSetter<QueryUserWrapper, _ResultSet<QueryUserWrapper, Unit>?>
public suspend fun <QueryUserExtension : Any> _executeQuery(compiledQuery: _Query.Params2Void<QueryUserExtension>): InputRow._Scope<QueryUserExtension, Unit>
public suspend fun rollback()

View File

@ -1,19 +0,0 @@
package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
@Suppress("ClassName", "FunctionName")
@LowLevelApi
public interface _ParametersSetter<QueryUserExtension : Any, out Result> : ParametersSetter<QueryUserExtension> {
@LowLevelApi
public suspend fun _execute(): Result
@LowLevelApi
public suspend fun _abort()
@LowLevelApi
public interface _Multi<QueryUserExtension : Any, out Result> : _ParametersSetter<QueryUserExtension, Result> {
@LowLevelApi
public fun _next(): Boolean
}
}

View File

@ -1,19 +0,0 @@
package ru.landgrafhomyak.serdha.api.v0.runtime
import ru.landgrafhomyak.serdha.api.v0.LowLevelApi
@Suppress("ClassName")
@LowLevelApi
public interface _ResultSet<QueryUserExtension : Any, out Next> : Row<QueryUserExtension> {
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _next(): Boolean
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _abort()
@Suppress("FunctionName")
@LowLevelApi
public suspend fun _close(): Next
}