From d45bdbad0d8de2c32b263384643f46f5f8300c87 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sat, 1 Feb 2025 05:17:14 +0300 Subject: [PATCH] Fixes in 'Mapper' and 'Reducer' --- .../db/serdha0/api/misc/Mapper.kt | 16 +++++---- .../db/serdha0/api/misc/Reducer.kt | 35 ++++++++++--------- .../db/serdha0/api/queries/SelectQuery.kt | 4 +-- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Mapper.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Mapper.kt index 643df09..cb5ba83 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Mapper.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Mapper.kt @@ -12,30 +12,32 @@ public interface Mapper { public fun interface InputLinker { public fun link(linker: Scope) - public interface Scope { - public operator fun > set(p: InputColumn, e: IntermediateColumn) + public interface Scope<_mUE : Any, qUE : Any> { + public val mUE: _mUE + public operator fun > set(p: InputColumn, e: IntermediateColumn) } } public fun interface OutputLinker { public fun link(linker: Scope): oUE - public interface Scope { - public operator fun > get(p: OutputColumn): IntermediateColumn + public interface Scope<_mUE : Any, qUE : Any> { + public val mUE: _mUE + public operator fun > get(p: OutputColumn): IntermediateColumn } } public interface Constructor { - public fun createMapper(context: Scope): mUE + public fun createMapper(context: Scope): Action public interface Scope { + public val types: DatabaseType.Provider public fun > input(name: String, type: DT): InputColumn public fun > output(name: String, type: DT): OutputColumn - public var action: Action } } public interface Action { - public fun calculate(ue: mUE, input: OutputRow, output: InputRow) + public fun calculate(input: OutputRow, output: InputRow) } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Reducer.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Reducer.kt index ff2a769..0753724 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Reducer.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/Reducer.kt @@ -6,36 +6,37 @@ import ru.landgrafhomyak.db.serdha0.api.runtime.OutputRow public interface Reducer { public val userExtension: rUE - public interface IOColumn, rUE : Any> : Column, QueryParam + public interface BidirectionalColumn, rUE : Any> : Column, QueryParam + public interface OutputColumn, rUE : Any> : Column, QueryParam - public fun interface ReduceLinker { + public fun interface Linker { public fun link(linker: Scope): oUE - public interface Scope { - public fun > link(io: IOColumn, src: IntermediateColumn): IntermediateColumn - } - } - - public fun interface FoldLinker { - public fun link(linker: Scope): oUE - - public interface Scope { - public fun > link(io: IOColumn, src: IntermediateColumn, initial: RT): IntermediateColumn - public fun > link(io: IOColumn, src: IntermediateColumn, initial: QueryParam): IntermediateColumn + public interface Scope<_rUE : Any, qUE : Any> { + public val rUE: _rUE + public fun > link(red: BidirectionalColumn, src: IntermediateColumn): IntermediateColumn + public fun > linkAndInitialize(red: BidirectionalColumn, src: IntermediateColumn, initial: RT): IntermediateColumn + public fun > linkAndInitialize(red: BidirectionalColumn, src: IntermediateColumn, initial: QueryParam): IntermediateColumn + public fun > link(red: OutputColumn): IntermediateColumn + public fun > linkAndInitialize(red: OutputColumn, initial: RT): IntermediateColumn + public fun > linkAndInitialize(red: OutputColumn, initial: QueryParam): IntermediateColumn } } public interface Constructor { - public fun createReducer(creator: Scope): rUE + public fun createReducer(context: Scope): Action public interface Scope { - public fun > io(name: String, type: DT): IOColumn - public var action: Action + public val types: DatabaseType.Provider + public fun > outputColumn(name: String, type: DT): OutputColumn + public fun > outputColumn(name: String, type: DT, defaultInitialValue: RT): OutputColumn + public fun > bidirectionalColumn(name: String, type: DT): BidirectionalColumn + public fun > bidirectionalColumn(name: String, type: DT, defaultInitialValue: RT): BidirectionalColumn } } public interface Action { - public fun calculate(ue: rUE, acc: OutputRow, row: OutputRow, newAcc: InputRow) + public fun calculate(acc: OutputRow, row: OutputRow, newAcc: InputRow) } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt index 0c58827..c929205 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/queries/SelectQuery.kt @@ -114,7 +114,7 @@ public interface SelectQuery : _Query { public fun createReducer(constructor: Reducer.Constructor): Reducer public fun reduceRows( reducer: Reducer, - linker: Reducer.ReduceLinker, + linker: Reducer.Linker, ): oUE public fun groupBy(vararg columns: IntermediateColumn<*, *, qUE>) @@ -140,7 +140,7 @@ public interface SelectQuery : _Query { public fun createReducer(constructor: Reducer.Constructor): Reducer public fun foldRows( reducer: Reducer, - linker: Reducer.FoldLinker, + linker: Reducer.Linker, ): oUE public fun groupBy(vararg columns: IntermediateColumn<*, *, qUE>)