Slick: запрос нескольких таблиц / баз данных с получением имен столбцов
В моем приложении Play есть методы, которые запрашивают таблицы базы данных с более чем ста столбцами. Я не могу определить case-класс для каждого такого запроса, потому что он был бы просто смехотворно большим и должен был бы меняться с каждым изменением таблицы в базе данных.
Я использую этот подход, где результат запроса выглядит следующим образом:
Map(columnName1 -> columnVal1, columnName2 -> columnVal2, ...)
Пример кода:
implicit val getListStringResult = GetResult[List[Any]] (
r => (1 to r.numColumns).map(_ => r.nextObject).toList
)
def getSomething(): Map[String, Any] = DB.withSession {
val columns = MTable.getTables(None, None, None, None).list.filter(_.name.name == "myTable").head.getColumns.list.map(_.column)
val result = sql"""SELECT * FROM myTable LIMIT 1""".as[List[Any]].firstOption.map(columns zip _ toMap).get
}
Это не проблема, когда запрос выполняется только для одной базы данных и одной таблицы. Мне нужно иметь возможность использовать несколько таблиц и баз данных в моем запросе, как это:
def getSomething(): Map[String, Any] = DB.withSession {
//The line below is no longer valid because of multiple tables/databases
val columns = MTable.getTables(None, None, None, None).list.filter(_.name.name == "table1").head.getColumns.list.map(_.column)
val result = sql"""
SELECT *
FROM db1.table1
LEFT JOIN db2.table2 ON db2.table2.col1 = db1.table1.col1
LIMIT 1
""".as[List[Any]].firstOption.map(columns zip _ toMap).get
}
Тот же подход больше не может быть использован для получения имен столбцов. Эта проблема не существует при использовании чего-то вроде PHP PDO или Java JDBCTemplate - они получают имена столбцов без каких-либо дополнительных усилий.
Мой вопрос: как мне добиться этого с помощью Slick?