INSERT INTO SELECT в Slick, который работает на сервере. Является ли это возможным? - PullRequest
0 голосов
/ 02 февраля 2020

Я собираюсь продублировать некоторые записи в таблице tbl.

Это выглядит как

INSERT INTO tbl SELECT id+100, name FROM tbl

в простом виде SQL.

Я ожидал, что это может выглядят как

db.run(
         tableQuery.forceInsertQuery(
           tableQuery.map{rec=>rec.copy(id=rec.id+100)}
))

в Slick, где rec - это экземпляр Table[ScalaCaseClassForTbl] с

   val id = column[Int]("id", O.PrimaryKey)
   val name = column[String]("name")

и

override def * : ProvenShape[ScalaCaseClassForTbl] =

Но я не понимаю как сделать map.

Спасибо за любые идеи.

1 Ответ

0 голосов
/ 27 февраля 2020

Проблема с ...

tableQuery.map{rec=>rec.copy(id=rec.id+100)}

... состоит в том, что rec не является классом дел, поэтому нет copy.

Что вы можете сделать, это map для кортежа значений столбцов (Rep[T]) и затем преобразовать его в класс дела.

Например:

tableQuery.map{ rec =>
 (rec.id+100, rec.name).mapTo[YourCaseClass]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...