Scala 自定义生成的光滑SQL以进行调试

Scala 自定义生成的光滑SQL以进行调试,scala,slick,Scala,Slick,我想定制Slick为标准插入生成的SQL,然后再将其发送到DBMS,这样我就可以添加Slick本机不支持的额外DBMS特定调试选项。如何执行此操作?如果您使用的是连接池,如HikariCP,则可以在ProxyConnection.prepareStatement(String sql)方法上设置Java断点,或在您使用的任何连接池库中设置等效方法。然后,当感兴趣的SQL即将由该方法准备时,使用调试器的“计算表达式”功能修改/替换SQL的值 如果您正在设置断点的库不是开源的,或者由于其他原因编译时

我想定制Slick为标准插入生成的SQL,然后再将其发送到DBMS,这样我就可以添加Slick本机不支持的额外DBMS特定调试选项。如何执行此操作?

如果您使用的是连接池,如HikariCP,则可以在
ProxyConnection.prepareStatement(String sql)
方法上设置Java断点,或在您使用的任何连接池库中设置等效方法。然后,当感兴趣的SQL即将由该方法准备时,使用调试器的“计算表达式”功能修改/替换
SQL
的值

如果您正在设置断点的库不是开源的,或者由于其他原因编译时没有调试信息,这将不起作用。

在操作级别(即,使用
DBIO
),您可以通过
覆盖项
替换SQL Slick将使用的SQL Slick。结合
语句
来访问Slick生成的SQL,这将为您提供一个跳入并自定义SQL的位置

请记住,您将通过这两个API调用使用
String
s

一个简单的例子是:

val regularInsert=表格+=行
//将生成的SQL切换到所有CAP是一个糟糕的主意,
//可能不会在您的数据库中运行,但它可以作为一个示例:
val modifiedSQL=regularnsert.statements.map(u.toUpperCase())
val modifiedInsert=regularnsert.overrideStatements(modifiedSQL)
//正常运行modifiedInsert操作
下一步是实现自定义数据库配置文件,以覆盖创建插入的方式,从而包括调试。 这更复杂:您希望扩展当前使用的概要文件,并深入研究光滑的API以覆盖各种方法来更改插入行为。例如,如果您正在使用的是现有数据库,那么您可以从探索该数据库开始

但是,上述示例可以根据需要应用于每个插入,这可能足以满足您的需要