From 28ccd490c182c1cfa5db118516b69dea6085a439 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich <landgrafhomyak@gmail.com> Date: Thu, 9 Jan 2025 01:22:02 +0300 Subject: [PATCH] Runtime expression builder --- .../serdha/api/v0/misc/RuntimeExpression.kt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/misc/RuntimeExpression.kt diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/misc/RuntimeExpression.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/misc/RuntimeExpression.kt new file mode 100644 index 0000000..ce88db5 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/misc/RuntimeExpression.kt @@ -0,0 +1,41 @@ +package ru.landgrafhomyak.serdha.api.v0.misc + +import ru.landgrafhomyak.serdha.api.v0.runtime.ParametersSetter +import ru.landgrafhomyak.serdha.api.v0.runtime.Row + +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 fun interface InputLinker<ExpressionUserExtension : Any, QueryUserExtension : Any> { + public fun link(linker: Scope<ExpressionUserExtension, QueryUserExtension>) + + public interface Scope<ExpressionUserExtension : Any, QueryUserExtension : Any> { + public operator fun <RT, DT : DatabaseType<RT>> set(p: RuntimeExpressionInput<RT, DT, ExpressionUserExtension>, e: Expression<RT, DT, QueryUserExtension>) + } + } + + public fun interface OutputLinker<ExpressionUserExtension : Any, QueryUserExtension : Any> { + public fun link(linker: Scope<ExpressionUserExtension, QueryUserExtension>) + + public interface Scope<ExpressionUserExtension : Any, QueryUserExtension : Any> { + public operator fun <RT, DT : DatabaseType<RT>> get(p: RuntimeExpressionOutput<RT, DT, ExpressionUserExtension>): Expression<RT, DT, QueryUserExtension> + } + } + + public interface Creator<ExpressionUserExtension : Any> { + public fun createExpression(creator: Scope<ExpressionUserExtension>): ExpressionUserExtension + + public interface Scope<ExpressionUserExtension : Any> { + public fun <RT, DT : DatabaseType<RT>> input(name: String, type: DT): RuntimeExpressionInput<RT, DT, ExpressionUserExtension> + public fun <RT, DT : DatabaseType<RT>> output(name: String, type: DT): RuntimeExpressionOutput<RT, DT, ExpressionUserExtension> + public var action: Action<ExpressionUserExtension> + } + } + + public interface Action<ExpressionUserExtension : Any> { + public fun calculate(input: Row<ExpressionUserExtension>, output: ParametersSetter<ExpressionUserExtension>) + } +} \ No newline at end of file