Ссылка на этот вопрос.
Я хочу вставить некоторую сущность по какому-либо условию.Он может быть вставлен или нет.Если условие истинно, сущность вставляется.Я хочу вставить некоторые другие данные в различные таблицы.Это выглядит так:
val q = sql"insert into some_table (some_field) select 42 where ...(some condition)"
val inserts = List(
sql"insert ...",
sql"insert ...",
sql"insert ..."
)
for {
id <- q.update.withGeneratedKeys[Long]("id")
_ <- inserts.reduce(_ ++ _).update.run
} yield id
Проблема в том, что это не компилируется, потому что первая вставка - fs2.Stream
, а вторая - нет.
Я пытался заменить _ <- inserts.reduce...
с _ = inserts.reduce
.Приложение может скомпилироваться, но inserts
во второй строке не происходит.
UPD
Мой возможный способ решения этой проблемы:
...
for {
idOpt <- q.update.withGeneratedKeys[Long]("id").compile.last
_ <- idOpt.fold(0.pure[ConnectionIO])(_ => inserts.reduce(_ ++ _).update.run)
} yield idOpt
это работает, но имхо это не красивоЕсть ли лучший способ сделать это?