[history/serdha] Nullable types

This commit is contained in:
Andrew Golovashevich 2024-12-04 06:07:00 +03:00
parent 15bd20fe87
commit f1f03815d5
2 changed files with 20 additions and 32 deletions

View File

@ -1,9 +1,9 @@
package ru.landgrafhomyak.serdha.api.v0.ddl package ru.landgrafhomyak.serdha.api.v0.ddl
public interface Column<RuntimeType, DatabaseType : ColumnType<RuntimeType & Any>, TableUserWrapper : Any> /*: Expression<RuntimeType, DatabaseType>*/ { public interface Column<RuntimeType, DatabaseType : ColumnType<RuntimeType>, TableUserExtension : Any> {
public val name: String public val name: String
public val type: DatabaseType public val type: DatabaseType
public val table: Table<TableUserWrapper, *> public val table: Table<TableUserExtension, *>
} }

View File

@ -3,64 +3,52 @@ package ru.landgrafhomyak.serdha.api.v0.ddl
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
import ru.landgrafhomyak.serdha.api.v0.Expression import ru.landgrafhomyak.serdha.api.v0.Expression
public interface TableCreator<TableUserWrapper : Any> { public interface TableCreator<TableUserExtension : Any> {
public val expressionBuilder: Expression.Builder<TableUserExtension>
/** /**
* Offers column of type [D][type] with `NOT NULL` constraint named [name] and runtime type [RuntimeType]. * Offers column of type [D][type] with `NOT NULL` constraint named [name] and runtime type [RuntimeType].
* *
* @return Descriptor of offered column for future operations. * @return Descriptor of offered column for future operations.
*/ */
public fun <RuntimeType : Any, DatabaseType : ColumnType<RuntimeType>> column(name: String, type: DatabaseType): Column<RuntimeType, DatabaseType, TableUserWrapper> public fun <RuntimeType : Any, DatabaseType : ColumnType<RuntimeType>> column(name: String, type: DatabaseType): Column<RuntimeType, DatabaseType, TableUserExtension>
@Suppress("INAPPLICABLE_JVM_NAME") public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index<TableUserExtension>
@JvmName("nullableColumn\$notNull")
@Deprecated("This column can be not-null", replaceWith = ReplaceWith("this.column"))
public fun <RuntimeType : Any, DatabaseType : ColumnType<RuntimeType>> nullableColumn(name: String, type: DatabaseType): Column<RuntimeType?, DatabaseType, TableUserWrapper> =
this.nullableColumn<RuntimeType?, DatabaseType>(name, type)
/** public fun unique(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueConstraint<TableUserExtension>
* Offers column of type [D][type] named [name] and runtime type [R?][RuntimeType]. public fun check(name: String, constraint: Expression<Boolean, ColumnType.BOOLEAN, TableUserExtension>): CheckConstraint<TableUserExtension>
*
* @return Descriptor of offered column for future operations.
*/
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType & Any>> nullableColumn(name: String, type: DatabaseType): Column<RuntimeType?, DatabaseType, TableUserWrapper>
public fun index(name: String, vararg columns: Column<*, *, TableUserWrapper>): Index<TableUserWrapper> public fun rowIdColumn(): Column<RowId<TableUserExtension>, ColumnType<RowId<TableUserExtension>>, TableUserExtension>
// todo not-null column uniqueness public fun rowIdUniqueConstraint(): UniqueConstraint<TableUserExtension>
public fun unique(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserWrapper>): UniqueConstraint<TableUserWrapper>
public fun check(name: String, constraint: Expression<Boolean, ColumnType.BOOLEAN, TableUserWrapper>): CheckConstraint<TableUserWrapper>
public fun rowIdColumn(): Column<RowId<TableUserWrapper>, ColumnType<RowId<TableUserWrapper>>, TableUserWrapper>
public fun rowIdUniqueConstraint(): UniqueConstraint<TableUserWrapper>
public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>> foreignKey( public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>> foreignKey(
fromColumn: Column<*, ColumnType1, TableUserWrapper>, fromColumn: Column<*, ColumnType1, TableUserExtension>,
toTable: Table<TargetTableUserWrapper, *>, toTable: Table<TargetTableUserWrapper, *>,
toColumn: Column<*, ColumnType1, TargetTableUserWrapper>, toColumn: Column<*, ColumnType1, TargetTableUserWrapper>,
onUpdate: ForeignKey.OnUpdateAction, onUpdate: ForeignKey.OnUpdateAction,
onDelete: ForeignKey.OnDeleteAction onDelete: ForeignKey.OnDeleteAction
): ForeignKey<TableUserWrapper, TargetTableUserWrapper> ): ForeignKey<TableUserExtension, TargetTableUserWrapper>
public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>, ColumnType2 : ColumnType<*>> foreignKey( public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>, ColumnType2 : ColumnType<*>> foreignKey(
fromColumn1: Column<*, ColumnType1, TableUserWrapper>, fromColumn1: Column<*, ColumnType1, TableUserExtension>,
fromColumn2: Column<*, ColumnType2, TableUserWrapper>, fromColumn2: Column<*, ColumnType2, TableUserExtension>,
toTable: Table<TargetTableUserWrapper, *>, toTable: Table<TargetTableUserWrapper, *>,
toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>, toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>,
toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>,
onUpdate: ForeignKey.OnUpdateAction, onUpdate: ForeignKey.OnUpdateAction,
onDelete: ForeignKey.OnDeleteAction onDelete: ForeignKey.OnDeleteAction
): ForeignKey<TableUserWrapper, TargetTableUserWrapper> ): ForeignKey<TableUserExtension, TargetTableUserWrapper>
public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>, ColumnType2 : ColumnType<*>, ColumnType3 : ColumnType<*>> foreignKey( public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>, ColumnType2 : ColumnType<*>, ColumnType3 : ColumnType<*>> foreignKey(
fromColumn1: Column<*, ColumnType1, TableUserWrapper>, fromColumn1: Column<*, ColumnType1, TableUserExtension>,
fromColumn2: Column<*, ColumnType2, TableUserWrapper>, fromColumn2: Column<*, ColumnType2, TableUserExtension>,
fromColumn3: Column<*, ColumnType3, TableUserWrapper>, fromColumn3: Column<*, ColumnType3, TableUserExtension>,
toTable: Table<TargetTableUserWrapper, *>, toTable: Table<TargetTableUserWrapper, *>,
toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>, toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>,
toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>,
toColumn3: Column<*, ColumnType3, TargetTableUserWrapper>, toColumn3: Column<*, ColumnType3, TargetTableUserWrapper>,
onUpdate: ForeignKey.OnUpdateAction, onUpdate: ForeignKey.OnUpdateAction,
onDelete: ForeignKey.OnDeleteAction onDelete: ForeignKey.OnDeleteAction
): ForeignKey<TableUserWrapper, TargetTableUserWrapper> ): ForeignKey<TableUserExtension, TargetTableUserWrapper>
} }