diff --git a/jOOQ/src/main/java/org/jooq/conf/Settings.java b/jOOQ/src/main/java/org/jooq/conf/Settings.java index cb7586eb60..c4122ab325 100644 --- a/jOOQ/src/main/java/org/jooq/conf/Settings.java +++ b/jOOQ/src/main/java/org/jooq/conf/Settings.java @@ -149,6 +149,8 @@ public class Settings @XmlElement(defaultValue = "true") protected Boolean transformPatternsUnnecessaryDistinct = true; @XmlElement(defaultValue = "true") + protected Boolean transformPatternsUnnecessaryScalarSubquery = true; + @XmlElement(defaultValue = "true") protected Boolean transformPatternsUnnecessaryGroupByExpressions = true; @XmlElement(defaultValue = "true") protected Boolean transformPatternsUnnecessaryOrderByExpressions = true; @@ -1760,6 +1762,37 @@ public class Settings this.transformPatternsUnnecessaryDistinct = value; } + /** + * Transform SELECT (SELECT 1) to SELECT 1. + *

+ * Scalar subqueries that don't have any content other than a SELECT clause are unnecessary + * and can be removed. + *

+ * 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 isTransformPatternsUnnecessaryScalarSubquery() { + return transformPatternsUnnecessaryScalarSubquery; + } + + /** + * Sets the value of the transformPatternsUnnecessaryScalarSubquery property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setTransformPatternsUnnecessaryScalarSubquery(Boolean value) { + this.transformPatternsUnnecessaryScalarSubquery = value; + } + /** * Transform SELECT a, b FROM t GROUP BY a, a, b to SELECT a, b FROM t GROUP BY a, b. *

@@ -5758,6 +5791,11 @@ public class Settings return this; } + public Settings withTransformPatternsUnnecessaryScalarSubquery(Boolean value) { + setTransformPatternsUnnecessaryScalarSubquery(value); + return this; + } + public Settings withTransformPatternsUnnecessaryGroupByExpressions(Boolean value) { setTransformPatternsUnnecessaryGroupByExpressions(value); return this; @@ -6902,6 +6940,7 @@ public class Settings builder.append("transformPatterns", transformPatterns); builder.append("transformPatternsLogging", transformPatternsLogging); builder.append("transformPatternsUnnecessaryDistinct", transformPatternsUnnecessaryDistinct); + builder.append("transformPatternsUnnecessaryScalarSubquery", transformPatternsUnnecessaryScalarSubquery); builder.append("transformPatternsUnnecessaryGroupByExpressions", transformPatternsUnnecessaryGroupByExpressions); builder.append("transformPatternsUnnecessaryOrderByExpressions", transformPatternsUnnecessaryOrderByExpressions); builder.append("transformPatternsUnnecessaryExistsSubqueryClauses", transformPatternsUnnecessaryExistsSubqueryClauses); @@ -7515,6 +7554,15 @@ public class Settings return false; } } + if (transformPatternsUnnecessaryScalarSubquery == null) { + if (other.transformPatternsUnnecessaryScalarSubquery!= null) { + return false; + } + } else { + if (!transformPatternsUnnecessaryScalarSubquery.equals(other.transformPatternsUnnecessaryScalarSubquery)) { + return false; + } + } if (transformPatternsUnnecessaryGroupByExpressions == null) { if (other.transformPatternsUnnecessaryGroupByExpressions!= null) { return false; @@ -8930,6 +8978,7 @@ public class Settings result = ((prime*result)+((transformPatterns == null)? 0 :transformPatterns.hashCode())); result = ((prime*result)+((transformPatternsLogging == null)? 0 :transformPatternsLogging.hashCode())); result = ((prime*result)+((transformPatternsUnnecessaryDistinct == null)? 0 :transformPatternsUnnecessaryDistinct.hashCode())); + result = ((prime*result)+((transformPatternsUnnecessaryScalarSubquery == null)? 0 :transformPatternsUnnecessaryScalarSubquery.hashCode())); result = ((prime*result)+((transformPatternsUnnecessaryGroupByExpressions == null)? 0 :transformPatternsUnnecessaryGroupByExpressions.hashCode())); result = ((prime*result)+((transformPatternsUnnecessaryOrderByExpressions == null)? 0 :transformPatternsUnnecessaryOrderByExpressions.hashCode())); result = ((prime*result)+((transformPatternsUnnecessaryExistsSubqueryClauses == null)? 0 :transformPatternsUnnecessaryExistsSubqueryClauses.hashCode())); diff --git a/jOOQ/src/main/java/org/jooq/impl/Patterns.java b/jOOQ/src/main/java/org/jooq/impl/Patterns.java index 36498691c9..37265a70de 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Patterns.java +++ b/jOOQ/src/main/java/org/jooq/impl/Patterns.java @@ -2315,6 +2315,127 @@ package org.jooq.impl; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd b/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd index 3dc407680d..c61544d549 100644 --- a/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd +++ b/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd @@ -418,6 +418,17 @@ To enable this feature, {@link #transformPatterns} must be enabled as well. This feature is available in the commercial distribution only.]]> + + SELECT (SELECT 1) to SELECT 1. +

+Scalar subqueries that don't have any content other than a SELECT clause are unnecessary +and can be removed. +

+To enable this feature, {@link #transformPatterns} must be enabled as well. +

+This feature is available in the commercial distribution only.]]> + + SELECT a, b FROM t GROUP BY a, a, b to SELECT a, b FROM t GROUP BY a, b.