Я пытаюсь получить классы базовых запросов из запроса Scala Slick, и мне это кажется более сложным, чем должно быть. Вот моя ошибка компилятора:
[info] Compiling 18 Scala sources to /home/target/scala-2.11/classes...
[error] /home/src/main/scala/com/core/address/AddressDAO.scala:30: type mismatch;
[error] found : scala.slick.lifted.Query[com.core.address.AddressDAO,com.core.protocol.Address,Seq]
[error] required: Option[com.core.protocol.Address]
[error] q
Вот метод, который я написал:
def getAddress(otherAddress: String): Future[Option[Address]] = {
future {
val q = for (addr <- addresses if (addr.address == otherAddress)) yield addr
q
}
Вот схема Slick:
class AddressDAO(tag: Tag) extends Table[Address](tag, "ADDRESSES") with DbConfig {
def address = column[String]("ADDRESS", O.PrimaryKey)
def hash160 = column[String]("HASH160")
def n_tx = column[Long]("N_TX")
def total_received = column[Double]("TOTAL_RECEIVED")
def total_sent = column[Double]("TOTAL_SENT")
def final_balance = column[Double]("FINAL_BALANCE")
def * = (hash160, address, n_tx, total_received, total_sent, final_balance) <> (Address.tupled, Address.unapply)
}
То, что я хочу сделать, выражается в возвращаемом типе метода getAddress
, который равен Future[Option[Address]]
. Мне нужен первый элемент, который находит база данных. Фактически возвращаемый тип имеет тип scala.slick.lifted.Query[com.core.address.AddressDAO,com.core.protocol.Address,Seq]
.
Кажется, нет никакого execute
метода или чего-то еще, чтобы запустить запрос. Я подозреваю, что это можно сделать с помощью for-comprehensions
, но я не могу понять, как это сделать на самом деле.
Спасибо!