diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/NamedTableMember.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/NamedTableMember.kt new file mode 100644 index 0000000..66d36b7 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/NamedTableMember.kt @@ -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 +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableConstructor.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableConstructor.kt index c4b81ec..fd08127 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableConstructor.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableConstructor.kt @@ -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 { - public fun createTable(context: Scope): TableUserExtension + public fun createTable(table: Table, members: Scope): TableUserExtension - public interface Scope { - public fun column(name: String, type: String): Column + public class Scope internal constructor(private val _table: Table) { + private val _usedNames = HashSet() - public fun index(name: String): Index + private fun _allocName(name: String): String { + if (!this._usedNames.add(name)) + throw IllegalArgumentException("Name duplication: $name") + return name + } - public fun uniqueIndex(name: String): UniqueIndex - public fun checkConstraint(name: String): CheckConstraint + 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)) } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Index.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Index.kt deleted file mode 100644 index 43ebc75..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/Index.kt +++ /dev/null @@ -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 { - 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/serdha0/api/table/UniqueIndex.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/UniqueIndex.kt deleted file mode 100644 index 2f58e41..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/table/UniqueIndex.kt +++ /dev/null @@ -1,5 +0,0 @@ -package ru.landgrafhomyak.db.serdha0.api.table - -public interface UniqueIndex : Index { - public val areNullsDistinct: Boolean -} \ No newline at end of file