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.]]> + + 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.]]> + + + + 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.]]> + + 1 = 1 to TRUE.