in exposed-r2dbc/src/main/kotlin/org/jetbrains/exposed/v1/r2dbc/statements/api/R2dbcDatabaseMetadataImpl.kt [282:301]
override suspend fun existingPrimaryKeys(vararg tables: Table): Map<Table, PrimaryKeyMetadata?> {
return tables.associateWith { table ->
val (catalog, tableSchema) = tableCatalogAndSchema(table)
val pkQuery = metadataProvider.getPrimaryKeys(catalog, tableSchema, table.nameInDatabaseCaseUnquoted())
val results = flow {
connection.createStatement(pkQuery)
.execute()
.collect { r ->
r.map { row, _ ->
row.getString("PK_NAME")?.let {
it to row.getString("COLUMN_NAME")!!
}
}
.collect { emit(it) }
}
}.toList()
val (names, columns) = results.unzip()
names.distinct().singleOrNull()?.let { PrimaryKeyMetadata(it, columns) }
}
}