Removed constraints from 'ForeignRowReference' RT and DT because it doesn't strictly check at compile-time but allows using virtual types

This commit is contained in:
Andrew Golovashevich 2025-01-31 20:40:10 +03:00
parent 13e9da6aba
commit 7a51863dca
3 changed files with 24 additions and 34 deletions

View File

@ -21,12 +21,15 @@ public interface CreateTableScope<tUE : Any> {
public val rowId_uniqueConstraint: UniqueIndex<tUE>
public fun <ttUE : Any> selfRowReference(
columnName: String,
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, tUE, RowId<tUE>, DatabaseType.ROW_ID<tUE>>
public fun <ttUE : Any> nullableSelfRowReference(
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> selfRowReference(
columnName: String,
type: DT,
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, tUE, RowId<tUE>?, DatabaseType.Nullable<RowId<tUE>, DatabaseType.ROW_ID<tUE>>>
): ForeignRowReference<tUE, tUE, RT, DT>
public fun <ttUE : Any> foreignRowReference(
columnName: String,
@ -34,9 +37,10 @@ public interface CreateTableScope<tUE : Any> {
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, ttUE, RowId<ttUE>, DatabaseType.ROW_ID<ttUE>>
public fun <ttUE : Any> nullableForeignRowReference(
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> foreignRowReference(
columnName: String,
type: DT,
toTable: Table<ttUE, *>,
onDelete: ForeignRowReference.OnDelete,
): ForeignRowReference<tUE, ttUE, RowId<ttUE>?, DatabaseType.Nullable<RowId<ttUE>, DatabaseType.ROW_ID<ttUE>>>
): ForeignRowReference<tUE, ttUE, RT, DT>
}

View File

@ -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 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, RT : RowId<ttUE>?, DT : DatabaseType<RT>> : Column<RowId<ttUE>, DatabaseType.ROW_ID<ttUE>, ctUE> {
public interface ForeignRowReference<ctUE : Any, ttUE : Any, RT, DT : DatabaseType<RT>> : Column<RT, DT, ctUE> {
/**
* Table that contains references. For debugging.
*/

View File

@ -26,56 +26,42 @@ 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 deleteDefaultValue(i: DefaultConstraint<toUE>)
public fun <ttUE : Any, RT : RowId<ttUE>?, DT : DatabaseType<RT>> keepForeignRowReference(
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> keepForeignRowReference(
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<toUE, ttUE, RT, DT>
public fun <ttoUE : Any, ttnUE : Any> keepForeignRowReferenceToUpdatedTable(
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>,
public fun <ttoUE : Any, oRT, oDT : DatabaseType<oRT>, ttnUE : Any, nRT, nDT : DatabaseType<nRT>> keepForeignRowReferenceToUpdatedTable(
frr: ForeignRowReference<toUE, ttoUE, oRT, oDT>,
updatedType: nDT,
updatedTable: Table<ttnUE, ttoUE>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>
): ForeignRowReference<tnUE, ttnUE, nRT, nDT>
public fun <ttoUE : Any, ttnUE : Any> keepNullableForeignRowReferenceToUpdatedTable(
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.ROW_ID<ttnUE>>
public fun <ttUE : Any, RT : RowId<ttUE>?, DT : DatabaseType<RT>> renameAndKeepForeignRowReference(
public fun <ttUE : Any, RT, 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(
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>,
public fun <ttoUE : Any, oRT, oDT : DatabaseType<oRT>, ttnUE : Any, nRT, nDT : DatabaseType<nRT>> renameAndKeepForeignRowReferenceToUpdatedTable(
frr: ForeignRowReference<toUE, ttoUE, oRT, oDT>,
updatedType: nDT,
updatedTable: Table<ttnUE, ttoUE>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>
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>>>
): ForeignRowReference<tnUE, ttnUE, nRT, nDT>
public fun deleteForeignRowReference(frr: ForeignRowReference<toUE, *, *, *>)
public fun <ttUE : Any, RT : RowId<ttUE>?, DT : DatabaseType<RT>> keepForeignRowReferenceUntilUpgraded(
public fun <ttUE : Any, RT, DT : DatabaseType<RT>> keepForeignRowReferenceUntilUpgraded(
frr: ForeignRowReference<toUE, ttUE, RT, DT>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttUE, RT, DT>
public fun <ttoUE : Any, ttnUE : Any> keepForeignRowReferenceToUpdatedTableUntilUpgraded(
frr: ForeignRowReference<toUE, ttoUE, RowId<ttoUE>, DatabaseType.ROW_ID<ttoUE>>,
public fun <ttoUE : Any, oRT, oDT : DatabaseType<oRT>, ttnUE : Any, nRT, nDT : DatabaseType<nRT>> keepForeignRowReferenceToUpdatedTableUntilUpgraded(
frr: ForeignRowReference<toUE, ttoUE, oRT, oDT>,
updatedType: nDT,
updatedTable: Table<ttnUE, ttoUE>,
onDelete: ForeignRowReference.OnDelete? = null
): ForeignRowReference<tnUE, ttnUE, RowId<ttnUE>, DatabaseType.ROW_ID<ttnUE>>
): ForeignRowReference<tnUE, ttnUE, nRT, nDT>
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>>>
}