Выбор множества столбцов в 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.