【发布时间】:2014-06-19 12:01:06
【问题描述】:
有没有办法观察Query生成的SQL语句?
例如,我有这个:val q = actions.filter(v => v.actionHash === hash && v.carriedAt > past)
我可以查看它的底层原始 SQL 吗?
【问题讨论】:
有没有办法观察Query生成的SQL语句?
例如,我有这个:val q = actions.filter(v => v.actionHash === hash && v.carriedAt > past)
我可以查看它的底层原始 SQL 吗?
【问题讨论】:
Slick 2.X:
您可以打印查询语句,如Slick documentation:
val invoker = q.invoker
val statement = q.selectStatement
对于其他类型的语句,请查看 insertStatement、deleteStatement 和 updateStatement。
Slick 3.X:
val res = table.filter(_.id === 1L).result
res.statements.foreach(println)
Docs.
【讨论】:
DBIOAction,还有其他方法吗?
.statements 适用于 SQLAction,但对于 DBIOAction 则不存在,这是当您编写一堆 SQLActions 时得到的一起理解并产生最终结果。据我所知,Monadic 加入失去了使用.statements 的能力。那是一种痛苦...
SQLAction 是DBIOAction 和BasicAction 的子类,并且实际实现是调用程序(如StreamingInvokerAction)。也许语句打印只能在调用者级别而不是在上层特征中完成,不幸的是我没有答案。
.statements 的最佳实现。不是世界末日,但令人沮丧的是发现缺少.statements 对调试非常有用...
对于 slick 3.0
println(sortedQuery.result.statements.headOption)
【讨论】: