in exposed-core/src/main/kotlin/org/jetbrains/exposed/v1/core/Table.kt [1713:1755]
override fun createStatement(): List<String> {
@OptIn(InternalApi::class)
val addForeignKeysInAlterPart = TableUtils.checkCycle(this) && currentDialect !is SQLiteDialect
val foreignKeyConstraints = foreignKeys
@OptIn(InternalApi::class)
val createTable = buildString {
append("CREATE TABLE ")
if (currentDialect.supportsIfNotExists) {
append("IF NOT EXISTS ")
}
append(currentTransaction().identity(this@Table))
if (columns.isNotEmpty()) {
columns.joinTo(this, prefix = " (") { column ->
column.descriptionDdl(false)
}
if (columns.any { it.isPrimaryConstraintWillBeDefined }) {
primaryKeyConstraint()?.let { append(", $it") }
}
if (!addForeignKeysInAlterPart && foreignKeyConstraints.isNotEmpty()) {
foreignKeyConstraints.joinTo(this, prefix = ", ", separator = ", ") { it.foreignKeyPart }
}
if (checkConstraints.isNotEmpty()) {
checkConstraints().map { it.checkPart }.ifEmpty { null }?.joinTo(this, prefix = ", ")
}
append(")")
}
}
val createConstraint = if (addForeignKeysInAlterPart) {
foreignKeyConstraints.flatMap { it.createStatement() }
} else {
emptyList()
}
return createAutoIncColumnSequence() + createTable + createConstraint
}