diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/RowExpression.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/RowExpression.kt new file mode 100644 index 0000000..3066441 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/misc/RowExpression.kt @@ -0,0 +1,40 @@ +package ru.landgrafhomyak.db.serdha0.api.misc + +import ru.landgrafhomyak.db.serdha0.api.queries._Query +import ru.landgrafhomyak.db.serdha0.api.runtime.OutputRow +import ru.landgrafhomyak.db.serdha0.api.table.RowId +import ru.landgrafhomyak.db.serdha0.api.table.Table + +public interface RowExpression { + public val targetTable: Table + + public interface RowExportsConstructor { + public fun createRowExports(context: Scope): rUE + + public interface Scope { + public val tt: Table + + public fun > selectFromTargetTable(column: Column): Column + + public fun > followReference( + ref: Column<*, *, rUE>, + column: Column + ): Column + + public fun > followReferenceNullable( + ref: Column, DatabaseType.ROW_ID, rUE>, + column: Column + ): Column, rUE> + } + } + + public interface Constructor { + public val rowExports: RowExportsConstructor + + public fun createRowExpression(internalQueries: _Query.Constructor.Scope, runtimeQueries: _Query.Constructor.Scope): Action + } + + public interface Action { + public suspend fun calculateRow(rowUE: rUE, row: OutputRow): R + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/CheckConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/CheckConstraint.kt index b52bbd6..64a0e6a 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/CheckConstraint.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/CheckConstraint.kt @@ -1,39 +1,7 @@ package ru.landgrafhomyak.db.serdha0.api.table -import kotlin.jvm.JvmName -import ru.landgrafhomyak.db.serdha0.api.misc.Column -import ru.landgrafhomyak.db.serdha0.api.misc.IntermediateColumn -import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType -import ru.landgrafhomyak.db.serdha0.api.misc.Mapper +import ru.landgrafhomyak.db.serdha0.api.misc.RowExpression -public interface CheckConstraint { - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("name") +public interface CheckConstraint : RowExpression { public val name: String - - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("table") - public val table: Table - - public interface Creator { - public fun createCheckConstraint(scope: Scope) - - public interface Scope { - public val tt: Table - - public var result: IntermediateColumn - public fun > selectFromTargetTable(column: Column): IntermediateColumn - - public fun > followReference( - ref: IntermediateColumn<*, DatabaseType.ROW_ID, cUE>, - column: Column - ): IntermediateColumn - - public fun mapColumns( - expression: Mapper, - input: ru.landgrafhomyak.db.serdha0.api.misc.Expression.Map.InputLinker, - output: ru.landgrafhomyak.db.serdha0.api.misc.Expression.Map.OutputLinker - ) - } - } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/ColumnDefaultValue.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/ColumnDefaultValue.kt new file mode 100644 index 0000000..a4552ce --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/ColumnDefaultValue.kt @@ -0,0 +1,6 @@ +package ru.landgrafhomyak.db.serdha0.api.table + +import ru.landgrafhomyak.db.serdha0.api.misc.RowExpression + +public interface ColumnDefaultValue : RowExpression { +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/DefaultConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/DefaultConstraint.kt deleted file mode 100644 index 55a8cb5..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/DefaultConstraint.kt +++ /dev/null @@ -1,39 +0,0 @@ -package ru.landgrafhomyak.db.serdha0.api.table - -import kotlin.jvm.JvmName -import ru.landgrafhomyak.db.serdha0.api.misc.Column -import ru.landgrafhomyak.db.serdha0.api.misc.IntermediateColumn -import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType -import ru.landgrafhomyak.db.serdha0.api.misc.Mapper - -public interface DefaultConstraint { - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("name") - public val name: String - - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("table") - public val table: Table - - public interface Creator, ttUE : Any> { - public fun createCheckConstraint(scope: Scope) - - public interface Scope, ttUE : Any> { - public val tt: Table - - public var result: IntermediateColumn - public fun > selectFromTargetTable(column: Column): IntermediateColumn - - public fun > followReference( - ref: IntermediateColumn<*, DatabaseType.ROW_ID, cUE>, - column: Column - ): IntermediateColumn - - public fun mapColumns( - expression: Mapper, - input: ru.landgrafhomyak.db.serdha0.api.misc.Expression.Map.InputLinker, - output: ru.landgrafhomyak.db.serdha0.api.misc.Expression.Map.OutputLinker - ) - } - } -} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/TableConstructor.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/TableConstructor.kt index 6c64bbc..1712034 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/TableConstructor.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/TableConstructor.kt @@ -2,6 +2,7 @@ package ru.landgrafhomyak.db.serdha0.api.table import ru.landgrafhomyak.db.serdha0.api.misc.Column import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType +import ru.landgrafhomyak.db.serdha0.api.misc.RowExpression public interface TableConstructor { @@ -16,8 +17,8 @@ public interface TableConstructor { public fun index(name: String, vararg columns: Column<*, *, tUE>): Index public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, tUE>): UniqueIndex - public fun checkConstraint(name: String, creator: CheckConstraint.Creator, recheckExistingRows: Boolean = false): CheckConstraint - public fun > defaultValue(c: Column, creator: DefaultConstraint.Creator): DefaultConstraint + public fun checkConstraint(name: String, constructor: RowExpression.Constructor, recheckExistingRows: Boolean = false): CheckConstraint + public fun defaultValue(c: Column, creator: RowExpression.Constructor): ColumnDefaultValue @Suppress("PropertyName") public val rowId_column: Column, DatabaseType>, tUE> diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/UpdateTableScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/UpdateTableScope.kt index 7a6f550..1e06851 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/UpdateTableScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/UpdateTableScope.kt @@ -4,7 +4,7 @@ import ru.landgrafhomyak.db.serdha0.api.misc.Column import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType -public interface UpdateTableScope : CreateTableScope { +public interface UpdateTableScope : TableConstructor.Scope { public fun > keepColumn(c: Column): Column public fun > keepColumnUntilUpgraded(c: Column): Column public fun > renameAndKeepColumn(c: Column, newName: String): Column @@ -22,9 +22,9 @@ public interface UpdateTableScope : CreateTableScope, newName: String): UniqueIndex public fun deleteUniqueIndex(i: UniqueIndex) - public fun > keepDefaultValue(c: Column, d: DefaultConstraint): DefaultConstraint - public fun > changeDefaultValue(c: Column, d: DefaultConstraint): DefaultConstraint - public fun deleteDefaultValue(i: DefaultConstraint) + public fun > keepDefaultValue(c: Column, d: ColumnDefaultValue): ColumnDefaultValue + public fun > changeDefaultValue(c: Column, d: ColumnDefaultValue): ColumnDefaultValue + public fun deleteDefaultValue(i: ColumnDefaultValue) public fun > keepForeignRowReference( frr: ForeignRowReference,