可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17

规范化结合操作

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

结合律运算是指其链式运算可以以 (a op b) op ca op (b op c) 的形式进行,而不会改变结果。 此类运算的示例包括

  • +
  • *
  • AND
  • OR

为了简化所有这些模式替换,我们将结合律运算规范化,始终将树状结构扁平化为列表。

使用 Settings.transformPatternsNormaliseAssociativeOps,可以实现以下转换

-- With Settings.transformPatternsNormaliseAssociativeOps active, this:
SELECT
  (a + b) + (c + d),
  (a * b) * (c * d),
  (a AND b) AND (c AND d),
  (a OR b) OR (c OR d)
FROM tab;

-- ... is transformed into the equivalent expression:
SELECT
  ((a + b) + c) + d,       -- (a + b) + (c + d)
  ((a + b) + c) + d,       -- (a * b) * (c * d)
  ((a AND b) AND c) AND d, -- (a AND b) AND (c AND d)
  ((a OR b) OR c) OR d     -- (a OR b) OR (c OR d)
FROM tab;

请注意,不必要的括号可能不会在任何一种情况下生成,但内存中的数据结构仍然看起来好像括号存在一样。

反馈

您对此页面有任何反馈吗? 我们很乐意倾听!

The jOOQ Logo