自定义生成的 Slick SQL 用于调试
Customise generated Slick SQL for debugging
我想自定义 SQL Slick 在发送到 DBMS 之前为标准插入生成的,这样我就可以添加 Slick 本身不支持的额外的 DBMS 特定调试选项。我该怎么做?
如果您正在使用 HikariCP 等连接池,您可以在 ProxyConnection.prepareStatement(String sql)
方法或您正在使用的任何连接池库中的等效方法上放置一个 Java 断点。然后当感兴趣的 SQL 即将通过该方法准备时,使用调试器的“评估表达式”功能 modify/replace sql
.
的值
如果您设置断点的库不是开源的,或者由于某些其他原因编译时没有调试信息,这将不起作用。
在操作级别(即使用 DBIO
),您可以替换 SQL Slick 将通过 overrideStatements
使用。结合 statements
访问 SQL Slick 生成,这将为您提供一个跳入和自定义 SQL.
的地方
切记,您将通过这两个 API 调用与 String
一起工作。
一个简单的例子是:
val regularInsert = table += row
// Switching the generated SQL to all-caps is a terrible idea,
// and may not run in your database, but it will do as an example:
val modifiedSQL = regularInsert.statements.map(_.toUpperCase())
val modifiedInsert = regularInsert.overrideStatements(modifiedSQL)
// run modifiedInsert action as normal
下一步将是实现自定义数据库配置文件以覆盖创建插入以包括调试的方式。
这涉及更多:您想要扩展当前使用的配置文件,并深入研究 Slick APIs 以覆盖各种方法来更改插入行为。例如,如果您正在使用现有的 Postgres profile 数据库,您可能会从探索现有数据库开始。
但是,上面的示例可以根据需要应用于每个插入,这可能足以满足您的需要。
我想自定义 SQL Slick 在发送到 DBMS 之前为标准插入生成的,这样我就可以添加 Slick 本身不支持的额外的 DBMS 特定调试选项。我该怎么做?
如果您正在使用 HikariCP 等连接池,您可以在 ProxyConnection.prepareStatement(String sql)
方法或您正在使用的任何连接池库中的等效方法上放置一个 Java 断点。然后当感兴趣的 SQL 即将通过该方法准备时,使用调试器的“评估表达式”功能 modify/replace sql
.
如果您设置断点的库不是开源的,或者由于某些其他原因编译时没有调试信息,这将不起作用。
在操作级别(即使用 DBIO
),您可以替换 SQL Slick 将通过 overrideStatements
使用。结合 statements
访问 SQL Slick 生成,这将为您提供一个跳入和自定义 SQL.
切记,您将通过这两个 API 调用与 String
一起工作。
一个简单的例子是:
val regularInsert = table += row
// Switching the generated SQL to all-caps is a terrible idea,
// and may not run in your database, but it will do as an example:
val modifiedSQL = regularInsert.statements.map(_.toUpperCase())
val modifiedInsert = regularInsert.overrideStatements(modifiedSQL)
// run modifiedInsert action as normal
下一步将是实现自定义数据库配置文件以覆盖创建插入以包括调试的方式。 这涉及更多:您想要扩展当前使用的配置文件,并深入研究 Slick APIs 以覆盖各种方法来更改插入行为。例如,如果您正在使用现有的 Postgres profile 数据库,您可能会从探索现有数据库开始。
但是,上面的示例可以根据需要应用于每个插入,这可能足以满足您的需要。