diff --git a/jOOQ/src/main/java/org/jooq/Select.java b/jOOQ/src/main/java/org/jooq/Select.java
index ef4f806d1f..b7eb0368a3 100644
--- a/jOOQ/src/main/java/org/jooq/Select.java
+++ b/jOOQ/src/main/java/org/jooq/Select.java
@@ -233,7 +233,7 @@ extends
* Subject to change in future jOOQ versions, use at your own risk.
*/
@Experimental
- UnmodifiableList extends SelectFieldOrAsterisk> $distinctOn();
+ @NotNull UnmodifiableList extends SelectFieldOrAsterisk> $distinctOn();
/**
* Experimental query object model accessor method, see also {@link QOM}.
diff --git a/jOOQ/src/main/java/org/jooq/conf/Settings.java b/jOOQ/src/main/java/org/jooq/conf/Settings.java
index 5e12c165da..2d48c537db 100644
--- a/jOOQ/src/main/java/org/jooq/conf/Settings.java
+++ b/jOOQ/src/main/java/org/jooq/conf/Settings.java
@@ -177,6 +177,8 @@ public class Settings
@XmlElement(defaultValue = "true")
protected Boolean transformPatternsCaseElseNull = true;
@XmlElement(defaultValue = "true")
+ protected Boolean transformPatternsCaseElseCase = true;
+ @XmlElement(defaultValue = "true")
protected Boolean transformPatternsTrivialCaseAbbreviation = true;
@XmlElement(defaultValue = "true")
protected Boolean transformPatternsTrivialPredicates = true;
@@ -2139,6 +2141,34 @@ public class Settings
this.transformPatternsCaseElseNull = value;
}
+ /**
+ * Transform CASE … ELSE CASE … by flattening the nested CASE.
+ *
+ * CASE WHEN a THEN b ELSE CASE WHEN c THEN d END END is equivalent to CASE WHEN a THEN b WHEN c THEN d END.
+ *
+ * This feature is available in the commercial distribution only.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isTransformPatternsCaseElseCase() {
+ return transformPatternsCaseElseCase;
+ }
+
+ /**
+ * Sets the value of the transformPatternsCaseElseCase property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setTransformPatternsCaseElseCase(Boolean value) {
+ this.transformPatternsCaseElseCase = value;
+ }
+
/**
* Transform trivial case abbreviations like NVL(NULL, a) to a.
*
@@ -5161,6 +5191,11 @@ public class Settings
return this;
}
+ public Settings withTransformPatternsCaseElseCase(Boolean value) {
+ setTransformPatternsCaseElseCase(value);
+ return this;
+ }
+
public Settings withTransformPatternsTrivialCaseAbbreviation(Boolean value) {
setTransformPatternsTrivialCaseAbbreviation(value);
return this;
@@ -6140,6 +6175,7 @@ public class Settings
builder.append("transformPatternsMergeRangePredicates", transformPatternsMergeRangePredicates);
builder.append("transformPatternsMergeBetweenSymmetricPredicates", transformPatternsMergeBetweenSymmetricPredicates);
builder.append("transformPatternsCaseElseNull", transformPatternsCaseElseNull);
+ builder.append("transformPatternsCaseElseCase", transformPatternsCaseElseCase);
builder.append("transformPatternsTrivialCaseAbbreviation", transformPatternsTrivialCaseAbbreviation);
builder.append("transformPatternsTrivialPredicates", transformPatternsTrivialPredicates);
builder.append("transformPatternsScalarSubqueryCountAsteriskGtZero", transformPatternsScalarSubqueryCountAsteriskGtZero);
@@ -6844,6 +6880,15 @@ public class Settings
return false;
}
}
+ if (transformPatternsCaseElseCase == null) {
+ if (other.transformPatternsCaseElseCase!= null) {
+ return false;
+ }
+ } else {
+ if (!transformPatternsCaseElseCase.equals(other.transformPatternsCaseElseCase)) {
+ return false;
+ }
+ }
if (transformPatternsTrivialCaseAbbreviation == null) {
if (other.transformPatternsTrivialCaseAbbreviation!= null) {
return false;
@@ -7958,6 +8003,7 @@ public class Settings
result = ((prime*result)+((transformPatternsMergeRangePredicates == null)? 0 :transformPatternsMergeRangePredicates.hashCode()));
result = ((prime*result)+((transformPatternsMergeBetweenSymmetricPredicates == null)? 0 :transformPatternsMergeBetweenSymmetricPredicates.hashCode()));
result = ((prime*result)+((transformPatternsCaseElseNull == null)? 0 :transformPatternsCaseElseNull.hashCode()));
+ result = ((prime*result)+((transformPatternsCaseElseCase == null)? 0 :transformPatternsCaseElseCase.hashCode()));
result = ((prime*result)+((transformPatternsTrivialCaseAbbreviation == null)? 0 :transformPatternsTrivialCaseAbbreviation.hashCode()));
result = ((prime*result)+((transformPatternsTrivialPredicates == null)? 0 :transformPatternsTrivialPredicates.hashCode()));
result = ((prime*result)+((transformPatternsScalarSubqueryCountAsteriskGtZero == null)? 0 :transformPatternsScalarSubqueryCountAsteriskGtZero.hashCode()));
diff --git a/jOOQ/src/main/java/org/jooq/impl/Patterns.java b/jOOQ/src/main/java/org/jooq/impl/Patterns.java
index 5e88619685..5110b2274f 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Patterns.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Patterns.java
@@ -1722,6 +1722,13 @@ package org.jooq.impl;
+
+
+
+
+
+
+
diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java
index eee1a79ec8..543fb3dc4d 100644
--- a/jOOQ/src/main/java/org/jooq/impl/QOM.java
+++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java
@@ -251,7 +251,13 @@ public final class QOM {
java.util.List
+
+This feature is available in the commercial distribution only.]]>
permits
QueryPartListView
- {}
+ {
+ @NotNull default UnmodifiableList
$concat(UnmodifiableList
other) {
+ QueryPartList
r = new QueryPartList<>(this);
+ r.addAll(other);
+ return r;
+ }
+ }
public /*sealed*/ interface With
extends
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 db0fb86afe..c32981d557 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
@@ -560,6 +560,14 @@ This feature is available in the commercial distribution only.]]><
This feature is available in the commercial distribution only.]]>
+
CASE.
+CASE WHEN a THEN b ELSE CASE WHEN c THEN d END END is equivalent to CASE WHEN a THEN b WHEN c THEN d END.
+a.