У меня есть простой MySQL db с одной строкой в таблице REG_PERIODS. Когда я запускаю этот запрос, я возвращаю строку.Slick headOption ничего не делает
val getRegPeriodAction = regPeriods.sortBy(_.endDate).result.head.map { regPeriod ⇒
Logger.debug(s"regPeriod = ${regPeriod}")
regPeriod
}
Однако, когда я запускаю этот запрос, я ничего не получаю, на самом деле сообщение отладки даже не достигнуто!
val getRegPeriodAction = regPeriods.sortBy(_.endDate).result.headOption.map { regPeriodOption ⇒
Logger.debug(s"regPeriodOption = ${regPeriodOption}")
regPeriodOption match {
case Some(regPeriod) ⇒ regPeriod
}
}
Я использую play-slick 1.0.0. Я что-то не понимаю? Должен ли я получать Some (regPeriod) при использовании headOption?
EDIT
Я попытался запустить в headOption
запрос в db.run(...)
и посылать результат другой функции, например, так:
def handleResult(opt: Option[RegistrationPeriod]) {
Logger.debug(s"received $opt")
}
for {
r <- db.run(regPeriods.sortBy(_.endDate.desc).result.headOption)
_ <- handleResult(r)
} ...
Странно то, что handleResult никогда называется! Как только я сменю код для вызова head
вместо headOption
, все работает так, как ожидалось.
ли вы решить вашу проблему уже? Вы уверены, что 'result.headOption' возвращает непустую' Option'? 'handleResult()' будет вызываться только, если 'Option' имеет значение. – Roman
Doh! Конечно, он возвращает «Нет», и поскольку handleResult находится в понимании, это не называется! Мне нужно выполнить проверку значения 'r' перед обработкой результата. – Oli