diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt index 0d01f97..6a6232b 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/queries/SelectQuery.kt @@ -1,5 +1,6 @@ package ru.landgrafhomyak.serdha.api.v0.queries +import ru.landgrafhomyak.serdha.api.v0.misc.BuiltinExpressionsProvider import ru.landgrafhomyak.serdha.api.v0.misc.Column import ru.landgrafhomyak.serdha.api.v0.misc.IntermediateColumn import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType @@ -19,6 +20,7 @@ public interface SelectQuery : _Query> queryParam(name: String, type: DT): QueryParam public fun > paramAsColumn(param: QueryParam): IntermediateColumn + public val builtinExpressions: BuiltinExpressionsProvider public fun mapColumns( expression: Expression, input: Expression.InputLinker, diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CheckConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CheckConstraint.kt index bc7238e..bceb8f1 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CheckConstraint.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CheckConstraint.kt @@ -1,43 +1,39 @@ package ru.landgrafhomyak.serdha.api.v0.table import kotlin.jvm.JvmName +import ru.landgrafhomyak.serdha.api.v0.misc.BuiltinExpressionsProvider import ru.landgrafhomyak.serdha.api.v0.misc.Column -import ru.landgrafhomyak.serdha.api.v0.misc.Expression +import ru.landgrafhomyak.serdha.api.v0.misc.IntermediateColumn import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType +import ru.landgrafhomyak.serdha.api.v0.misc.Expression -/** - * Descriptor of 'check' constraint on columns. Used for schema manipulations. - * - * @param TableUserExtension Type of [owner table's][CheckConstraint.table] user expression for static reporting errors when this descriptor passed to wrong table. - */ public interface CheckConstraint { - /** - * Name of constraint for debugging, errors and raw schema access. - */ @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("name") public val name: String - /** - * Table that contains this constraint. For debugging. - */ @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("table") public val table: Table + public interface Creator { + public fun createCheckConstraint(scope: Scope) - /** - * Expression used to check data. - */ - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("expression") - public val expression: Expression + public interface Scope { + public var result: IntermediateColumn + public fun > selectFromTargetTable(column: Column): IntermediateColumn + public fun > followReference( + ref: IntermediateColumn<*, DatabaseType.ROW_ID, ConstraintUserExtension>, + column: Column + ): IntermediateColumn - /** - * Set of columns, checked by this constraint. Calculated from [CheckConstraint.expression]. For debugging. - */ - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("affectedColumns") - public val affectedColumns: List> + public val builtinExpressions: BuiltinExpressionsProvider + public fun mapColumns( + expression: Expression, + input: Expression.InputLinker, + output: Expression.OutputLinker + ) + } + } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CreateTableScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CreateTableScope.kt index dd472a4..3c6aadc 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CreateTableScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/CreateTableScope.kt @@ -6,8 +6,6 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider public interface CreateTableScope { - public val expressionBuilder: BuiltinExpressionsProvider - public val types: DatabaseTypesProvider public fun > column(name: String, type: DT): Column @@ -15,8 +13,8 @@ public interface CreateTableScope { public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueIndex - public fun checkConstraint(name: String, constraint: Expression): CheckConstraint - public fun > defaultValue(c: Column, expr: Expression): DefaultConstraint + public fun checkConstraint(name: String, creator: CheckConstraint.Creator, recheckExistingRows: Boolean = false): CheckConstraint + public fun > defaultValue(c: Column, creator: DefaultConstraint.Creator): DefaultConstraint @Suppress("PropertyName") public val rowId_column: Column, DatabaseType>, TableUserExtension> diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/DefaultConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/DefaultConstraint.kt index c8a3830..0f4750a 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/DefaultConstraint.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/DefaultConstraint.kt @@ -1,43 +1,39 @@ package ru.landgrafhomyak.serdha.api.v0.table import kotlin.jvm.JvmName +import ru.landgrafhomyak.serdha.api.v0.misc.BuiltinExpressionsProvider import ru.landgrafhomyak.serdha.api.v0.misc.Column -import ru.landgrafhomyak.serdha.api.v0.misc.Expression +import ru.landgrafhomyak.serdha.api.v0.misc.IntermediateColumn import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType +import ru.landgrafhomyak.serdha.api.v0.misc.Expression -/** - * Descriptor of default value attached to [column][Column]. Used for schema manipulations. - * - * @param RT Type in programming language to which database type is converted. - * @param DT Descriptor of column type on database side. - * @param TableUserExtension Type of [owner's table][Column.table] user expression for static reporting errors when this descriptor passed to wrong table. - */ -public interface DefaultConstraint, TableUserExtension : Any> { - /** - * Name of constraint for debugging, errors and raw schema access. - */ +public interface DefaultConstraint { @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("name") public val name: String - /** - * Table, that contains this constraint. For debugging. - */ @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("table") public val table: Table - /** - * Column which will get value from this constraint if not initialized manually. For debugging. - */ - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("attachedToColumn") - public val attachedToColumn: Column + public interface Creator, TargetTableUserExtension : Any> { + public fun createCheckConstraint(scope: Scope) - /** - * Expression used to initialize cell. - */ - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("expression") - public val expression: Expression + public interface Scope, TargetTableUserExtension : Any> { + public var result: IntermediateColumn + public fun > selectFromTargetTable(column: Column): IntermediateColumn + + public fun > followReference( + ref: IntermediateColumn<*, DatabaseType.ROW_ID, ConstraintUserExtension>, + column: Column + ): IntermediateColumn + + public val builtinExpressions: BuiltinExpressionsProvider + public fun mapColumns( + expression: Expression, + input: Expression.InputLinker, + output: Expression.OutputLinker + ) + } + } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/UpdateTableScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/UpdateTableScope.kt index e686aa6..f77fa02 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/UpdateTableScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/table/UpdateTableScope.kt @@ -7,8 +7,6 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType public interface UpdateTableScope : CreateTableScope { - public val oldExpressionBuilder: BuiltinExpressionsProvider - public fun > keepColumn(c: Column): Column public fun > keepColumnUntilUpgrading(c: Column): Column public fun > renameAndKeepColumn(c: Column, newName: String): Column @@ -26,9 +24,9 @@ public interface UpdateTableScope, newName: String): UniqueIndex public fun deleteUniqueIndex(i: UniqueIndex) - public fun > keepDefaultValue(c: Column, d: DefaultConstraint): DefaultConstraint - public fun > changeDefaultValue(c: Column, d: DefaultConstraint<*, *, TableOldUserExtension>): DefaultConstraint - public fun deleteDefaultValue(i: DefaultConstraint<*, *, TableOldUserExtension>) + public fun > keepDefaultValue(c: Column, d: DefaultConstraint): DefaultConstraint + public fun > changeDefaultValue(c: Column, d: DefaultConstraint): DefaultConstraint + public fun deleteDefaultValue(i: DefaultConstraint) public fun keepForeignRowReference( frr: ForeignRowReference,