in exposed-gradle-plugin/plugin-build/exposed-code-generator/src/main/kotlin/org/jetbrains/exposed/gradle/builders/TableBuilder.kt [117:142]
fun generateExposedTableMulticolumnIndexes() {
val indexes = tableInfo.table.indexes.filter { it.columns.size > 1 || it.indexType !in listOf(IndexType.other, IndexType.unknown)}
if (indexes.isEmpty()) {
return
}
builder.addInitializerBlock(buildCodeBlock {
for (index in indexes) {
if (tableInfo.primaryKeyColumns.containsAll(index.columns) && tableInfo.primaryKeyColumns.size == index.columns.size) {
continue
}
val name = getIndexName(index)
val columns = index.columns.map {
data.columnToPropertySpec[it]?.name
?: throw ReferencedColumnNotFoundException("Column ${it.fullName} definition not generated, can't create index.")
}
val indexType = indexTypeName[index.indexType]
val indexTypeString = if (indexType != null) ", indexType = \"$indexType\"" else ""
if (index.isUnique) {
addStatement("%M(%S, ${columns.joinToString(", ")}$indexTypeString)", MemberName("", "uniqueIndex"), name)
} else {
addStatement("%M(%S, false, ${columns.joinToString(", ")}$indexTypeString)", MemberName("", "index"), name)
}
}
})
}