【问题标题】:Getting back rows affected (Int) in Slick 3.0在 Slick 3.0 中恢复受影响的行 (Int)
【发布时间】:2015-06-26 08:36:12
【问题描述】:

在之前的 Slick 版本中,在返回插入结果的 TableQuery 上定义了插入函数。我正在迁移到新的 API 并执行以下操作:

DBIO.seq(someTable += someValue)

但这有类型

dbio.DBIOAction[Unit, NoStream, Write]

如何恢复受影响的行?

编辑

这里的问题似乎是类型没有按照我期望的方式排列。以下是 Scala 对类型的看法:

val q: PostgresDriver.DriverAction[PostgresDriver.InsertActionExtensionMethods[(String, String)]#SingleInsertResult, NoStream, Write] = Admins.tableQuery += ((username, grantor))
val seq: dbio.DBIOAction[Unit, NoStream, Write] = DBIO.seq(q)
db.run(seq)

这对我来说没有意义。如果q 的类型为DriverAction[PostgresDriver.InsertActionExtensionMethods[(String, String)]#SingleInsertResult...,其中SingleInsertResult 是Int 的类型别名,那么我的DBIO.seq 不应该返回DBIOAction[Int, NoStream, Write]

【问题讨论】:

  • 我没有关注 stefan 对 .seq 等所做的操作的详细信息,但这可能只是一个缺失的功能,其中组合操作不会组合受影响的行。也许在 github slick/slick 上开一张票。
  • IIRC, DBIO.seq 用于将许多不同的查询(甚至不同类型)组合在一起,但是由于它不能为所有查询返回单个值,所以它总是返回 Future[Unit] 所以你无法恢复查询结果、受影响的行等。请参阅the docs for DBIO.seq一个更简单的序列版本,它采用许多具有任何返回类型的 DBIOAction 作为可变参数,并返回一个按顺序执行各个操作的 DBIOAction(使用andThen),最后返回()。

标签: scala slick


【解决方案1】:

these examples

它与 slick 2.x 没有太大区别,但现在一切都返回 Futures。

也许类似于(我想不到,我现在无法自己测试)

val users = TableQuer[Users]
// this is the query
val q = (users += User(None, "Stefan", "Zeiger"))
// now you run it
db.run(q).map{ affectedRows =>
  case 1 => println("success")
  case _ => println("oops")
}

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多