diff --git a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Constraints.kt b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Constraints.kt index bae2286db2..b03460475b 100644 --- a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Constraints.kt +++ b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Constraints.kt @@ -43,7 +43,7 @@ data class ForeignKeyConstraint(val fkName: String, val targetColumn = fromCol.referee!! val t = TransactionManager.current() val identifierManager = t.db.identifierManager - val refName = identifierManager.cutIfNecessaryAndQuote("fk_${fromCol.table.tableName}_${fromCol.name}_${targetColumn.name}").inProperCase() + val refName = identifierManager.cutIfNecessaryAndQuote("fk_${fromCol.table.tableNameWithoutScheme}_${fromCol.name}_${targetColumn.name}").inProperCase() return ForeignKeyConstraint(refName, t.identity(targetColumn.table), t.identity(targetColumn), t.identity(fromCol.table), t.identity(fromCol), 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 e2e1e7c466..7a692fae64 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 @@ -161,6 +161,8 @@ class Join (val table: ColumnSet) : ColumnSet() { open class Table(name: String = ""): ColumnSet(), DdlAware { open val tableName = if (name.isNotEmpty()) name else this.javaClass.simpleName.removeSuffix("Table") + internal val tableNameWithoutScheme get() = tableName.substringAfter(".") + fun nameInDatabaseCase() = tableName.inProperCase() private val _columns = ArrayList>() diff --git a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/DDLTests.kt b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/DDLTests.kt index 8938129a81..4899a1b54f 100644 --- a/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/DDLTests.kt +++ b/exposed-tests/src/test/kotlin/org/jetbrains/exposed/sql/tests/shared/DDLTests.kt @@ -819,6 +819,29 @@ class DDLTests : DatabaseTestsBase() { uniqueIndex("index2", value2, value1) } } + + @Test + fun createTableWithForeignKeyToAnotherSchema() { + withDb(excludeSettings = listOf(TestDB.SQLITE)) { + exec("CREATE SCHEMA ONE") + exec("CREATE SCHEMA TWO") + SchemaUtils.create(TableFromSchemeOne, TableFromSchemeTwo) + val idFromOne = TableFromSchemeOne.insertAndGetId { } + + TableFromSchemeTwo.insert { + it[reference] = idFromOne + } + + assertEquals(1, TableFromSchemeOne.selectAll().count()) + assertEquals(1, TableFromSchemeTwo.selectAll().count()) + } + } + + object TableFromSchemeOne : IntIdTable("one.test") + + object TableFromSchemeTwo : IntIdTable("two.test") { + val reference = reference("testOne", TableFromSchemeOne) + } }