转换模式
适用于 ❌ 开源版 ✅ Express 版 ✅ 专业版 ✅ 企业版
处理这些事件的 SPI 方法是 transformPattern()
。此诊断完全取决于 转换模式特性。
可以识别各种模式,并出于以下任何原因将其转换为更好的模式
- 生成的表达式更加“规范化”。这客观上不会影响大多数 RDBMS 上的查询执行,而纯粹是一种风格上的改进。
- 生成的表达式更简单。这也不会客观上影响大多数 RDBMS 上的查询执行。
- 生成的表达式会删除不必要的部分。除非 RDBMS 可以自行转换此类表达式,否则这可能会客观地改善查询执行。
为什么这不好?
如果表达式未以这种方式进行规范化和简化,则会在您的 RDBMS 中产生过多的工作
- 如果存在不必要的部分,某些 RDBMS 可能会执行太多不必要的工作,如果它们没有实现与 jOOQ 相同的转换。
- 类似的表达式可能等效,但在语法上并不相同。因此,大多数 RDBMS 将必须解析语句两次,从而导致重复语句。重复语句诊断也检测这些情况,但不会报告两个语句重复的确切原因。此处的诊断有助于查看详细信息。
这里给出了一个例子
// A custom DiagnosticsListener SPI implementation class TransformPatterns implements DiagnosticsListener { @Override public void transformPattern(DiagnosticsContext ctx) { System.out.println("Pattern transformation is possible from: " + ctx.part() + " to: " + ctx.transformedPart()); } }
然后
// Configuration is configured with the target DataSource, SQLDialect, etc. for instance Oracle. try (Connection c = DSL.using(configuration.derive(new TransformPatterns())) .diagnosticsConnection(); Statement s = c.createStatement()) { try (ResultSet rs = s.executeQuery("SELECT * FROM author WHERE x = 1 OR x > 1")) { // .. } }
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!