Scala 自定义生成的光滑SQL以进行调试
我想定制Slick为标准插入生成的SQL,然后再将其发送到DBMS,这样我就可以添加Slick本机不支持的额外DBMS特定调试选项。如何执行此操作?如果您使用的是连接池,如HikariCP,则可以在Scala 自定义生成的光滑SQL以进行调试,scala,slick,Scala,Slick,我想定制Slick为标准插入生成的SQL,然后再将其发送到DBMS,这样我就可以添加Slick本机不支持的额外DBMS特定调试选项。如何执行此操作?如果您使用的是连接池,如HikariCP,则可以在ProxyConnection.prepareStatement(String sql)方法上设置Java断点,或在您使用的任何连接池库中设置等效方法。然后,当感兴趣的SQL即将由该方法准备时,使用调试器的“计算表达式”功能修改/替换SQL的值 如果您正在设置断点的库不是开源的,或者由于其他原因编译时
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以覆盖各种方法来更改插入行为。例如,如果您正在使用的是现有数据库,那么您可以从探索该数据库开始
但是,上述示例可以根据需要应用于每个插入,这可能足以满足您的需要