override fun createStatement()

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
    }