Как вызвать ошибку при создании ConnectionIO? - PullRequest
1 голос
/ 18 марта 2020

Например, у меня есть набор запросов:

for {
  entity <- sql"<select some optional entity from db>".query[Entity].option
  result <- sql"<insert some data using entity>".update.run
} yield result

Как НЕ вставить некоторые данные, когда сущность не найдена, и вызвать ошибку "сущность не существует"?

что-то как:

for {
  entity <- sql"<select some optional entity from db>".query[Entity].option
  result <- entity  // Option[Entity]
    .fold(ConnectionIO.raiseError("entity does not exists"))  // ConnectionIO.raiseError does not compile
    (e => sql"<insert some data using entity>".update.run)
} yield result

1 Ответ

4 голосов
/ 18 марта 2020

В соответствии с c в https://tpolecat.github.io/doobie/docs/04-Selecting.html вы можете использовать

.unique, который возвращает единственное значение, вызывает исключение, если есть возвращается не одна строка.

Так что в вашем случае решение будет выглядеть так:

...