Table constructor
This commit is contained in:
parent
f826cf25f9
commit
b972cffc17
@ -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
|
||||
}
|
@ -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))
|
||||
}
|
||||
}
|
@ -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>>
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
package ru.landgrafhomyak.db.serdha0.api.table
|
||||
|
||||
public interface UniqueIndex<OwnerTableUserExtension : Any> : Index<OwnerTableUserExtension> {
|
||||
public val areNullsDistinct: Boolean
|
||||
}
|
Loading…
Reference in New Issue
Block a user