Как получить необязательный результат в операторах вставки с Doobie? - PullRequest
4 голосов
/ 28 мая 2019

У меня есть дополнительный запрос вставки:

val q = sql"insert into some_table (some_field) select 42 where ...(some condition)"

Выполнение этого запроса с:

q.update.withUniqueGeneratedKeys[Option[Long]]("id")

терпит неудачу с

Набор результатов исчерпан: ожидается больше строк

тогда condition ложно.

Как получить Optional[Long] результат из операторов вставки с Doobie?


UPD

.withGeneratedKeys[Long]("id") дает только Long для понимания

val q = sql"insert into some_table (some_field) select 42 where ...(some condition)"
for {
  id <- q.update.withGeneratedKeys[Long]("id")   // id is long
  _ <- if (<id is present>) <some other inserts> else <nothing>
} yield id

Как проверить id?

1 Ответ

1 голос
/ 28 мая 2019

Как прокомментировал @Thilo, вы можете использовать withGeneratedKeys, который возвращает вам Stream[F, Long] (где F - ваш тип эффекта)

val result = q.update.withGeneratedKeys[Long]("id")

Вот это документ .

...