【发布时间】: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),最后返回()。