元组导致光滑的3 DBIO

时间:2018-05-10 08:51:43

标签: scala slick-3.0

有一个带有键值的表。

还有一个自动递增PK的表。

从第一个表中获取密钥的值。如果不存在插入和 返还默认值。 基于它查询其他表。

返回过滤结果和值。

所以我可以试试:

def lastLogs(limit: Long = 666): Future[(Long, Seq[VLogEntry])] = {
  val q: DBIO[(Long, Seq[VLogEntry])] = {
    for {
      existing <- kvTable.filter(_.key === "log").result.headOption
      conf = existing getOrElse KV(key = "log", value = "0")
      last = conf.value.toLong
      rds = vLogTable.filter(_.id > last).take(limit).result
      _ <- kvTable.insertOrUpdate(conf)
    } yield {
      (last, rds)
    }
  }
  db.run(q)
}

这会产生编译错误:

found   : HipDAO.this.domain.dbConfig.profile.StreamingProfileAction[Seq[HipDAO.this.domain.VLogTable ...

required: Seq[db.types.Types.VLogEntry]

在Slick 2中,我可以在会话中调用查询列表或结果。 我如何在Slick 3中进行此操作。

1 个答案:

答案 0 :(得分:0)

经历了可以做的迭代,我来到了:

def lastLogs(limit: Long = 666): Future[(Long, Seq[VLogEntry])] = {
  val q: DBIO[(Long, Seq[VLogEntry])] = {
    for {
      existing <- kvTable.filter(_.key === "log").result.headOption
      conf = existing getOrElse KV(key = "log", value = "0")
      _ <- kvTable.insertOrUpdate(conf)
      last = conf.value.toLong
      rds <- vLogTable.filter(_.id > last).take(limit).result
    } yield {
      (last, rds)
    }
  }
  db.run(q)
}

由于差异只有2个字符,这似乎很容易解决。 互联网缺乏StreamingProfileAction以及如何阅读此消息。 一些见解可能来自阅读essential slick 3

最终,我是如何看到它的,它是一个monad,你应该对它进行平面映射。