diff --git a/jOOQ/src/main/java/org/jooq/DiagnosticsListener.java b/jOOQ/src/main/java/org/jooq/DiagnosticsListener.java index fb67e2c839..64ba21d9dd 100644 --- a/jOOQ/src/main/java/org/jooq/DiagnosticsListener.java +++ b/jOOQ/src/main/java/org/jooq/DiagnosticsListener.java @@ -385,6 +385,23 @@ public interface DiagnosticsListener { + + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/conf/Settings.java b/jOOQ/src/main/java/org/jooq/conf/Settings.java index ecb3f161ac..cb7586eb60 100644 --- a/jOOQ/src/main/java/org/jooq/conf/Settings.java +++ b/jOOQ/src/main/java/org/jooq/conf/Settings.java @@ -127,7 +127,9 @@ public class Settings @XmlElement(defaultValue = "true") protected Boolean diagnosticsConsecutiveAggregation = true; @XmlElement(defaultValue = "true") - protected Boolean diagnosticsConcatenationInPredicates = true; + protected Boolean diagnosticsConcatenationInPredicate = true; + @XmlElement(defaultValue = "true") + protected Boolean diagnosticsPossiblyWrongExpression = true; @XmlElement(defaultValue = "true") protected Boolean diagnosticsTooManyColumnsFetched = true; @XmlElement(defaultValue = "true") @@ -1443,7 +1445,7 @@ public class Settings } /** - * Whether to run the {@link org.jooq.DiagnosticsListener#concatenationInPredicates(org.jooq.DiagnosticsContext) diagnostic. + * Whether to run the {@link org.jooq.DiagnosticsListener#concatenationInPredicate(org.jooq.DiagnosticsContext) diagnostic. *
* Diagnostics are turned off if no {@link org.jooq.Configuration#diagnosticsListenerProviders()} are configured. * Once configured, this diagnostic is turned on by default. @@ -1455,20 +1457,49 @@ public class Settings * {@link Boolean } * */ - public Boolean isDiagnosticsConcatenationInPredicates() { - return diagnosticsConcatenationInPredicates; + public Boolean isDiagnosticsConcatenationInPredicate() { + return diagnosticsConcatenationInPredicate; } /** - * Sets the value of the diagnosticsConcatenationInPredicates property. + * Sets the value of the diagnosticsConcatenationInPredicate property. * * @param value * allowed object is * {@link Boolean } * */ - public void setDiagnosticsConcatenationInPredicates(Boolean value) { - this.diagnosticsConcatenationInPredicates = value; + public void setDiagnosticsConcatenationInPredicate(Boolean value) { + this.diagnosticsConcatenationInPredicate = value; + } + + /** + * Whether to run the {@link org.jooq.DiagnosticsListener#possiblyWrongExpression(org.jooq.DiagnosticsContext) diagnostic. + *
+ * Diagnostics are turned off if no {@link org.jooq.Configuration#diagnosticsListenerProviders()} are configured. + * Once configured, this diagnostic is turned on by default. + *
+ * This feature is available in the commercial distribution only.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isDiagnosticsPossiblyWrongExpression() {
+ return diagnosticsPossiblyWrongExpression;
+ }
+
+ /**
+ * Sets the value of the diagnosticsPossiblyWrongExpression property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setDiagnosticsPossiblyWrongExpression(Boolean value) {
+ this.diagnosticsPossiblyWrongExpression = value;
}
/**
@@ -5672,8 +5703,13 @@ public class Settings
return this;
}
- public Settings withDiagnosticsConcatenationInPredicates(Boolean value) {
- setDiagnosticsConcatenationInPredicates(value);
+ public Settings withDiagnosticsConcatenationInPredicate(Boolean value) {
+ setDiagnosticsConcatenationInPredicate(value);
+ return this;
+ }
+
+ public Settings withDiagnosticsPossiblyWrongExpression(Boolean value) {
+ setDiagnosticsPossiblyWrongExpression(value);
return this;
}
@@ -6855,7 +6891,8 @@ public class Settings
builder.append("diagnosticsMissingWasNullCall", diagnosticsMissingWasNullCall);
builder.append("diagnosticsRepeatedStatements", diagnosticsRepeatedStatements);
builder.append("diagnosticsConsecutiveAggregation", diagnosticsConsecutiveAggregation);
- builder.append("diagnosticsConcatenationInPredicates", diagnosticsConcatenationInPredicates);
+ builder.append("diagnosticsConcatenationInPredicate", diagnosticsConcatenationInPredicate);
+ builder.append("diagnosticsPossiblyWrongExpression", diagnosticsPossiblyWrongExpression);
builder.append("diagnosticsTooManyColumnsFetched", diagnosticsTooManyColumnsFetched);
builder.append("diagnosticsTooManyRowsFetched", diagnosticsTooManyRowsFetched);
builder.append("diagnosticsUnnecessaryWasNullCall", diagnosticsUnnecessaryWasNullCall);
@@ -7379,12 +7416,21 @@ public class Settings
return false;
}
}
- if (diagnosticsConcatenationInPredicates == null) {
- if (other.diagnosticsConcatenationInPredicates!= null) {
+ if (diagnosticsConcatenationInPredicate == null) {
+ if (other.diagnosticsConcatenationInPredicate!= null) {
return false;
}
} else {
- if (!diagnosticsConcatenationInPredicates.equals(other.diagnosticsConcatenationInPredicates)) {
+ if (!diagnosticsConcatenationInPredicate.equals(other.diagnosticsConcatenationInPredicate)) {
+ return false;
+ }
+ }
+ if (diagnosticsPossiblyWrongExpression == null) {
+ if (other.diagnosticsPossiblyWrongExpression!= null) {
+ return false;
+ }
+ } else {
+ if (!diagnosticsPossiblyWrongExpression.equals(other.diagnosticsPossiblyWrongExpression)) {
return false;
}
}
@@ -8873,7 +8919,8 @@ public class Settings
result = ((prime*result)+((diagnosticsMissingWasNullCall == null)? 0 :diagnosticsMissingWasNullCall.hashCode()));
result = ((prime*result)+((diagnosticsRepeatedStatements == null)? 0 :diagnosticsRepeatedStatements.hashCode()));
result = ((prime*result)+((diagnosticsConsecutiveAggregation == null)? 0 :diagnosticsConsecutiveAggregation.hashCode()));
- result = ((prime*result)+((diagnosticsConcatenationInPredicates == null)? 0 :diagnosticsConcatenationInPredicates.hashCode()));
+ result = ((prime*result)+((diagnosticsConcatenationInPredicate == null)? 0 :diagnosticsConcatenationInPredicate.hashCode()));
+ result = ((prime*result)+((diagnosticsPossiblyWrongExpression == null)? 0 :diagnosticsPossiblyWrongExpression.hashCode()));
result = ((prime*result)+((diagnosticsTooManyColumnsFetched == null)? 0 :diagnosticsTooManyColumnsFetched.hashCode()));
result = ((prime*result)+((diagnosticsTooManyRowsFetched == null)? 0 :diagnosticsTooManyRowsFetched.hashCode()));
result = ((prime*result)+((diagnosticsUnnecessaryWasNullCall == null)? 0 :diagnosticsUnnecessaryWasNullCall.hashCode()));
diff --git a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java
index cf0bed9921..962b19ef9f 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java
@@ -46,6 +46,7 @@ import static org.jooq.conf.DiagnosticsConnection.OFF;
import static org.jooq.conf.ParamType.FORCE_INDEXED;
import static org.jooq.impl.DSL.count;
import static org.jooq.impl.DSL.noCondition;
+import static org.jooq.impl.QOM.commutativeCheck;
import java.sql.CallableStatement;
import java.sql.Connection;
@@ -64,6 +65,7 @@ import java.util.function.Predicate;
import org.jooq.AggregateFunction;
import org.jooq.Condition;
import org.jooq.Configuration;
+import org.jooq.Field;
import org.jooq.Parser;
// ...
import org.jooq.Queries;
@@ -78,7 +80,10 @@ import org.jooq.impl.QOM.Concat;
import org.jooq.impl.QOM.Eq;
import org.jooq.impl.QOM.In;
import org.jooq.impl.QOM.InList;
+import org.jooq.impl.QOM.IsDistinctFrom;
+import org.jooq.impl.QOM.Mod;
import org.jooq.impl.QOM.NotInList;
+import org.jooq.impl.QOM.UCommutativeOperator;
import org.jooq.tools.jdbc.DefaultConnection;
/**
@@ -315,6 +320,16 @@ final class DiagnosticsConnection extends DefaultConnection {
+
+
+
+
+
+
+
+
+
+
@@ -361,6 +376,35 @@ final class DiagnosticsConnection extends DefaultConnection {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsListeners.java b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsListeners.java
index 76c732ad78..95ac442027 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsListeners.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsListeners.java
@@ -158,6 +158,13 @@ final class DiagnosticsListeners implements DiagnosticsListener {
+
+
+
+
+
+
+
diff --git a/jOOQ/src/main/java/org/jooq/impl/LoggingDiagnosticsListener.java b/jOOQ/src/main/java/org/jooq/impl/LoggingDiagnosticsListener.java
index e557986c05..0307cfb39e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/LoggingDiagnosticsListener.java
+++ b/jOOQ/src/main/java/org/jooq/impl/LoggingDiagnosticsListener.java
@@ -154,6 +154,15 @@ public class LoggingDiagnosticsListener implements DiagnosticsListener {
+
+
+
+
+
+
+
+
+
diff --git a/jOOQ/src/main/java/org/jooq/impl/Patterns.java b/jOOQ/src/main/java/org/jooq/impl/Patterns.java
index 823950cf12..cb15069ec9 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Patterns.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Patterns.java
@@ -2291,6 +2291,19 @@ 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 f96fdcdab6..20fea7d0bd 100644
--- a/jOOQ/src/main/java/org/jooq/impl/QOM.java
+++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java
@@ -53,6 +53,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
+import java.util.function.BiPredicate;
+import java.util.function.Function;
import java.util.function.Predicate;
// ...
@@ -139,6 +141,7 @@ import org.jooq.WindowSpecification;
import org.jooq.XML;
import org.jooq.XMLAttributes;
import org.jooq.conf.Settings;
+import org.jooq.impl.QOM.UCommutativeOperator;
import org.jooq.types.DayToSecond;
// ...
@@ -8189,4 +8192,12 @@ public final class QOM {
public static final
+This feature is available in the commercial distribution only.]]> boolean commutativeCheck(UCommutativeOperator
op, Predicate super Q> f) {
+ return f.test(op.$arg1()) || f.test(op.$arg2());
+ }
+
+ static final
boolean commutativeCheck(UCommutativeOperator
op, BiPredicate super Q, ? super Q> f) {
+ return f.test(op.$arg1(), op.$arg2()) || f.test(op.$arg2(), op.$arg1());
+ }
}
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 e6ab6a6d95..3dc407680d 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
@@ -322,8 +322,17 @@ Once configured, this diagnostic is turned on by default.
This feature is available in the commercial distribution only.]]>
-