Updated 'CHECK' and 'DEFAULT' constraints to use runtime expressions
This commit is contained in:
parent
8695fca966
commit
472fbc895f
@ -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<QueryUserExtension : Any> : _Query<QueryUserExtensi
|
||||
public fun <RT, DT : DatabaseType<RT>> queryParam(name: String, type: DT): QueryParam<RT, DT, QueryUserExtension>
|
||||
public fun <RT, DT : DatabaseType<RT>> paramAsColumn(param: QueryParam<RT, DT, QueryUserExtension>): IntermediateColumn<RT, DT, QueryUserExtension>
|
||||
|
||||
public val builtinExpressions: BuiltinExpressionsProvider<QueryUserExtension>
|
||||
public fun <ExpressionUserExtension : Any> mapColumns(
|
||||
expression: Expression<ExpressionUserExtension>,
|
||||
input: Expression.InputLinker<ExpressionUserExtension, QueryUserExtension>,
|
||||
|
@ -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<TableUserExtension : Any> {
|
||||
/**
|
||||
* 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<TableUserExtension, *>
|
||||
|
||||
public interface Creator<ConstraintUserExtension : Any, TargetTableUserExtension : Any> {
|
||||
public fun createCheckConstraint(scope: Scope<ConstraintUserExtension, TargetTableUserExtension>)
|
||||
|
||||
/**
|
||||
* Expression used to check data.
|
||||
*/
|
||||
@Suppress("INAPPLICABLE_JVM_NAME")
|
||||
@get:JvmName("expression")
|
||||
public val expression: Expression<Boolean, DatabaseType.BOOLEAN, TableUserExtension>
|
||||
public interface Scope<ConstraintUserExtension : Any, TargetTableUserExtension : Any> {
|
||||
public var result: IntermediateColumn<Boolean, DatabaseType.BOOLEAN, ConstraintUserExtension>
|
||||
public fun <RT, DT : DatabaseType<RT>> selectFromTargetTable(column: Column<RT, DT, TargetTableUserExtension>): IntermediateColumn<RT, DT, ConstraintUserExtension>
|
||||
|
||||
public fun <ReferencedTableUserExtension : Any, RT, DT : DatabaseType<RT>> followReference(
|
||||
ref: IntermediateColumn<*, DatabaseType.ROW_ID<ReferencedTableUserExtension>, ConstraintUserExtension>,
|
||||
column: Column<RT, DT, ReferencedTableUserExtension>
|
||||
): IntermediateColumn<RT, DT, ReferencedTableUserExtension>
|
||||
|
||||
/**
|
||||
* Set of columns, checked by this constraint. Calculated from [CheckConstraint.expression]. For debugging.
|
||||
*/
|
||||
@Suppress("INAPPLICABLE_JVM_NAME")
|
||||
@get:JvmName("affectedColumns")
|
||||
public val affectedColumns: List<Column<*, *, TableUserExtension>>
|
||||
public val builtinExpressions: BuiltinExpressionsProvider<ConstraintUserExtension>
|
||||
public fun <ExpressionUserExtension : Any> mapColumns(
|
||||
expression: Expression<ExpressionUserExtension>,
|
||||
input: Expression.InputLinker<ExpressionUserExtension, ConstraintUserExtension>,
|
||||
output: Expression.OutputLinker<ExpressionUserExtension, ConstraintUserExtension>
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
@ -6,8 +6,6 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
|
||||
import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseTypesProvider
|
||||
|
||||
public interface CreateTableScope<TableUserExtension : Any> {
|
||||
public val expressionBuilder: BuiltinExpressionsProvider<TableUserExtension>
|
||||
|
||||
public val types: DatabaseTypesProvider
|
||||
|
||||
public fun <RT, DT : DatabaseType<RT>> column(name: String, type: DT): Column<RT, DT, TableUserExtension>
|
||||
@ -15,8 +13,8 @@ public interface CreateTableScope<TableUserExtension : Any> {
|
||||
public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index<TableUserExtension>
|
||||
|
||||
public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueIndex<TableUserExtension>
|
||||
public fun checkConstraint(name: String, constraint: Expression<Boolean, DatabaseType.BOOLEAN, TableUserExtension>): CheckConstraint<TableUserExtension>
|
||||
public fun <RT : Any, DT : DatabaseType<RT>> defaultValue(c: Column<RT, DT, TableUserExtension>, expr: Expression<RT, DT, TableUserExtension>): DefaultConstraint<RT, DT, TableUserExtension>
|
||||
public fun <ConstraintUserExtension : Any> checkConstraint(name: String, creator: CheckConstraint.Creator<ConstraintUserExtension, TableUserExtension>, recheckExistingRows: Boolean = false): CheckConstraint<TableUserExtension>
|
||||
public fun <ConstraintUserExtension : Any, RT : Any, DT : DatabaseType<RT>> defaultValue(c: Column<RT, DT, TableUserExtension>, creator: DefaultConstraint.Creator<ConstraintUserExtension, RT, DT, TableUserExtension>): DefaultConstraint<TableUserExtension>
|
||||
|
||||
@Suppress("PropertyName")
|
||||
public val rowId_column: Column<RowId<TableUserExtension>, DatabaseType<RowId<TableUserExtension>>, TableUserExtension>
|
||||
|
@ -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<RT, DT : DatabaseType<RT>, TableUserExtension : Any> {
|
||||
/**
|
||||
* Name of constraint for debugging, errors and raw schema access.
|
||||
*/
|
||||
public interface DefaultConstraint<TableUserExtension : Any> {
|
||||
@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<TableUserExtension, *>
|
||||
|
||||
/**
|
||||
* 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<RT, DT, TableUserExtension>
|
||||
public interface Creator<ConstraintUserExtension : Any, RT, DT : DatabaseType<RT>, TargetTableUserExtension : Any> {
|
||||
public fun createCheckConstraint(scope: Scope<ConstraintUserExtension, RT, DT, TargetTableUserExtension>)
|
||||
|
||||
/**
|
||||
* Expression used to initialize cell.
|
||||
*/
|
||||
@Suppress("INAPPLICABLE_JVM_NAME")
|
||||
@get:JvmName("expression")
|
||||
public val expression: Expression<RT, DT, TableUserExtension>
|
||||
public interface Scope<ConstraintUserExtension : Any, rRT, rDT : DatabaseType<rRT>, TargetTableUserExtension : Any> {
|
||||
public var result: IntermediateColumn<rRT, rDT, ConstraintUserExtension>
|
||||
public fun <RT, DT : DatabaseType<RT>> selectFromTargetTable(column: Column<RT, DT, TargetTableUserExtension>): IntermediateColumn<RT, DT, ConstraintUserExtension>
|
||||
|
||||
public fun <ReferencedTableUserExtension : Any, RT, DT : DatabaseType<RT>> followReference(
|
||||
ref: IntermediateColumn<*, DatabaseType.ROW_ID<ReferencedTableUserExtension>, ConstraintUserExtension>,
|
||||
column: Column<RT, DT, ReferencedTableUserExtension>
|
||||
): IntermediateColumn<RT, DT, ReferencedTableUserExtension>
|
||||
|
||||
public val builtinExpressions: BuiltinExpressionsProvider<ConstraintUserExtension>
|
||||
public fun <ExpressionUserExtension : Any> mapColumns(
|
||||
expression: Expression<ExpressionUserExtension>,
|
||||
input: Expression.InputLinker<ExpressionUserExtension, ConstraintUserExtension>,
|
||||
output: Expression.OutputLinker<ExpressionUserExtension, ConstraintUserExtension>
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
@ -7,8 +7,6 @@ import ru.landgrafhomyak.serdha.api.v0.misc.DatabaseType
|
||||
|
||||
|
||||
public interface UpdateTableScope<TableNewUserExtension : Any, TableOldUserExtension : Any> : CreateTableScope<TableNewUserExtension> {
|
||||
public val oldExpressionBuilder: BuiltinExpressionsProvider<TableOldUserExtension>
|
||||
|
||||
public fun <RT, DT : DatabaseType<RT>> keepColumn(c: Column<RT, DT, TableOldUserExtension>): Column<RT, DT, TableNewUserExtension>
|
||||
public fun <RT, DT : DatabaseType<RT>> keepColumnUntilUpgrading(c: Column<RT, DT, TableOldUserExtension>): Column<RT, DT, TableNewUserExtension>
|
||||
public fun <RT, DT : DatabaseType<RT>> renameAndKeepColumn(c: Column<RT, DT, TableOldUserExtension>, newName: String): Column<RT, DT, TableNewUserExtension>
|
||||
@ -26,9 +24,9 @@ public interface UpdateTableScope<TableNewUserExtension : Any, TableOldUserExten
|
||||
public fun renameAndKeepUniqueIndex(i: UniqueIndex<TableOldUserExtension>, newName: String): UniqueIndex<TableNewUserExtension>
|
||||
public fun deleteUniqueIndex(i: UniqueIndex<TableOldUserExtension>)
|
||||
|
||||
public fun <RT, DT : DatabaseType<RT>> keepDefaultValue(c: Column<RT, DT, TableNewUserExtension>, d: DefaultConstraint<RT, DT, TableOldUserExtension>): DefaultConstraint<RT, DT, TableNewUserExtension>
|
||||
public fun <RT, DT : DatabaseType<RT>> changeDefaultValue(c: Column<RT, DT, TableNewUserExtension>, d: DefaultConstraint<*, *, TableOldUserExtension>): DefaultConstraint<RT, DT, TableNewUserExtension>
|
||||
public fun deleteDefaultValue(i: DefaultConstraint<*, *, TableOldUserExtension>)
|
||||
public fun <RT, DT : DatabaseType<RT>> keepDefaultValue(c: Column<RT, DT, TableNewUserExtension>, d: DefaultConstraint<TableOldUserExtension>): DefaultConstraint<TableNewUserExtension>
|
||||
public fun <RT, DT : DatabaseType<RT>> changeDefaultValue(c: Column<RT, DT, TableNewUserExtension>, d: DefaultConstraint<TableOldUserExtension>): DefaultConstraint<TableNewUserExtension>
|
||||
public fun deleteDefaultValue(i: DefaultConstraint<TableOldUserExtension>)
|
||||
|
||||
public fun <TargetTableUserWrapper : Any> keepForeignRowReference(
|
||||
frr: ForeignRowReference<TableOldUserExtension, TargetTableUserWrapper>,
|
||||
|
Loading…
Reference in New Issue
Block a user