Безопасный выбор типа и отображение нетипизированного необработанного результата в Slick
У меня есть ситуация, когда клиентское приложение не полностью осведомлено о схеме базы данных. Например, я точно знаю, что есть email
поле. Но в качестве результата запроса я хотел бы вернуть все поля. Они никак не обрабатываются, я просто сериализую результат как JSON. Тем не менее, я хотел бы иметь безопасность типов для выбора таблицы и присоединения. Возможно ли это сделать в Slick (или, может быть, в другой библиотеке)?
Например, у меня есть таблица users
с известной схемой:
class Users(tag: Tag) extends Table[(String)](tag, "users") {
def email = column[String]("email")
def * = (email) // Not sure about this. Should it be rewritten?
}
Можно ли запросить эту таблицу (или объединить с другими таблицами) безопасным для типов способом, подобным этому:
emailDB.run(TableQuery[Users].filter(_.email === encryptedEmail).result)
но каким-то образом получить все поля записи и сопоставить результирующий набор всех полей из таблицы как Map[String, String]
или же Map[String, Any]
или бесформенный HList?
PS У меня есть относительно сумасшедшая идея заменить шаблон *
с функцией, которая лениво проверяет схему таблицы и создает гетерогенный список для отображения в