First try to make 'ForeignRowReference' typesafe
This commit is contained in:
parent
0e2abb5a33
commit
13e9da6aba
@ -8,10 +8,10 @@ import ru.landgrafhomyak.db.serdha0.api.table.Table
|
|||||||
/**
|
/**
|
||||||
* Descriptor of a database type.
|
* Descriptor of a database type.
|
||||||
*
|
*
|
||||||
* @param RuntimeType Type in programming language to which database type is converted.
|
* @param RT Type in programming language to which database type is converted.
|
||||||
*/
|
*/
|
||||||
@Suppress("ClassName", "RemoveRedundantQualifierName")
|
@Suppress("ClassName", "RemoveRedundantQualifierName")
|
||||||
public interface DatabaseType<@Suppress("unused") RuntimeType> {
|
public interface DatabaseType<@Suppress("unused") RT> {
|
||||||
@Suppress("INAPPLICABLE_JVM_NAME")
|
@Suppress("INAPPLICABLE_JVM_NAME")
|
||||||
@get:JvmName("name")
|
@get:JvmName("name")
|
||||||
public val name: String
|
public val name: String
|
||||||
@ -35,7 +35,7 @@ public interface DatabaseType<@Suppress("unused") RuntimeType> {
|
|||||||
|
|
||||||
public interface Nullable<RT : Any, @Suppress("unused") DT : DatabaseType<RT>> : DatabaseType<RT?>
|
public interface Nullable<RT : Any, @Suppress("unused") DT : DatabaseType<RT>> : DatabaseType<RT?>
|
||||||
|
|
||||||
public interface ROW_ID<TargetTableUserWrapper : Any> : DatabaseType<RowId<TargetTableUserWrapper>>
|
public interface ROW_ID<ttUE : Any> : DatabaseType<RowId<ttUE>>
|
||||||
|
|
||||||
public interface BOOLEAN : DatabaseType<Boolean>
|
public interface BOOLEAN : DatabaseType<Boolean>
|
||||||
|
|
||||||
|
@ -20,13 +20,23 @@ public interface CreateTableScope<tUE : Any> {
|
|||||||
@Suppress("PropertyName")
|
@Suppress("PropertyName")
|
||||||
public val rowId_uniqueConstraint: UniqueIndex<tUE>
|
public val rowId_uniqueConstraint: UniqueIndex<tUE>
|
||||||
|
|
||||||
public fun <TargetTableUserWrapper : Any> selfRowReference(
|
public fun <ttUE : Any> selfRowReference(
|
||||||
onDelete: ForeignRowReference.OnDeleteAction,
|
onDelete: ForeignRowReference.OnDelete,
|
||||||
): ForeignRowReference<tUE, tUE>
|
): ForeignRowReference<tUE, tUE, RowId<tUE>, DatabaseType.ROW_ID<tUE>>
|
||||||
|
|
||||||
public fun <TargetTableUserWrapper : Any> foreignRowReference(
|
public fun <ttUE : Any> nullableSelfRowReference(
|
||||||
|
onDelete: ForeignRowReference.OnDelete,
|
||||||
|
): ForeignRowReference<tUE, tUE, RowId<tUE>?, DatabaseType.Nullable<RowId<tUE>, DatabaseType.ROW_ID<tUE>>>
|
||||||
|
|
||||||
|
public fun <ttUE : Any> foreignRowReference(
|
||||||
columnName: String,
|
columnName: String,
|
||||||
toTable: Table<TargetTableUserWrapper, *>,
|
toTable: Table<ttUE, *>,
|
||||||
onDelete: ForeignRowReference.OnDeleteAction,
|
onDelete: ForeignRowReference.OnDelete,
|
||||||
): ForeignRowReference<tUE, TargetTableUserWrapper>
|
): ForeignRowReference<tUE, ttUE, RowId<ttUE>, DatabaseType.ROW_ID<ttUE>>
|
||||||
|
|
||||||
|
public fun <ttUE : Any> nullableForeignRowReference(
|
||||||
|
columnName: String,
|
||||||
|
toTable: Table<ttUE, *>,
|
||||||
|
onDelete: ForeignRowReference.OnDelete,
|
||||||
|
): ForeignRowReference<tUE, ttUE, RowId<ttUE>?, DatabaseType.Nullable<RowId<ttUE>, DatabaseType.ROW_ID<ttUE>>>
|
||||||
}
|
}
|
@ -10,7 +10,7 @@ import ru.landgrafhomyak.db.serdha0.api.misc.DatabaseType
|
|||||||
* @param ctUE Type of [owner table's][ForeignRowReference.fromTable] user expression for static reporting errors when this descriptor passed to wrong table.
|
* @param ctUE Type of [owner table's][ForeignRowReference.fromTable] user expression for static reporting errors when this descriptor passed to wrong table.
|
||||||
* @param ttUE Type of [target table's][ForeignRowReference.toTable] user expression for static reporting errors when this descriptor passed to wrong table.
|
* @param ttUE Type of [target table's][ForeignRowReference.toTable] user expression for static reporting errors when this descriptor passed to wrong table.
|
||||||
*/
|
*/
|
||||||
public interface ForeignRowReference<ctUE : Any, ttUE : Any> : Column<RowId<ttUE>, DatabaseType.ROW_ID<ttUE>, ctUE> {
|
public interface ForeignRowReference<ctUE : Any, ttUE : Any, RT : RowId<ttUE>?, DT : DatabaseType<RT>> : Column<RowId<ttUE>, DatabaseType.ROW_ID<ttUE>, ctUE> {
|
||||||
/**
|
/**
|
||||||
* Table that contains references. For debugging.
|
* Table that contains references. For debugging.
|
||||||
*/
|
*/
|
||||||
@ -29,7 +29,7 @@ public interface ForeignRowReference<ctUE : Any, ttUE : Any> : Column<RowId<ttUE
|
|||||||
/**
|
/**
|
||||||
* Enum of actions to do when referenced row in [ForeignRowReference.toTable] deleted.
|
* Enum of actions to do when referenced row in [ForeignRowReference.toTable] deleted.
|
||||||
*/
|
*/
|
||||||
public enum class OnDeleteAction {
|
public enum class OnDelete {
|
||||||
/**
|
/**
|
||||||
* Forbids deleting row in [ForeignRowReference.toTable] if there is at least one reference from [ForeignRowReference.fromTable].
|
* Forbids deleting row in [ForeignRowReference.toTable] if there is at least one reference from [ForeignRowReference.fromTable].
|
||||||
*/
|
*/
|
||||||
|
@ -26,38 +26,56 @@ public interface UpdateTableScope<tnUE : Any, toUE : Any> : CreateTableScope<tnU
|
|||||||
public fun <RT, DT : DatabaseType<RT>> changeDefaultValue(c: Column<RT, DT, tnUE>, d: DefaultConstraint<toUE>): DefaultConstraint<tnUE>
|
public fun <RT, DT : DatabaseType<RT>> changeDefaultValue(c: Column<RT, DT, tnUE>, d: DefaultConstraint<toUE>): DefaultConstraint<tnUE>
|
||||||
public fun deleteDefaultValue(i: DefaultConstraint<toUE>)
|
public fun deleteDefaultValue(i: DefaultConstraint<toUE>)
|
||||||
|
|
||||||
public fun <ttUE : Any> keepForeignRowReference(
|
public fun <ttUE : Any, RT : RowId<ttUE>?, DT : DatabaseType<RT>> keepForeignRowReference(
|
||||||
frr: ForeignRowReference<toUE, ttUE>,
|
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
|
||||||
onDelete: ForeignRowReference.OnDeleteAction? = null
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
): ForeignRowReference<tnUE, ttUE>
|
): ForeignRowReference<toUE, ttUE, RT, DT>
|
||||||
|
|
||||||
public fun <ttoUE : Any, ttnUE : Any> keepForeignRowReferenceToUpdatedTable(
|
public fun <ttoUE : Any, ttnUE : Any> keepForeignRowReferenceToUpdatedTable(
|
||||||
frr: ForeignRowReference<toUE, ttoUE>,
|
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>,
|
||||||
updatedTable: Table<ttnUE, ttoUE>,
|
updatedTable: Table<ttnUE, ttoUE>,
|
||||||
onDelete: ForeignRowReference.OnDeleteAction? = null
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
): ForeignRowReference<tnUE, ttnUE>
|
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>
|
||||||
|
|
||||||
public fun <ttUE : Any> renameAndKeepForeignRowReference(
|
public fun <ttoUE : Any, ttnUE : Any> keepNullableForeignRowReferenceToUpdatedTable(
|
||||||
frr: ForeignRowReference<toUE, ttUE>,
|
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>?, DatabaseType.Nullable<RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>>,
|
||||||
onDelete: ForeignRowReference.OnDeleteAction? = null
|
updatedTable: Table<ttnUE, ttoUE>,
|
||||||
): ForeignRowReference<tnUE, ttUE>
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
|
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>
|
||||||
|
|
||||||
|
public fun <ttUE : Any, RT : RowId<ttUE>?, DT : DatabaseType<RT>> renameAndKeepForeignRowReference(
|
||||||
|
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
|
||||||
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
|
): ForeignRowReference<tnUE, ttUE, RT, DT>
|
||||||
|
|
||||||
public fun <ttoUE : Any, ttnUE : Any> renameAndKeepForeignRowReferenceToUpdatedTable(
|
public fun <ttoUE : Any, ttnUE : Any> renameAndKeepForeignRowReferenceToUpdatedTable(
|
||||||
frr: ForeignRowReference<toUE, ttoUE>,
|
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>,
|
||||||
updatedTable: Table<ttnUE, ttoUE>,
|
updatedTable: Table<ttnUE, ttoUE>,
|
||||||
onDelete: ForeignRowReference.OnDeleteAction? = null
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
): ForeignRowReference<tnUE, ttnUE>
|
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>
|
||||||
|
|
||||||
public fun deleteForeignRowReference(frr: ForeignRowReference<toUE, *>)
|
public fun <ttoUE : Any, ttnUE : Any> renameAndKeepNullableForeignRowReferenceToUpdatedTable(
|
||||||
|
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>?, DatabaseType.Nullable<RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>>,
|
||||||
|
updatedTable: Table<ttnUE, ttoUE>,
|
||||||
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
|
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>?, DatabaseType.Nullable<RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>>
|
||||||
|
|
||||||
public fun <ttUE : Any> keepForeignRowReferenceUntilUpgraded(
|
public fun deleteForeignRowReference(frr: ForeignRowReference<toUE, *, *, *>)
|
||||||
frr: ForeignRowReference<toUE, ttUE>,
|
|
||||||
onDelete: ForeignRowReference.OnDeleteAction? = null
|
public fun <ttUE : Any, RT : RowId<ttUE>?, DT : DatabaseType<RT>> keepForeignRowReferenceUntilUpgraded(
|
||||||
): ForeignRowReference<tnUE, ttUE>
|
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
|
||||||
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
|
): ForeignRowReference<tnUE, ttUE, RT, DT>
|
||||||
|
|
||||||
public fun <ttoUE : Any, ttnUE : Any> keepForeignRowReferenceToUpdatedTableUntilUpgraded(
|
public fun <ttoUE : Any, ttnUE : Any> keepForeignRowReferenceToUpdatedTableUntilUpgraded(
|
||||||
frr: ForeignRowReference<toUE, ttoUE>,
|
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>,
|
||||||
updatedTable: Table<ttnUE, ttoUE>,
|
updatedTable: Table<ttnUE, ttoUE>,
|
||||||
onDelete: ForeignRowReference.OnDeleteAction? = null
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
): ForeignRowReference<tnUE, ttnUE>
|
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>
|
||||||
|
|
||||||
|
public fun <ttoUE : Any, ttnUE : Any> keepNullableForeignRowReferenceToUpdatedTableUntilUpgraded(
|
||||||
|
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>?, DatabaseType.Nullable<RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>>,
|
||||||
|
updatedTable: Table<ttnUE, ttoUE>,
|
||||||
|
onDelete: ForeignRowReference.OnDelete? = null
|
||||||
|
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>?, DatabaseType.Nullable<RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>>
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user