diff --git a/jOOQ/src/main/java/org/jooq/conf/Settings.java b/jOOQ/src/main/java/org/jooq/conf/Settings.java index 0658aa85f9..c55b9178b0 100644 --- a/jOOQ/src/main/java/org/jooq/conf/Settings.java +++ b/jOOQ/src/main/java/org/jooq/conf/Settings.java @@ -137,6 +137,8 @@ public class Settings @XmlElement(defaultValue = "true") protected Boolean transformPatternsMergeOrComparison = true; @XmlElement(defaultValue = "true") + protected Boolean transformPatternsMergeAndComparison = true; + @XmlElement(defaultValue = "true") protected Boolean transformPatternsMergeInLists = true; @XmlElement(defaultValue = "true") protected Boolean transformPatternsMergeRangePredicates = true; @@ -1496,6 +1498,36 @@ public class Settings this.transformPatternsMergeOrComparison = value; } + /** + * Transform x >= a AND x <= a to x = a. + *

+ * This transformation merges multiple AND 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 isTransformPatternsMergeAndComparison() { + return transformPatternsMergeAndComparison; + } + + /** + * Sets the value of the transformPatternsMergeAndComparison property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setTransformPatternsMergeAndComparison(Boolean value) { + this.transformPatternsMergeAndComparison = value; + } + /** * Transform x IN (a, b, c) AND x IN (b, c, d) to x IN (b, c). *

@@ -4042,6 +4074,11 @@ public class Settings return this; } + public Settings withTransformPatternsMergeAndComparison(Boolean value) { + setTransformPatternsMergeAndComparison(value); + return this; + } + public Settings withTransformPatternsMergeInLists(Boolean value) { setTransformPatternsMergeInLists(value); return this; @@ -4917,6 +4954,7 @@ public class Settings builder.append("transformPatternsOrEqToIn", transformPatternsOrEqToIn); builder.append("transformPatternsAndNeToNotIn", transformPatternsAndNeToNotIn); builder.append("transformPatternsMergeOrComparison", transformPatternsMergeOrComparison); + builder.append("transformPatternsMergeAndComparison", transformPatternsMergeAndComparison); builder.append("transformPatternsMergeInLists", transformPatternsMergeInLists); builder.append("transformPatternsMergeRangePredicates", transformPatternsMergeRangePredicates); builder.append("transformPatternsMergeBetweenSymmetricPredicates", transformPatternsMergeBetweenSymmetricPredicates); @@ -5428,6 +5466,15 @@ public class Settings return false; } } + if (transformPatternsMergeAndComparison == null) { + if (other.transformPatternsMergeAndComparison!= null) { + return false; + } + } else { + if (!transformPatternsMergeAndComparison.equals(other.transformPatternsMergeAndComparison)) { + return false; + } + } if (transformPatternsMergeInLists == null) { if (other.transformPatternsMergeInLists!= null) { return false; @@ -6405,6 +6452,7 @@ public class Settings 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)+((transformPatternsMergeAndComparison == null)? 0 :transformPatternsMergeAndComparison.hashCode())); result = ((prime*result)+((transformPatternsMergeInLists == null)? 0 :transformPatternsMergeInLists.hashCode())); result = ((prime*result)+((transformPatternsMergeRangePredicates == null)? 0 :transformPatternsMergeRangePredicates.hashCode())); result = ((prime*result)+((transformPatternsMergeBetweenSymmetricPredicates == null)? 0 :transformPatternsMergeBetweenSymmetricPredicates.hashCode())); diff --git a/jOOQ/src/main/java/org/jooq/impl/Patterns.java b/jOOQ/src/main/java/org/jooq/impl/Patterns.java index b4fc76d2ca..ac3f08c8c3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Patterns.java +++ b/jOOQ/src/main/java/org/jooq/impl/Patterns.java @@ -848,6 +848,110 @@ 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 2cdc2cc615..4934f1a7f5 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 @@ -385,6 +385,16 @@ To enable this feature, {@link #transformPatterns} must be enabled as well. This feature is available in the commercial distribution only.]]> + + x >= a AND x <= a to x = a. +

+This transformation merges multiple AND 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.]]> + + x IN (a, b, c) AND x IN (b, c, d) to x IN (b, c).