为什么这个ScalaQuery语句只删除奇数行?

vir*_*yes 6 scala scalaquery

尝试删除一批记录时,只删除奇数行!

val byUser = Orders.createFinderBy(_.userID)
byUser(id).mutate(_.delete)
Run Code Online (Sandbox Code Playgroud)

如果我改为打印记录,我会得到正确的行数.

byUser(id).mutate{x => x.echo}
Run Code Online (Sandbox Code Playgroud)

我解决了这个问题,它生成了所需的SQL.

(for{o <- Orders if o.userID is id.bind } yield o).delete
Run Code Online (Sandbox Code Playgroud)

但是,mutate版本为何或如何仅影响奇数行?

pau*_*lyb 1

我深入研究了源代码,似乎正如 @RexKerr 所说 - 迭代器用于处理元素,在迭代时应用删除(此处 mutate 方法中的 while 循环):

https://github.com/rjmac/scala-query/blob/master/src/main/scala/org/scalaquery/MutatingInvoker.scala

有趣的是,有一个 previousAfterDelete 标志可用于在每次删除后强制迭代器向后移动。对于 Access 数据库(请参阅 AccessQueryInvoker 类),这似乎设置为 true,但其他数据库则不然:

https://github.com/rjmac/scala-query/blob/master/src/main/scala/org/scalaquery/ql/extended/AccessDriver.scala

我建议下载源代码并调试代码。也许应该为您正在使用的数据库供应商设置此标志。我还考虑提交错误报告:

http://scalaquery.org/community.html

附言。我知道这是一个老问题,但回答它以防其他人遇到这个问题