[history/serdha] DDL & DML

This commit is contained in:
Andrew Golovashevich 2024-11-17 19:51:00 +03:00
commit c4db335dac
4 changed files with 83 additions and 0 deletions

View File

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

View File

@ -0,0 +1,7 @@
package ru.landgrafhomyak.serdha.api.v0.ddl
public interface Index<OwnerTableUserWrapper : Any> {
public val name: String
public val table: Table<OwnerTableUserWrapper, *>
public val columns: List<Column<*, *, OwnerTableUserWrapper>>
}

View File

@ -0,0 +1,60 @@
package ru.landgrafhomyak.serdha.api.v0.ddl
import kotlin.jvm.JvmName
import ru.landgrafhomyak.serdha.api.v0.Expression
public interface TableCreator<TableUserWrapper : Any> {
/**
* Offers column of type [D][type] with `NOT NULL` constraint named [name] and runtime type [RuntimeType].
*
* @return Descriptor of offered column for future operations.
*/
public fun <RuntimeType : Any, DatabaseType : ColumnType<RuntimeType>> column(name: String, type: DatabaseType): Column<RuntimeType, DatabaseType, TableUserWrapper>
@Suppress("INAPPLICABLE_JVM_NAME")
@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)
/**
* Offers column of type [D][type] named [name] and runtime type [R?][RuntimeType].
*
* @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 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 <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>> foreignKey(
fromColumn: Column<*, ColumnType1, TableUserWrapper>,
toTable: Table<TargetTableUserWrapper, *>,
toColumn: Column<*, ColumnType1, TargetTableUserWrapper>,
onUpdate: ForeignKey.OnUpdateAction,
onDelete: ForeignKey.OnDeleteAction
): ForeignKey<TableUserWrapper, TargetTableUserWrapper>
public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>, ColumnType2 : ColumnType<*>> foreignKey(
fromColumn1: Column<*, ColumnType1, TableUserWrapper>,
fromColumn2: Column<*, ColumnType2, TableUserWrapper>,
toTable: Table<TargetTableUserWrapper, *>,
toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>,
toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>,
onUpdate: ForeignKey.OnUpdateAction,
onDelete: ForeignKey.OnDeleteAction
): ForeignKey<TableUserWrapper, TargetTableUserWrapper>
public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>, ColumnType2 : ColumnType<*>, ColumnType3 : ColumnType<*>> foreignKey(
fromColumn1: Column<*, ColumnType1, TableUserWrapper>,
fromColumn2: Column<*, ColumnType2, TableUserWrapper>,
fromColumn3: Column<*, ColumnType3, TableUserWrapper>,
toTable: Table<TargetTableUserWrapper, *>,
toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>,
toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>,
toColumn3: Column<*, ColumnType3, TargetTableUserWrapper>,
onUpdate: ForeignKey.OnUpdateAction,
onDelete: ForeignKey.OnDeleteAction
): ForeignKey<TableUserWrapper, TargetTableUserWrapper>
}

View File

@ -0,0 +1,7 @@
package ru.landgrafhomyak.serdha.api.v0.ddl
public interface UniqueConstraint<OwnerTableUserWrapper : Any> {
public val name: String
public val table: Table<OwnerTableUserWrapper, *>
public val columns: List<Column<*, *, OwnerTableUserWrapper>>
}