Выбор множества столбцов в Slick
Я пытаюсь запустить запрос SELECT *
-style в Slick для представления. В идеале, я получаю функцию, с помощью которой вы можете передать набор имен столбцов в виде Seq[String]
и выполнить запрос SELECT col1, col2, ... FROM view
. Если это невозможно, тогда было бы приемлемым просто вернуть все столбцы (SELECT * FROM view
).
Я знаю, что могу сделать это, определив класс Table
для этого представления, а также сопутствующий класс case, но некоторые из этих представлений содержат сотни столбцов (для которых требуются вложенные кортежи, учитывая, что существует ограничение на 22 элемента на кортежах), и есть много просмотров, которые я должен был бы сделать для этого, так что много кода для записи/создания/поддержки. Я бы хотел избежать этого, если это вообще возможно.
Это можно сделать в Slick? Либо путем определения класса Table
без необходимости определять столбцы в статическом коде (инициализация какого-либо класса с динамическим списком столбцов столбцов была бы приемлемой), либо просто создавая SQL-запрос, используя sql"""..."""
и как-то получая .as[...]
до дескриптор возвращающий набор столбцов произвольной длины?
Мне не нужно делать что-то особенное с фактическими типами столбцов: на стороне базы данных у нас есть смесь типов, но если все они рассматриваются как текстовые столбцы на стороне Slick, это было бы хорошо со мной.
Ответы
Ответ 1
Slick не подходит для ваших требований.
В тот момент, когда вы хотите получить доступ к произвольным столбцам (например, используя List[String]
имен столбцов), вы теряете все преимущества безопасности типа, которые предоставляет Slick, поскольку он не может проверить схему.
Это означает, что вам придется оставить классы таблиц Slick и перейти к полностью динамическому решению с использованием сгенерированного SQL (используя String
).
Хотя Slick позволяет вам писать SQL вручную (посмотрите на функции StaticQuery.query
), другие библиотеки лучше подходят для задачи. Я рекомендую взглянуть на ScalikeJDBC.