Table constructor

This commit is contained in:
Andrew Golovashevich 2025-03-24 05:11:11 +03:00
parent f826cf25f9
commit b972cffc17
4 changed files with 30 additions and 24 deletions

View File

@ -0,0 +1,8 @@
package ru.landgrafhomyak.db.raw_sql_skeleton
public class NamedTableMember(
public val table: Table,
public val name: String
) {
override fun toString(): String = this.name
}

View File

@ -1,17 +1,31 @@
package ru.landgrafhomyak.db.raw_sql_skeleton
import ru.landgrafhomyak.db.serdha0.api.table.Index
import ru.landgrafhomyak.db.serdha0.api.table.UniqueIndex
public interface TableConstructor<TableUserExtension : Any> {
public fun createTable(context: Scope<TableUserExtension>): TableUserExtension
public fun createTable(table: Table, members: Scope): TableUserExtension
public interface Scope<tUE : Any> {
public fun column(name: String, type: String): Column
public class Scope internal constructor(private val _table: Table) {
private val _usedNames = HashSet<String>()
public fun index(name: String): Index<tUE>
private fun _allocName(name: String): String {
if (!this._usedNames.add(name))
throw IllegalArgumentException("Name duplication: $name")
return name
}
public fun uniqueIndex(name: String): UniqueIndex<tUE>
public fun checkConstraint(name: String): CheckConstraint<tUE>
public fun column(name: String, type: String): Column =
Column(this._table, this._allocName(name), type)
public fun column(name: String, referenceType: String, declarationType: String): Column =
Column(this._table, this._allocName(name), referenceType, declarationType)
public fun index(name: String): NamedTableMember =
NamedTableMember(this._table, this._allocName(name))
public fun uniqueIndex(name: String): NamedTableMember =
NamedTableMember(this._table, this._allocName(name))
public fun checkConstraint(name: String): NamedTableMember =
NamedTableMember(this._table, this._allocName(name))
}
}

View File

@ -1,11 +0,0 @@
package ru.landgrafhomyak.db.serdha0.api.table
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.raw_sql_skeleton.Table
import ru.landgrafhomyak.db.serdha0.api.misc.Column
public interface Index<OwnerTableUserExtension : Any> {
public val name: String
public val table: Table<OwnerTableUserExtension, *>
public val columns: List<Column<*, *, OwnerTableUserExtension>>
}

View File

@ -1,5 +0,0 @@
package ru.landgrafhomyak.db.serdha0.api.table
public interface UniqueIndex<OwnerTableUserExtension : Any> : Index<OwnerTableUserExtension> {
public val areNullsDistinct: Boolean
}