From c4db335dac12d5c83b718db492ca97ba4e1600ad Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sun, 17 Nov 2024 19:51:00 +0300 Subject: [PATCH] [history/serdha] DDL & DML --- .../serdha/api/v0/ddl/Column.kt | 9 +++ .../landgrafhomyak/serdha/api/v0/ddl/Index.kt | 7 +++ .../serdha/api/v0/ddl/TableCreator.kt | 60 +++++++++++++++++++ .../serdha/api/v0/ddl/UniqueConstraint.kt | 7 +++ 4 files changed, 83 insertions(+) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt new file mode 100644 index 0000000..6435ef2 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt @@ -0,0 +1,9 @@ +package ru.landgrafhomyak.serdha.api.v0.ddl + +public interface Column, TableUserWrapper : Any> /*: Expression*/ { + public val name: String + + public val type: DatabaseType + + public val table: Table +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt new file mode 100644 index 0000000..1b80d29 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt @@ -0,0 +1,7 @@ +package ru.landgrafhomyak.serdha.api.v0.ddl + +public interface Index { + public val name: String + public val table: Table + public val columns: List> +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt new file mode 100644 index 0000000..55a282e --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt @@ -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 { + /** + * 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 > column(name: String, type: DatabaseType): Column + + @Suppress("INAPPLICABLE_JVM_NAME") + @JvmName("nullableColumn\$notNull") + @Deprecated("This column can be not-null", replaceWith = ReplaceWith("this.column")) + public fun > nullableColumn(name: String, type: DatabaseType): Column = + this.nullableColumn(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 > nullableColumn(name: String, type: DatabaseType): Column + + public fun index(name: String, vararg columns: Column<*, *, TableUserWrapper>): Index + public fun unique(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserWrapper>): UniqueConstraint + public fun check(name: String, constraint: Expression): CheckConstraint + + public fun > foreignKey( + fromColumn: Column<*, ColumnType1, TableUserWrapper>, + toTable: Table, + toColumn: Column<*, ColumnType1, TargetTableUserWrapper>, + onUpdate: ForeignKey.OnUpdateAction, + onDelete: ForeignKey.OnDeleteAction + ): ForeignKey + + public fun , ColumnType2 : ColumnType<*>> foreignKey( + fromColumn1: Column<*, ColumnType1, TableUserWrapper>, + fromColumn2: Column<*, ColumnType2, TableUserWrapper>, + toTable: Table, + toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>, + toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, + onUpdate: ForeignKey.OnUpdateAction, + onDelete: ForeignKey.OnDeleteAction + ): ForeignKey + + public fun , ColumnType2 : ColumnType<*>, ColumnType3 : ColumnType<*>> foreignKey( + fromColumn1: Column<*, ColumnType1, TableUserWrapper>, + fromColumn2: Column<*, ColumnType2, TableUserWrapper>, + fromColumn3: Column<*, ColumnType3, TableUserWrapper>, + toTable: Table, + toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>, + toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, + toColumn3: Column<*, ColumnType3, TargetTableUserWrapper>, + onUpdate: ForeignKey.OnUpdateAction, + onDelete: ForeignKey.OnDeleteAction + ): ForeignKey +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt new file mode 100644 index 0000000..25b144c --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt @@ -0,0 +1,7 @@ +package ru.landgrafhomyak.serdha.api.v0.ddl + +public interface UniqueConstraint { + public val name: String + public val table: Table + public val columns: List> +} \ No newline at end of file