diff --git a/jOOQ/src/main/java/org/jooq/conf/Settings.java b/jOOQ/src/main/java/org/jooq/conf/Settings.java
index 1b60ae1803..0422b64892 100644
--- a/jOOQ/src/main/java/org/jooq/conf/Settings.java
+++ b/jOOQ/src/main/java/org/jooq/conf/Settings.java
@@ -131,6 +131,10 @@ public class Settings
@XmlElement(defaultValue = "true")
protected Boolean transformPatternsOrEqToIn = true;
@XmlElement(defaultValue = "true")
+ protected Boolean transformPatternsAndNeToNotIn = true;
+ @XmlElement(defaultValue = "true")
+ protected Boolean transformPatternsMergeOrComparison = true;
+ @XmlElement(defaultValue = "true")
protected Boolean transformPatternsTrivialPredicates = true;
@XmlElement(defaultValue = "true")
protected Boolean transformPatternsEmptyScalarSubquery = true;
@@ -1396,6 +1400,66 @@ public class Settings
this.transformPatternsOrEqToIn = value;
}
+ /**
+ * Transform x != c1 AND x != c2 to x NOT IN (c1, c2).
+ *
+ * This transformation simplifies verbose AND predicates into simpler NOT IN predicates.
+ *
+ * To enable this feature, {@link #transformPatterns} must be enabled as well. + *
+ * This feature is available in the commercial distribution only.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isTransformPatternsAndNeToNotIn() {
+ return transformPatternsAndNeToNotIn;
+ }
+
+ /**
+ * Sets the value of the transformPatternsAndNeToNotIn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setTransformPatternsAndNeToNotIn(Boolean value) {
+ this.transformPatternsAndNeToNotIn = value;
+ }
+
+ /**
+ * Transform x = a OR x > a to x >= a.
+ *
+ * This transformation merges multiple OR connected comparisons to a single comparison using a simpler operator.
+ *
+ * To enable this feature, {@link #transformPatterns} must be enabled as well. + *
+ * This feature is available in the commercial distribution only.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isTransformPatternsMergeOrComparison() {
+ return transformPatternsMergeOrComparison;
+ }
+
+ /**
+ * Sets the value of the transformPatternsMergeOrComparison property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setTransformPatternsMergeOrComparison(Boolean value) {
+ this.transformPatternsMergeOrComparison = value;
+ }
+
/**
* Transform trivial predicates like 1 = 1 to TRUE.
*
@@ -3837,6 +3901,16 @@ public class Settings
return this;
}
+ public Settings withTransformPatternsAndNeToNotIn(Boolean value) {
+ setTransformPatternsAndNeToNotIn(value);
+ return this;
+ }
+
+ public Settings withTransformPatternsMergeOrComparison(Boolean value) {
+ setTransformPatternsMergeOrComparison(value);
+ return this;
+ }
+
public Settings withTransformPatternsTrivialPredicates(Boolean value) {
setTransformPatternsTrivialPredicates(value);
return this;
@@ -4694,6 +4768,8 @@ public class Settings
builder.append("transformPatternsNormaliseAssociativeOps", transformPatternsNormaliseAssociativeOps);
builder.append("transformPatternsNormaliseFieldCompareValue", transformPatternsNormaliseFieldCompareValue);
builder.append("transformPatternsOrEqToIn", transformPatternsOrEqToIn);
+ builder.append("transformPatternsAndNeToNotIn", transformPatternsAndNeToNotIn);
+ builder.append("transformPatternsMergeOrComparison", transformPatternsMergeOrComparison);
builder.append("transformPatternsTrivialPredicates", transformPatternsTrivialPredicates);
builder.append("transformPatternsEmptyScalarSubquery", transformPatternsEmptyScalarSubquery);
builder.append("transformPatternsNegNeg", transformPatternsNegNeg);
@@ -5175,6 +5251,24 @@ public class Settings
return false;
}
}
+ if (transformPatternsAndNeToNotIn == null) {
+ if (other.transformPatternsAndNeToNotIn!= null) {
+ return false;
+ }
+ } else {
+ if (!transformPatternsAndNeToNotIn.equals(other.transformPatternsAndNeToNotIn)) {
+ return false;
+ }
+ }
+ if (transformPatternsMergeOrComparison == null) {
+ if (other.transformPatternsMergeOrComparison!= null) {
+ return false;
+ }
+ } else {
+ if (!transformPatternsMergeOrComparison.equals(other.transformPatternsMergeOrComparison)) {
+ return false;
+ }
+ }
if (transformPatternsTrivialPredicates == null) {
if (other.transformPatternsTrivialPredicates!= null) {
return false;
@@ -6122,6 +6216,8 @@ public class Settings
result = ((prime*result)+((transformPatternsNormaliseAssociativeOps == null)? 0 :transformPatternsNormaliseAssociativeOps.hashCode()));
result = ((prime*result)+((transformPatternsNormaliseFieldCompareValue == null)? 0 :transformPatternsNormaliseFieldCompareValue.hashCode()));
result = ((prime*result)+((transformPatternsOrEqToIn == null)? 0 :transformPatternsOrEqToIn.hashCode()));
+ result = ((prime*result)+((transformPatternsAndNeToNotIn == null)? 0 :transformPatternsAndNeToNotIn.hashCode()));
+ result = ((prime*result)+((transformPatternsMergeOrComparison == null)? 0 :transformPatternsMergeOrComparison.hashCode()));
result = ((prime*result)+((transformPatternsTrivialPredicates == null)? 0 :transformPatternsTrivialPredicates.hashCode()));
result = ((prime*result)+((transformPatternsEmptyScalarSubquery == null)? 0 :transformPatternsEmptyScalarSubquery.hashCode()));
result = ((prime*result)+((transformPatternsNegNeg == null)? 0 :transformPatternsNegNeg.hashCode()));
diff --git a/jOOQ/src/main/java/org/jooq/impl/TransformPatterns.java b/jOOQ/src/main/java/org/jooq/impl/TransformPatterns.java
index 8131387875..42a222d6ed 100644
--- a/jOOQ/src/main/java/org/jooq/impl/TransformPatterns.java
+++ b/jOOQ/src/main/java/org/jooq/impl/TransformPatterns.java
@@ -565,6 +565,150 @@ package org.jooq.impl;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.17.0.xsd b/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.17.0.xsd
index 0e38b13031..cb8e136017 100644
--- a/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.17.0.xsd
+++ b/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.17.0.xsd
@@ -357,6 +357,26 @@ To enable this feature, {@link #transformPatterns} must be enabled as well.
This feature is available in the commercial distribution only.]]>
+
+This transformation simplifies verbose
+To enable this feature, {@link #transformPatterns} must be enabled as well.
+
+This feature is available in the commercial distribution only.]]>
+This transformation merges multiple
+To enable this feature, {@link #transformPatterns} must be enabled as well.
+
+This feature is available in the commercial distribution only.]]>
x NOT IN (c1, c2).
+AND predicates into simpler NOT IN predicates.
+x >= a.
+OR connected comparisons to a single comparison using a simpler operator.
+TRUE.