Fixes in 'Mapper' and 'Reducer'

This commit is contained in:
Andrew Golovashevich 2025-02-01 05:17:14 +03:00
parent fba3712662
commit d45bdbad0d
3 changed files with 29 additions and 26 deletions

View File

@ -12,30 +12,32 @@ public interface Mapper<mUE : Any> {
public fun interface InputLinker<mUE : Any, qUE : Any> {
public fun link(linker: Scope<mUE, qUE>)
public interface Scope<mUE : Any, qUE : Any> {
public operator fun <RT, DT : DatabaseType<RT>> set(p: InputColumn<RT, DT, mUE>, e: IntermediateColumn<RT, DT, qUE>)
public interface Scope<_mUE : Any, qUE : Any> {
public val mUE: _mUE
public operator fun <RT, DT : DatabaseType<RT>> set(p: InputColumn<RT, DT, _mUE>, e: IntermediateColumn<RT, DT, qUE>)
}
}
public fun interface OutputLinker<mUE : Any, qUE : Any, oUE : Any> {
public fun link(linker: Scope<mUE, qUE>): oUE
public interface Scope<ExpressionUserExtension : Any, QueryUserExtension : Any> {
public operator fun <RT, DT : DatabaseType<RT>> get(p: OutputColumn<RT, DT, ExpressionUserExtension>): IntermediateColumn<RT, DT, QueryUserExtension>
public interface Scope<_mUE : Any, qUE : Any> {
public val mUE: _mUE
public operator fun <RT, DT : DatabaseType<RT>> get(p: OutputColumn<RT, DT, _mUE>): IntermediateColumn<RT, DT, qUE>
}
}
public interface Constructor<mUE : Any> {
public fun createMapper(context: Scope<mUE>): mUE
public fun createMapper(context: Scope<mUE>): Action<mUE>
public interface Scope<mUE : Any> {
public val types: DatabaseType.Provider
public fun <RT, DT : DatabaseType<RT>> input(name: String, type: DT): InputColumn<RT, DT, mUE>
public fun <RT, DT : DatabaseType<RT>> output(name: String, type: DT): OutputColumn<RT, DT, mUE>
public var action: Action<mUE>
}
}
public interface Action<mUE : Any> {
public fun calculate(ue: mUE, input: OutputRow<mUE>, output: InputRow<mUE>)
public fun calculate(input: OutputRow<mUE>, output: InputRow<mUE>)
}
}

View File

@ -6,36 +6,37 @@ import ru.landgrafhomyak.db.serdha0.api.runtime.OutputRow
public interface Reducer<rUE : Any> {
public val userExtension: rUE
public interface IOColumn<RT, DT : DatabaseType<RT>, rUE : Any> : Column<RT, DT, rUE>, QueryParam<RT, DT, rUE>
public interface BidirectionalColumn<RT, DT : DatabaseType<RT>, rUE : Any> : Column<RT, DT, rUE>, QueryParam<RT, DT, rUE>
public interface OutputColumn<RT, DT : DatabaseType<RT>, rUE : Any> : Column<RT, DT, rUE>, QueryParam<RT, DT, rUE>
public fun interface ReduceLinker<rUE : Any, qUE : Any, oUE : Any> {
public fun interface Linker<rUE : Any, qUE : Any, oUE : Any> {
public fun link(linker: Scope<rUE, qUE>): oUE
public interface Scope<rUE : Any, qUE : Any> {
public fun <RT, DT : DatabaseType<RT>> link(io: IOColumn<RT, DT, rUE>, src: IntermediateColumn<RT, DT, rUE>): IntermediateColumn<RT, DT, qUE>
}
}
public fun interface FoldLinker<rUE : Any, qUE : Any, oUE : Any> {
public fun link(linker: Scope<rUE, qUE>): oUE
public interface Scope<rUE : Any, qUE : Any> {
public fun <RT, DT : DatabaseType<RT>> link(io: IOColumn<RT, DT, rUE>, src: IntermediateColumn<RT, DT, rUE>, initial: RT): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> link(io: IOColumn<RT, DT, rUE>, src: IntermediateColumn<RT, DT, rUE>, initial: QueryParam<RT, DT, qUE>): IntermediateColumn<RT, DT, qUE>
public interface Scope<_rUE : Any, qUE : Any> {
public val rUE: _rUE
public fun <RT, DT : DatabaseType<RT>> link(red: BidirectionalColumn<RT, DT, _rUE>, src: IntermediateColumn<RT, DT, _rUE>): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: BidirectionalColumn<RT, DT, _rUE>, src: IntermediateColumn<RT, DT, qUE>, initial: RT): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: BidirectionalColumn<RT, DT, _rUE>, src: IntermediateColumn<RT, DT, qUE>, initial: QueryParam<RT, DT, qUE>): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> link(red: OutputColumn<RT, DT, _rUE>): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: OutputColumn<RT, DT, _rUE>, initial: RT): IntermediateColumn<RT, DT, qUE>
public fun <RT, DT : DatabaseType<RT>> linkAndInitialize(red: OutputColumn<RT, DT, _rUE>, initial: QueryParam<RT, DT, qUE>): IntermediateColumn<RT, DT, qUE>
}
}
public interface Constructor<rUE : Any> {
public fun createReducer(creator: Scope<rUE>): rUE
public fun createReducer(context: Scope<rUE>): Action<rUE>
public interface Scope<rUE : Any> {
public fun <RT, DT : DatabaseType<RT>> io(name: String, type: DT): IOColumn<RT, DT, rUE>
public var action: Action<rUE>
public val types: DatabaseType.Provider
public fun <RT, DT : DatabaseType<RT>> outputColumn(name: String, type: DT): OutputColumn<RT, DT, rUE>
public fun <RT, DT : DatabaseType<RT>> outputColumn(name: String, type: DT, defaultInitialValue: RT): OutputColumn<RT, DT, rUE>
public fun <RT, DT : DatabaseType<RT>> bidirectionalColumn(name: String, type: DT): BidirectionalColumn<RT, DT, rUE>
public fun <RT, DT : DatabaseType<RT>> bidirectionalColumn(name: String, type: DT, defaultInitialValue: RT): BidirectionalColumn<RT, DT, rUE>
}
}
public interface Action<rUE : Any> {
public fun calculate(ue: rUE, acc: OutputRow<rUE>, row: OutputRow<rUE>, newAcc: InputRow<rUE>)
public fun calculate(acc: OutputRow<rUE>, row: OutputRow<rUE>, newAcc: InputRow<rUE>)
}
}

View File

@ -114,7 +114,7 @@ public interface SelectQuery<qUE : Any> : _Query<qUE> {
public fun <rUE : Any> createReducer(constructor: Reducer.Constructor<rUE>): Reducer<rUE>
public fun <mUE : Any, oUE : Any> reduceRows(
reducer: Reducer<mUE>,
linker: Reducer.ReduceLinker<mUE, qUE, oUE>,
linker: Reducer.Linker<mUE, qUE, oUE>,
): oUE
public fun groupBy(vararg columns: IntermediateColumn<*, *, qUE>)
@ -140,7 +140,7 @@ public interface SelectQuery<qUE : Any> : _Query<qUE> {
public fun <rUE : Any> createReducer(constructor: Reducer.Constructor<rUE>): Reducer<rUE>
public fun <mUE : Any, oUE : Any> foldRows(
reducer: Reducer<mUE>,
linker: Reducer.FoldLinker<mUE, qUE, oUE>,
linker: Reducer.Linker<mUE, qUE, oUE>,
): oUE
public fun groupBy(vararg columns: IntermediateColumn<*, *, qUE>)