diff --git a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Table.kt b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Table.kt index d177f7b0..6c87f203 100644 --- a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Table.kt +++ b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Table.kt @@ -336,9 +336,13 @@ open class Table(name: String = ""): ColumnSet(), DdlAware { }) fun > entityId(name: String, table: IdTable) : Column> { - val originalColumn = (table.id.columnType as EntityIDColumnType<*>).idColumn + val originalColumn = (table.id.columnType as EntityIDColumnType<*>).idColumn as Column + return entityId(name, originalColumn) + } + + fun > entityId(name: String, originalColumn: Column) : Column> { val columnTypeCopy = originalColumn.columnType.cloneAsBaseType() - val answer = Column>(this, name, EntityIDColumnType(Column(table, name, columnTypeCopy))) + val answer = Column>(this, name, EntityIDColumnType(Column(originalColumn.table, name, columnTypeCopy))) _columns.addColumn(answer) return answer } @@ -599,6 +603,13 @@ open class Table(name: String = ""): ColumnSet(), DdlAware { onDelete: ReferenceOption? = null, onUpdate: ReferenceOption? = null): Column> = entityId(name, foreign).references(foreign.id, onDelete, onUpdate) + @JvmName("referenceByIdColumn") + fun , E: EntityID> reference(name: String, refColumn: Column, + onDelete: ReferenceOption? = null, onUpdate: ReferenceOption? = null) : Column { + val entityIDColumn = entityId(name, (refColumn.columnType as EntityIDColumnType).idColumn) as Column + return entityIDColumn.references(refColumn, onDelete, onUpdate) + } + fun > reference(name: String, refColumn: Column, onDelete: ReferenceOption? = null, onUpdate: ReferenceOption? = null): Column { val originalType = (refColumn.columnType as? EntityIDColumnType<*>)?.idColumn?.columnType ?: refColumn.columnType @@ -615,6 +626,13 @@ open class Table(name: String = ""): ColumnSet(), DdlAware { onDelete: ReferenceOption? = null, onUpdate: ReferenceOption? = null): Column = Column(this, name, refColumn.columnType.cloneAsBaseType()).references(refColumn, onDelete, onUpdate).nullable() + @JvmName("optReferenceByIdColumn") + fun , E: EntityID> optReference(name: String, refColumn: Column, + onDelete: ReferenceOption? = null, onUpdate: ReferenceOption? = null) : Column { + val entityIDColumn = entityId(name, (refColumn.columnType as EntityIDColumnType).idColumn) as Column + return entityIDColumn.references(refColumn, onDelete, onUpdate).nullable() + } + fun Column.nullable(): Column { val newColumn = Column (table, name, columnType) newColumn.referee = referee diff --git a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt index 7d023f3f..8602d235 100644 --- a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt +++ b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/entities/EntityTests.kt @@ -179,14 +179,14 @@ class EntityTests: DatabaseTestsBase() { } object Posts : LongIdTable(name = "posts") { - val board = optReference("board", Boards) + val board = optReference("board", Boards.id) val parent = optReference("parent", this) val category = optReference("category", Categories.uniqueId).uniqueIndex() val optCategory = optReference("optCategory", Categories.uniqueId) } object Categories : IntIdTable() { - val uniqueId = uuid("uniqueId").clientDefault { UUID.randomUUID() }.uniqueIndex() + val uniqueId = uuid("uniqueId").autoGenerate().uniqueIndex() val title = varchar("title", 50) }